【CV】Transformer相关的CV文章

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] [code]

f258a3c6143ea3e579369262271ada49.png

最简洁的Vision Transformer模型,先将图片分成16x16的patch块,送入transformer encoder,第一个cls token的输出送入mlp head得到预测结果。

*DeiT [paper] [code]

9c4368ecd6250f8dceeabda9b79cbd4f.png

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

T2T-ViT [paper] [code]

063d0cecb6f3a28ea70aaf9dbff51b8b.png

将ViT的patch stem改成重叠的滑窗形式,增强patch之间的信息交流。

Conformer [paper] [code]

3e0c9e21a6bc26e75e4000d4a6c7e72a.png

设计了一个CNN和Transformer双分支结构,利用FCU模块进行两个分支的信息交流,推理的时候使用两个分支的输出取平均进行预测。

TNT [paper] [code]

7f5254d85974160c6d11462c0b588afe.png

在ViT的基础上,对每个patch进一步切分,用嵌套的方式提升每个patch对于局部区域的特征表达能力,然后将局部提升后的特征和patch特征相加送入下一个transformer block中。

XCiT [paper] [code]

dc3c10c6b46b616c9f57b066acf24dde.png

XCiT通过置换q和k的计算,从tokens做self-attention转变成channels纬度做self-attention(也就是通道的协方差计算),复杂度从平方降到了线性。

DeepViT [paper]

27ba802d4f1c3f685b45a31b67aa9119.png

ecdf1c3b8ddb34682a756b892312dbb6.png

DeepViT发现随着深度的增加,ViT的self-attention会出现坍塌现象,DeepViT提出用Re-Attention来替代Self-Attention可以避免坍塌,可以训练更深的ViT,Re-Attention在MHSA之后增加了一个可学习的Matrix Transformation。

*Token Labeling ViT [paper] [code]

62b721d1c3a97f39ee374c0e45619c73.png

为了增加ViT对于局部区域的定位和特征提取能力,token labeling在每个patch的输出都增加一个局部监督,token label通过一个预训练过的特征提取器获得(本文可以看成是AutoEncoder+CLS的预训练方法)。由于需要一个额外的特征提取器,所以需要更多的计算资源(可以用MaskFeat的方法改进)。

SoT [paper] [code]

d5eaf64400861df2b90bdd0e67756ba7.png

对patch输出的word token进行协方差池化,然后和cls token的输出进行融合,提高分类对局部区域的感知能力。

DVT [paper]

b9b3f690a0d7a65bdb8b48998d1e0b6c.png

DVT提出每个图片应该有自己独有的token数量,于是设计了一个级联tokens数量逐渐增加的多个transformer,推理的时候可以从不同级的transformer判断输出。

DynamicViT [paper] [code]

8abb24500c1c3cdfcf8c5188e3c0f586.png

通过一个预测模块来决定token的重要程度,剪枝掉少量不重要的token,将剩余的token送入下一个block中。

PSViT [paper]

6e0650bbdff747d6a2620646b410dbe4.png

为了减少ViT计算上的冗余,PSViT提出token pooling和attention sharing两个操作,其中token pooling用来减少token的数量,attention sharing作用在相关性较强的相邻层上。

*TokenLearner [paper] [code]

d03f1316bee39d2c18c1ea3428d4640b.png

利用spatial attention来提取出最重要的token信息,减少token数量。

Evo-ViT [paper]

95c9503668a2e65cf4c2a9fa38274362.png

增加一个representative token,通过global class attention evolution来判断patch token的重要程度,重要程度高的送入block中缓慢更新,重要程度低的和representative token(由placeholder token得到)残差更新。其中vanilla transformer block的MSA输出和global cls attention相加得到重要性权重。

AugViT [paper] [code]

442b704796f6a0e16cc7d267d2a24743.png

为了避免ViT出现模型坍塌现象,AugViT设计了一个augmented shortcuts结构。具体地,在MSA结构上并行增加两个分支,一个分支做shortcut操作,另一分支对每个patch做augmentation来增加特征表达的多样性,最后将三个分支的输出相加到一起。

CrossViT [paper] [code]

808f6ef7c18dacf9b11537dbe23431cb.png

将两种不同数量的patch序列分别送入encoder中,然后通过cross-attention对两个分支的cls token和patch token同时进行融合,最后将两个分支的cls token位置的输出结果进行融合。

AutoFormer [paper] [code]

0d66b0c8ebc264443c3a889ec82a2d26.png

AutoFormer动态的搜索transformer中每一层的embedding纬度、head的数量、MLP比例和QKV纬度。

*CPVT [paper] [code]  

95acca3ddc2720f843534817b8755ad0.png

aeee4d13e5427104e3a793be7ed6d514.png

CPVT设计了一个PEG结构来替代PE(positional encoding),PEG通过feature token生成得到。

V-MoE [paper]

379b609532b9aa2030de26209e824e65.png

V-MoE用Sparse MoE来替换ViT中的MLP结构。Sparse MoE中的每个MLP分别保存在独立的device上,并且处理相同固定数量的tokens。

DPT [paper] [code]

10be9c127612113394c30b66d31584fe.png

DPT设计另一个可形变的patch选取方式。

*EViT [paper]

e7a2b3fae4921743b2989d05ed377bce.png

EViT通过计算每个patch token和cls token的相关性来决定重要程度,重要程度高的直接送入FFN,重要程度低的融合成一个token。

Multi-scale

*SwinTv1 [paper] [code]  

*SwinTv2 [paper]

2c8fe0cd1403522fc0c4f3d9cb6dd439.png

34d67f7ca3421388a4b722521aa9f6be.png

为了更好的应用于det、seg等下游任务,需要对ViT进行多尺度设计。SwinT通过patch merging减少token的数量,另外设计了W-MSA结构,只对windows内的patch进行self-attention计算来降低计算量,为了增加不同windows之间的信息传递,设计了SW-MSA结构。

8d46d819045eb6ff2ef70c0c732ac653.png

为了更好的扩大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] [code]

*PVTv2 [paper]

b999ccd536d99dbe613f3644a1d98e7b.png

75ba1184b34a01b21af55f1558cc1c05.png

PVT设计了一个多stage的多尺度架构,为了做stage之间的下采样,将MHSA改造成SRA,SRA中的K和V都下采样R^2倍。

c1d60d5b8ce0e64f1dc792efb7af8a38.png

b315a922df50f8dd8078e7baea1662bc.png

PVTv2在PVTv1的基础上做了三点改进:

  1. 将SRA的下采样conv替换成average pooling

  2. 将不重叠的patch embedding替换成重叠的patch embedding

  3. 移除position encoding,并且在FFN中增加一个dwconv

1可以将PVT计算量降到线性,2可以获得更多局部连续的特征,3可以处理任意尺寸的图像。

*Twins [paper] [code]

72900e28ee19de70b6bddc0d5b628673.png

3d0eaa7290b26f3f77776dd37a581965.png

Twins沿用PVT的整体架构,并且用CPVT中的PEG来替代PE,同时将transformer block堆叠设计成global attention和local attention交替使用的形式,并且为了减少计算量,global attention将重要信息总结成mxn个表示,同时每个表示和其他sub-windows进行信息交流。

CoaT [paper] [code]

e7a1068f6f9a9eb1f623b3a6ce9703ff.png

37ee93233653f8ae3d3e59d3102468a6.png16a88d69e5dcc044d3d3c5450b2494d6.png

CoaT设计了一个co-scale机制,通过一系列串行和并行的block来预测结果,同时设计了一个Conv-Attention结构来替代MHSA,用一个dwconv来得到position encoding,另一个dwconv来得到relative position encoding。

CvT [paper] [code]

8b6ccbf94a46b51e39956a460d50a6b1.png

CvT去掉position encoding,用conv同时替换掉token embedding和MHSA中的QKV projection,通过conv来引入位置信息。

Shuffle Transformer [paper] [code]

a36860fbec76033a89ad44b6e688c095.png

通过shuffle和unshuffle操作,来增加token之间的信息交流。

Focal Transformer [paper] [code]

5ac30905c5fe9d81e8a07f3e02dd7534.png

29283d9cf44939a1b3176b46b04a160e.png

改变SwinT的划分windows的方式,每个query patch对应三种粒度的windows尺寸,如图所示。将W-MSA替换成Focal Self-Attention整体架构和SwinT保持一致。

CSWinT [paper] [code]

1bdba70d7708384973cc43e04502d780.png

923585d9ccea31301a72b92e30a93fd1.png

改变SwinT的划分windows的方式,每个query patch通过两个并行分支做self-attention,并且kv从dynaic stripe window中取。

*MViT [paper] [code]

a68945a16d07175b8279cad2c24c2396.png

b3bd13f6f05c45737930da6f0ed106cc.png

MViT通过对XQKV池化进行下采样构建金字塔架构。

Hybrid ViTs with Convolutions

LeViT [paper] [code]

beb30be0948e9ca775b20a033bbce69d.png

LeViT的patch embedding设计成4个conv3x3堆叠,同时下采样的self-attention对Q进行下采样。

localViT [paper] [code]

67132d13a4e37610709ebd219dbf9176.png

FC和1x1conv等效,在FFN中增加一个3x3的DWConv就变成了图c,输入输出增加Img2Seq和Seq2Img的操作。

ResT [paper] [code]

91c2307b4e64f6ba4c985372e5070876.png

ResT在MHSA中增加DWConv降低KV的纬度,另一个conv用来增加不同head的信息交流。

NesT [paper]

830bdb09db8f8b5ffb5851a77c1129b4.png

NesT通过最大池化对patch进行聚合。

CoAtNet [paper]

通过交替堆叠depthwise conv和self-attention来设计架构。

BoTNet [paper]

32d81e2603b06881d1ce96b88f3e55b3.png

模仿ResNet的bottleneck,将Transformer的block设计成bottleneck的形式,一个bottleneck由1x1conv、MHSA、1x1conv堆叠而成。

ConViT [paper]

9af2d6d99bdcb392b1f4eb69be52e59b.png

ConViT设计了一个GPSA,只对patch token进行操作,并且引入了位置信息。10个GPSA堆叠之后接2个SA。

MobileViT [paper]

1a29b75c73808f42b6749bf13e0d9765.png

MobileViT通过堆叠MobileNetv2 block和MobileViT block构成。

CeiT [paper]

2ae9feb195e1ca839515651635335291.png

CeiT设计了一个局部增强的LeFF结构,只对patch token部分做linear projection和depth-wise conv。

CMT [paper]

b7e3ea2b27636d081f7f8b2331e52081.png

CMT设计了一个CMT block,如图所示。

Object Detection

CNN backbone

*DETR [paper] [code]

f345663c0ca17fb1437a2d8c1d65c77e.png

DETR是第一个使用Transformer做目标检测的算法。图片先通过CNN提取特征,然后和positional encoding相加送入transformer,最后通过FFN预测结果。其中decoder部分需要设置object queries,并行输出预测结果,训练的时候pred和target通过双边匹配算法进行匹配。

*UP-DETR [paper]

aa640ffbf23ae47af3c270b1519bb447.png

为了对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] [code]

f5a8aa54bf27f9021bcc2b397c647094.png

上图是DETReg的整体框架。给定一张图片x,使用DETR得到embeddings v,总共设计了三个分支,一个分支预测box,一个分支预测embdding,还有一个分支预测目标分数cat。伪gt区域提议label通过selective search得到,伪gt目标embedding通过自监督算法SwAV得到,proposal的目标分数都设置为1。通过双边匹配将预测proposal和伪label进行匹配,不匹配的预测proposal分数用0填充。

SMCA [paper] [code]

df75c6aa1837e7f11e9b6ee70705eaeb.png

SMCA设计了一个Spatially Modulated Co-Attention组件来加快DETR的收敛速度,具体地,decoder的每个query先做一个spatial prior,然后和key进行co-attention。另外SMCA还设计来一个Multi-Scale Self-Attention来进一步提升精度。

*Deformable DETR [paper] [code]

69c2b84c6d243f26847d54b7b6bb2993.png4e9146fc8e1496fca8698532a53aa001.png

Deformable DETR结合了deformable conv的稀疏空间采样和transformer的相关性建模能力的优点。提出的deformable attention module用一些采样位置作为重要的key元素,并且Deformable DETR将该谋爱拓展到multi-scale上。

Anchor DETR [paper] [code]

7daf413a633db5b34ea26e5112a66673.png1913a8f75f6b9f6d49b5ad8e237423e8.png

Anchor DETR在decoder部分设计了基于anchor points的object queries,并且row-column decoupled attention来替代MHSA,降低计算复杂度。

*Conditional DETR [paper] [code]

a4bc874090202c49f6de1a12526078d4.png

Conditional DETR将content queries和spatial queries独立开,使得各自关注于content attention weights和spatial attention weights,加快训练的收敛速度。

*TSP-FCOS [paper]

e3058483d9022d208c0c0a38dbd35b1f.png

本文实验观察发现,影响DETR收敛速度的主要原因是cross-attention和双边匹配的不稳定。于是本文提出只使用transformer的encoder,其中TSP-FCOS设计了一种FoI Select来选择特征。并且还设计来一种新的双边匹配算法来加快收敛。

PnP-DETR [paper] [code]

d4d26405ea0007c120daec5b8fd31002.pngPnP-DETR设计了两种采样方式来降低计算复杂度,poll sampler和pool sampler,poll sampler对feature map对每个位置预测分数,然后挑选出fine的特征,通过pool sampler对coarse特征进行聚合。

D^2ETR [paper]

f04d35bac2490da7add690228b486234.png

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

Sparse DETR [paper] [code]

96cd503ec1bd9dfdcdf918ad538768ef.png

Sparse DETR通过Deformable cross-attention得到binarized decoder cross-attention map(DAM),用来作为scoring network的监督信号,预测出token的重要程度,并且只保留top-p%的token进行训练。

*Efficient DETR [paper]

fe237007abdaf977cf3d00cb33dbe154.png

Efficient DETR通过预测结果来初始化object queries,具体地,选取top-K个位置的feature当作object queries,位置当作reference points,k组embedding送入decoder进行稀疏预测,最终Efficient DETR只需要一个decoder就能超过DETR 6个decoder的精度。

Dynamic DETR [paper]

f4754edd34339b1ebb3ef39c34df2506.png

Dynamic DETR的dynamic encoder部分引入SE然后用deformable self-attention来提取多尺度特征,dynamic decoder部分引入可学习的box encoding,然后对encoder的特征做roi池化,最后和decoder的中间层embedding做相乘。

*DAB-DETR  [paper] [code]

feb9741459693930233590473a75b35f.png

DAB-DETR直接动态更新anchor boxes提供参照点和参照anchor尺寸来改善cross-attention的计算。

*DN-DETR [paper] [code]

6ef3926f3f69e27a58b561e477b3083c.png

DN-DETR在DAB-DETR的基础上,增加来一个denoising辅助任务,从而避免训练前期双边匹配的不稳定,加快收敛速度。

*DINO [paper] [code]

1a1f51aad72988e5c16bb3cd98006546.png

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]

74426f945090eddc2e5d022755242419.png

Pix2Seq直接把目标检测任务当成是序列任务,将cls和bbox构建成序列目标,图片通过Transformer直接预测序列结果。

YOLOS [paper] [code]

bacb07ec34a470def6d913acaaffa8c2.png

YOLOS只使用transformer encoder做目标检测,模仿vit在encoder部分设置det token,在输出部分接MLP预测出cls和bbox。

FP-DETR [paper]

536db87c6a43b0066920e6c744527e51.png

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

Instance segmentation

SOTR [paper] [code]

1c21f731df1b38db3a33d97d01bfc42e.png

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] [code]

18aca1656508904f49551cb001e88e1a.png

Max-DeepLab设计了两个分支pixel path和memory path,两个分支在dual-path tansformer中进行交互,最终pixel path预测出mask,memory path预测出cls。

*MaskFormer  [paper] [code]

*Mask2Former [paper] [code]

3aacb62c57d7d529913bb83e1c165747.png

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,得到最终预测结果。

30c04888928cfc0ca3023bd9e76e27f0.png

Mask2Former在MaskFormer的基础上,增加了masked attention机制,另外还调整了decoder部分的self-attention和cross-attention的顺序,还提出了使用importance sampling来加快训练速度。

Image Segmentation

semantic segmentation

SETR [paper] [code]

77a9cd9e5ded8ef2668bd9a3b556cffb.png

SETR用ViT/DeiT作为backbone,然后设计了两种head形式:SETR-PUP和SETR-MLA。PUP将backbone输出的feature reshape成二维形式,然后不断的上采样得到最终的预测结果;MLA将多个stage的中间feature进行reshape,然后融合上采样得到最终的预测结果。

SegFormer [paper] [code]

356e4e012f96bfb07def1374eece3b3b.png

SegFormer设计了一个encoder-decoder的分割框架,其中transformer block由Efficient Self-Attn、Mix-FFN、Overlap Patch Merging构成。Efficient Self-Attn对K进行下采样,Mix-FFN额外使用了conv。

Segmenter [paper] [code]

a1fae145b493411a5f12608e5ee7871e.png

Segmenter设计了类别无关的cls token,最后预测的时候分别和patch token进行点乘,最后reshap成二维图像。

U-Net Transformer [paper]

TransUNet [paper] [code]

Swin-Unet [paper] [code]

59ed422771abdbdbd8696f99f892d843.png

83a35d36ed124b7af134f7e5d6a99db6.png

d63fee96d82161388b808df33f8069c4.png

在U-Net结构中引入Transformer

P2T [paper]

ddd462123e4bf7116dbd64328c23d1a5.png

用对KV做池化的MHSA做下采样。

HRFormer [paper]

5c5307dc10da84290d4c8095a44c9973.png

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

 
 
 
 
 
 
 
 
 
 
往期精彩回顾




适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑机器学习交流qq群955171419,加入微信群请扫码:

6e47c8fa04b078ae83e43af89b55c46c.png

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值