<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > “文藝復興” ConvNet卷土重來(lái),壓過(guò)Transformer!FAIR重新設計純卷積新架構

“文藝復興” ConvNet卷土重來(lái),壓過(guò)Transformer!FAIR重新設計純卷積新架構

發(fā)布人:計算機視覺(jué)工坊 時(shí)間:2022-01-16 來(lái)源:工程師 發(fā)布文章

以下文章來(lái)源于極市平臺 ,作者CV開(kāi)發(fā)者都愛(ài)看的

“文藝復興”,ConvNet卷土重來(lái),壓過(guò)Transformer。本文是FAIR的Zhuang Liu(DenseNet的作者)與Saining Xie(ResNeXt的作者)關(guān)于ConvNet的最新探索,以ResNet為出發(fā)點(diǎn),逐步引入近來(lái)ViT架構的一些設計理念而得到的純ConvNet新架構ConvNeXt,取得了優(yōu)于SwinT的性能,讓ConvNet再次性能煥發(fā)。 

1.jpg

論文鏈接:https://arxiv.org/pdf/2201.03545.pdf

代碼鏈接:https://github.com/facebookresearch/ConvNeXt

Abstract

ViT伴隨著(zhù)視覺(jué)的“20年代”咆哮而來(lái),迅速的碾壓了ConvNet成為主流的研究方向。然而,當應用于廣義CV任務(wù)(如目標檢測、語(yǔ)義分割)時(shí),常規的ViT面臨著(zhù)極大挑戰。因此,分層Transformer(如Swin Transformer)重新引入了ConvNet先驗信息,使得Transformer成實(shí)際可行的骨干網(wǎng)絡(luò )并在不同視覺(jué)任務(wù)上取得了非凡的性能。然而,這種混合方法的有效性仍然很大程度上歸根于Transformer的內在優(yōu)越性,而非卷積固有歸納偏置。

本文對該設計空間進(jìn)行了重新審視并測試了ConvNet所能達到的極限。我們將標準卷積朝ViT的設計方向進(jìn)行逐步“現代化”調整,并發(fā)現了幾種影響性能的關(guān)鍵成分。由于該探索是純ConvNet架構,故將其稱(chēng)之為ConvNeXt。完全標準ConvNet模塊構建的ConvNeXt取得了優(yōu)于Transformer的精度87.8%,在COCO檢測與ADE20K分割任務(wù)上超越了SwinTransformer,同時(shí)保持了ConvNet的簡(jiǎn)單性與高效性。

2.jpg

Modernizing ConvNet:Roadmap

接下來(lái),我們將提供從ResNet到ConvNeXt的演變軌跡。我們考慮了兩種不同FLOPs尺寸的模型:ResNet50/Swin-T(FLOPs約)與ResNet200/Swin-B(FLOPs約),為簡(jiǎn)單起見(jiàn),這里僅呈現ResNet50/Swin-T復雜度模型的結果。

我們以ResNet50作為出發(fā)點(diǎn),首先采用類(lèi)似ViT的訓練技術(shù)對其重訓練并得到ResNet50的改進(jìn)結果(這將作為本文的基線(xiàn));然后我們研究了一系列設計準則,總結如下:

Macro Design

ResNeXt

Inverted Bottleneck

Large Kernel Size

Various Layer-wise Micro Design.

3.jpg

從上圖可以看到網(wǎng)絡(luò )架構每一次進(jìn)化所能取得的性能(ConvNeXt-T取得了82%,超越了Swin-T的81.3%),由于模型復雜度與最終性能相關(guān),故FLOPs進(jìn)行了一定程度的控制。

Training Techniques

除了網(wǎng)絡(luò )架構的設計外,訓練方式也會(huì )影響最終的性能。ViT不僅帶來(lái)了新的模塊與架構設計,同時(shí)還引入了不同的訓練技術(shù),如AdamW優(yōu)化。因此,探索的第一步就是采用ViT的訓練機制訓練基線(xiàn)模型ResNet-50/200。

4.jpg

本文采用了DeiT與SwinTransformer的訓練方案,可參見(jiàn)上表。訓練周期從原始的90epoch擴展到了300epoch;優(yōu)化器為AdamW,數據增廣包含Mixup、Cutmix、RandAugment、RandomErasing;正則化技術(shù)包含Stochastic Depth與Label Smoothing。增強的訓練技術(shù)將ResNet50的性能從76.1%提升到了78.8%,這說(shuō)明:Transformer與ConvNet的性能差距很大比例源自訓練技術(shù)的升級。

Macro Design

我們現在開(kāi)始對SwinTransformer的宏觀(guān)架構設計,它參考ConvNet采用了多階段設計思想,每個(gè)階段具有不同的特征分辨率。它具有兩個(gè)有意思的設計考量:(1) Stage Compute Ratio; (2)Stem Cell架構。

Changing Stage Compute Ratio. 原始ResNet的計算分布是經(jīng)驗性成果?!皉es4”的重計算設計是為了與下游任務(wù)(如目標檢測)相兼容;而Swin-T參考了類(lèi)似的設計準則但將計算比例微調為,更大的SwinTransformer的比例則為。參考該設計理念,我們將ResNet50每個(gè)階段的塊數從調整為。此時(shí)模型的性能從78.8%提升到79.4%。

Changing Stem to "Patchify". 一般來(lái)講,Stem設計主要關(guān)心:在網(wǎng)絡(luò )起始部分如何對圖像進(jìn)行處理。由于自然圖像的信息冗余性,常見(jiàn)的Stem通過(guò)對輸入圖像下采樣聚合到適當的特征尺寸。ResNet中的Stem包含stride等于2的卷積+MaxPool,它將輸入圖像進(jìn)行4倍下采樣;而ViT則采用了"Patchify"策略,它對應了大卷積核(如14、16)、非重疊卷積;SwinTransformer采用了類(lèi)似的"Patchify",但塊尺寸為4以兼容多階段設計架構。我們將ResNet中的Stem替換為的"Patchify"層。此時(shí),模型的性能從79.4%提升到了79.5%。

ResNeXt-ify

在這里,我們嘗試采用了ResNeXt的設計理念(采用更多的組擴展寬度),其核心成分為組卷積。具體來(lái)說(shuō),ResNeXt在Bottleneck中為采用組卷積。這種設計方式可以大幅減少FLOPs,故通過(guò)提升網(wǎng)絡(luò )寬度補償容量損失。

在本文中,我們采用depthwise卷積,同時(shí)將網(wǎng)絡(luò )的寬度進(jìn)行了提升,此時(shí)它與Swin-T具有相同的通道數。此時(shí),模型的性能提升到了80.5%,而FLOPs則提升到了53.G。

Inverted Bottleneck

Transformer模塊的一個(gè)重要設計:它構建了Inverted Bottleneck,如MLP的隱層維度是輸入維度的4倍。有意思的是:Transformer的這種設計與ConvNet中的Inverted Bottleneck(最早源自MobileNetV2)設計相一致。

5.jpg

在這里,我們探索了上圖的幾種不同設計,它將網(wǎng)絡(luò )的FLOPs下降到了4.6G。有意思的是,這種設計將模型的性能從80.5%提升到了80.6%。對ResNet200的性能提升則更大,從81.9%提升到了82.6%。

Large Kernel Sizes

在這部分,我們聚焦于大卷積核的行為表現。ViT的最重要區分是其非局部自注意力,它使得每一層均具有全局感受野。盡管SwinTransformer采用了局部窗口機制,但其感受野仍至少為,遠大于ConvNet的。因此,我們將ConvNet中使用大卷積核卷積進(jìn)行回顧。

Moving up depthwise conv layer. 為探索大核,先決條件是depthwise卷積的位置上移(見(jiàn)Figure3c)。這種設計理念等同于Transformer中的MHSA先于MLP。此時(shí),模型的性能臨時(shí)下降到了79.9%,而FLOPs也下降到了4.1G。

Increasing the kernel size. 基于上述準備,我們采用了更大的卷積核,如。此時(shí),模型的性能從79.9%!提升到了80.6%(),而模型的FLOPs幾乎不變。

Micro Design

接下來(lái),我們將從微觀(guān)角度(即OP層面)探索幾種架構差異,主要聚焦于激活函數與Normalization層的選擇。

Replacing ReLU wit GELU. NLP與視覺(jué)架構的一個(gè)差異體現在激活函數的實(shí)用。ConvNet大多采用ReLU,而ViT大多采用GELU。我們發(fā)現:ConvNet中的ReLU可以替換為GELU,同時(shí)性能不變(80.6%)。

Fewer Activation Functions. Transformer與ResNet模塊的一個(gè)小區別:Transformer模塊使用了更少的激活函數。類(lèi)似的,我們對ConvNeXt模塊進(jìn)行下圖所示的改進(jìn),模型性能從80.6%提升到了81.3%(此時(shí),它具有與Swin-T相當的性能)。

6.jpg

Fewer Normalization Layers Transformer通常具有更少的Normalization層,因此我們移除兩個(gè)BN層僅保留  卷積之前的一個(gè)BN。模型的性能提升到了81.4%,超越了Swin-T。

Substituting BN with LN 盡管BN是ConvNet的重要成分,具有加速收斂降低過(guò)擬合的作用;但BN對模型性能也存在有害影響。Transformer中的LN對不同的應用場(chǎng)景均具有比較好的性能。直接在原始ResNet中將BN替換為L(cháng)N會(huì )導致性能下降,而組合了上述技術(shù)后再將BN替換為L(cháng)N則能帶來(lái)性能的提升:81.5%。

Separate Downsamling Layers 在ResNet中,每個(gè)階段先采用stride=2的卷積進(jìn)行下采樣;而SwinTransformer則采用了分離式下采樣層。我們探索了類(lèi)似的策略:采用stride=2的卷積進(jìn)行下采樣,但這種方式導致了“不收斂”。進(jìn)一步研究表明:在下采樣處添加Normalization層有助于穩定訓練。此時(shí),模型的性能提升到了82.0%,大幅超越了Swin-T的81.3%。

Closing remarks. 到此為止,我們完成了ConvNet的進(jìn)化之路,得到了超越SwinTransformer的純ConvNet架構ConvNeXt。需要注意的是,上述設計并沒(méi)有新穎之處,均得到了研究,但并未進(jìn)行匯總集成。ConvNeXt具有與SwinTransformer相當的參數量、吞吐量、內存占用,更高的性能,且不需要依賴(lài)特定的模塊(比如移位窗口注意力、相對位置偏置)。

Exmpirical Evaluations on ImageNet

基于前述ConvNeXt架構,我們構建了ConvNeXt-T/S/B/L以對標Swin-T/S/B/L。此外,我們還構建了一個(gè)更大的ConvNeXt-XL以進(jìn)一步測試ConvNeXt的縮放性。不同變種模型的區別在于通道數、模塊數,詳細信息如下:

ConvNeXt-T: C=,B=

ConvNeXt-S: C=,B=

ConvNeXt-B: C=,B=

ConvNeXt-L: C=,B=

ConvNeXt-XL: C=,B=

7.jpg

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

ConvNeXt具有比ConvNet(如RegNet、EfficientNet)更佳的精度-計算均衡以及吞吐量;

ConvNeXt同樣具有比SwinTransformer更佳的性能,且無(wú)需特殊操作模塊;

ConvNeXt@384比Swin-B性能高0.6%且推理速度快12.5%;

僅需ImageNet訓練,ConvNeXt-XL的性能即可達到85.5%;當采用ImageNet-22K預訓練時(shí),模型性能進(jìn)一步提升到了87.8%。

8.jpg

既然ConvNeXt這么好,其設計理念能否應用到ViT中呢?結果見(jiàn)上表,從中可以看到:兩者具有相當的性能,這意味著(zhù):ConvNeXt的設計理念用于非分層模塊時(shí)仍具有競爭力。

Empirical Evalution on Downstream Tasks

9.jpg

為進(jìn)一步驗證ConvNeXt在下游任務(wù)的表現,我們基于Mask R-CNN與Cascade Mask R-CNN在COCO檢測方面的性能,結果見(jiàn)上表,從中可以看到:ConvNeXt取得了與SwinTransformer相當,甚至更優(yōu)的性能。當采用更大的骨干且ImageNet22K預訓練時(shí),ConvNeXt的性能更佳。

10.jpg

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

11.jpg

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

本文僅做學(xué)術(shù)分享,如有侵權,請聯(lián)系刪文。

*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>