其意义在于证明了transformer架构的通用性结论transformer模型可以不做改动来解决计算机视觉问题小规模数据上略输于CNN中等或大规模数据集上表现相当或优于CNN在计算效率上训练同等精度的模型transformer模型比卷积神经网络模型更有优势从模型架构上来看ViT由三部分组成Linear Projection of Flattened Patches(Embedding层)、transformer encoder MLP(分类头)由于transformer模块要求输入为token序列[num_token, token_dim]而图像数据而言其数据格式为[H, W, C]Patch embedding以ViT-B/16为例假设输入图像大小为[224,224,3] 按照16x16大小的Patch进行划分得到14×14196个块每个Patche数据shape为[16, 16, 3]线性映射到一维向量得到-[768]在实际代码中上述过程通过一个卷积层核大小为1616步长为1616来实现通过卷积[224, 224, 3]-[14, 14, 768]- 再展开[196, 768]此时正好变成了一个二维矩阵正是Transformer想要的过程输入图像: [Batch_Size, 224, 224, 3]卷积层操作: Conv2D(kernel_size(16, 16), stride(16, 16), padding‘valid’, out_channels768)卷积输出: 经过这个 Conv2D 层后输出的形状将是 [Batch_Size, 14, 14, 768]展平/重塑: 最后将 [Batch_Size, 14, 14, 768] 重塑为 [Batch_Size, 196, 768]Transformer Encoder然后再开头拼接一个 [CLS]token 作为图像的分类 - [Batch_Size, 197, 768] 通过Encoder后shape不变核心是自注意力机制序列中的每个 Token包括 [CLS] Token 和所有的 Patch Tokens都可以相互关注[CLS] Token 经过多层 Transformer Encoder 后它会“吸收”并“聚合”来自所有图像 Patch 的信息。MLP HeadViT 通过 Transformer Encoder 之后只需要取出最开头的那个 [CLS] token 对应的输出去做分类模型种类归纳偏置解释为什么在小数据量时ViT的效果不如CNN在建模时引入人的先验经验不是从数据中学来的这导致ViT在小规模数据上效果不如resnet卷积操作的归纳偏置每一层局部性平移不变性ViT的归纳偏置仅在切分patch时后续注意力计算是没有归纳偏置的切分patch时引入局部性多个Patch用同一个线性映射层引入了平移不变性
ViT: 用transformer架构解决视觉问题
其意义在于证明了transformer架构的通用性结论transformer模型可以不做改动来解决计算机视觉问题小规模数据上略输于CNN中等或大规模数据集上表现相当或优于CNN在计算效率上训练同等精度的模型transformer模型比卷积神经网络模型更有优势从模型架构上来看ViT由三部分组成Linear Projection of Flattened Patches(Embedding层)、transformer encoder MLP(分类头)由于transformer模块要求输入为token序列[num_token, token_dim]而图像数据而言其数据格式为[H, W, C]Patch embedding以ViT-B/16为例假设输入图像大小为[224,224,3] 按照16x16大小的Patch进行划分得到14×14196个块每个Patche数据shape为[16, 16, 3]线性映射到一维向量得到-[768]在实际代码中上述过程通过一个卷积层核大小为1616步长为1616来实现通过卷积[224, 224, 3]-[14, 14, 768]- 再展开[196, 768]此时正好变成了一个二维矩阵正是Transformer想要的过程输入图像: [Batch_Size, 224, 224, 3]卷积层操作: Conv2D(kernel_size(16, 16), stride(16, 16), padding‘valid’, out_channels768)卷积输出: 经过这个 Conv2D 层后输出的形状将是 [Batch_Size, 14, 14, 768]展平/重塑: 最后将 [Batch_Size, 14, 14, 768] 重塑为 [Batch_Size, 196, 768]Transformer Encoder然后再开头拼接一个 [CLS]token 作为图像的分类 - [Batch_Size, 197, 768] 通过Encoder后shape不变核心是自注意力机制序列中的每个 Token包括 [CLS] Token 和所有的 Patch Tokens都可以相互关注[CLS] Token 经过多层 Transformer Encoder 后它会“吸收”并“聚合”来自所有图像 Patch 的信息。MLP HeadViT 通过 Transformer Encoder 之后只需要取出最开头的那个 [CLS] token 对应的输出去做分类模型种类归纳偏置解释为什么在小数据量时ViT的效果不如CNN在建模时引入人的先验经验不是从数据中学来的这导致ViT在小规模数据上效果不如resnet卷积操作的归纳偏置每一层局部性平移不变性ViT的归纳偏置仅在切分patch时后续注意力计算是没有归纳偏置的切分patch时引入局部性多个Patch用同一个线性映射层引入了平移不变性