VIT 如何超越 CNN?

VIT 如何超越 CNN?_第1张图片

VIT(Vision Transformer)来自于google 的一篇文章《AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE》原文地址: https://arxiv.org/pdf/2010.11929.pdf 使用transfomer解决分类问题。

一说图像分类,大家想到的都是经典的CNN,Resnet,MobileNet

VIT是最近提出的模型2020年10月挂到av上面,2021年正式发表。在所有公开数据集上都超过了Res,前提是在大的数据集上做预训练,数据越大效果越好。transformer使用在NLP上的模型。在2017年 VIT本身没有新的地方,Transformer encode的网络。

VIT网络是什么:

1)分隔图片

将图片划分成大小相同patches

用户指定patch大小(16x16)stride(滑动窗口的步长),stride越小,分隔的pathes数量越大,计算量越大。论文中没有重叠分隔图片。重叠也可以。

2)向量化(vectorize)

数据向量化,降低维度。

3)

如果图片被划分为n个向量 x1 .. xn

VIT 如何超越 CNN?_第2张图片

 

首先用相同全联结层对n个向量进行线性变换。不使用激活函数。共享参数 w和b

zi = dense(xi) = w * xi + b + positionencoding(xi)

VIT 如何超越 CNN?_第3张图片

此外对向量的位置进行编码 positional encoding。图片被划分为N块,那么位置就是1~n的整数。每个位置就是一个向量,加到Z向量上。z就是内容的表征也是位置的信息。

为什么使用positional Encoding,因为图片的特征跟patches之间的位置是强相关的。所以位置信息是强的特征信息。

最后用CLS符号表示分类。对CLS做Embeding得到向量Z0,Z0和其他Z大小相同。

将Z0 ~ Zn输入到多头子注意力层(Multi-Head Self-Attention)这层的输出也是N+1个向量。在上面加一个全链接层。输出还是N+1个向量。可以继续加Multi-Head Self-Attention 和 全联结层。

transformer还用到了Skip Connection 把每层的输入加到输出上。

VIT 如何超越 CNN?_第4张图片

Transformer Encoder network用到了很多多头子注意力层和全联结层,用多少都可以。输出N+1的向量。输出是向量C0 ~Cn

但是有用的事C0,可以看作是图片中提取的特征向量。用于分类任务。把C0输入到Softmax分类期,输出向量P,用P做分类的loss梯度,来训练神经网络。

训练方法:

1)随机初始化网络,在数据集A上做训练,数据集一定要大的预训练模型。

论文中使用imageNet(small)训练 resnet和transformer的时候,transformer的效果会低于resnet。用imageNet-21K做预训练数据集,transformer的效果resnet差不多。用JFT(3亿数据)数据集做预训练,transformer比resnet准确率高1%左右。

用更大的数据集作预训练

2)使用pretrained model在数据集B上finetunel。

VIT 如何超越 CNN?_第5张图片

 

 

 

 

 

 

 

 

你可能感兴趣的:(深度学习)