论文:https://arxiv.org/abs/2010.11929
pytorch代码:https://github.com/lucidrains/vit-pytorch
不了解Transformer的,建议先看这篇:https://blog.csdn.net/czt_666/article/details/118113634
架构
如上图所示,ViT 的基本步骤:
- 图片切分为图块
- 所有图块作为输入,输入经过一个线性映射并将图块展平为一维向量(patch embedding)
- 嵌入可学习的类别
- 展平的图块嵌入位置(图片无空间信息)
- Transformer Encoder
- MLP Head
- 分类
Transformer Encoder
ViT 的Transformer Encoder(左图)和 Attention is all you need的Transformer编码器(右图)类似,使用了 Multi-Head Attention 和 MLP两种残差块,不同的是归一化层Norm前置了,还有就是MLP和前馈网络,不过二者差不多。
ViT 的Transformer Encoder的表达式如下:
其中,公式(1)为步骤1~4,稍后再做解释。
公式(2) 为残差块 Multi-Head Attention ,图中仅显示了一个编码器,我们称之为子编码器, z l − 1 z_{l-1} z