點擊下方卡片,關注「CVer」公眾號
AI/CV重磅乾貨,第一時間送達
在本文中研究了多尺度Vision Transformer(MViT)作為圖像和視頻分類以及目標檢測的統一架構。作者提出了一個MViT的改進版本,它結合了分解的相對位置嵌入和池化殘差連接。
作者以五種大小實例化了這種架構,並在ImageNet分類,COCO檢測和動力學視頻識別方面進行評估,它們優於之前的工作。作者還進一步比較了MViT的pooling attention和window attention,前者在準確性/計算方面優於後者。
MViT在3個領域具有最先進的性能:ImageNet分類準確率為88.8%,COCO目標檢測準確率為56.1AP%,Kinetics-400視頻分類準確率為86.1%。
1簡介為不同的視覺識別任務設計架構一直以來都很困難,而採用最廣泛的架構是那些結合了簡單和高效的架構,例如VGGNet和ResNet。最近,Vision Transformers(ViT)已經展現出了有前途的性能,並可以與卷積神經網絡競爭,最近也有很多研究提出了很多的改進工作,將它們應用到不同的視覺任務。
雖然ViT在圖像分類中很受歡迎,但其用於高分辨率目標檢測和時空視頻理解任務仍然具有挑戰性。視覺信號的密度對計算和內存需求提出了嚴峻的挑戰,因為在基於Vision Transformer的模型的Self-Attention Block中,這些信號的複雜性呈二次型。
採用了兩種不同的策略來解決這個問題:
而Pooling Attention為多尺度ViT帶來了很多的啟發,可以以一種簡單的方式擴展ViT的架構:它不是在整個網絡中具有固定的分辨率,而是具有從高分辨率到低分辨率的多個階段的特性層次結構。MViT是為視頻任務設計的,它具有最先進的性能。
在本文中,作者做了兩個簡單的改進以進一步提高其性能,並研究了MViT作為一個單一的模型用於跨越3個任務的視覺識別:圖像分類、目標檢測和視頻分類,以了解它是否可以作為空間和時空識別任務的一般視覺Backbone(見圖1)。

本文改進MViT體系結構主要包含以下內容:
創建了強大的Baseline,沿着2個軸提高pooling attention:使用分解的位置距離將位置信息注入Transformer塊;通過池化殘差連接來補償池化步長在注意力計算中的影響。上述簡單而有效的改進帶來了更好的結果;
將改進的MViT結構應用到一個帶有特徵金字塔網絡(FPN)的Mask R-CNN,並將其應用於目標檢測和實例分割;
作者研究MViT是否可以通過pooling attention來處理高分辨率的視覺輸入,以克服計算和內存成本。
實驗表明,pooling attention比 local window attention(如Swin)更有效。
作者進一步開發了一個簡單而有效的Hybrid window attention方案,可以補充pooling attention以獲得更好的準確性和計算折衷。
實驗表明,Improved MViT在ImageNet-21K上進行預處理後,準確率達到了88.8%(不進行預處理的準確率為86.3%);僅使用Cascade Mask R-CNN在COCO目標檢測AP可以達到56.1%。對於視頻分類任務,MViT達到了前所未有的86.1%的準確率;對於Kinetics-400和Kinetics-600分別達到了86.1%和87.9%,並在Kinetics-700和Something-Something-v2上也分別達到了79.4%和73.7%的精度。
2回顧一下多尺度ViTMViT的關鍵思想是為low-level和high-level可視化建模構建不同的階段,而不是ViT中的單尺度塊。如圖2所示MViT從輸入到輸出的各個階段緩慢地擴展通道D,同時降低分辨率L(即序列長度)。

為了在Transformer Block內進行降採樣,MViT引入了Pooling Attention。

具體來說,對於一個輸入序列,對它應用線性投影,,然後是Pool運算(P),分別用於query、key和value張量:

其中,的長度可以通過來降低,K和V的長度可以通過和來降低。
隨後,pooled self-attention可以表達為:

計算長度靈活的輸出序列。注意,key和value的下採樣因子和可能與應用於query序列的下採樣因子不同。
Pooling attention可以通過Pooling query Q來降低MViT不同階段之間的分辨率,並通過Pooling key K和value V來顯著降低計算和內存複雜度。
Pooling Attention的Pytorch實現如下:
#pool通常是MaxPool3d或AvgPool3ddefattention_pool(tensor,pool,thw_shape,has_cls_embed=True,norm=None):ifpoolisNone:returntensor,thw_shapetensor_dim=tensor.ndimiftensor_dim==4:passeliftensor_dim==3:tensor=tensor.unsqueeze(1)else:raiseNotImplementedError(f"Unsupportedinputdimension{tensor.shape}")ifhas_cls_embed:cls_tok,tensor=tensor[:,:,:1,:],tensor[:,:,1:,:]B,N,L,C=tensor.shapeT,H,W=thw_shapetensor=(tensor.reshape(B*N,T,H,W,C).permute(0,4,1,2,3).contiguous())#執行pooling操作tensor=pool(tensor)thw_shape=[tensor.shape[2],tensor.shape[3],tensor.shape[4]]L_pooled=tensor.shape[2]*tensor.shape[3]*tensor.shape[4]tensor=tensor.reshape(B,N,C,L_pooled).transpose(2,3)ifhas_cls_embed:tensor=torch.cat((cls_tok,tensor),dim=2)ifnormisnotNone:tensor=norm(tensor)#Asserttensor_dimin[3,4]iftensor_dim==4:passelse:#tensor_dim==3:tensor=tensor.squeeze(1)returntensor,thw_shape3Improved MViT3.1 改進Pooling Attention
雖然MViT在建模Token之間的交互方面已經顯示出了潛力,但它們關注的是內容,而不是結構。時空結構建模僅依靠絕對位置嵌入來提供位置信息。這忽略了視覺的平移不變性的基本原則。也就是說,即使相對位置不變,MViT建模兩個patch之間交互的方式也會隨着它們在圖像中的絕對位置而改變。為了解決這個問題,作者將相對位置嵌入(相對位置嵌入只依賴於Token之間的相對位置距離)納入到Pooled Self-Attention 計算中。
這裡將2個輸入元素和之間的相對位置編碼為位置嵌入,其中和表示元素和的空間(或時空)位置,然後將兩兩編碼嵌入到Self-Attention模塊中:


然而,在O(TWH)中possible embeddings的數量規模,計算起來比較複雜。為了降低複雜度,作者將元素和之間的距離計算沿時空軸分解為:

其中、、為沿高度、寬度和時間軸的位置嵌入,、和分別表示Token 的垂直、水平和時間位置。注意,這裡的是可選的,僅在視頻情況下需要支持時間維度。相比之下,分解嵌入將學習嵌入的數量減少到O(T+W+H),這對早期的高分辨率特徵圖有很大的影響。
2、池化殘差連接pooled attention對於減少注意力塊中的計算複雜度和內存需求是非常有效的。MViT在K和V張量上的步長比Q張量的步長大,而Q張量的步長只有在輸出序列的分辨率跨階段變化時才下採樣。這促使將殘差池化連接添加到Q(pooled後)張量增加信息流動,促進MViT中pooled attention Block的訓練和收斂。
在注意力塊內部引入一個新的池化殘差連接,如圖4所示。具體地說,將pooled query張量添加到輸出序列z中,因此將式(2)重新表述為:

注意,輸出序列Z與pooled query張量的長度相同。
消融實驗表明,對於池化殘差連接,query的pool運算符和殘差路徑都是必需的。由於上式中添加池化的query序列成本較低,因此在key和value pooling中仍然具有大跨步的低複雜度注意力計算。
3.2 MViT用於目標檢測1、改進版MViT融合FPNMViT的層次結構分4個階段生成多尺度特徵圖可以很自然地集成到特徵金字塔網絡中(FPN)為目標檢測任務,如圖5所示。在FPN中,帶有橫向連接的自頂向下金字塔為MViT在所有尺度上構建了語義的特徵映射。通過使用FPN與MViT Backbone將其應用於不同的檢測架構(例如Mask R-CNN)。

Transformers中的self-attention具有與token數量的二次複雜度。這個問題對於目標檢測來說更加嚴重,因為它通常需要高分辨率的輸入和特徵圖。在本文中研究了兩種顯著降低這種計算和內存複雜度的方法:
Pooling Attention和Window Attention都通過減少計算Self-Attention時query、key和value的大小來控制Self-Attention的複雜性。
但它們的本質是不同的:Pooling Attention通過局部聚合的向下採樣匯集注意力池化特徵,但保持了全局的Self-Attention計算,而Window Attention雖然保持了分辨率,但通過將輸入劃分為不重疊的window,然後只在每個window中計算局部的Self-Attention。
這兩種方法的內在差異促使研究它們是否能夠在目標檢測任務中結合。
默認Window Attention只在Window內執行局部Self-Attention,因此缺乏跨window的連接。與Swin使用移動window來緩解這個問題不同,作者提出了一個簡單的Hybrid window attention(Hwin)來增加跨window的連接。
Hwin在一個window內計算所有的局部注意力,除了最後3個階段的最後塊,這些階段都饋入FPN。通過這種方式,輸入特徵映射到FPN包含全局信息。
消融實驗顯示,這個簡單的Hwin在圖像分類和目標檢測任務上一貫優於Swin。進一步,將證明合併pooling attention和Hwin在目標檢測方面實現了最好的性能。

與基於圖像的MViT相比,基於視頻的MViT只有3個不同之處:
由於1和2中的投影層和池化操作符默認由卷積層實例化,對CNN的空洞率初始化為[8,25]。具體地說,作者用來自預訓練模型中的2D conv層的權重初始化中心幀的conv kernel,並將其他權重初始化為0。
對於3利用在Eq.4中分解的相對位置嵌入,並簡單地從預訓練的權重初始化空間嵌入和時間嵌入為0。
4.4 MViT架構變體本文構建了幾個具有不同數量參數和FLOPs的MViT變體,如表1所示,以便與其他vision transformer進行公平的比較。具體來說,通過改變基本通道尺寸、每個階段的塊數以及塊中的head數,為MViT設計了5種變體(Tiny、Small、Base、Large和Huge)。

遵循MViT中的pooling attention設計,本文在所有pooling attention塊中默認採用Key和Value pooling,pooling attention blocks步長在第一階段設置為4,並在各個階段自適應地衰減stride。
4實驗4.1 消融實驗1、不同的注意力機制

通過上表關於ImageNet分類和COCO目標檢測的實驗可以看出,本文提出的HSwin注意力與Pooling可以得到最好性能的結果。
2、位置嵌入
上表比較了不同位置嵌入。可以觀察到:

上表研究了池化殘差連接的重要性。可以看到:
(2)簡單地添加殘差路徑可以改善這兩種情況的結果IN-1K(+0.3%)和COCO(+0.8 APbox)的成本可以忽略不計。
(3)使用池化殘差連接,並在所有其他層中添加Q pooled(stride=1),性能得到顯著的提升,特別是在COCO(+1.4 APbox)上。這表明在MViT中,Q pooled塊和殘差路徑都是必要的。
(4)僅僅添加(沒有殘差)更多的Q pooled層stride=1沒有幫助。


如表所示,FPN顯著提高了兩種Backbone的性能,而MViT-S始終優於ViT-B。MViT-S的FPN增益(+2.9)比ViT-B(+1.5 APbox)大得多,這表明了分層多尺度設計對於密集目標檢測任務的有效性。
4.2 ImageNet-1K




ICCV和CVPR 2021論文和代碼下載
後台回覆:CVPR2021,即可下載CVPR 2021論文和代碼開源的論文合集
後台回覆:ICCV2021,即可下載ICCV2021論文和代碼開源的論文合集
後台回覆:Transformer綜述,即可下載最新的3篇Transformer綜述PDF
CVer-Transformer交流群成立
掃碼添加CVer助手,可申請加入CVer-Transformer微信交流群,方向已涵蓋:目標檢測、圖像分割、目標跟蹤、人臉檢測&識別、OCR、姿態估計、超分辨率、SLAM、醫療影像、Re-ID、GAN、NAS、深度估計、自動駕駛、強化學習、車道線檢測、模型剪枝&壓縮、去噪、去霧、去雨、風格遷移、遙感圖像、行為識別、視頻理解、圖像融合、圖像檢索、論文投稿&交流、PyTorch和TensorFlow等群。
一定要備註:研究方向+地點+學校/公司+暱稱(如Transformer+上海+上交+卡卡),根據格式備註,可更快被通過且邀請進群
▲長按加小助手微信,進交流群
▲點擊上方卡片,關注CVer公眾號
