资讯专栏INFORMATION COLUMN

视觉TRANSFORMERS(ViT)

ixlei / 1549人阅读

摘要:为了处理二维图像,我们将尺寸为的图像为拉平的维图块,尺寸为。其中为图块的大小,是图块的数量,会影响输入序列的长度。随机初始化大小为的位置编码向量。而后,和相加,得到最终的向量。导致最终的平移等变性平移等变性和局部感知性较弱。

论文: AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE

Github:

GitHub - google-research/vision_transformer

GitHub - lucidrains/vit-pytorch: Implementation of Vision Transformer, a simple way to achieve SOTA in vision classification with only a single transformer encoder, in Pytorch

论文提出将 Transformer网络结构应用于视觉算法,即Vision Transformer (ViT)。最终取得了ImageNet 88:55%准确性,  ImageNet-ReaL90:72%准确性, CIFAR-10094:55%准确性,

VTAB77:63%准确性。

网络结构

标准的transformer的输入是1维的token embedding。为了处理二维图像,我们将尺寸为 H*W*C 的图像reshape为拉平的2维图块,尺寸为N *(P2*C) 。其中(P,P) 为图块的大小, N=H*W/P2 是图块的数量,会影响输入序列的长度。Transformer在所有图层上使用恒定的隐矢量D,比如D=1024,将patch块拉平,并使用可训练的线性投影映射到D的大小,此时输出大小为1*N*D的向量,随机初始化分类token,维度为1*1*D,将此1*N*D的向量和1*1*D的分类token向量进行concat操作,得到1*(N+1)*D的输出向量,

将此输出称为patch embedding。随机初始化大小为1*(N+1)*D的位置编码向量。而后,patch embedding 和position embedding相加,得到最终的 embedding向量。最终的 embedding向量经过Tranformer 编码器处理,输出的向量在(N+1)的维度上进行mean pooling操作,然后输入MLP HEAD进行线性投影得到最终的分类结果。

        self.to_patch_embedding = nn.Sequential(            Rearrange("b c (h p1) (w p2) -> b (h w) (p1 p2 c)", p1 = patch_height, p2 = patch_width),            nn.Linear(patch_dim, dim),        )        self.pos_embedding = nn.Parameter(torch.randn(1, num_patches + 1, dim))        self.cls_token = nn.Parameter(torch.randn(1, 1, dim))        self.dropout = nn.Dropout(emb_dropout)        self.transformer = Transformer(dim, depth, heads, dim_head, mlp_dim, dropout)        self.pool = pool        self.to_latent = nn.Identity()        self.mlp_head = nn.Sequential(            nn.LayerNorm(dim),            nn.Linear(dim, num_classes)        )    def forward(self, img):        x = self.to_patch_embedding(img)        b, n, _ = x.shape        cls_tokens = repeat(self.cls_token, "() n d -> b n d", b = b)        x = torch.cat((cls_tokens, x), dim=1)        x += self.pos_embedding[:, :(n + 1)]        x = self.dropout(x)        x = self.transformer(x)        x = x.mean(dim = 1) if self.pool == "mean" else x[:, 0]        x = self.to_latent(x)        return self.mlp_head(x)

 

 

Tranformer编码器由multi-head self-attention(MSA)和MLP块的层组成。在每个块之前应用Layernorm(LN),在每个块之后应用残差连接。MLP包含具有GELU非线性的两全连接层。

缺点

图片进行分patch操作后,只有在每个patch内部有信息交互,而patch和patch之间,只有在最后的MLP HEAD层才有交互,patch之间的信息交互太少。导致最终的translation equivariance(平移等变性)和locality(局部感知性)较弱。只有在大规模的数据集下才能有比较好的效果。比如在 ImageNet-21k,JFT-300M这样的数据量下才可以超越resnet。而在比较小的数据量下,效果却没有resnet好。

实验结果

 

 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121982.html

相关文章

  • 论文阅读笔记 | MLP系列——AS-MLP

    摘要:如有错误,恳请指出。轴向位移可以将不同空间位置的特征安排在同一位置。在这个操作中,执行零填充用灰色块表示,此外还有其他的填充方式。通过调节感受野尺寸以及扩张因子可以得到不同的感受野。 ...

    cnsworder 评论0 收藏0
  • 论文阅读笔记 | 目标检测算法——DETR

    摘要:在这种情况下,损失函数应该对预测目标保持不变,一种解决办法是使用匈牙利算法设计损失函数来唯一匹配预测结果和标注信息。 如有错误,恳请指出。 文章目录 1. I...

    jiekechoo 评论0 收藏0
  • 深度学习之图像分类(二十一)-- MLP-Mixer网络详解

    摘要:深度学习之图像分类二十一网络详解目录深度学习之图像分类二十一网络详解前言网络结构总结代码继之后,我们开启了一个新篇章,即无关卷积和注意力机制的最原始形态,全连接网络。我们将每个展平就能成为个维的向量。 ...

    ZweiZhao 评论0 收藏0
  • Masked Autoencoders Are Scalable Vision Learners

    摘要:接着部分把所有都计算进去包括编码后的和的,并加入了位置编码信息。并使用来计算重构图片和真实图片间的误差。这些都是符合语义信息的蘑菇还是蘑菇,说明模型已经学习到了图像中的物体归纳性特征,已经具有很强的泛化能力。 ...

    邹立鹏 评论0 收藏0
  • Transformer-XL: Unleashing the Potential of Attent

    摘要:序列截断后,造成段落边界破碎,从而造成低效优化,即使是短序列这也是严重问题。此外,这种重复机制还解决了上下文碎片问题。 简介 现实远程依赖问题,比如要正确理解文章内容,有时需要阅读多处段落,这对人来说轻松自如。但是,对神经网络来说,远程依赖问题依然是一个挑战。虽然基于门控的RNN(LSTM,GRU等)和梯度裁剪等技术提高了对远程依赖建模的能力,但仍不足以解决问题。其中一个解决方法就是使...

    dingding199389 评论0 收藏0

发表评论

0条评论

ixlei

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<