- google团队
- 主要关注问题
- 去除CV对于CNN的依赖,使用纯Tranformer,尽量做少的修改,直接应用于图片任务
- transformer应用于CV领域的难处
- 复杂度过大:图片输入224*224,输入序列长度50176,相当于bert序列长度100倍
- 主要工作:通过将图像分割成patches,将Transformer运用到CV领域,结果显示在小规模的数据量下,效果不如resnet,但是在大规模数据量(14M-300M)时取得优异结果。
- 模型框架
- 具体实现
- ViT
- 将图片划分为patch——相当于 bert中的word
- 抽16*16的patch,224/16=14,输入就变成了14*14=196序列长度
- 也就是原本图片是224*224*3 分成了196个patch,每个patch是16*16*3=768
- 经过一个线性投射层(其实是个全连接层768*768),成功将一个2D图片变成一个1D的序列
- 加上嵌入(特殊字符cls和位置编码信息)197*768
- 然后通过transformer编码器
- 最后有一个MLP分类头,其中用的是tanh作为一个激活函数
- 位置编码对结果影响不大
- 将图片划分为patch——相当于 bert中的word
- CNN+Transformer
- CNN有更多针对图像的归纳偏置,vit就没太用,所以在中小规模上不如CNN
- 两者的混合思想就是:原始输入图片不需要先分patch,而是先过一个CNN,然后再过transformer
- 微调
- 图片尺寸增大怎样微调?使用2D信息做微调,但效果可能打折扣,是vit的一个局限性
- ViT
- 实验结果
- 模型效果方面主要与resnet做了比较,再中小型数据规模下效果远不如resnet,因为vit没有使用图像特有的归纳偏置特性
- 模型训练资源方面又做了一些实验,论证vit比cnn便宜
- 最后还有关于自注意力这个机制在vit中做图像处理时到底有没有起作用?
- 自注意力在nlp中起很大作用是因为它可以关注长距离,比如说第一个词与最后一个词
- 使用最后一层output token折射回去原来的图(?怎么做:是在原始图片的基础上,根据权重,将权重大的像素点显示出来,权重小的可以不显示),与原始图片做对比,可以看到模型确实注意到了跟最后分类有关的区域,所以说明自注意力有起到作用。
- 自监督(重要)
- 使用类似bert的完形填空方式做自监督训练,效果相比最好的有监督训练方法差4%。
【文献阅读】[ViT]An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale(2020)
最新推荐文章于 2024-05-03 11:07:56 发布