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