【网络设计】ConvNeXt:A ConvNet for the 2020s
文章目錄
- 一、背景
- 二、方法
- 2.1 訓練方法
- 2.2 宏觀設計
- 2.3 ResNeXt-ify:79.5%→80.5%
- 2.4 Inverted Bottleneck: 80.5%→80.6%
- 2.5 Large Kernel Sizes
- 2.6 微觀設計
- 三、實驗
- 四、結論
論文鏈接:https://arxiv.org/pdf/2201.03545.pdf
代碼鏈接:https://github.com/facebookresearch/ConvNeXt
一、背景
2020年出現了 ViT,是基于 Transformer 的網絡模型,并且很快超越了基于 CNN 的網絡模型的效果。
原始 ViT 由于只能提取單層特征,無法使用于目標檢測和分割等任務。
層級 Transformer(Swin 等),引入了卷積神經網絡的特性,提出了一個基于 Transformer 的 backbone,并且在下有任務上取得了很好的效果。
但這種效果應該來源于 Transformer 的內在優勢,而非卷積固有的歸納偏差能力。
所以本文中,作者探索了 CNN 的邊界,使用 Transformer 的設計思想,重新優化了標準 ResNet。
卷積神經網絡有很多內在的歸納偏置的能力,有助于其適應于不同的視覺任務。比如最重要的平移不變性,這個特性就很適用于目標檢測。卷積神經網絡的計算效率也比較高,因為卷積核是共享的。
Transformer 是從 NLP 衍生到圖像任務上的,這也使得兩個任務的網絡形式有了進一步的統一,除過圖像需要 patch 之外,其他都很類似。ViT 沒有引入圖像的相關歸納偏置,且和 NLP 使用的網絡結構很相似。隨著大模型和大數據集的引入,ViT 的效果比 CNN 強很多,尤其在圖像分類上,但圖像任務不僅僅只有圖像分類。Transformer 沒有卷積網絡的歸納偏置能力,所以原始的 ViT 模型無法成為一個通用的 backbone,最重要的一點在于計算量,ViT 內部使用的 attention 結構計算量是輸入圖像的平方倍,所以如果輸入圖像分辨率增大的話,計算量會提高很多。
Swin Transformer 是一個重要的轉折,該方法將 sliding window 引入了 Transformer,和卷積網絡非常類似,也證明了 Transformer 能夠作為 backbone,并且能夠在除過圖像分類外的場景取得 SOTA 的效果,
不同于卷積的逐步進步,Transformer一提出的效果就是很好的,所以本文主要對比卷積和 Transformer 的架構差異,并測試純卷積網絡的極限。
二、方法
如何修正卷積網絡?
作者對比:
- ResNet50 和 Swin-T , FLOPs 大約 4.5×1094.5 \times 10^94.5×109
- ResNet200 和 Swin-B, FLOPs 大約 15.0×10915.0 \times 10^915.0×109
作者探索的過程如下,如圖2所示:
- 訓練 ResNet50 :使用和 Transformer 相同的訓練方式訓練 ResNet50,然后和原始訓練 ResNet50 的結果做對比,作為基準
- 修正的設計原則:
- 宏觀設計
- ResNeXt
- inverted bottleneck
- 大卷積核
- 不同層的微觀設計
2.1 訓練方法
作者使用 DeiT 和 Swin 的訓練方法,epoch 從 90 增加到 300,AdamW 優化器,各種數據增強方式,使得 ResNet50 的準確率從 76.1% 提升到了 78.8%。這也說明了卷積網絡沒有 Transformer 效果好的原因也和訓練方式有關。
2.2 宏觀設計
由于 Swin 也是多級的網絡結構,每個stage的特征圖分辨率是不同的,所以,以下兩個問題的考慮是很有必要的:
1、改變 stage compute ratio: 78.8% → 79.4%
原始的 ResNet 在不同 stage 的計算量分布其實是依靠經驗性的,最重的 res4 stage 主要是向下兼容下游任務,如目標檢測在 14x14 的特征圖上連接檢測頭。但 Swin-T 每個 stage 的計算量比率基本為 1:1:3:1,更大的網絡是 1:1:9:1,所以作者將 ResNet50 的每個 stage 中的 blocks 的個數設置從 (3, 4, 6, 3) 修改為 (3, 3, 9, s3)。該操作將準確率從 78.8% 提高到了 79.4%。
2、改變 stem cell structure 為 “Patchify”:79.4%→79.5%
Stem 的設計決定了圖片的前處理方式,ResNet 的 stem 一般都會降低輸入圖像的分辨率,ResNet 的 stem 是步長為 2 的 7x7 卷積,后面跟隨一個 max pooling,輸入圖像總共會下采樣 4 倍。但 Transformer 是使用不重疊的卷積對圖像進行分塊。所以此處作者也使用了類似的方法,使用步長為 4 的 4x4 卷積,這一操作將準確率從 79.4% 提升到了 79.5%。
2.3 ResNeXt-ify:79.5%→80.5%
作者也參考了 ResNeXt 的設計,因為 ResNeXt 比原始的 ResNet 有著更好的 FLOPs 和 accuracy 平衡,主要思想是卷積被分成了不同組。
所以,本文作者使用了 depth-wise 卷積,該卷積其實類似于 self-attention 中的加權求和,并且很大程度上降低了計算量。所以,作者提升了網絡的寬度到和 Swin-T 相同(64→96),準確率提高到了 80.5%。
2.4 Inverted Bottleneck: 80.5%→80.6%
Transformer block 中的一個很重要的設計師 inverted bottleneck,也就是 MLP 的 hidden 層維度是輸入維度的 4 倍(圖4),在ConvNets中使用的擴展比為 4,圖 3 的 a 到 b 展示了相關改變。
2.5 Large Kernel Sizes
由于 Transformer 中的 self-attention 和卷積中的卷積核卷積是有較大不同的,self-attention 能夠捕捉全局的特征,盡管 Swin 的 window size 大小為 7 ,那也比 ResNet 中的 3 大很多。
1、將 depth-wise 層向上移動:圖 3b 到圖 3c ,80.6%→79.9%
為了探索大卷積的效果,作者將 depth-wise 卷積的位置向上移動了,圖 3b 到圖 3c,這和 Transformer 類似,Transformer 的 MSA block 是在 MLP 之前的。由于作者已經采用了 inverted bottleneck block,所以復雜的模塊(MSA,large-kernel conv)就會有更少的通道。FLOPs 降低到了 4.1 G,準確率降低到了 79.9%
2、增大卷積核
作者使用了多種不同大小的卷積核,包括 3, 5, 7, 9, 11。效果從 79.9% (3x3)提升到了 80.6%(7x7),并且效果在 7x7 的時候已經達到飽和了。所以作者都是使用了 7x7 的 depth-wise 卷積。
2.6 微觀設計
1、使用 GELU 替換 ReLU
雖然沒有帶來效果的提升,仍然是 80.6%,但作者仍然認為 GELU 效果更好一些
2、使用更少的激活函數:80.6%→81.4%
參考 Transformer,作者移除了兩個 BN 層,只在 1x1 卷積前面保留了一個 BN 層,將效果提升到了 81.4%,超越了 Swin-T 的效果。同時,作者發現在每個 block 之前都使用 BN 不會提高效果。
3、使用 LN 代替 BN:81.4%→81.5%
直接在原始 ResNet 中替換 BN 并不會帶來提升,反而會帶來效果下降,但在整體做了修改之后替換 BN,就可以得到效果的提升,提升到了 81.5%。
4、分離下采樣層:
在 ResNet 中,空間下采樣一般都是使用步長為 2 的 3x3 卷積,在 Swin 中,在每兩個 stage 中間都會使用分離的下采樣層,所以,作者也使用了步長為 2 的 2x2 大小的卷積來實現下采樣。且發現在分辨率改變的地方添加 normalization 層會提高訓練穩定性。該操作提升效果到了82%,Swin-T 是 81.3%。
三、實驗
作者也建立了不同大小的模型, ConvNeXt-T/S/B/L,對標 Swin-T/S/B/L。
四、結論
本文提出的純 CNN 的網絡 ConvNeXt,在多種任務上取得了超越 Transformer 的效果,同時能夠保留 ConvNet 的簡潔高效性質。作者期望本文的結論能夠推進對卷積及訓練的重新思考。
總結
以上是生活随笔為你收集整理的【网络设计】ConvNeXt:A ConvNet for the 2020s的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 央视纪录片:华为研发“摔不坏”的昆仑玻璃
- 下一篇: 湖南消防被烟花“偷家” 直播熊孩子为光秃