??论文地址:?https://arxiv.org/pdf/2010.11929v2.pdf
????????基于纯自注意力机制的Transform模型,现在在自然语言处理领域占据着首要的地位,它主要是在大型文本语料库上进行预训练,然后在较小的特定任务的数据集上进行微调。而在计算机视觉领域,卷积神经网络仍然占主导地位,受Transformer的影响,很多新的基于注意力机制的架构的想法也用进了计算机视觉当中,比方说有的将CNN与自注意力机制相结合,有的使用轴注意力来完全替代卷积操作。
????????Vision Transformer(ViT)是想尽可能少地对Transformer进行修改,将Transformer的架构直接用在图像上。ViT将图片分割成一个个16*16大小的patch,也就是对应着Transformer中一个一个的词,将这些patch的线性嵌入序列作为Transformer的输入。ViT在大数据集ImageNet-21k和JFT-300M数据集上进行预训练,在多个图像识别基准上接近或者是高于当前最好的方法。由于缺少一些归纳偏置,在中小型数据集上训练出来的ViT的效果是比不上当前最好的方法的。
????????ViT尽可能地遵循最初地Transformer架构,如果你了解Transformer和Bert,那对你来说将会很简单。下图描述了整个ViT模型的架构。
?????????标准的Transformer的输入是一个一个token嵌入的一维序列,为了处理二维的图像,ViT将H * W * C图片先切成N *( P^2 * C )的patch,patch的大小为 P * P,C为通道数,N=(H*W)/(P*P)为图片切割的patch的个数。然后将patches进行flatten展平操作,得到patch embedding。P^2*C可以理解成Transfromer里边dmodel,也就是模型的维度。然后是在patch embedding上加上一个位置编码(position embedding),位置编码的计算和Transformer中相同。对于分类方面和Bert相同,引入了class token。
????????Transformer Encoder由多头自注意力块MSA和MLP块组成,Layernorm(LN)在每个块之前应用,在每个块之后应用残差连接。
ViT的Transformer实现过程:
|