Vision Transformer, ViT

motivation

transformer在NLP领域成为事实标准,但是在图像领域知识作为组件或CNN的附庸,必须一统江湖。

网络结构

图像 -》序列 -》transformer encoder -》MLP -》classification

和典型NLP任务相比,基本沿用了transformer encoder + classification的结构,区别在于输入,ViT将图像转换为了序列。

图像转序列

标准Bert的输入是长度为L,维度为D的vector [L, D],图像转序列即将[H, W, C]的输入图像转为[L, D]

(1)图像分块patch split:输入原图size为HWC,patch的size为P*P,patch个数N=HW/(P*P),将patch reshape为一维vector,size为P*P*C,得到patch序列[N, P*P*C]

(2)图像块嵌入patch embedding:乘以embedding mat [P*P*C, D]完成线性变换,得到新的feature序列[N, D]

(3)追加CLS token:和Bert类似,在序列前加上CLS分类专属token.

(4)添加position embedding:和Bert类似,为添加序列的顺序信息,添加可学习的position embedding信息。

(5)将上述序列送入transformer encoder + MLP + classification head

训练效果分析

(1)embedding filter:embedding filter的最终学习结果类似于基函数,对patch内纹理进行低阶特征表征,想到了小波基。

(2)position embedding:position embedding表现出显著的相对位置表达,临近、行、列等。

(3)attention distance:随着层的增加,attention的距离越来越远,即高层可获取更多全局信息,原理和CNN类似。

Attention可视化

attention的可视化结果也可以看出attention对象和类别对象很好地关联了起来。

总结

优势:

1、原汁原味的transformer全局self-attention,简洁易懂。

2、在大数据集上效果很好。

劣势:

1、图片大小变化后patch的长度会发生变化(不像bert在末尾增减,而是中间插入),预训练的position embedding对不上,通过插值不可避免导致精度下降。

2、模型复杂度高,需要大量训练数据,在小训练集上表现不好,建议是大数据预训练+小数据微调。

你可能感兴趣的:(Vision Transformer, ViT)