天天看點

一文細數73個Vision transformer家族成員

作者丨Smarter

來源丨Smarter

https://github.com/dk-liang/Awesome-Visual-Transformer

https://github.com/IDEACVR/awesome-detection-transformer

本文主要包含跟Transformer相關的CV文章(主要包含圖像分類/目标檢測/語義分割等任務),本文用簡短的話來描述一下涉及到文章的核心idea。可以看作是vision transformer的idea集,查漏補缺使用。需要精讀的文章前面加了*号。

Image Classification

Uniform-scale

*ViT

paper:https://arxiv.org/abs/2010.11929

code:https://github.com/google-research/vision_transformer

一文細數73個Vision transformer家族成員

最簡潔的Vision Transformer模型,先将圖檔分成16x16的patch塊,送入transformer encoder,第一個cls token的輸出送入mlp head得到預測結果。

*DeiT

paper:https://arxiv.org/abs/2012.12877

code:https://github.com/facebookresearch/deit)

一文細數73個Vision transformer家族成員

在ViT的基礎上增加了一個distillation token,巧妙的利用distillation token提升模型精度。

T2T-ViT

paper:https://arxiv.org/abs/2101.11986

code:https://github.com/yitu-opensource/T2T-ViT

一文細數73個Vision transformer家族成員

将ViT的patch stem改成重疊的滑窗形式,增強patch之間的資訊交流。

Conformer

paper:https://arxiv.org/abs/2105.03889

code:https://github.com/pengzhiliang/Conformer

一文細數73個Vision transformer家族成員

設計了一個CNN和Transformer雙分支結構,利用FCU子產品進行兩個分支的資訊交流,推理的時候使用兩個分支的輸出取平均進行預測。

TNT

paper:https://arxiv.org/abs/2103.00112

code:https://github.com/huawei-noah/noah-research/tree/master/TNT

一文細數73個Vision transformer家族成員

在ViT的基礎上,對每個patch進一步切分,用嵌套的方式提升每個patch對于局部區域的特征表達能力,然後将局部提升後的特征和patch特征相加送入下一個transformer block中。

XCiT

paper:https://arxiv.org/pdf/2106.09681.pdf

code:https://github.com/facebookresearch/xcit

一文細數73個Vision transformer家族成員

XCiT通過置換q和k的計算,從tokens做self-attention轉變成channels緯度做self-attention(也就是通道的協方差計算),複雜度從平方降到了線性。

DeepViT

paper:https://arxiv.org/abs/2103.11886

一文細數73個Vision transformer家族成員
一文細數73個Vision transformer家族成員

DeepViT發現随着深度的增加,ViT的self-attention會出現坍塌現象,DeepViT提出用Re-Attention來替代Self-Attention可以避免坍塌,可以訓練更深的ViT,Re-Attention在MHSA之後增加了一個可學習的Matrix Transformation。

*Token Labeling ViT

paper:https://arxiv.org/abs/2104.10858

code:https://github.com/zihangJiang/TokenLabeling

一文細數73個Vision transformer家族成員

為了增加ViT對于局部區域的定位和特征提取能力,token labeling在每個patch的輸出都增加一個局部監督,token label通過一個預訓練過的特征提取器獲得(本文可以看成是AutoEncoder+CLS的預訓練方法)。由于需要一個額外的特征提取器,是以需要更多的計算資源(可以用MaskFeat的方法改進)。

SoT

paper:https://arxiv.org/abs/2104.10935

code:https://github.com/jiangtaoxie/So-ViT

一文細數73個Vision transformer家族成員

對patch輸出的word token進行協方差池化,然後和cls token的輸出進行融合,提高分類對局部區域的感覺能力。

DVT

paper:https://arxiv.org/abs/2105.15075

一文細數73個Vision transformer家族成員

DVT提出每個圖檔應該有自己獨有的token數量,于是設計了一個級聯tokens數量逐漸增加的多個transformer,推理的時候可以從不同級的transformer判斷輸出。

DynamicViT

paper:https://arxiv.org/abs/2106.02034

code:https://dynamicvit.ivg-research.xyz/

一文細數73個Vision transformer家族成員

通過一個預測子產品來決定token的重要程度,剪枝掉少量不重要的token,将剩餘的token送入下一個block中。

PSViT

paper:https://arxiv.org/abs/2108.03428

一文細數73個Vision transformer家族成員

為了減少ViT計算上的備援,PSViT提出token pooling和attention sharing兩個操作,其中token pooling用來減少token的數量,attention sharing作用在相關性較強的相鄰層上。

*TokenLearner

paper:https://arxiv.org/abs/2106.11297

code:https://github.com/google-research/scenic/tree/main/scenic/projects/token_learner

一文細數73個Vision transformer家族成員

利用spatial attention來提取出最重要的token資訊,減少token數量。

Evo-ViT

paper:https://arxiv.org/abs/2108.01390

一文細數73個Vision transformer家族成員

增加一個representative token,通過global class attention evolution來判斷patch token的重要程度,重要程度高的送入block中緩慢更新,重要程度低的和representative token(由placeholder token得到)殘差更新。其中vanilla transformer block的MSA輸出和global cls attention相加得到重要性權重。

AugViT

paper:https://arxiv.org/abs/2106.15941

code:https://github.com/huawei-noah/CV-Backbones/tree/master/augvit_pytorch

一文細數73個Vision transformer家族成員

為了避免ViT出現模型坍塌現象,AugViT設計了一個augmented shortcuts結構。具體地,在MSA結構上并行增加兩個分支,一個分支做shortcut操作,另一分支對每個patch做augmentation來增加特征表達的多樣性,最後将三個分支的輸出相加到一起。

CrossViT

paper:https://arxiv.org/abs/2103.14899

code:https://github.com/IBM/CrossViT

一文細數73個Vision transformer家族成員

将兩種不同數量的patch序列分别送入encoder中,然後通過cross-attention對兩個分支的cls token和patch token同時進行融合,最後将兩個分支的cls token位置的輸出結果進行融合。

AutoFormer

paper:https://arxiv.org/pdf/2107.00651.pdf

code:https://github.com/microsoft/AutoML

一文細數73個Vision transformer家族成員

AutoFormer動态的搜尋transformer中每一層的embedding緯度、head的數量、MLP比例和QKV緯度。

*CPVT

paper:https://arxiv.org/abs/2102.10882

code:https://github.com/Meituan-AutoML/CPVT

一文細數73個Vision transformer家族成員
一文細數73個Vision transformer家族成員

CPVT設計了一個PEG結構來替代PE(positional encoding),PEG通過feature token生成得到。

V-MoE

paper:https://arxiv.org/pdf/2106.05974v1.pdf

一文細數73個Vision transformer家族成員

V-MoE用Sparse MoE來替換ViT中的MLP結構。Sparse MoE中的每個MLP分别儲存在獨立的device上,并且處理相同固定數量的tokens。

DPT

paper:https://arxiv.org/abs/2107.14467

code:https://github.com/CASIA-IVA-Lab/DPT

一文細數73個Vision transformer家族成員

DPT設計另一個可形變的patch選取方式。

*EViT

paper:https://arxiv.org/pdf/2202.07800.pdf

一文細數73個Vision transformer家族成員

EViT通過計算每個patch token和cls token的相關性來決定重要程度,重要程度高的直接送入FFN,重要程度低的融合成一個token。

Multi-scale

*SwinTv1

paper:https://arxiv.org/abs/2103.14030

code:https://github.com/microsoft/Swin-Transformer

*SwinTv2

paper:https://arxiv.org/abs/2111.09883

一文細數73個Vision transformer家族成員
一文細數73個Vision transformer家族成員

為了更好的應用于det、seg等下遊任務,需要對ViT進行多尺度設計。SwinT通過patch merging減少token的數量,另外設計了W-MSA結構,隻對windows内的patch進行self-attention計算來降低計算量,為了增加不同windows之間的資訊傳遞,設計了SW-MSA結構。

一文細數73個Vision transformer家族成員

為了更好的擴大SwinT的模型容量和window的分辨率,SwinTv2重新設計了block結構。

  1. 用post-norm替代pre-norm
  2. 用cosine attention替代dot product attention
  3. 用log-spaced continuous relative position替代parameterized relative position

1和2使得SwinT更容易擴大模型容量,3使得SwinT更容易跨window分辨率遷移。

*PVTv1

paper:https://arxiv.org/abs/2102.12122

code:https://github.com/whai362/PVT

*PVTv2

paper:https://arxiv.org/pdf/2106.13797.pdf

一文細數73個Vision transformer家族成員
一文細數73個Vision transformer家族成員

PVT設計了一個多stage的多尺度架構,為了做stage之間的下采樣,将MHSA改造成SRA,SRA中的K和V都下采樣R^2倍。

一文細數73個Vision transformer家族成員
一文細數73個Vision transformer家族成員

PVTv2在PVTv1的基礎上做了三點改進:

  1. 将SRA的下采樣conv替換成average pooling
  2. 将不重疊的patch embedding替換成重疊的patch embedding
  3. 移除position encoding,并且在FFN中增加一個dwconv

1可以将PVT計算量降到線性,2可以獲得更多局部連續的特征,3可以處理任意尺寸的圖像。

*Twins

paper:https://arxiv.org/abs/2104.13840

code:https://github.com/Meituan-AutoML/Twins

一文細數73個Vision transformer家族成員
一文細數73個Vision transformer家族成員

Twins沿用PVT的整體架構,并且用CPVT中的PEG來替代PE,同時将transformer block堆疊設計成global attention和local attention交替使用的形式,并且為了減少計算量,global attention将重要資訊總結成mxn個表示,同時每個表示和其他sub-windows進行資訊交流。

CoaT

paper:https://arxiv.org/abs/2104.06399

code:https://github.com/mlpc-ucsd/CoaT

一文細數73個Vision transformer家族成員
一文細數73個Vision transformer家族成員
一文細數73個Vision transformer家族成員

CoaT設計了一個co-scale機制,通過一系列串行和并行的block來預測結果,同時設計了一個Conv-Attention結構來替代MHSA,用一個dwconv來得到position encoding,另一個dwconv來得到relative position encoding。

CvT

paper:https://arxiv.org/abs/2103.15808

code:https://github.com/leoxiaobin/CvT

一文細數73個Vision transformer家族成員

CvT去掉position encoding,用conv同時替換掉token embedding和MHSA中的QKV projection,通過conv來引入位置資訊。

Shuffle Transformer

paper:https://arxiv.org/abs/2106.03650

code:https://github.com/mulinmeng/Shuffle-Transformer

一文細數73個Vision transformer家族成員

通過shuffle和unshuffle操作,來增加token之間的資訊交流。

Focal Transformer

paper:https://arxiv.org/abs/2107.00641

code:https://github.com/microsoft/Focal-Transformer

一文細數73個Vision transformer家族成員
一文細數73個Vision transformer家族成員

改變SwinT的劃分windows的方式,每個query patch對應三種粒度的windows尺寸,如圖所示。将W-MSA替換成Focal Self-Attention整體架構和SwinT保持一緻。

CSWinT

paper:https://arxiv.org/abs/2107.00652

code:https://github.com/microsoft/CSWin-Transformer

一文細數73個Vision transformer家族成員
一文細數73個Vision transformer家族成員

改變SwinT的劃分windows的方式,每個query patch通過兩個并行分支做self-attention,并且kv從dynaic stripe window中取。

*MViT

paper:https://arxiv.org/abs/2104.11227

code:https://github.com/facebookresearch/SlowFast

一文細數73個Vision transformer家族成員
一文細數73個Vision transformer家族成員

MViT通過對XQKV池化進行下采樣建構金字塔架構。

Hybrid ViTs with Convolutions

LeViT

paper:https://arxiv.org/abs/2104.01136

code:https://github.com/facebookresearch/LeViT

一文細數73個Vision transformer家族成員

LeViT的patch embedding設計成4個conv3x3堆疊,同時下采樣的self-attention對Q進行下采樣。

localViT

paper:https://arxiv.org/abs/2104.05707

code:https://github.com/ofsoundof/LocalViT

一文細數73個Vision transformer家族成員

FC和1x1conv等效,在FFN中增加一個3x3的DWConv就變成了圖c,輸入輸出增加Img2Seq和Seq2Img的操作。

ResT

paper:https://arxiv.org/abs/2105.13677

code:https://github.com/wofmanaf/ResT

一文細數73個Vision transformer家族成員

ResT在MHSA中增加DWConv降低KV的緯度,另一個conv用來增加不同head的資訊交流。

NesT

paper:https://arxiv.org/abs/2105.12723

一文細數73個Vision transformer家族成員

NesT通過最大池化對patch進行聚合。

CoAtNet

paper:https://arxiv.org/pdf/2106.04803.pdf

通過交替堆疊depthwise conv和self-attention來設計架構。

BoTNet

paper:https://arxiv.org/abs/2101.11605

一文細數73個Vision transformer家族成員

模仿ResNet的bottleneck,将Transformer的block設計成bottleneck的形式,一個bottleneck由1x1conv、MHSA、1x1conv堆疊而成。

ConViT

paper:https://arxiv.org/abs/2103.10697

一文細數73個Vision transformer家族成員

ConViT設計了一個GPSA,隻對patch token進行操作,并且引入了位置資訊。10個GPSA堆疊之後接2個SA。

MobileViT

paper:https://arxiv.org/abs/2110.02178

一文細數73個Vision transformer家族成員

MobileViT通過堆疊MobileNetv2 block和MobileViT block構成。

CeiT

paper:https://arxiv.org/abs/2103.11816

一文細數73個Vision transformer家族成員

CeiT設計了一個局部增強的LeFF結構,隻對patch token部分做linear projection和depth-wise conv。

CMT

paper:https://arxiv.org/abs/2107.06263

一文細數73個Vision transformer家族成員

CMT設計了一個CMT block,如圖所示。

Object Detection

CNN backbone

*DETR

paper:https://arxiv.org/abs/2005.12872

code:https://github.com/facebookresearch/detr

一文細數73個Vision transformer家族成員

DETR是第一個使用Transformer做目标檢測的算法。圖檔先通過CNN提取特征,然後和positional encoding相加送入transformer,最後通過FFN預測結果。其中decoder部分需要設定object queries,并行輸出預測結果,訓練的時候pred和target通過雙邊比對算法進行比對。

*UP-DETR

paper:https://arxiv.org/abs/2011.09094

一文細數73個Vision transformer家族成員

為了對DETR進行預訓練,UP-DETR處理了兩個關鍵問題:

  1. 為了進行分類和定位對多任務訓練,UP-DETR固定住預訓練過的backbone和對patch特征進行重建來保留transformer的判别力。
  2. 為了對多個patch進行定位,不同queries設定不同的區域和大小。UP-DETR設計了兩種預訓練方式,一種是single-query,另一種是multi-query。對于multi-query設計了object query shuffle和attention mask操作來解決query patches和object queries對齊問題。

DETReg

paper:https://arxiv.org/abs/2106.04550

code:https://amirbar.net/detreg

一文細數73個Vision transformer家族成員

上圖是DETReg的整體架構。給定一張圖檔x,使用DETR得到embeddings v,總共設計了三個分支,一個分支預測box,一個分支預測embdding,還有一個分支預測目标分數cat。僞gt區域提議label通過selective search得到,僞gt目标embedding通過自監督算法SwAV得到,proposal的目标分數都設定為1。通過雙邊比對将預測proposal和僞label進行比對,不比對的預測proposal分數用0填充。

SMCA

paper:https://arxiv.org/abs/2101.07448

code:https://github.com/abc403/SMCA-replication

一文細數73個Vision transformer家族成員

SMCA設計了一個Spatially Modulated Co-Attention元件來加快DETR的收斂速度,具體地,decoder的每個query先做一個spatial prior,然後和key進行co-attention。另外SMCA還設計來一個Multi-Scale Self-Attention來進一步提升精度。

*Deformable DETR

paper:https://arxiv.org/abs/2010.04159

code:https://github.com/fundamentalvision/Deformable-DETR

一文細數73個Vision transformer家族成員
一文細數73個Vision transformer家族成員

Deformable DETR結合了deformable conv的稀疏空間采樣和transformer的相關性模組化能力的優點。提出的deformable attention module用一些采樣位置作為重要的key元素,并且Deformable DETR将該謀愛拓展到multi-scale上。

Anchor DETR

paper:https://arxiv.org/abs/2109.07107

code:https://github.com/megvii-model/AnchorDETR

一文細數73個Vision transformer家族成員
一文細數73個Vision transformer家族成員

Anchor DETR在decoder部分設計了基于anchor points的object queries,并且row-column decoupled attention來替代MHSA,降低計算複雜度。

*Conditional DETR

paper:https://arxiv.org/abs/2108.06152

code:https://github.com/Atten4Vis/ConditionalDETR

一文細數73個Vision transformer家族成員

Conditional DETR将content queries和spatial queries獨立開,使得各自關注于content attention weights和spatial attention weights,加快訓練的收斂速度。

*TSP-FCOS

paper:https://arxiv.org/abs/2011.10881

一文細數73個Vision transformer家族成員

本文實驗觀察發現,影響DETR收斂速度的主要原因是cross-attention和雙邊比對的不穩定。于是本文提出隻使用transformer的encoder,其中TSP-FCOS設計了一種FoI Select來選擇特征。并且還設計來一種新的雙邊比對算法來加快收斂。

PnP-DETR

paper:https://arxiv.org/abs/2109.07036

code:https://github.com/twangnh/pnp-detr

一文細數73個Vision transformer家族成員

PnP-DETR設計了兩種采樣方式來降低計算複雜度,poll sampler和pool sampler,poll sampler對feature map對每個位置預測分數,然後挑選出fine的特征,通過pool sampler對coarse特征進行聚合。

D^2ETR

paper:https://arxiv.org/pdf/2203.00860.pdf

一文細數73個Vision transformer家族成員

D^2ETR去掉了DETR的encoder部分,同時在backbone部分對不同stage的特征進行融合操作。

Sparse DETR

paper:https://arxiv.org/abs/2111.14330

code:https://github.com/kakaobrain/sparse-detr

一文細數73個Vision transformer家族成員

Sparse DETR通過Deformable cross-attention得到binarized decoder cross-attention map(DAM),用來作為scoring network的監督信号,預測出token的重要程度,并且隻保留top-p%的token進行訓練。

*Efficient DETR

paper:https://arxiv.org/pdf/2104.01318.pdf

一文細數73個Vision transformer家族成員

Efficient DETR通過預測結果來初始化object queries,具體地,選取top-K個位置的feature當作object queries,位置當作reference points,k組embedding送入decoder進行稀疏預測,最終Efficient DETR隻需要一個decoder就能超過DETR 6個decoder的精度。

Dynamic DETR

paper:https://openaccess.thecvf.com/content/ICCV2021/papers/Dai_Dynamic_DETR_End-to-End_Object_Detection_With_Dynamic_Attention_ICCV_2021_paper.pdf

一文細數73個Vision transformer家族成員

Dynamic DETR的dynamic encoder部分引入SE然後用deformable self-attention來提取多尺度特征,dynamic decoder部分引入可學習的box encoding,然後對encoder的特征做roi池化,最後和decoder的中間層embedding做相乘。

*DAB-DETR

paper:https://arxiv.org/abs/2201.12329 code](https://github.com/SlongLiu/DAB-DETR

一文細數73個Vision transformer家族成員

DAB-DETR直接動态更新anchor boxes提供參照點和參照anchor尺寸來改善cross-attention的計算。

*DN-DETR

paper:https://arxiv.org/abs/2203.01305

code:https://github.com/FengLi-ust/DN-DETR

一文細數73個Vision transformer家族成員

DN-DETR在DAB-DETR的基礎上,增加來一個denoising輔助任務,進而避免訓練前期雙邊比對的不穩定,加快收斂速度。

*DINO

paper:https://arxiv.org/pdf/2203.03605.pdf

一文細數73個Vision transformer家族成員

DINO在DN-DETR的基礎上引入了三點改進:

  1. 增加了一個新的輔助任務contrastive denoising training,在相同的gt box添加兩種不同的noise,noise小的當作正樣本,noise大的當作負樣本。
  2. 提出mixed query selection方法,從encoder的輸出中選擇初始anchor boxes作為positional queries。
  3. 提出look forward twice方法,利用refined box資訊來幫助優化前面層的參數。

Pure Transformer

Pix2Seq

paper:https://arxiv.org/abs/2109.10852

一文細數73個Vision transformer家族成員

Pix2Seq直接把目标檢測任務當成是序列任務,将cls和bbox建構成序列目标,圖檔通過Transformer直接預測序列結果。

YOLOS

paper:https://arxiv.org/abs/2106.00666

code:https://github.com/IDEACVR/DINO

一文細數73個Vision transformer家族成員

YOLOS隻使用transformer encoder做目标檢測,模仿vit在encoder部分設定det token,在輸出部分接MLP預測出cls和bbox。

FP-DETR

paper:https://openreview.net/pdf%3Fid%3DyjMQuLLcGWK

一文細數73個Vision transformer家族成員

FP-DETR隻使用transformer encoder部分,先使用cls token來做pre-training,然後替換成visual prompts來做fine-tuning。其中visual prompts由query content embedding和query positional embedding相加得到。

Instance segmentation

SOTR

paper:https://arxiv.org/abs/2108.06747

code:https://github.com/easton-cau/SOTR

一文細數73個Vision transformer家族成員

SOTR在FPN backbone的基礎上最小修改建構的。将多尺度的feature map加上positional embedding送入transformer模型中,通過cls head和kernel head預測出instance cls和dynamic conv,另一個分支對多尺度特征進行上采樣融合得到,最後和dynamic conv想乘得到不同instance cls的區域。

panoptic segmentation

Max-DeepLab

paper:https://arxiv.org/pdf/2012.00759.pdf

code:https://github.com/google-research/deeplab2

一文細數73個Vision transformer家族成員

Max-DeepLab設計了兩個分支pixel path和memory path,兩個分支在dual-path tansformer中進行互動,最終pixel path預測出mask,memory path預測出cls。

MaskFormer

paper:http://arxiv.org/abs/2107.06278

code:https://github.com/facebookresearch/MaskFormer

Mask2Former

paper:https://arxiv.org/abs/2112.01527

code:https://github.com/facebookresearch/Mask2Former

一文細數73個Vision transformer家族成員

MaskFormer提出将全景分割看成是mask分類任務。通過transformer decoder和MLP得到N個mask embedding和N個cls pred。另一個分支通過pixel decoder得到per-pixel embedding,然後将mask embedding和per-pixel embedding相乘得到N個mask prediction,最後cls pred和mask pred相乘,丢棄沒有目标的mask,得到最終預測結果。

一文細數73個Vision transformer家族成員

Mask2Former在MaskFormer的基礎上,增加了masked attention機制,另外還調整了decoder部分的self-attention和cross-attention的順序,還提出了使用importance sampling來加快訓練速度。

Image Segmentation

semantic segmentation

SETR

paper:https://arxiv.org/abs/2012.15840

code:https://fudan-zvg.github.io/SETR/

一文細數73個Vision transformer家族成員

SETR用ViT/DeiT作為backbone,然後設計了兩種head形式:SETR-PUP和SETR-MLA。PUP将backbone輸出的feature reshape成二維形式,然後不斷的上采樣得到最終的預測結果;MLA将多個stage的中間feature進行reshape,然後融合上采樣得到最終的預測結果。

SegFormer

paper:https://arxiv.org/abs/2105.15203

code:https://github.com/NVlabs/SegFormer

一文細數73個Vision transformer家族成員

SegFormer設計了一個encoder-decoder的分割架構,其中transformer block由Efficient Self-Attn、Mix-FFN、Overlap Patch Merging構成。Efficient Self-Attn對K進行下采樣,Mix-FFN額外使用了conv。

Segmenter

paper:https://arxiv.org/abs/2105.05633

code:https://github.com/rstrudel/segmenter

一文細數73個Vision transformer家族成員

Segmenter設計了類别無關的cls token,最後預測的時候分别和patch token進行點乘,最後reshap成二維圖像。

U-Net Transformer

paper:https://arxiv.org/abs/2103.06104

TransUNet

paper:https://arxiv.org/abs/2102.04306

code:https://github.com/Beckschen/TransUNet

Swin-Unet

paper:https://arxiv.org/abs/2105.05537

code:https://github.com/HuCaoFighting/Swin-Unet

一文細數73個Vision transformer家族成員
一文細數73個Vision transformer家族成員
一文細數73個Vision transformer家族成員

在U-Net結構中引入Transformer

P2T

paper:https://arxiv.org/abs/2106.12011

一文細數73個Vision transformer家族成員

用對KV做池化的MHSA做下采樣。

HRFormer

paper:https://papers.nips.cc/paper/2021/hash/3bbfdde8842a5c44a0323518eec97cbe-Abstract.html

一文細數73個Vision transformer家族成員

HRFormer的block由local-window self-attention和FFN組成。

繼續閱讀