RepLKNet:不是大卷积不好,而是卷积不够大,31x31卷积了解一下 | CVPR 2022
論文提出引入少數超大卷積核層來有效地擴大有效感受域,拉近了CNN網絡與ViT網絡之間的差距,特別是下游任務中的性能。整篇論文闡述十分詳細,而且也優化了實際運行的表現,值得讀一讀、試一試
?
來源:曉飛的算法工程筆記 公眾號
論文: Scaling Up Your Kernels to 31x31: Revisiting Large Kernel Design in CNNs
- 論文地址:https://arxiv.org/abs/2203.06717
- 論文代碼:https://github.com/megvii-research/RepLKNet
Introduction
?在圖像分類、特征學習等前置任務(pretext task)以及目標檢測、語義分割等下游任務(downstream task)上,卷積網絡的性能不斷被ViTs(vision transformer)網絡超越。人們普遍認為ViTs的性能主要得益于MHSA(multi-head self-attention)機制,并為此進行了很多研究,從不同的角度對比MHSA與卷積之間的優劣。
?解釋VisTs與CNNs的性能差異不是這篇論文的目的,相對于研究MHSA和卷積的差異,論文則關注于ViTs與CNNs在構建長距離位置關系(long-range spatial connections)的范式上的差異。在ViTs中,MHSA通常使用較大的感受域( ≥ 7 × 7 \ge 7\times 7 ≥7×7),每個輸出都能包含較大范圍的信息。而在CNNs中,目前的做法都是通過堆疊較小( 3 × 3 3\times 3 3×3)的卷積來增大感受域,每個輸出所包含信息的范圍較小。
?基于上面發現的感受域差異,論文嘗試通過引入少量大核卷積層來彌補ViTs和CNNs之間的性能差異。借此提出了RepLKNet網絡,通過重參數化的大卷積來建立空間關系。RepLKNet網絡基于Swin Transformer主干進行改造,將MHSA替換為大的深度卷積,性能比ViTs網絡更好。另外,論文通過圖1的可視化發現,引入大卷積核相對于堆疊小卷積能顯著提升有效感受域(ERFs),甚至可以跟ViTs一樣能夠關注形狀特征。
Guidelines of Applying Large Convolutions
?直接使用大卷積會導致性能和速度大幅下降,論文通過實驗總結了5條高效使用大卷積核的準則,每條準則還附帶了一個備注。
Guideline 1: large depth-wise convolutions can be efficient in practice.
?大卷積的計算成本很高,參數量和計算量與卷積核大小成二次方關系,而深度卷積恰好可以彌補這一缺點。將各stage的卷積核從 [ 3 , 3 , 3 , 3 ] [3,3,3,3] [3,3,3,3]標準卷積改為 [ 31 , 29 , 27 , 13 ] [31,29,27,13] [31,29,27,13]深度卷積,僅帶來了18.6%的計算量增加和10.4%的參數量增加。
?但由于計算量和內存訪問數的比值較低, 3 × 3 3\times 3 3×3深度卷積在并行設備上的計算效率較低。不過當卷積核變大時,單個特征值被使用的次數增加,深度卷積的計算密度則會相應提高。根據Roofline模型,計算密度隨著卷積核的增大而增大,計算延遲應該不會像計算量那樣增加那么多。
-
Remark 1
?如表1所示,目前的深度學習框架對深度卷積的實現較為低效。為此,論文嘗試了不同的方法來優化CUDA內核,最后選擇了block-wise(inverse) implicit gemm算法并集成到了MegEngine框架中。相對于Pytorch,深度卷積帶來的計算延遲從49.5%降低到了12.3%,幾乎與計算量成正比。
?具體的相關分析和實現,可以去看看這篇文章《憑什么 31x31 大小卷積核的耗時可以和 9x9 卷積差不多?》(https://zhuanlan.zhihu.com/p/479182218)。
Guideline 2: identity shortcut is vital especially for networks with very large kernels.
?為了驗證短路連接對大卷積核的重要性,論文以MobileNetV2作為基準,替換其中的深度卷積核大小來進行有無短路連接的對比。如表2所示,在有短路連接的情況下,大卷積核能帶來0.77%的性能提升。而沒短路連接的情況下,大卷積核的準確率降低至53.98%。
-
Remark 2
?這個準則同樣也適用于ViTs中。近期有研究發現,如果移除短路連接,ViTs中的注意力會隨著深度的增加而雙倍地減少,最后出現注意力過度平滑的問題。盡管大卷積核性能下降的原因可能跟ViT不一樣,但同樣也有難以捕捉局部特征的現象。為此,論文認為如參考文獻《Residual networks behave like ensembles of relatively shallow
networks》所說的,短路連接能夠使得模型顯式地變為多個不同感受域大小的模型的組合(小感受域與大感受域不斷直接累加),從而能夠在更大的感受域中得到提升并且不會丟失捕捉小尺度特征的能力。
Guideline 3: re-parameterizing with small kernels helps to make up the optimization issue.
?論文將MobileNetV2中的 3 × 3 3\times 3 3×3卷積核分別替換為 9 × 9 9\times 9 9×9和 13 × 13 13\times 13 13×13,再采用結構重參數幫助更好地訓練。具體的做法如圖2所示,先將 3 × 3 3\times 3 3×3卷積核替換為更大的卷積核,再并行一個 3 × 3 3\times 3 3×3深度卷積層,經過BN處理后將其結果相加作為輸出。訓練完成后,合并并行的大小卷積層及其BN層,得到沒有小卷積層的模型。整體思路跟RepVGG類似,有興趣的可以去看看公眾號之前的文章《RepVGG:VGG,永遠的神! | 2021新文》
?結構重參數的對比如表3所示,卷積核從9增大到13導致了準確率的下降,使用結構重參數則可用解決這個問題。在語義分割任務中,結構重參數也同樣可以解決增大卷積核導致性能下降的問題。
-
Remark 3
?ViTs在小數據集上會有優化問題,通常需要添加前置卷積層來解決。比如在每個self-attention前面添加一個 3 × 3 3\times 3 3×3深度卷積層,這跟論文提出的并行 3 × 3 3\times 3 3×3卷積的做法類似。添加的卷積層能為ViT網絡預先引入平移不變性和局部特征,使其在小數據集上更容易優化。論文在RepLKNet上也發現了類似的現象,當預訓練數據集增大到7300萬時,不再需要結構重參數化來輔助優化。
Guideline 4: large convolutions boost downstream tasks much more than ImageNet classification.
?如前面表3所示,相對于分類任務,卷積核增大為分割任務帶來的收益更多。而表5的結果也有類似的現象,大卷積核在ADE20K數據集上的提升更為明顯。這表明,即使預訓練模型有相似的ImageNet性能,但其在下游任務中的性能可能差距較大。
-
Remark 4
?論文認為導致這一現象的原因主要有兩點:
- 大卷積核能顯著增加有效感受域(ERF),可包含更多的上下文信息,這對下游任務十分關鍵。
- 大卷積能引導網絡傾向于學習更多形狀特征。圖像分類僅需要上下文或形狀信息,而目標識別則非常需要形狀信息。所以,傾向于更多形狀特征的模型顯然更適合下游任務。ViTs之所以在下游任務中表現強勁,也是得益于其強大的形狀特征提取能力。相反,ImageNet預訓練的傳統卷積網絡則傾向于上下文信息。
Guideline 5: large kernel (e.g., 13×13) is useful even on small feature maps (e.g., 7×7).
?為了驗證大卷積在小特征圖上的有效性,將MobileNetV2最后的stage(特征圖大小為7x7)的深度卷積分別擴大至7x7和13x13進行對比,實驗結構附帶了準則3建議的結構重參數。結果如表4所示,盡管特征圖已經很小了,增大卷積核依然可以帶來性能提升。
-
Remark 5
?當小特征圖上的卷積核變大時,卷積的平移不變性不再嚴格成立。如圖3所示,兩個相鄰的輸出關聯了不同的卷積核權值。這剛好符合ViTs的理念,通過放寬對稱的先驗要求(如輸出要用相同的卷積權值得到)來獲得更大的識別能力。有趣的是,transformer中使用的2D相對位置編碼(其它特征相對于當前特征的位置)也可認為是一個卷積核大小為 ( 2 H ? 1 ) × ( 2 W ? 1 ) (2H-1)\times(2W-1) (2H?1)×(2W?1)的深度卷積,其中 H H H和 W W W分別為特征圖的高和寬。所以,大卷積核不僅能夠幫助學習特征間的相對位置信息,由于要添加較多padding,還編碼了絕對位置信息(參考論文《On translation invariance in cnns: Convolutional layers can exploit
absolute spatial location》)。
RepLKNet: a Large-Kernel Architecture
?基于上面的準則,論文提出了RepLKNet,一個大卷積核的純CNN架構。目前,SOTA小網絡仍然以CNN為主,所以論文主要在大模型方面與ViT進行比較。
Architecture Specification
?RepLKNet的結構如圖4所示,各模塊細節如下:
- Stem:由于RepLKNet的主要應用是下游任務,所以需要在網絡前期捕捉更多的細節。在開始的stride=2 3x3卷積下采樣之后接一個3x3深度卷積來提取低維特征,之后接一個1x1卷積和3x3深度卷積用于下采樣。
- Stages 1-4:每個stage包含多個RepLK Block,block里面包含了準則1建議的深度卷積和準則2建議的短路連接。根據準則3,每個深度卷積并行一個5x5深度卷積用于結構重參數。除了感受域和空間特征提取能力,模型的特征表達能力還和特征的維度有關。為了增加非線性和通道間的信息交流,在深度卷積前用1x1卷積增加特征維度。參考transformers和MLPs網絡使用的Feed-Forward Network(FFN),論文提出CNN風格的ConvFFN,包含短路連接、兩個1x1卷積核GELU。在應用時,ConvFFN的中間特征一般為輸入的4倍。參照ViT和Swin,將ConvFFN放置在每個RepLK Block后面。
- Transition Blocks:放在stage之間,先用1x1卷積擴大特征維度,再通過兩個3x3深度卷積來進行2倍下采樣。
?總的來說,每個stage有3個超參數:ReLK Block數 B B B、維度數 C C C以及卷積核大小 K K K,所以一個RepLKNet的結構可表達為 [ B 1 , B 2 , B 3 , B 4 ] [B_1, B_2, B_3, B_4] [B1?,B2?,B3?,B4?], [ C 1 , C 2 , C 3 , C 4 ] [C_1, C_2, C_3, C_4] [C1?,C2?,C3?,C4?], [ K 1 , K 2 , K 3 , K 4 ] [K_1, K_2, K_3, K_4] [K1?,K2?,K3?,K4?]。
Making Large Kernels Even Larger
?論文固定 B = [ 2 , 2 , 18 , 2 ] B=[2,2,18,2] B=[2,2,18,2]以及 C = [ 128 , 256 , 512 , 1024 ] C=[128,256,512,1024] C=[128,256,512,1024],簡單調整 K K K提出了5個不同大小的網絡,稱為RepLKNet-3/7/13/25/31。在沒有特殊調整訓練配置情況下,各模型的參數和性能如表5所示。
?另外,論文還對訓練配置進行細調以便于與SOTA模型對比,該模型稱為RepLKNet-31B。在此基礎上,調整超參數 C = [ 192 , 384 , 768 , 1536 ] C=[192,384,768,1536] C=[192,384,768,1536]得到RepLKNet-31L。進一步調整超參數 C = [ 256 , 512 , 1024 , 2048 ] C=[256,512,1024,2048] C=[256,512,1024,2048]得到RepLKNet-31XL,該網絡的RepLK Blocks的中間特征為輸入的1.5倍。
Discussion
Large-Kernel CNNs have Larger ERF than Deep Small-Kernel Models
?一般來說,堆疊的小卷積最終也能達到跟單個大卷積一樣的感受域大小,但為什么傳統網絡的性能要低于大卷積核網絡呢?論文認為,盡管能達到同樣大小的感受域,單層大卷積核要比多層小卷積更有效,主要有兩點:
- 根據有效感受域特性,其大小與 O ( K L ) \mathcal{O}(K\sqrt{L}) O(KL?)成比例關系。可以看到,有效感受域與卷積核大小成線性關系,而與深度成次線性關系。
- 深度的增加會帶來訓練問題。盡管ResNet似乎已經解決了這個問題,但近期有研究表明,ResNet的有效感受域并沒有隨著深度增加而顯著增加。
?所以大卷積核的設計僅需要更少的層就可以達到預定的有效感受域,同時避免了深度增加帶來的優化問題。
?論文也對ResNet和RepLKNet的有效感受域進行可視化和統計,發現RepLkNet整體有效感受域要大于ResNet。
Large-kernel Models are More Similar to Human in Shape Bias
?有研究發現ViT更接近人體視覺,基于目標的形狀進行預測,而CNN則更多地依賴局部上下文。論文借用https://github.com/bethgelab/model-vs-human的工具來計算模型的形狀特征的偏向性,得到圖5的結果,結果越低越好。從結果來看,大卷積核的RepLKNet更注重形狀特征,當卷積核減少時,RepLKNet-3則變為更注重上下文特征。
Dense Convolutions vs. Dilated Convolutions
?空洞卷積是一個常用的擴大卷積范圍的方法,所以論文對空洞深度卷積和普通深度卷積進行了對比。如表11所示,盡管最大感受域可能一樣,但空洞深度卷積的表達能力要弱很多,準確率下降非常明顯。這也是符合預期的,雖然空洞卷積的感受域較大,但其計算用的特征非常少。
Experiment
?ImageNet圖像分類性能對比。
?Cityscapes語義分割性能對比。
?ADE20K語義分割性能對比。
?MSCOCO目標檢測性能對比。
Conclusion
?論文提出引入少數超大卷積核層來有效地擴大有效感受域,拉近了CNN網絡與ViT網絡之間的差距,特別是下游任務中的性能。整篇論文闡述十分詳細,而且也優化了實際運行的表現,值得讀一讀、試一試。
?
?
?
?
如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的算法工程筆記】
總結
以上是生活随笔為你收集整理的RepLKNet:不是大卷积不好,而是卷积不够大,31x31卷积了解一下 | CVPR 2022的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是OXC(全光交叉)?
- 下一篇: 清华、商汤提出SIM方法,让自监督学习兼