本文旨在通過充分利用卷積探索一種更高效的編碼空域特征的方式:通過組合ConvNet與ViT的設計理念,本文利用卷積調制操作對自注意力進行了簡化,進而構建了一種新的ConvNet架構Conv2Former。ImageNet分類、COCO檢測以及ADE20K分割任務上的實驗結果表明:所提Conv2Former取得了優于主流ConvNet(如ConvNeXt)、ViT(如Swin Transformer)的性能。
本文方案
上圖給出了本文方案架構示意圖,類似ConvNeXt、SwinT,Conv2Former采用了金字塔架構,即含四個階段、四種不同尺寸的特征,相鄰階段之間通過Patch Embedding模塊(其實就是一個卷積核與stride均為的卷積)進行特征空間分辨率與通道維度的惡變換。下表給出了不同大小Conv2Former的超參配置,
核心模塊
上圖給出了經典模塊的架構示意圖,從經典的殘差模塊到自注意力模塊,再到新一代卷積模塊。自注意力模塊可以表示為如下形式:
盡管注意力可以更好的編碼空域相關性,但其計算復雜性隨N而爆炸性增長。
本文則旨在對自注意力進行簡化:采用卷積特征對V進行調制。假設輸入,所提卷積調制模塊描述如下:
需要注意的是:上式中表示Hadamard乘積。上述卷積調制模塊使得每個位置的元素與其近鄰相關,而通道間的信息聚合則可以通過線性層實現。下面給出了該核心模塊的實現代碼。
classConvMod(nn.Module):
def__init__(self,dim):
super().__init__()
self.norm=LayerNorm(dim,eps=1e-6,data_format='channel_first')
self.a=nn.Sequential(
nn.Conv2d(dim,dim,1),
nn.GELU(),
nn.Conv2d(dim,dim,11,padding=5,groups=dim)
)
self.v=nn.Conv2d(dim,dim,1)
self.proj=nn.Conv2d(dim,dim,1)
defforward(self,x):
B,C,H,W=x.shape
x=self.norm(x)
a=self.a(x)
v=self.v(x)
x=a*v
x=self.proj(x)
returnx
微觀設計理念
Larger Kernel than 如何更好的利用卷積對于CNN設計非常重要!自從VGG、ResNet以來,卷積成為ConvNet的標準選擇;Xception引入了深度分離卷積打破了該局面;再后來,ConvNeXt表明卷積核從3提升到7可以進一步改善模型性能。然而,當不采用重參數而進一步提升核尺寸并不會帶來性能性能提升,但會導致更高計算負擔。
作者認為:ConvNeXt從大于卷積中受益極小的原因在于使用空域卷積的方式。對于Conv2Former,從到,伴隨核尺寸的提升可以觀察到Conv2Former性能一致提升。該現象不僅發生在Conv2Former-T(),同樣在Conv2Former-B得到了體現()。考慮到模型效率,作者將默認尺寸設置為。
Weighting Strategy 正如前面圖示可以看到:作者采用Depthwise卷積的輸出對特征V進行加權調制。需要注意的是,在Hadamard乘積之前并未添加任務規范化層(如Sigmoid、),而這是取得優異性能的重要因素(類似SENet添加Sigmoid會導致性能下降超0.5%)。
Normalization and Activations 對于規范化層,作者參考ViT與ConvNeXt采用了Layer Normalization,而非卷積網絡中常用的Batch Normalization;對于激活層,作者采用了GELU(作者發現,LN+GELU組合可以帶來0.1%-0.2%的性能提升)。
本文實驗
上述兩表給出了ImageNet分類任務上不同方案的性能對比,從中可以看到:
-
在tiny-size(<30M)方面,相比ConvNeXt-T與SwinT-T,Conv2Former-T分別取得了1.1%與1.7%的性能提升。值得稱道的是,Conv2Former-N僅需15M參數量+2.2GFLOPs取得了與SwinT-T(28M參數量+4.5GFLOPs)相當的性能。
-
在base-size方面,相比ConvNeXt-B與SwinT-B,Conv2Former-B仍取得了0.6%與0.9%的性能提升。
-
相比其他主流模型,在相近大小下,所提Conv2Former同樣表現更優。值得一提的是,相比EfficientNet-B7,Conv2Former-B精度稍有(84.4% vs 84.3%),但計算量大幅減少(15G vs 37G)。
-
當采用ImageNet-22K預訓練后,Conv2Former的性能可以進一步提升,同時仍比其他方案更優。Conv2Former-L甚至取得了87.7% 的優異指標。
采用大核卷積是一種很直接的輔助CNN構建長程相關性的方法,但直接使用大核卷積使得所提模型難以優化。從上表可以看到:當不采用其他訓練技術(如重參數、稀疏權值)時,Conv2Former采用時已可取得更好的性能;當采用更大的核時,Conv2Former取得了進一步的性能提升。
上表給出了COCO檢測任務上不同方案的性能對比,從中可以看到:
-
在tiny-size方面,相比SwinT-T與ConvNeXt-T,Conv2Former-T取得了2% 的檢測指標提升,實例分割指標提升同樣超過1%;
-
當采用Cascade Mask R-CNN框架時,Conv2Former仍具有超1%的性能提升。
-
當進一步增大模型時,性能優勢則變得更為明顯;
上表給出了ADE20K分割任務上的性能對比,從中可以看到:
-
在不同尺度模型下,Conv2Former均具有比SwinT與ConvNeXt更優的性能;
-
相比ConvNeXt,在tiny尺寸方面性能提升1.3%mIoU,在base尺寸方面性能提升1.1%;
-
當進一步提升模型尺寸,Conv2Former-L取得了54.3%mIoU,明顯優于Swin-L與ConvNeXt-L。
一點疑惑解析
到這里,關于Conv2Former的介紹也就結束了。但是,心里仍有一點疑惑存在:Conv2Former與VAN的區別到底是什么呢?關于VAN的介紹可參考筆者之前的分享:《優于ConvNeXt,南開&清華開源基于大核注意力的VAN架構》。
先來看一下兩者的定義,看上去兩者并無本質上的區別(均為點乘操作),均為大核卷積注意力。
-
VAN:
-
Conv2Former
結合作者開源代碼,筆者繪制了上圖,左圖為Conv2Former核心模塊,右圖為VAN核心模塊。兩者差別還是比較明顯的!
-
雖然大核卷積注意力均是其核心,但Conv2Former延續了自注意力的設計范式,大核卷積注意力是其核心;而VAN則是采用傳統Bottleneck設計范式,大核卷積注意力的作用類似于SE。
-
從大核卷積內在機理來看,Conv2Former僅考慮了的空域建模,而VAN則同時考慮了空域與通道兩個維度;
-
在規范化層方面,Conv2Former采用了Transformer一貫的LayerNorm,而VAN則采用了CNN一貫的BatchNorm;
-
值得一提的是:兩者在大核卷積注意力方面均未使用Sigmoid激活函數。兩者均發現:使用Sigmoid激活會導致0.2%左右的性能下降。
為更好對比Conv2Former與VAN的性能,特匯總上表(注:GFLOPs列僅匯總了)在Image輸入時的計算量Net-1K上的指標進行了對比,可以看到:在同等參數量前提下,兩者基本相當,差別僅在0.1%。此外,考慮到作者所提到的“LN+GELU的組合可以帶來0.1%-0.2%的性能提升”,兩者就算是打成平手了吧,哈哈。
審核編輯 :李倩
-
模塊
+關注
關注
7文章
2695瀏覽量
47433 -
編碼
+關注
關注
6文章
940瀏覽量
54814 -
視覺識別
+關注
關注
3文章
89瀏覽量
16725
原文標題:超越ConvNeXt!Conv2Former:用于視覺識別的Transformer風格的ConvNet
文章出處:【微信號:CVer,微信公眾號:CVer】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論