【论文学习】RepVGG: Making VGG-style ConvNets Great Again及网络重参数化的用途及效果分析
??本文學(xué)習(xí)了RepVGG以及同作者在網(wǎng)絡(luò)重參數(shù)化領(lǐng)域的幾篇文章,總結(jié)其主要原理,試驗重參數(shù)化方法的效果并分析其價值意義。
??RepVGG是CVPR2021收錄的一篇論文,作者是清華大學(xué)的丁霄漢博士,同一作者在該領(lǐng)域還有其他幾篇論文:
??ACNet:https://arxiv.org/abs/1908.03930
??RepVGG:https://arxiv.org/abs/2101.03697
??DiverseBranchBlock:https://arxiv.org/abs/2103.13425
??ResRep:https://arxiv.org/abs/2007.03260
??RepMLP:https://arxiv.org/abs/2105.01883
??作者在他的知乎專欄里對這些文章有比較詳細(xì)的講解:https://www.zhihu.com/column/c_168760745。代碼都已開源,在:https://github.com/DingXiaoH
??我這里主要是按照我的理解把論文中的知識點整體梳理并實踐操作一下,便于我加深學(xué)習(xí)。
1,網(wǎng)絡(luò)重參數(shù)化的原理
??這一系列文章主要圍繞網(wǎng)絡(luò)重參數(shù)化這一技術(shù)展開。網(wǎng)絡(luò)重參數(shù)化可以認(rèn)為是模型壓縮領(lǐng)域的一種新技術(shù),它的主要思想是把一個K x K的卷積層等價轉(zhuǎn)換為若干種特定網(wǎng)絡(luò)層的并聯(lián)或串聯(lián),轉(zhuǎn)換后的網(wǎng)絡(luò)更復(fù)雜、參數(shù)更多,因此轉(zhuǎn)換的網(wǎng)絡(luò)在訓(xùn)練階段有希望達(dá)到更好的效果,在推理階段,又可以把大網(wǎng)絡(luò)的參數(shù)等價轉(zhuǎn)換到原來的KxK卷積層中,使得網(wǎng)絡(luò)兼具了訓(xùn)練階段大網(wǎng)絡(luò)的更好的學(xué)習(xí)能力和推理階段小網(wǎng)絡(luò)的更高的計算速度。
??在DBB(DiverseBranchBlock)這篇文章中作者提到了6種可以和KxK卷積層等價轉(zhuǎn)換的結(jié)構(gòu),如論文中的圖Figure2. 其中的Transform VI就是ACNet論文中的結(jié)構(gòu),除了這6種外還有一種結(jié)構(gòu)在DBB論文中沒有提到,就是RepVGG中的結(jié)構(gòu),我把它畫到下面圖1.
??上述這些結(jié)構(gòu)可以歸納為以下幾點:
(1)“吸BN”操作:KxK卷積層可以和BN層合并起來,把BN的參數(shù)轉(zhuǎn)換到卷積的參數(shù)中,從而去掉BN。
(2)卷積是線性操作,滿足疊加性質(zhì)f(ax+by)=af(x)+bf(y),所以 conv(W1 + W2) = conv(W1) + conv(W2),因此可以把兩個KxK卷積相加變成一個參數(shù)相加后的KxK卷積。
(3)1x1卷積可以看成是一個除中心點外其他都為0的KxK卷積(前提是K為奇數(shù));1xK卷積和Kx1卷積可以看成是一個兩邊的行或列為0的KxK卷積;恒等變換則是一個更特殊的1x1卷積,可以理解為一個這樣的CxCxKxK參數(shù)的KxK卷積:其中CxC部分為單位矩陣,而KxK部分的中心點為1,其余為0。
(4)1x1卷積和KxK卷積的串聯(lián)可以將它們參數(shù)相乘后轉(zhuǎn)換為一個KxK卷積(乘的時候需要一些轉(zhuǎn)置操作,公式見原文)。
(5)AVG操作等效于一個元素都為1/(K*K)的KxK卷積。
(6)由于可疊加性質(zhì),上述各種結(jié)構(gòu)還可以無限疊加組合,比如下圖是論文中給出的DBB模塊。
??RepMLP是作者最新的一篇論文,這篇論文中指出,不僅KxK卷積可以用一系列更復(fù)雜的網(wǎng)絡(luò)等價,多層全連接網(wǎng)絡(luò)MLP也是線性操作,也是可以把卷積等價到MLP中。
2,網(wǎng)絡(luò)重參數(shù)化的用途和意義
??基于這套方法主要是對KxK卷積有用,當(dāng)然它最能發(fā)揮作用的就是純3x3卷積一卷到底的VGG了,作者在RepVGG一文中也展示了這個技巧在VGG上的巨大效果,能夠打平現(xiàn)在的SOTA模型,確實讓人眼前一亮。然而純VGG占顯存也大,并不適合在端側(cè)設(shè)備部署,這就失去了模型壓縮的本來意義,所以我覺得RepVGG的實用意義并不大。另外,網(wǎng)絡(luò)重參數(shù)化方法也不能用于對任意網(wǎng)絡(luò)模型進(jìn)行壓縮,它只能把一些特定網(wǎng)絡(luò)結(jié)構(gòu)壓縮到KxK卷積中,并不是一種通用的方法。
??然而KxK卷積在當(dāng)前各種主流神經(jīng)網(wǎng)絡(luò)中非常普遍,如果把這些KxK卷積層進(jìn)行復(fù)雜化后訓(xùn)練然后再重參數(shù)化后推理部署,就有望提高模型效果的同時又不影響推理時的速度,這可能是一個有實用價值的點。
3,我的試驗
??為了更深入的掌握這個方法并檢驗其效果,我準(zhǔn)備做個試驗,為了客觀檢驗它,我們不用作者試驗好的CIFAR10和Imagenet,以及VGG、ResNet等。我決定隨機(jī)選一個任務(wù),正好我剛剛做完無線通信AI的一個競賽。這個任務(wù)當(dāng)前比較主流的方法是CRNet,其中包含有多種卷積層,我們把它替換為等價多分支模塊,觀察訓(xùn)練時是否能有效提高效果。CRNet結(jié)構(gòu)如下圖,這個網(wǎng)絡(luò)的作用是對一段用戶側(cè)的無線信號進(jìn)行壓縮編碼,發(fā)送到基站后再解碼,追求更高的還原率,具體介紹可參見原論文https://arxiv.org/abs/1910.14322。對于從訓(xùn)練好的網(wǎng)絡(luò)重參數(shù)化到推理用KxK卷積層的過程我們一點不用擔(dān)心,因為它是嚴(yán)格數(shù)學(xué)推導(dǎo)的,不會有問題,這里面不確定的是復(fù)雜化成多分支結(jié)構(gòu)的大網(wǎng)絡(luò)的訓(xùn)練過程是否真的有效,所以我們重點試這個。
??這個網(wǎng)絡(luò)結(jié)構(gòu)中含有3x3卷積、5x5卷積,以及1x9、9x1、1x5、5x1卷積等,我們可以嘗試把這些卷積層用DBB或并聯(lián)一些其他等價結(jié)構(gòu)來替換進(jìn)行訓(xùn)練,然后推理階段再把參數(shù)重整到原來的CRNet網(wǎng)絡(luò)中。
表1. 把CRNet的部分層轉(zhuǎn)化為含分支結(jié)構(gòu)的參數(shù)等價網(wǎng)絡(luò)后訓(xùn)練| CRNet | 926k | 711M | 234s | 0.8043 | 0.8152 |
| KxK -> DBB, Kx1 -> Kx1+ 1x1 | 2273k | 1744M | 590s | 0.8007 | - |
| KxK -> DBB | 2157k | 1656M | 480s | 0.8037 | 0.8173 |
| Kx1 -> Kx1+ 1x1 | 926k | 711M | 234s | 0.7996 | - |
注:為了比賽時的效果,我這里使用的CRNet比原論文中的中間層通道數(shù)更高,達(dá)到128。
??從表中可以看出,進(jìn)行等價替換后,并非更多分支更大的網(wǎng)絡(luò)就一定訓(xùn)練的更好,在本例中把Kx1和1xK卷積都并聯(lián)上一個1x1卷積反而是有害的,訓(xùn)練效果反而下降;有些情況下更大的等價網(wǎng)絡(luò)確實有點用,如把KxK替換為DBB,在100epoch后效果比原CRNet微弱提升0.002,但此時訓(xùn)練速度比原來慢了一倍。
??我分析,這個CRNet網(wǎng)絡(luò)中本身已經(jīng)使用了多分支結(jié)構(gòu),且KxK卷積用的不是很多,所以這種方法沒有多大作用,如果是一些分支結(jié)構(gòu)較少的網(wǎng)絡(luò)和大量使用KxK卷積的網(wǎng)絡(luò),可能效果會明顯一些。
4,總結(jié)
??重參數(shù)化使用一種巧妙的方法把KxK卷積層替換為一些參數(shù)可線性組合的并聯(lián)分支結(jié)構(gòu),這樣可以通過犧牲一些訓(xùn)練速度來提高訓(xùn)練精度,在推理時把參數(shù)映射回原KxK卷積層,可使推理時的速度不變而精度提升。這種方法僅對特定結(jié)構(gòu)有用,不能把任意網(wǎng)絡(luò)重參數(shù)化為一個更小的網(wǎng)絡(luò)。這種方法對于分支結(jié)構(gòu)較少、KxK卷積使用較多,比較規(guī)整的網(wǎng)絡(luò)會有更好的訓(xùn)練效果,對于推理速度要求較高且推理時硬件更支持KxK卷積運算的場合會有較好的應(yīng)用。由于受到很多限制條件,個人認(rèn)為這個方法的實用性仍不是很大,但這個方法有很好的啟發(fā)意義,它說明一個大網(wǎng)絡(luò)的參數(shù)有可能映射到一個小網(wǎng)絡(luò)中,保持小網(wǎng)絡(luò)的推理性能不變。
總結(jié)
以上是生活随笔為你收集整理的【论文学习】RepVGG: Making VGG-style ConvNets Great Again及网络重参数化的用途及效果分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 声学、音乐计算常用工具总结(soundf
- 下一篇: 度量学习和pytorch-metric-