極市導讀
「文藝復興」,ConvNet捲土重來,壓過Transformer。本文是FAIR的Zhuang Liu(DenseNet的作者)與Saining Xie(ResNeXt的作者)關於ConvNet的最新探索,以ResNet為出發點,逐步引入近來ViT架構的一些設計理念而得到的純ConvNet新架構ConvNeXt,取得了優於SwinT的性能,讓ConvNet再次性能煥發。>>加入極市CV技術交流群,走在計算機視覺的最前沿

論文鏈接:https://arxiv.org/pdf/2201.03545.pdf
代碼鏈接:https://github.com/facebookresearch/ConvNeXt
AbstractViT伴隨着視覺的「20年代」咆哮而來,迅速的碾壓了ConvNet成為主流的研究方向。然而,當應用於廣義CV任務(如目標檢測、語義分割)時,常規的ViT面臨着極大挑戰。因此,分層Transformer(如Swin Transformer)重新引入了ConvNet先驗信息,使得Transformer成實際可行的骨幹網絡並在不同視覺任務上取得了非凡的性能。然而,這種混合方法的有效性仍然很大程度上歸根於Transformer的內在優越性,而非卷積固有歸納偏置。
本文對該設計空間進行了重新審視並測試了ConvNet所能達到的極限。我們將標準卷積朝ViT的設計方向進行逐步「現代化」調整,並發現了幾種影響性能的關鍵成分。由於該探索是純ConvNet架構,故將其稱之為ConvNeXt。完全標準ConvNet模塊構建的ConvNeXt取得了優於Transformer的精度87.8%,在COCO檢測與ADE20K分割任務上超越了SwinTransformer,同時保持了ConvNet的簡單性與高效性。

接下來,我們將提供從ResNet到ConvNeXt的演變軌跡。我們考慮了兩種不同FLOPs尺寸的模型:ResNet50/Swin-T(FLOPs約)與ResNet200/Swin-B(FLOPs約),為簡單起見,這裡僅呈現ResNet50/Swin-T複雜度模型的結果。
我們以ResNet50作為出發點,首先採用類似ViT的訓練技術對其重訓練並得到ResNet50的改進結果(這將作為本文的基線);然後我們研究了一系列設計準則,總結如下:

從上圖可以看到網絡架構每一次進化所能取得的性能(ConvNeXt-T取得了82%,超越了Swin-T的81.3%),由於模型複雜度與最終性能相關,故FLOPs進行了一定程度的控制。
Training Techniques除了網絡架構的設計外,訓練方式也會影響最終的性能。ViT不僅帶來了新的模塊與架構設計,同時還引入了不同的訓練技術,如AdamW優化。因此,探索的第一步就是採用ViT的訓練機制訓練基線模型ResNet-50/200。

本文採用了DeiT與SwinTransformer的訓練方案,可參見上表。訓練周期從原始的90epoch擴展到了300epoch;優化器為AdamW,數據增廣包含Mixup、Cutmix、RandAugment、RandomErasing;正則化技術包含Stochastic Depth與Label Smoothing。增強的訓練技術將ResNet50的性能從76.1%提升到了78.8%,這說明:Transformer與ConvNet的性能差距很大比例源自訓練技術的升級。
Macro Design我們現在開始對SwinTransformer的宏觀架構設計,它參考ConvNet採用了多階段設計思想,每個階段具有不同的特徵分辨率。它具有兩個有意思的設計考量:(1) Stage Compute Ratio; (2)Stem Cell架構。
Changing Stage Compute Ratio. 原始ResNet的計算分布是經驗性成果。「res4」的重計算設計是為了與下游任務(如目標檢測)相兼容;而Swin-T參考了類似的設計準則但將計算比例微調為,更大的SwinTransformer的比例則為。參考該設計理念,我們將ResNet50每個階段的塊數從調整為。此時模型的性能從78.8%提升到79.4%。
Changing Stem to "Patchify". 一般來講,Stem設計主要關心:在網絡起始部分如何對圖像進行處理。由於自然圖像的信息冗餘性,常見的Stem通過對輸入圖像下採樣聚合到適當的特徵尺寸。ResNet中的Stem包含stride等於2的卷積+MaxPool,它將輸入圖像進行4倍下採樣;而ViT則採用了"Patchify"策略,它對應了大卷積核(如14、16)、非重疊卷積;SwinTransformer採用了類似的"Patchify",但塊尺寸為4以兼容多階段設計架構。我們將ResNet中的Stem替換為的"Patchify"層。此時,模型的性能從79.4%提升到了79.5%。
ResNeXt-ify在這裡,我們嘗試採用了ResNeXt的設計理念(採用更多的組擴展寬度),其核心成分為組卷積。具體來說,ResNeXt在Bottleneck中為採用組卷積。這種設計方式可以大幅減少FLOPs,故通過提升網絡寬度補償容量損失。
在本文中,我們採用depthwise卷積,同時將網絡的寬度進行了提升,此時它與Swin-T具有相同的通道數。此時,模型的性能提升到了80.5%,而FLOPs則提升到了53.G。
Inverted BottleneckTransformer模塊的一個重要設計:它構建了Inverted Bottleneck,如MLP的隱層維度是輸入維度的4倍。有意思的是:Transformer的這種設計與ConvNet中的Inverted Bottleneck(最早源自MobileNetV2)設計相一致。

在這裡,我們探索了上圖的幾種不同設計,它將網絡的FLOPs下降到了4.6G。有意思的是,這種設計將模型的性能從80.5%提升到了80.6%。對ResNet200的性能提升則更大,從81.9%提升到了82.6%。
Large Kernel Sizes在這部分,我們聚焦於大卷積核的行為表現。ViT的最重要區分是其非局部自注意力,它使得每一層均具有全局感受野。儘管SwinTransformer採用了局部窗口機制,但其感受野仍至少為,遠大於ConvNet的。因此,我們將ConvNet中使用大卷積核卷積進行回顧。
Moving up depthwise conv layer. 為探索大核,先決條件是depthwise卷積的位置上移(見Figure3c)。這種設計理念等同於Transformer中的MHSA先於MLP。此時,模型的性能臨時下降到了79.9%,而FLOPs也下降到了4.1G。
Increasing the kernel size. 基於上述準備,我們採用了更大的卷積核,如。此時,模型的性能從79.9%!提升到了80.6%(),而模型的FLOPs幾乎不變。
Micro Design接下來,我們將從微觀角度(即OP層面)探索幾種架構差異,主要聚焦於激活函數與Normalization層的選擇。
Replacing ReLU wit GELU. NLP與視覺架構的一個差異體現在激活函數的實用。ConvNet大多採用ReLU,而ViT大多採用GELU。我們發現:ConvNet中的ReLU可以替換為GELU,同時性能不變(80.6%)。
Fewer Activation Functions. Transformer與ResNet模塊的一個小區別:Transformer模塊使用了更少的激活函數。類似的,我們對ConvNeXt模塊進行下圖所示的改進,模型性能從80.6%提升到了81.3%(此時,它具有與Swin-T相當的性能)。

Fewer Normalization Layers Transformer通常具有更少的Normalization層,因此我們移除兩個BN層僅保留 卷積之前的一個BN。模型的性能提升到了81.4%,超越了Swin-T。
Substituting BN with LN 儘管BN是ConvNet的重要成分,具有加速收斂降低過擬合的作用;但BN對模型性能也存在有害影響。Transformer中的LN對不同的應用場景均具有比較好的性能。直接在原始ResNet中將BN替換為LN會導致性能下降,而組合了上述技術後再將BN替換為LN則能帶來性能的提升:81.5%。
Separate Downsamling Layers 在ResNet中,每個階段先採用stride=2的卷積進行下採樣;而SwinTransformer則採用了分離式下採樣層。我們探索了類似的策略:採用stride=2的卷積進行下採樣,但這種方式導致了「不收斂」。進一步研究表明:在下採樣處添加Normalization層有助於穩定訓練。此時,模型的性能提升到了82.0%,大幅超越了Swin-T的81.3%。
Closing remarks. 到此為止,我們完成了ConvNet的進化之路,得到了超越SwinTransformer的純ConvNet架構ConvNeXt。需要注意的是,上述設計並沒有新穎之處,均得到了研究,但並未進行匯總集成。ConvNeXt具有與SwinTransformer相當的參數量、吞吐量、內存占用,更高的性能,且不需要依賴特定的模塊(比如移位窗口注意力、相對位置偏置)。
Exmpirical Evaluations on ImageNet基於前述ConvNeXt架構,我們構建了ConvNeXt-T/S/B/L以對標Swin-T/S/B/L。此外,我們還構建了一個更大的ConvNeXt-XL以進一步測試ConvNeXt的縮放性。不同變種模型的區別在於通道數、模塊數,詳細信息如下:

上表給出了ImageNet上的性能對比,從中可以看到:

既然ConvNeXt這麼好,其設計理念能否應用到ViT中呢?結果見上表,從中可以看到:兩者具有相當的性能,這意味着:ConvNeXt的設計理念用於非分層模塊時仍具有競爭力。
Empirical Evalution on Downstream Tasks
為進一步驗證ConvNeXt在下游任務的表現,我們基於Mask R-CNN與Cascade Mask R-CNN在COCO檢測方面的性能,結果見上表,從中可以看到:ConvNeXt取得了與SwinTransformer相當,甚至更優的性能。當採用更大的骨幹且ImageNet22K預訓練時,ConvNeXt的性能更佳。

上表給出了ADE20K數據上的性能對比,從中可以看到:在不同容量大小下,ConvNeXt均可取得極具競爭力的結果,進一步驗證了ConvNeXt的有效性。

上表還給出了Swin與ConvNeXt在吞吐量方面的對比,很明顯:ConvNeXt具有比Swin更高的吞吐量、更高的精度。