“文藝復興” ConvNet卷土重來,壓過Transformer!FAIR重新設(shè)計純卷積新架構(gòu)
以下文章來源于極市平臺 ,作者CV開發(fā)者都愛看的
“文藝復興”,ConvNet卷土重來,壓過Transformer。本文是FAIR的Zhuang Liu(DenseNet的作者)與Saining Xie(ResNeXt的作者)關(guān)于ConvNet的最新探索,以ResNet為出發(fā)點,逐步引入近來ViT架構(gòu)的一些設(shè)計理念而得到的純ConvNet新架構(gòu)ConvNeXt,取得了優(yōu)于SwinT的性能,讓ConvNet再次性能煥發(fā)。
論文鏈接:https://arxiv.org/pdf/2201.03545.pdf
代碼鏈接:https://github.com/facebookresearch/ConvNeXt
Abstract
ViT伴隨著視覺的“20年代”咆哮而來,迅速的碾壓了ConvNet成為主流的研究方向。然而,當應(yīng)用于廣義CV任務(wù)(如目標檢測、語義分割)時,常規(guī)的ViT面臨著極大挑戰(zhàn)。因此,分層Transformer(如Swin Transformer)重新引入了ConvNet先驗信息,使得Transformer成實際可行的骨干網(wǎng)絡(luò)并在不同視覺任務(wù)上取得了非凡的性能。然而,這種混合方法的有效性仍然很大程度上歸根于Transformer的內(nèi)在優(yōu)越性,而非卷積固有歸納偏置。
本文對該設(shè)計空間進行了重新審視并測試了ConvNet所能達到的極限。我們將標準卷積朝ViT的設(shè)計方向進行逐步“現(xiàn)代化”調(diào)整,并發(fā)現(xiàn)了幾種影響性能的關(guān)鍵成分。由于該探索是純ConvNet架構(gòu),故將其稱之為ConvNeXt。完全標準ConvNet模塊構(gòu)建的ConvNeXt取得了優(yōu)于Transformer的精度87.8%,在COCO檢測與ADE20K分割任務(wù)上超越了SwinTransformer,同時保持了ConvNet的簡單性與高效性。
Modernizing ConvNet:Roadmap
接下來,我們將提供從ResNet到ConvNeXt的演變軌跡。我們考慮了兩種不同F(xiàn)LOPs尺寸的模型:ResNet50/Swin-T(FLOPs約)與ResNet200/Swin-B(FLOPs約),為簡單起見,這里僅呈現(xiàn)ResNet50/Swin-T復雜度模型的結(jié)果。
我們以ResNet50作為出發(fā)點,首先采用類似ViT的訓練技術(shù)對其重訓練并得到ResNet50的改進結(jié)果(這將作為本文的基線);然后我們研究了一系列設(shè)計準則,總結(jié)如下:
Macro Design
ResNeXt
Inverted Bottleneck
Large Kernel Size
Various Layer-wise Micro Design.
從上圖可以看到網(wǎng)絡(luò)架構(gòu)每一次進化所能取得的性能(ConvNeXt-T取得了82%,超越了Swin-T的81.3%),由于模型復雜度與最終性能相關(guān),故FLOPs進行了一定程度的控制。
Training Techniques
除了網(wǎng)絡(luò)架構(gòu)的設(shè)計外,訓練方式也會影響最終的性能。ViT不僅帶來了新的模塊與架構(gòu)設(shè)計,同時還引入了不同的訓練技術(shù),如AdamW優(yōu)化。因此,探索的第一步就是采用ViT的訓練機制訓練基線模型ResNet-50/200。
本文采用了DeiT與SwinTransformer的訓練方案,可參見上表。訓練周期從原始的90epoch擴展到了300epoch;優(yōu)化器為AdamW,數(shù)據(jù)增廣包含Mixup、Cutmix、RandAugment、RandomErasing;正則化技術(shù)包含Stochastic Depth與Label Smoothing。增強的訓練技術(shù)將ResNet50的性能從76.1%提升到了78.8%,這說明:Transformer與ConvNet的性能差距很大比例源自訓練技術(shù)的升級。
Macro Design
我們現(xiàn)在開始對SwinTransformer的宏觀架構(gòu)設(shè)計,它參考ConvNet采用了多階段設(shè)計思想,每個階段具有不同的特征分辨率。它具有兩個有意思的設(shè)計考量:(1) Stage Compute Ratio; (2)Stem Cell架構(gòu)。
Changing Stage Compute Ratio. 原始ResNet的計算分布是經(jīng)驗性成果?!皉es4”的重計算設(shè)計是為了與下游任務(wù)(如目標檢測)相兼容;而Swin-T參考了類似的設(shè)計準則但將計算比例微調(diào)為,更大的SwinTransformer的比例則為。參考該設(shè)計理念,我們將ResNet50每個階段的塊數(shù)從調(diào)整為。此時模型的性能從78.8%提升到79.4%。
Changing Stem to "Patchify". 一般來講,Stem設(shè)計主要關(guān)心:在網(wǎng)絡(luò)起始部分如何對圖像進行處理。由于自然圖像的信息冗余性,常見的Stem通過對輸入圖像下采樣聚合到適當?shù)奶卣鞒叽?。ResNet中的Stem包含stride等于2的卷積+MaxPool,它將輸入圖像進行4倍下采樣;而ViT則采用了"Patchify"策略,它對應(yīng)了大卷積核(如14、16)、非重疊卷積;SwinTransformer采用了類似的"Patchify",但塊尺寸為4以兼容多階段設(shè)計架構(gòu)。我們將ResNet中的Stem替換為的"Patchify"層。此時,模型的性能從79.4%提升到了79.5%。
ResNeXt-ify
在這里,我們嘗試采用了ResNeXt的設(shè)計理念(采用更多的組擴展寬度),其核心成分為組卷積。具體來說,ResNeXt在Bottleneck中為采用組卷積。這種設(shè)計方式可以大幅減少FLOPs,故通過提升網(wǎng)絡(luò)寬度補償容量損失。
在本文中,我們采用depthwise卷積,同時將網(wǎng)絡(luò)的寬度進行了提升,此時它與Swin-T具有相同的通道數(shù)。此時,模型的性能提升到了80.5%,而FLOPs則提升到了53.G。
Inverted Bottleneck
Transformer模塊的一個重要設(shè)計:它構(gòu)建了Inverted Bottleneck,如MLP的隱層維度是輸入維度的4倍。有意思的是:Transformer的這種設(shè)計與ConvNet中的Inverted Bottleneck(最早源自MobileNetV2)設(shè)計相一致。
在這里,我們探索了上圖的幾種不同設(shè)計,它將網(wǎng)絡(luò)的FLOPs下降到了4.6G。有意思的是,這種設(shè)計將模型的性能從80.5%提升到了80.6%。對ResNet200的性能提升則更大,從81.9%提升到了82.6%。
Large Kernel Sizes
在這部分,我們聚焦于大卷積核的行為表現(xiàn)。ViT的最重要區(qū)分是其非局部自注意力,它使得每一層均具有全局感受野。盡管SwinTransformer采用了局部窗口機制,但其感受野仍至少為,遠大于ConvNet的。因此,我們將ConvNet中使用大卷積核卷積進行回顧。
Moving up depthwise conv layer. 為探索大核,先決條件是depthwise卷積的位置上移(見Figure3c)。這種設(shè)計理念等同于Transformer中的MHSA先于MLP。此時,模型的性能臨時下降到了79.9%,而FLOPs也下降到了4.1G。
Increasing the kernel size. 基于上述準備,我們采用了更大的卷積核,如。此時,模型的性能從79.9%!提升到了80.6%(),而模型的FLOPs幾乎不變。
Micro Design
接下來,我們將從微觀角度(即OP層面)探索幾種架構(gòu)差異,主要聚焦于激活函數(shù)與Normalization層的選擇。
Replacing ReLU wit GELU. NLP與視覺架構(gòu)的一個差異體現(xiàn)在激活函數(shù)的實用。ConvNet大多采用ReLU,而ViT大多采用GELU。我們發(fā)現(xiàn):ConvNet中的ReLU可以替換為GELU,同時性能不變(80.6%)。
Fewer Activation Functions. Transformer與ResNet模塊的一個小區(qū)別:Transformer模塊使用了更少的激活函數(shù)。類似的,我們對ConvNeXt模塊進行下圖所示的改進,模型性能從80.6%提升到了81.3%(此時,它具有與Swin-T相當?shù)男阅?。
Fewer Normalization Layers Transformer通常具有更少的Normalization層,因此我們移除兩個BN層僅保留 卷積之前的一個BN。模型的性能提升到了81.4%,超越了Swin-T。
Substituting BN with LN 盡管BN是ConvNet的重要成分,具有加速收斂降低過擬合的作用;但BN對模型性能也存在有害影響。Transformer中的LN對不同的應(yīng)用場景均具有比較好的性能。直接在原始ResNet中將BN替換為LN會導致性能下降,而組合了上述技術(shù)后再將BN替換為LN則能帶來性能的提升:81.5%。
Separate Downsamling Layers 在ResNet中,每個階段先采用stride=2的卷積進行下采樣;而SwinTransformer則采用了分離式下采樣層。我們探索了類似的策略:采用stride=2的卷積進行下采樣,但這種方式導致了“不收斂”。進一步研究表明:在下采樣處添加Normalization層有助于穩(wěn)定訓練。此時,模型的性能提升到了82.0%,大幅超越了Swin-T的81.3%。
Closing remarks. 到此為止,我們完成了ConvNet的進化之路,得到了超越SwinTransformer的純ConvNet架構(gòu)ConvNeXt。需要注意的是,上述設(shè)計并沒有新穎之處,均得到了研究,但并未進行匯總集成。ConvNeXt具有與SwinTransformer相當?shù)膮?shù)量、吞吐量、內(nèi)存占用,更高的性能,且不需要依賴特定的模塊(比如移位窗口注意力、相對位置偏置)。
Exmpirical Evaluations on ImageNet
基于前述ConvNeXt架構(gòu),我們構(gòu)建了ConvNeXt-T/S/B/L以對標Swin-T/S/B/L。此外,我們還構(gòu)建了一個更大的ConvNeXt-XL以進一步測試ConvNeXt的縮放性。不同變種模型的區(qū)別在于通道數(shù)、模塊數(shù),詳細信息如下:
ConvNeXt-T: C=,B=
ConvNeXt-S: C=,B=
ConvNeXt-B: C=,B=
ConvNeXt-L: C=,B=
ConvNeXt-XL: C=,B=
上表給出了ImageNet上的性能對比,從中可以看到:
ConvNeXt具有比ConvNet(如RegNet、EfficientNet)更佳的精度-計算均衡以及吞吐量;
ConvNeXt同樣具有比SwinTransformer更佳的性能,且無需特殊操作模塊;
ConvNeXt@384比Swin-B性能高0.6%且推理速度快12.5%;
僅需ImageNet訓練,ConvNeXt-XL的性能即可達到85.5%;當采用ImageNet-22K預訓練時,模型性能進一步提升到了87.8%。
既然ConvNeXt這么好,其設(shè)計理念能否應(yīng)用到ViT中呢?結(jié)果見上表,從中可以看到:兩者具有相當?shù)男阅?,這意味著:ConvNeXt的設(shè)計理念用于非分層模塊時仍具有競爭力。
Empirical Evalution on Downstream Tasks
為進一步驗證ConvNeXt在下游任務(wù)的表現(xiàn),我們基于Mask R-CNN與Cascade Mask R-CNN在COCO檢測方面的性能,結(jié)果見上表,從中可以看到:ConvNeXt取得了與SwinTransformer相當,甚至更優(yōu)的性能。當采用更大的骨干且ImageNet22K預訓練時,ConvNeXt的性能更佳。
上表給出了ADE20K數(shù)據(jù)上的性能對比,從中可以看到:在不同容量大小下,ConvNeXt均可取得極具競爭力的結(jié)果,進一步驗證了ConvNeXt的有效性。
上表還給出了Swin與ConvNeXt在吞吐量方面的對比,很明顯:ConvNeXt具有比Swin更高的吞吐量、更高的精度。
本文僅做學術(shù)分享,如有侵權(quán),請聯(lián)系刪文。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。