计算机视觉领域一般使用CNN网络进行特征提取,但是为了增大CNN卷积核的视野,需要不断增加CNN网络的深度;不断增加网络深度会导致CNN网络训练效率变差、训练过程复杂且不稳定;
将transformer网络和CNN网络相结合,用的transformer的self-attention机制代替CNN中卷积层叠加策略,便能在扩大CNN视野的同时增加网络的训练效率;
transformer网络和CNN网络相结合通常有两种方式 :Attention Augmented Convolutional Networks 和 VisionTransformer
Attention Augmented Convolutional Networks
Attention Augmented Convolutional Networks 是将一个 self-attention 当做一个layer,然后将这个layer嵌入到CNN当中;因为 self-attention 只能处理一维序列数据,因此这里将CNN处理得到的三维数据(feature map ,宽,高)扁平化flatten成一维数据,然后传入 self-attention 层,之后reshape 使self-attention的输出和CNN的输出保持一致。虽然使用了 self-attention 但这种网络的训练速度仍然很慢,因此只适用于一些小的图像任务
Vision Transformer
Vision Transformer 的思想就是摒弃Attention Augmented Convolutional Networks中的CNN结构进行特征提取,直接使用Transformer中self-attention机制
具体实现方式可以参考下图:
Vision Transformer 的主要思想是:
- 将图片划分成多个子图块(patch)
- 对每个patch进行扁平化处理
- 将位置信息添加到扁平化处理处理后的patch(因为1D和2D编码效果相近,因此使用1D编码)
- 进行self-attention 并处出结果,根据结果进行不同的下游任务
参考文章:
Vision Transformer 论文