BoTNet::Bottleneck Transformers for Visual Recognition(視覺識別的瓶頸transformer)
0、摘要
我們提出了BoTNet,一個簡單但功能強大的骨干網絡,可用於多種視覺任務,包括圖像分類、目標檢測、實例分割。通過在ResNet的最后三個 bottleneck blocks 中用全局自注意力機制替換卷積而不做其他改變,我們的方法在實例分割和目標檢測的 baselines 上有了顯著的改進,同時也減少了參數,並且將延遲開銷降最小。通過BoTNet的設計,我們將具有 self-attention 的 ResNet bottleneck blocks 視為 Transformer blocks 。沒有任何華麗的點綴,基於Mask R-CNN框架,BoTNet在COCO基准數據集上達到了\(44.4\%\)的mask AP和\(49.7\%\)的box AP;超越了之前在COCO驗證集上評估的ResNeSt[72]的最佳單模型和單尺度結果。最后,我們提出了一個針對圖像分類的簡單的適應:BoTNet網絡,它在 \(ImageNet\) 上實現了 \(2.33\times\)的計算速度,同時 Top-1 精度達到了 \(84.7%\),計算設備為\(TPU_{v3}\) 。我們希望這個簡單、高效的研究將作為未來在視覺自注意力模型的一個 strong baseline。
1、介紹
深度卷積backbone框架[40,56,29,70,59]在圖像分類[54],目標檢測[17, 42, 21, 20, 53],實例分割[25, 12, 28]實現了顯著的提升。大多數標志性的backbone框架都大量使用了 \(3 \times 3\) 的卷積。
雖然卷積運算可以有效地捕獲局部信息,但是目標檢測、實例分割、關鍵點檢測等視覺任務需要建立長距離依賴模型。例如,實例分割模型,能夠從一個大的鄰域中收集和關聯場景信息,這對於學習對象之間的關系非常有用[34]。為了全局聚合本地捕獲的 filter 響應,基於卷積的架構需要堆疊多個層[56, 29]。雖然堆疊更多的層在這些backbone[72] 上確實的能提高性能,但是,建立全局(非局部)依賴關系模型的顯式機制可能是一種更強大和可擴展的解決方案,而不需要那么多層。
模型的長距離依賴在NLP的任務中也很重要。自注意機制是一種計算原語[64],它通過基於內容的尋址機制實現成對實體交互,從而在長序列中學習豐富的層次關聯特征。這已經成為NLP中的標准工具:Transformer[64]塊,突出的例子是GPT[48, 3]和BERT[13, 44]模型。
在視覺中使用自注意力機制的一個簡單方法是用Transformer[64]中提出的多頭自注意力機制(MHSA)層替換空間卷積層(如下左圖)。最近,這種方法在兩種看似不同的方法上取得了進展。一方面, SASA [51], SANet [73], Axial-SASA [66]等,提出用不同形式的自注意力機制(局部、全局、向量、軸向等)取代ResNet botleneck塊[29]中的空間卷積。另一方面,有 Vision Transformer (ViT) [14], 它建議將Transformer blocks[64]堆疊在非重疊patches的線性投影上。這些方法可能呈現兩種不同的體系結構。我們發現事實並非如此。相反,具有MHSA層的ResNet boteneck塊可以被視為具有瓶頸結構、模次要差異(例如剩余連接)、可選的標准化層的Transformer塊(右圖)。鑒於這種等價性,我們將具有MHSA層的ResNet瓶頸塊稱為Bottleneck Transformer(BoT)塊。
在視覺中使用自注意力機制有幾個挑戰:
- (1)與圖像分類(224×224)相比,在目標檢測和實例分割中,圖像尺寸要大得多(1024×1024)。
- (2) 自注意力機制的記憶和計算與空間維度成二次比例[61],導致訓練和推理的開銷。
為了克服這些挑戰,做了如下的設計:
- (1)利用卷積有效地從大圖像中學習抽象的低分辨率特征圖;
- (2)使用全局(all2all)自注意力機制來處理和聚合卷積捕獲的featuremaps中包含的信息。
這樣的混合設計:
- (1)使用現有的和優化的特征進行卷積和全局自注意力機制;
- (2)在高分辨率上使用處理高效的卷積、空間下采樣等技術;在低分辨率上使用注意力機制。
下面是這個混合設計的一個簡單實用的實例:
使用BoT塊替換ResNet最后三個bottleneck blocks,其他層沒有任何改變。也即我們只使用MHSA替換了3個\(3 \times 3\)卷積。這個改變在COCO數據集上 mask AP提升了\(1.2\%\)(使用了ResNet-50, 模型為Mask R-CNN)。這個結構我們稱之為BoTNet。雖然我們注意到它的構造並不新穎,但我們相信它的簡單性和性能使它成為一個有用的參考主干體系結構,值得研究。
使用BoTNet,我們是實例分割、目標檢測上取得了顯著的提升。關於其的幾個關鍵結果為:
- (1)各種訓練配置(第4.1節)、數據擴充(第4.2節)和ResNet系列主干(第4.5節)的性能增益;
- (2)BoTNet對小對象的顯著增強(+2.4 mask AP和+2.6 box AP)(第4.4節,第A.3節);
- (3)非局部層的性能增益(第4.7節);
- (4)這種增益可以很好地擴展到更大的圖像,從而產生44.4%的mask AP,在那些只研究骨干架構的項目中具有最先進的性能,這些項目的訓練計划適中(最多72個epochs),並且沒有額外的數據或擴充。
我們最后提出了簡單的BoTNet架構調整,以在ImageNet基准[54]上獲得良好的收益,因為我們注意到直接使用BoTNet並不能提供實質性的收益。基於該調整,我們設計了一簇BoTNet網絡,並且在 ImagNet 的驗證集上達到了\(84.7\%\)的 Top-1 精度,比受歡迎的 EffificientNet模型還快 \(2.33\times\)。通過BoTNet提供強大的結果,我們希望自注意力機制成為未來視覺體系結構中廣泛使用的基本元素。
2、相關工作
圖2給出了一個將 self-attention 用於視覺的深度學習體系結構的分類。我們將關注以下三個方面:
- (1)Transformer vs BoTNet;
- (2)DETR vs BoTNet;
- (3)Non-Local vs BoTNet.

2.1 Connection to the Transformer
正如本文的標題所指出的,本文的一個關鍵信息是,具有MHSA層的ResNet瓶頸塊可以被視為具有瓶頸結構的Transformer塊。如1中的右圖所示,我們稱之為 Bottleneck Transformer (BoT)。這里要注意,圖中的BoT塊設計並不是我們的貢獻。相反,我們指出了MHSA ResNet瓶頸塊和Transformer之間的關系,希望它能提高我們對計算機視覺中self-attention的架構設計空間[49,50]的理解。除了圖中已經顯示的差異(剩余連接和塊邊界)之外,還有一些差異:
- (1)Normalization:Transformers 使用 Layer Normalization、 BoT blocks使用BN;
- (2)Non-Linearities:Transformers在FFN塊中使用一個非線性,而ResNet結構允許BoT塊使用三個非線性;
- (3)Output projections:Transformers中的MHSA塊包含輸出預測,而BoT塊(圖1)中的MHSA層(圖4)不包含輸出預測;
- (4)我們使用了視覺中常用的帶動量的SGD優化器,而Transformers使用的是Adam優化器。
2.2 Connection to DETR
Detection Transformer (DETR) 是一種檢測框架,它使用變換器來隱式地執行區域建議和對象定位,而不是使用R-CNN [21, 20, 53, 28]。DETR 與 BoTNet 都使用了self-attention提升目標檢測和實例分割的性能。不同之處是DETR是在backbone之外使用的,以去除區域建議和非最大化抑制;另一方面,BoTNet的目標是提供一個主干架構,它使用 Transformer-like 的塊進行檢測和實例分割。我們不知道檢測框架(無論是DETR還是R-CNN)。我們使用Mask[28]和faster R-CNN[53]系統進行了實驗,並將其留給將來的工作,以便在DETR框架中集成 BoTNet 作為主backbone。由於BoTNet在小目標上的顯著提升,我們相信,未來可能有機會解決DETR中小物體識別不佳的問題(第A.3節)。
2.3 Connection to Non-Local Neural Nets
Non-Local(NL)網絡 [67] Transformer與 Non-Local-Means(非局部均值濾波算法) 之間進行連接。他們將NL塊插入最后一個或最后兩個blockgroups (c4, c5),其提升了視頻的目標檢測與實例分割效果。與 NL 網絡類似,僵屍網絡是一種混合設計,使用卷積和全局self-attention。
-
關於NL layer 與 MHSA layer 的不同點:
-
MHSA使用了多頭、值投影、位置編碼
NL 塊的每種實施都沒有使用這幾塊的東西:https://github.com/facebookresearch/ImageNet-Adversarial-Training/blob/master/resnet_model.py#L92
-
-
NL塊使用通道衰減因子為2的bottleneck(而不是采用ResNet結構的BoT塊中的4);
-
NL塊作為附加塊插入到ResNet主干中,而不是像 BoTNet 那樣替換現有卷積塊。
第4.7節提供了BoTNet、NLNet以及NL-like的BoTNet版本之間的比較,其中我們以與NL塊相同的方式插入BoT塊,而不是替換。
3、方法

BoTNet的設計是簡單的:在ResNet中使用MHSA替換最后三個\(3\times3\)卷積,MHSA是在2D特征圖上進行global (all2all) self-attention的實施(如圖4)。ResNet有4個典型的stages:[c2,c3,c4,c5],相對於輸入圖像其步長為[4,8,16,32]。這些stages都是多個帶殘差連接的bottleneck 堆疊而成(如:R50有[3,4,6,3]個bottleneck blocks)。
在整個backbone中使用self-attention的方法是可行的[51, 2, 73, 14] 。我們的目標是在實例分割模型中的高級語義階段使用注意力機制,通常使用更高分辨率(1024×1024)的圖像。考慮到\(O(n^{2}d)\)的顯存占用和計算量,我們認為遵循上述因素的最簡單的設置是在主干中以最低分辨率的特征圖將自我注意力結合起來,即這里的stage5。在c5這 Part,有3個殘差塊,每個殘差塊只有一個\(3\times3\)卷積。使用MHSA層替換它們構成了BoTNet體系結構的基礎。前一個使用步長為2,后兩個使用步長為1。在第一個block中,因為BoT塊沒有stride操作,所以我們使用\(2\times2\)的平均池化。 BoTNet的結構設計如上表所示,MHSA的示意圖見圖4,帶步長操作的結構如下。

3.1 相對位置編碼 Relative Position Encodings
為了使attention操作對位置感知,基於Transformer的架構通常使用位置編碼[64]。最近研究發現,相對距離感知位置編碼[55]更適合視覺任務[2,51,73]。這可歸因於注意力不僅考慮了內容信息,而且還考慮了不同位置的特征之間的相對距離,從而能夠有效地將跨對象的信息與位置感知相關聯。在BoTNet中,我們采用了文獻[51,2]中的二維相對位置self-attention實現。
4、實驗
評價指標:
- \(\rm AP^{bb}\) 超過IOU的平均值;
- \(\rm AP^{bb}_{50}\) 、\(\rm AP^{bb}_{75}\) 、\(\rm AP^{mk}\) ; \(\rm AP^{mk}_{50}\)、\(\rm AP^{mk}_{75}\);
4.1 BoTNet vs ResNet
設置訓練策略:一個訓練周期定義為12個epoch,以此類推。

4.2 Scale Jitter對BoTNet的幫助更大
參考資料:https://www.zhihu.com/question/52157389

4.3 相對位置編碼

4.4 stage5卷積替換實驗

實驗結果:

4.5 BoTNet提高了ResNet家族的骨干地位

4.6 高分辨率上的BoTNet

4.7 與NL網絡的比較
參考鏈接:https://zhuanlan.zhihu.com/p/53010734

4.8 ImageNet的圖像分類
4.8.1 BoTNet-S1 架構

實驗結果:

4.8.2 標准訓練的評估
見上表。
4.8.3 數據增強和長時間訓練的影響

4.8.4 SE、SiLU的影響和低權值衰減

4.8.5 BoTNet vs EffificientNets
模型設置:

基於這些模型得出如下發現:
- 在更高精度的情況下(B4及以上),BoTNets在計算每個迭代的時間方面明顯比EfficientNets更高效。
- ResNets 和 SENets 在較低精度的情況下表現非常好,優於EfficientNets和BoTNets(直到並包括B4)。
- 在M.Adds方面,EfficientNets可能比BoTNets更好,但在TPUs等最新硬件加速器上的映射不如BoTNets。對於幾乎每一個EfficientNet模型,都存在一個更好的ResNet、SENet或BoTNet(精度相似,計算時間更高效)。
- BoTNet所需的輸入圖像大小比高效網絡要小得多,這表明與深度可分離卷積相比,self-attention是一種更有效的上下文pooling操作。
實驗結果: (table 14)

4.8.6 ResNets 和 SENets是強大的baseline,精度達到\(83\%\)

4.8.7 BoTNets是Top-1精度超過\(83\%\)的最好模型

三種模型的精度可視化:

4.9 討論
如前幾節所討論的,SENets是一種功能強大的模型,性能比EfficientNets更好,可以一直擴展到83.8%的top-1精度,而無需任何諸如ResNet-D之類的工具, BoTNets最初的性能比SENets差(如T3),但從T4開始,它的性能開始取代SENets,並嚴格地優於EfficientNets,尤其是在接近尾聲時。EfficientNets不能很好地擴展,特別是在更大的精度范圍內。這無疑表明,EfficientNets中的復合縮放規則可能不夠強大,而簡單的深度縮放(如SENets和BoTNets中的深度縮放)工作得足夠好。對所有這些模型類的縮放規則的更仔細的研究留給將來的研究。
最近,基於Transformer的視覺識別模型在視覺Transformer(ViT)模型出現后得到了廣泛的應用[14]。雖然我們的論文是與ViT同時開發的,但是對ViT的許多后續研究,如DeiT[63],進一步改進了ViT的結果。從結果中可以看出,DeiT-384和ViT-384目前明顯優於SENets和BoTNet。這表明卷積和混合(卷積和self-attention)模型仍然是很強的模型,可以擊敗ImageNet的基准測試。ViT中的信息是,純注意模型在小數據(ImageNet)區域13中掙扎,但在大數據區域(JFT數據集)中閃耀,在大數據區域(JFT數據集)中,數據增強和正則化技巧等誘導性偏差在EfficientNet訓練設置中使用並不重要。盡管如此,我們認為探索混合模型(如BoTNets)是一項有趣的工作,即使是在大數據環境下,這僅僅是因為它們似乎比SENets和EfficientNets具有更好的伸縮性,並且在ImageNet上實現了比DeiT更好的性能。我們將如此大規模的努力留給今后的工作。在大數據區域,也可以設計比ViT更具擴展性的純注意模型,例如那些采用局部注意的模型,如SASA[51]。
我們還不清楚什么是正確的模型類別,因為我們還沒有探索大數據區域中混合和局部注意模型的局限性,而且純注意模型目前落后於小數據區域中的卷積和混合模型。盡管如此,希望IMANET的基准已經代表了視覺社區中表現最好的模型,BoTNet很可能是一個簡單而令人信服的baseline。雖然為了簡單起見,它們可能被視為混合ViT模型,但是在第2節中強調了BoT塊如何不同於常規Transformer塊,從而不同於ViT。
5、總結
使用self-attention的視覺backbone架構的設計是一個令人興奮的話題。我們希望我們的工作有助於提高對架構設計的理解。如前所述,將我們的backbone與DETR[8]相結合並研究對小物體的影響是未來工作的一個有趣途徑。將self-attention納入其他計算機視覺任務,如關鍵點檢測[7]和三維形狀預測[23];研究計算機視覺中自我監督學習的self-attention結構[31、26、62、9、24、10];以及擴展到更大的數據集,如JFT、YFCC和Instagram,是未來研究的成熟途徑。
完