最強Vision Trabsformer | 87.7%準(zhǔn)確率!CvT:將卷積引入視覺Transfo...
點擊上方【AI人工智能初學(xué)者】,選擇【星標(biāo)】公眾號期待您我的相遇與進步
1 簡介本文將卷積引入視覺Transformer提出CvT,在ImageNet拿下87.7% Top-1準(zhǔn)確率!與其他視覺Transformer和ResNet相比,具有更少的參數(shù)和更低的FLOPs,在垂直任務(wù)應(yīng)用中,也保持性能優(yōu)勢!代碼即將開源!
作者單位:麥吉爾大學(xué), 微軟云+AI
1.1 全文簡述
在本文中介紹了一種稱為卷積視覺Transformer(CvT)的新體系結(jié)構(gòu),該體系結(jié)構(gòu)通過將卷積引入ViT中來產(chǎn)生兩種設(shè)計結(jié)合的最佳效果,從而提高了視覺Transformer(ViT)的性能和效率。
CvT主要是通過2個主要改進完成的:包含卷積Token嵌入的Transformer層次結(jié)構(gòu),以及利用卷積映射的卷積Transformer Block。這些變化將卷積神經(jīng)網(wǎng)絡(luò)(CNN)的特性引入到ViT架構(gòu)中(即平移、縮放和旋轉(zhuǎn)不變性),同時保持了Transformers的優(yōu)點(即動態(tài)注意力,全局Context和更好的泛化)。

通過進行廣泛的實驗來驗證CvT的有效性,實驗表明該方法與ImageNet-1k上的其他視覺Transformer和ResNet相比,具有更少的參數(shù)和更低的FLOPs,可實現(xiàn)最先進的性能。
此外,在較大的數(shù)據(jù)集(例如ImageNet-22k)上進行預(yù)訓(xùn)練并針對垂直任務(wù)進行微調(diào)時,可以保持性能提升。CvT-W24在ImageNet-22k上進行了預(yù)訓(xùn)練,在ImageNet-1k val集合上獲得了87.7%的top-1精度。
最后,實驗結(jié)果表明,位置編碼是現(xiàn)有Vision Transformer的關(guān)鍵組成部分,可以在模型中刪除進而簡化了高分辨率視覺任務(wù)的設(shè)計。
1.2 相關(guān)總結(jié)
近幾年,Transformer在自然語言處理(NLP)的任務(wù)領(lǐng)域中得到了廣泛的應(yīng)用。而Vision Transformer(ViT)則是近來第一個完全依賴于Transformer架構(gòu)的計算機視覺模型,同時獲得具有競爭力的圖像分類性能。ViT設(shè)計通過對語言的理解,以最小的修改來適應(yīng)Transformer架構(gòu)。
首先,圖像被分割成離散的不重疊的小塊(例如16×16);
然后,將這些小塊作為Token(類似于NLP中的Token),用一種特殊的位置編碼來表示空間信息,然后輸入到標(biāo)準(zhǔn)Transformer層中建模全局關(guān)系,進而進行分類。
盡管Vision Transformer在一定程度上取得了成功,但在較小的數(shù)據(jù)量上訓(xùn)練時,其性能仍然低于類似規(guī)模的卷積神經(jīng)網(wǎng)絡(luò)(如ResNets)。一個可能的原因可能是ViT缺乏CNN架構(gòu)中固有的特性,而這些特性使CNN適合解決視覺任務(wù)。
例如,圖像具有很強的二維局部結(jié)構(gòu):空間相鄰像素通常是高度相關(guān)的。CNN的架構(gòu)通過使用局部感受野、共享權(quán)值和空間子采樣來強制捕獲這個局部結(jié)構(gòu),從而也實現(xiàn)了一定程度的平移、尺度和旋轉(zhuǎn)不變性。此外,考慮到不同復(fù)雜程度的局部空間Context,卷積核的層次結(jié)構(gòu)學(xué)習(xí)是從簡單的低級邊緣和紋理到高級語義的學(xué)習(xí)模式。
1.3 本文出發(fā)點
在本文中作者假設(shè)卷積可以有策略地引入到ViT結(jié)構(gòu)之中以提高模型的性能和魯棒性同時保持較高的計算和內(nèi)存效率。為了驗證假設(shè)作者提出了一種新的架構(gòu),稱為Convolutional vision Transformer(CvT),它將卷積合并到Transformer中,在(FLOPs)和參數(shù)方面都是高效的。
CvT設(shè)計在ViT架構(gòu)的2個核心部分引入了卷積:
首先,將Transformer劃分為多個階段,形成一個分層結(jié)構(gòu)的Transformer。每個階段的開始由一個卷積Token嵌入組成,該卷積Token嵌入在一個二維重塑的Token映射上進行卷積操作(即,將Flattened的Token序列重塑回空間網(wǎng)格),然后是Layer Normalization。這個操作使得模型不僅可以捕獲局部信息,而且還可以逐步減少序列長度,同時在不同階段增加Token特征的維數(shù),實現(xiàn)空間下采樣,同時增加特征映射的數(shù)量。
其次,將Transformer模塊中每個Self-Attention Block之前的線性投影替換為卷積投影,該卷積投影在二維重塑的Token映射上采用深度可分卷積。這使得該模型在注意力機制中能夠進一步捕獲局部空間語義信息,減少語義歧義。它還允許管理計算復(fù)雜度,因為卷積的Stride可以用于對鍵和值矩陣進行子采樣,以提高4倍或更多的效率,同時最小化性能的損失。
2 相關(guān)工作最近,基于Transformer的體系結(jié)構(gòu)被認(rèn)為是一個可替代卷積神經(jīng)網(wǎng)絡(luò)(CNNs)的架構(gòu),它可以被用到很多CV的垂直領(lǐng)域,如分類、目標(biāo)檢測、分割、圖像增強、圖像生成、視頻處以及3D點云處理等。
2.1 ViT
ViT是第一個證明當(dāng)數(shù)據(jù)足夠大(如ImageNet-22k, JFT-300M)時,純Transformer架構(gòu)可以在圖像分類方面達到最先進的性能(如ResNets, EfficientNet)。具體來說,ViT將每幅圖像分解成一組固定長度的token序列(即非重疊patches),然后應(yīng)用多個標(biāo)準(zhǔn)的Transformer(Multi-Head Self-Attention module, MHSA)和位置前饋模塊(position-wise feedforward module, FFN)對這些token進行建模。
DeiT進一步探索了ViT的數(shù)據(jù)高效訓(xùn)練和蒸餾。在這項工作中,研究了如何結(jié)合CNN和Transformer,并以一種有效的方式建模局部和全局依賴的圖像分類。
為了更好地模擬視覺Transformer的局部Context,一些并行工作也引入了設(shè)計變更。
條件位置編碼視覺Transformer(CPVT)用條件位置編碼(CPE)取代了ViT中預(yù)定義的位置嵌入,使Transformer能夠處理任意大小的輸入圖像而無需插值;
Transformer In Transformer(TNT)既利用處理貼片嵌入的外部Transformer塊,又利用模擬像素嵌入之間關(guān)系的內(nèi)部Transformer,對貼片級和像素級表示進行建模;
Token To Token(T2T)主要通過將滑動窗口中的多個令牌連接為一個Token來改進ViT中的Token化。然而,該操作與卷積有根本的不同,尤其是在規(guī)范化細節(jié)方面,而且多個標(biāo)記的連接大大增加了計算和內(nèi)存方面的復(fù)雜性;
PVT為Transformer引入了一種多級設(shè)計(不含卷積),類似于CNNs中的多尺度,有利于密集預(yù)測任務(wù)。

與以上的工作相比,本文工作的目標(biāo)是通過引入卷積,在圖像域特定的歸納偏差,以達到最好的Transformer結(jié)構(gòu)。表1顯示了上述具有代表性作品和本文CvT在位置編碼的必要性、Token嵌入類型、映射類型和Backbone中的Transformer結(jié)構(gòu)方面的主要區(qū)別。
2.2 向CNN引入Self-Attention
Self-Attention在cnn視覺任務(wù)中得到了廣泛的應(yīng)用。在這些工作中,Non-Local Network的設(shè)計是為了通過全局Attention來捕捉長期依賴關(guān)系。Local Relation Networks 根據(jù)local windows內(nèi)像素/特征之間的組成關(guān)系(相似度)來進行權(quán)值聚合,而卷積層則在空間相鄰的輸入特征上采用固定的權(quán)值聚合。這種自適應(yīng)權(quán)值聚合將幾何先驗引入到網(wǎng)絡(luò)中,這對識別任務(wù)很重要。
最近,BoTNet提出了一種簡單而強大的Backbone,它只是在一個ResNet的最后3個Bottleneck block中用全局的Self-Attention代替了空間卷積,在圖像識別方面取得了不錯的效果。
相反,本文的工作執(zhí)行了一個相反的研究方向:將卷積引入到Transformer之中。
2.3 向Transformer引入CNN
在NLP和語音識別中,卷積被用來修改Transformer Block,或者用卷積層代替Multi-Head Attentions,亦或是以并行或順序的方式增加額外的卷積層,以捕獲局部關(guān)系。之前的其他工作提出通過殘差連接將注意力映射傳播到后續(xù)層,這首先通過卷積進行轉(zhuǎn)換。
不同于前面的工作,本文推薦在Vision Transformer的2個主要部分引入卷積:
- 首先,使用卷積投影操作取代現(xiàn)有的Position-wise線性投影;
- 其次,類似于CNN,使用分層多級結(jié)構(gòu)和不同分辨率的2D Reshaped Token Maps。
通過以上2個獨特的網(wǎng)絡(luò)設(shè)計相對于以前的工作有了顯著的性能和效率的提升。
3 CvT 核心原理
CvT的整體Pipline如圖2所示。在ViT架構(gòu)中引入了2種基于卷積的操作,即卷積Token嵌入和卷積映射。如圖2(a)所示,本文借鑒了CNN的多階段層次設(shè)計,共采用了3個階段:
首先,輸入圖像經(jīng)過卷積Token嵌入層,卷積層是將重構(gòu)Token的重疊塊卷積到二維空間網(wǎng)格作為輸入(重疊程度可通過步長來控制)。對Token應(yīng)用額外的LN(層歸一化)。這允許每個階段逐步減少Token的數(shù)量(即特征分辨率),同時增加Token的寬度(即特征維度),從而實現(xiàn)空間下采樣和增加R的豐富度。與其他先前的基于變壓器的架構(gòu)不同,我們不將嵌入令牌的額外位置相加。
然后,疊加一些卷積Transformer Block組成每個階段的殘差部分。圖2(b)展示了卷積Transformer Block的架構(gòu),其中使用深度可分離的卷積運算,稱為卷積映射,分別用于查詢、鍵和值的嵌入,而不是ViT中標(biāo)準(zhǔn)的位置線性映射。此外,分類Token只在最后階段添加。
最后,在最后階段輸出的分類標(biāo)記上使用MLP來預(yù)測結(jié)果。
3.1 卷積Token Embedding
CvT中的卷積操作旨在通過一種類似CNNs的多級層次方法從Low-level到High-Semantic模擬局部空間Context。
給定一個2D圖像或者從第階段得到的2D-reshaped Token Map輸出作為第階段的輸入,這里通過學(xué)習(xí)一個函數(shù)將映射到一個新的通道大小為的Token ,的二維卷積核大小為,stride為,padding為p。
新的Token Map 的高度和寬度為:

然后將平鋪成大小為,并通過LN進行歸一化,以便輸入到第i stage的subsequent Transformer blocks中。
卷積Token嵌入層允許通過改變卷積運算的參數(shù)來調(diào)整每個階段的Token特征維數(shù)和數(shù)量。通過這種方式,在每個階段逐步減少Token序列長度,同時增加Token特征維數(shù)。這使得Token能夠在越來越大的空間上表示越來越復(fù)雜的視覺模式,類似于CNN的特征層。
3.2 注意力的卷積映射
卷積投影層的目標(biāo)是實現(xiàn)對局部空間Context的額外建模,并通過允許K和V矩陣的欠采樣來提高效率。
從根本上說,提出的Transformer塊具有卷積映射是對原Transformer塊的推廣。而之前的工作嘗試在Transformer中添加額外的卷積模塊對于語音識別和自然語言處理,它們導(dǎo)致更復(fù)雜的設(shè)計和額外的計算成本。相反,本文建議用具有深度可分離卷積的Multi-Head Self-Attention(MHSA)代替原來的位置線性映射進而形成卷積映射層。
1 復(fù)現(xiàn)細節(jié)

圖3(a)顯示了ViT中使用的原始位置線性映射


圖3(b)顯示了本文提出的s×s卷積投影。如圖3(b)所示,首先將Token重塑為2D Token Map。接下來,使用核大小為s的深度可分離卷積層來實現(xiàn)卷積映射。最后,映射后的Token被平展為1D以供后續(xù)處理。這可以表述為:

其中是第層Q/K/V矩陣的Token輸入,是卷積投影之前的未擾動Token,Conv2d是深度可分離卷積,其實現(xiàn)方式為:Depth-wise Conv2d—>BatchNorm2d—>Point-wise Conv2d,s為卷積核大小。新的卷積映射層Transformer塊是對原有Transformer塊設(shè)計的推廣。原始的基于位置的線性映射層可以使用內(nèi)核大小為1×1的卷積層來實現(xiàn)。
2 效率考慮
本文設(shè)計的卷積投影層有2個效率上的好處:
首先,利用了有效的卷積。直接使用標(biāo)準(zhǔn)的卷積進行卷積映射需要個參數(shù)和的FLOPs,其中C是Token通道維數(shù),T是要處理的Token數(shù)量。相反,將標(biāo)準(zhǔn)的卷積分解為深度可分離的卷積。這樣,與原始的位置線性映射相比每個卷積映射只會引入額外的個參數(shù)和的FLOPs,相對于模型的總參數(shù)和FLOPs,這些都可以忽略。
其次,利用提出的卷積投影來減少MHSA操作的計算成本。卷積投影允許通過使用大于1的步長來減少Token的數(shù)量。圖3(c)顯示了卷積投影,其中的key和value投影是通過步長大于1的卷積進行下采樣的,文章對key和value投影使用步長2,而對query保持不變使用步長1。這樣,key和value的token數(shù)量減少了4倍,以后的MHSA操作計算成本減少了4倍。這帶來了最小的性能損失,因為圖像中的鄰近像素/補丁往往在外觀/語義上有冗余。另外,所提出的卷積投影的局部Context建??梢詮浹a分辨率降低所帶來的信息損失。
3.3 方法的討論
1 刪除位置嵌入
對每個Transformer塊引入卷積映射結(jié)合卷積Token嵌入能夠通過網(wǎng)絡(luò)建模局部空間關(guān)系。這個內(nèi)置屬性允許在不影響性能的情況下刪除網(wǎng)絡(luò)中嵌入的位置,從而簡化了具有可變輸入分辨率的視覺任務(wù)的設(shè)計。
2 與當(dāng)前一些工作的關(guān)系
最近,另外兩個相關(guān)的工作也提出通過將CNN的元素整合到Transformer中來改進ViT。Tokensto-Token ViT實現(xiàn)漸進的Token化,然后使用基于Transformer的Backbone,其中Token的長度是固定的。
相比之下CvT通過在每個階段包含卷積Token嵌入和卷積Transformer塊的多階段過程來實現(xiàn)漸進的Token化。隨著Token的長度在每一階段的減少,Token的寬度(特征維度)可以增加,允許在每個特征空間分辨率上表示的豐富度增加。
此外,T2T將相鄰的Token連接成一個新的Token,導(dǎo)致內(nèi)存和計算的復(fù)雜性增加,而CvT使用卷積Token嵌入直接執(zhí)行Context學(xué)習(xí),而無需連接,同時提供了控制步長和特征維數(shù)的靈活性。為了管理復(fù)雜性,T2T必須考慮一個深度狹窄的架構(gòu)設(shè)計,其隱藏維度和MLP規(guī)模小于后續(xù)主干中的ViT。相反,CvT通過用卷積投影替換位置相關(guān)的線性投影來更改先前的Transformer模塊。
金字塔ViT(PVT)克服了將ViT移植到各種密集預(yù)測任務(wù)中的困難。在ViT中,輸出的特征圖只有一個尺度分辨率較低。此外,即使對于普通的輸入圖像大小,計算和存儲成本也相對較高。為了解決這個問題,PVT和CvT從CNN到Transformer結(jié)構(gòu)都采用了金字塔結(jié)構(gòu)。PVT只對投影中的特征映射或key/value矩陣進行空間子樣本,而CvT采用了帶大步的卷積來實現(xiàn)這一目標(biāo)。實驗表明局部鄰近信息的融合對性能有重要的影響。
4 實驗結(jié)果4.1 模型架構(gòu)

輸入的圖像大小默認(rèn)為224×224。Conv. Embed.:卷積Token嵌入。Conv. Proj.:卷積映射。和為第i個MHSA模塊中Head的個數(shù)和嵌入特征維數(shù)。是第i個MLP層的特征維度的擴展比。

與基于CNN的模型相比,CvT進一步縮小了基于Transformer模型的性能差距。最小的模型cpt-13具有20M參數(shù)和4.5G FLOPs,在ImageNet top-1精度上比大型的ResNet-152模型高出3.2%,而ResNet-151的參數(shù)是cpt-13的3倍。
此外,當(dāng)使用更多數(shù)據(jù)時,在ImageNet-22k上預(yù)訓(xùn)練的寬模型CvT-W24*達到在沒有額外數(shù)據(jù)訓(xùn)練的情況下在ImageNet上獲得了87.7%的Top-1精度,以相似的模型參數(shù)和FLOPs數(shù)量比最佳模型ViT-L/16高出2.5%。
5 參考[1].CvT: Introducing Convolutions to Vision Transformers
[2].https://github.com/leoxiaobin/CvT
CVPR2021全新Backbone | ReXNet在CV全任務(wù)以超低FLOPs達到SOTA水平(文末下載論文和源碼)
你的YOLO V4該換了 | YOLO V4原班人馬改進Scaled YOLO V4,已開源(附論文+源碼)
CVPR2021-即插即用 | Coordinate Attention詳解與CA Block實現(xiàn)(文末獲取論文原文)
Backbone | 谷歌提出LambdaNetworks:無需注意力讓網(wǎng)絡(luò)更快更強(文末獲取論文源碼)
最強檢測 | YOLO V4?都是弟弟! CenterNet2以56.4mAP超越當(dāng)前所有檢測模型(附源碼與論文)
全新FPN | 通道增強特征金字塔網(wǎng)絡(luò)(CE-FPN)提升大中小目標(biāo)檢測的魯棒性(文末附論文)
本文論文原文獲取方式,掃描下方二維碼
回復(fù)【CvT】即可獲取論文
長按掃描下方二維碼加入交流群
聲明:轉(zhuǎn)載請說明出處
掃描下方二維碼關(guān)注【AI人工智能初學(xué)者】公眾號,獲取更多實踐項目源碼和論文解讀,非常期待你我的相遇,讓我們以夢為馬,砥礪前行?。?!
點“在看”給我一朵小黃花唄![]()
