目前在视觉领域已经有众多的Transformer工作,涵盖图像分类[1]、检测[2]和分割[3],以及视频等领域。本篇分享去年来自Google的Vision Transformer经典工作:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale[1](ViT)。
背景介绍
Transformer自出现以来,引领了NLP领域的技术革新,在各大NLP榜单任务中“独霸天下”。但在计算机视觉领域,CNN结构在主流的backbone中仍占据主导地位,如ResNet等。相比于CNN,Transformer在空间等价性和局部连接方面缺少优势,但是凭借自身的self-attention结构,Transformer更适合在长范围内建模。
Pipeline
ViT参照了CNN局部特征提取方式,先把图像在空间维度等间隔分成若干相同尺寸的patch;对于生成的patch通过线性映射成patch embedding(与Transformer中token embedding类似)。参照NLP中的处理方式,patch embedding加上了标志patch相对位置的position embedding。同时在ViT的输入端,除了图像原始的patches,也增加了额外可学习的class embedding。该过程如下图所示。
图1 ViT Pipeline
对于得到的完整Embedded Patches结果,送入标准的Transformer Encoder模块。其中Transformer Encoder由若干个Transformer block堆叠而成,每个block由Norm、Multi-Head Attention和MLP层组成,层与层之间存在short cut连接。最后取class embedding位置的Transformer block输出结果,再通过MLP Head得到最终的网络输出。网络通过在ImageNet数据集上的分类任务进行预训练。
实验结果
在实验环节ViT尝试了在JFT和ImageNet-21K大型数据集上预训练后,在ImageNet,CIFAR-10,CIFAR-100等数据集上微调。其中JFT是Google私有的300M数据集,数据量远大于ImageNet。原始模型和数据集的对比如下表所示。
从上表可以看出在JFT数据集上预训练的ViT,在ImageNet的Top-1准确率最高能够达到88.55%,这基本是ImageNet的SOTA模型水平,足以证明ViT+大数据集的强大。
那多大的数据集对ViT是有效的呢,文章继续补充了相应的实验,如下图所示。可以看到,随着数据集规模达到ImageNet-21K这种量级,ViT的威力才逐渐发挥出来,并超越了CNN为backbone的ResNet结构。这样的结果反映了Transformer网络需要大量数据集才能发挥出能力的特点:
图2 不同数据集对比
思考与总结
ViT证明了Transformer也能简单有效地使用在CV领域,在众多CNN为主的backbone中异军突起。虽然ViT的效果不错,但是也留下了很多能够再进一步的方向,包括预训练的方式,在其他领域的应用等。
Reference
[1] Dosovitskiy A, Beyer L, Kolesnikov A, et al. An image is worth 16x16 words: Transformers for image recognition at scale[J]. arXiv preprint arXiv:2010.11929, 2020.
[2] Carion N, Massa F, Synnaeve G, et al. End-to-end object detection with transformers[C]//European Conference on Computer Vision. Springer, Cham, 2020: 213-229.
[3] Zheng S, Lu J, Zhao H, et al. Rethinking semantic segmentation from a sequence-to-sequence perspective with transformers[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 6881-6890.
原文:知乎
作者:于璠
推荐阅读
更多嵌入式AI技术相关内容请关注嵌入式AI专栏。