0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一种可以编码局部信息的结构T2T module,并证明了T2T的有效性

深度学习实战 来源:深度学习实战 作者:深度学习实战 2021-03-11 16:21 次阅读

深度学习实战

前面提到过ViT,但是ViT在数据量不够巨大的情况下是打不过ResNet的。于是ViT的升级版T2T-ViT横空出世了,速度更快性能更强。T2T-ViT相比于ViT,参数量和MACs(Multi-Adds)减少了200%,性能在ImageNet上又有2.5%的提升。T2T-ViT在和ResNet50模型大小差不多的情况下,在ImageNet上达到了80.7%的准确率。论文的贡献:

证明了通过精心设计的Transformer-based的网络(T2T module and efficient backbone),是可以打败CNN-based的模型的,而且不需要在巨型的训练集(如JFT-300M)上预训练。

提出了一种可以编码局部信息的结构T2T module,并证明了T2T的有效性。

展示了在设计CNNs backbone时用到的architecture engineering经验同样适用于设计Transformer-based的模型,通过大量的实验证明深且窄(deep-narrow)的网络能够增加feature的丰富性和减少冗余。

Why T2T-ViT?

先来说下ViT[1],ViT在从头开始训练(trained from scratch) ImageNet时,效果甚至比CNN-based的模型还差。这显然是不能让人足够满意的,文中分析了两点原因:
(1)由于ViT是采用对原图像分块,然后做Linear Projection得到embedding。但是通过实验发现,这种基于原图像的简单tokenization并没有很好地学到图像的边缘或者线条这种低级特征,导致ViT算法的学习效率不高,难以训练,因此ViT需要大量的数据进行训练。
(2)在有限的计算资源和有限的数据的情况下,ViT冗余的attention主干网络难以学得丰富的特征。
所以为了克服这些限制,提出了Tokens-To-Token Vision Transformers(T2T-Vit)。为了证明上面的结论,还做了一个实验,可视化了ResNet、ViT和T2T-ViT所学到的特征的差异。

绿色的框中表示了模型学到的一些诸如边缘和线条的low-level structure feature,红色框则表示模型学到了不合理的feature map,这些feature或者接近于0,或者是很大的值。从这个实验可以进一步证实,CNN会从图像的低级特征学起,这个在生物上是说得通的,但是通过可视化来看,ViT的问题确实不小,且不看ViT有没有学到低级的特征,后面的网络层的feature map甚至出现了异常值,这个是有可能导致错误的预测的,同时反映了ViT的学习效率差。 Tokens-to-Token:Progressive Tokenization

为了解决ViT的问题,提出了一种渐进的tokenization去整合相邻的tokens,从tokens到token,这种做法不仅可以对局部信息的建模还能减小token序列的长度。整个T2T的操作分为两个部分:重构(re-structurization)和软划分(soft split)。(1)Re-structurization假设上一个网络层的输出为T,T经过Transformer层得到T',Transformer是包括mutil-head self-attention和MLP的,因此从T到T'可以表示为T' = MLP(MSA(T)),这里MSA表示mutil-head self-attention,MLP表示多层感知机,上述两个操作后面都省略了LN。经过Transformer层后输出也是token的序列,为了重构局部的信息,首先把它还原为原来的空间结构,即从一维reshape为二维,记作I。I = Reshape(T'),reshape操作就完成了从一维的向量到二维的重排列。整个操作可以参见上图的step1。(2)Soft Split与ViT那种hard split不同,T2T-ViT采用了soft split,说直白点就是不同的分割部分会有overlapping。I会被split为多个patch,然后每个patch里面的tokens会拼接成一个token,也就是这篇论文的题目tokens to token,这个步骤也是最关键的一个步骤,因为这个步骤从图像中相邻位置的语义信息聚合到一个向量里面。同时这个步骤会使tokens序列变短,单个token的长度会变长,符合CNN-based模型设计的经验deep-narrow。 T2T module

在T2T模块中,依次通过Re-structurization和Soft Split操作,会逐渐使tokens的序列变短。整个T2T模块的操作可以表示如下:

由于是soft split所以tokens的序列长度会比ViT大很多,MACs和内存占用都很大,因此对于T2T模块来说,只能减小通道数,这里的通道数可以理解为embedding的维度,还使用了Performer[2]来进一步减少内存的占用。 Backbone

为了增加特征的丰富性和减少冗余,需要探索一个更有效的backbone。从DenseNet、Wide-ResNets、SENet、ResNeXt和GhostNet寻找设计的灵感,最终发现:(1)在原ViT的网络结构上采用deep-narrow的原则,增加网络的深度,减小token的维度,可以在缩小模型参数量的同时提升性能。(2)使用SENet[3]中的channel attention对ViT会有提升,但是在使用deep-narrow的结构下提升很小。 Architecture

T2T-ViT由T2T module和T2T-ViT backbone组成。PE是position embedding。对于T2T-ViT-14来说,由14个transformer layers组成,backbone中的hidden dimensions是384。对比ViT-B/16,ViT-B/16有12个transformer layers,hidden dimensions是768,模型大小和MACs是T2T-ViT-14整整三倍。 Experiments

934c3554-7dfe-11eb-8b86-12bb97331649.png

在不使用预训练时,T2T-ViT和ViT的对比,可以看到T2T-ViT真的是完胜ViT啊,不仅模型比你小,精度还比你高。

93bdebfe-7dfe-11eb-8b86-12bb97331649.png

不仅完胜ViT,ResNet也不在话下,说实话看到这个结果的时候真的可以说Transformer战胜了CNN了。 Conclusion

T2T-ViT通过重构图像的结构性信息,克服了ViT的短板,真正意义上击败了CNN。通过提出tokens-to-token的process,逐渐聚合周围的token,增强局部性信息。这篇论文中不仅探索了Transformer-based的网络结构的设计,证明了在Transformer-based模型中deep-narrow要好于shallow-wide,还取得了很好的性能表现。 Reference

[1]A. Dosovitskiy, L. Beyer, A. Kolesnikov, D. Weissenborn, X. Zhai, T. Unterthiner, M. Dehghani, M. Minderer, G. Heigold, S. Gelly, et al. An image is worth 16x16 words: Transformers for image recognition at scale. arXiv preprint arXiv:2010.11929, 2020. [2]K. Choromanski, V. Likhosherstov, D. Dohan, X. Song, A. Gane, T. Sarlos, P. Hawkins, J. Davis, A. Mohiuddin, L. Kaiser, et al. Rethinking attention with performers. arXiv preprint arXiv:2009.14794, 2020. [3]Hu J, Shen L, Sun G. Squeeze-and-excitation networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 7132-7141.

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 可视化
    +关注

    关注

    1

    文章

    1194

    浏览量

    20936
  • 深度学习
    +关注

    关注

    73

    文章

    5502

    浏览量

    121124
  • cnn
    cnn
    +关注

    关注

    3

    文章

    352

    浏览量

    22211

原文标题:Tokens to-Token ViT:真正意义上击败了CNN

文章出处:【微信号:gh_a204797f977b,微信公众号:深度学习实战】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MS5046T/5047T/5048T/5048N——2kSPS、16bit Σ-Δ ADC

    MS5046T/MS5047T/MS5048T/MS5048N 是适合高精度、低成本测量应用的 16bit 模数转换器。提供方案和FAE支持,欢迎大家来咨询了解
    的头像 发表于 11-08 10:49 233次阅读
    MS5046<b class='flag-5'>T</b>/5047<b class='flag-5'>T</b>/5048<b class='flag-5'>T</b>/5048N——<b class='flag-5'>2</b>kSPS、16bit Σ-Δ ADC

    使用PGA300EVM-034,选项ADC Calibration Mode里的“3P-1T” “2P-2T” “3P-3T” 是什么意思?

    请教下,我在使用PGA300EVM-034,在Guided Calibration -> Calibration Setting File 里面,配置文件里有个选项ADC Calibration Mode ,请问这里的“3P-1
    发表于 08-14 07:58

    RA6T2的16位模数转换器操作 [11] 配置RA6T2 ADC模块 (8)

    RA6T2的16位模数转换器操作 [11] 配置RA6T2 ADC模块 (8)
    的头像 发表于 05-24 08:06 357次阅读
    RA6<b class='flag-5'>T2</b>的16位模数转换器操作 [11] 配置RA6<b class='flag-5'>T2</b> ADC模块 (8)

    TRAVEO T2G支持freeRTOS吗?

    我正在使用 Traveo-T2G 套件。 CYTVII-2D-4M-216 套件和 CYT3DLABHBES cpu。 我正在运行英飞凌提供的 TRAVEO T2G 示例驱动程序库。 该 MCU
    发表于 05-21 07:36

    RA6T2的16位模数转换器操作 [10] 配置RA6T2 ADC模块 (7)

    RA6T2的16位模数转换器操作 [10] 配置RA6T2 ADC模块 (7)
    的头像 发表于 05-15 08:06 360次阅读
    RA6<b class='flag-5'>T2</b>的16位模数转换器操作 [10] 配置RA6<b class='flag-5'>T2</b> ADC模块 (7)

    RZ/T2M, RZ/T2L, RZ/N2L电机解决方案套件数据手册

    电子发烧友网站提供《RZ/T2M, RZ/T2L, RZ/N2L电机解决方案套件数据手册.rar》资料免费下载
    发表于 05-13 18:12 5次下载
    RZ/<b class='flag-5'>T2</b>M, RZ/<b class='flag-5'>T2</b>L, RZ/N<b class='flag-5'>2</b>L电机解决方案套件数据手册

    RA6T2的16位模数转换器操作 [9] 配置RA6T2 ADC模块 (6)

    RA6T2的16位模数转换器操作 [9] 配置RA6T2 ADC模块 (6)
    的头像 发表于 05-08 08:06 367次阅读
    RA6<b class='flag-5'>T2</b>的16位模数转换器操作 [9] 配置RA6<b class='flag-5'>T2</b> ADC模块 (6)

    瑞萨教你如何使用RZ/T2L RZ/N2L RSK J-Link OB

      瑞萨RZ/T2L MPU RZ/T2L是款高性能MPU,可通过EtherCAT实现高速、高精度的实时控制。RZ/T2L搭载最大频率为800MHz的Arm Cortex-R52内核
    的头像 发表于 05-07 10:18 1957次阅读
    瑞萨教你如何使用RZ/<b class='flag-5'>T2</b>L RZ/N<b class='flag-5'>2</b>L RSK J-Link OB

    RA6T2的16位模数转换器操作 [8] 配置RA6T2 ADC模块 (5)

    RA6T2的16位模数转换器操作 [8] 配置RA6T2 ADC模块 (5)
    的头像 发表于 04-29 08:08 372次阅读
    RA6<b class='flag-5'>T2</b>的16位模数转换器操作 [8] 配置RA6<b class='flag-5'>T2</b> ADC模块 (5)

    RA6T2的16位模数转换器操作 [7] 配置RA6T2 ADC模块 (4)

    RA6T2的16位模数转换器操作 [7] 配置RA6T2 ADC模块 (4)
    的头像 发表于 04-20 08:06 351次阅读
    RA6<b class='flag-5'>T2</b>的16位模数转换器操作 [7] 配置RA6<b class='flag-5'>T2</b> ADC模块 (4)

    RA6T2的16位模数转换器操作 [6] 配置RA6T2 ADC模块 (3)

    RA6T2的16位模数转换器操作 [6] 配置RA6T2 ADC模块 (3)
    的头像 发表于 04-12 08:06 299次阅读
    RA6<b class='flag-5'>T2</b>的16位模数转换器操作 [6] 配置RA6<b class='flag-5'>T2</b> ADC模块 (3)

    RA6T2的16位模数转换器操作 [5] 配置RA6T2 ADC模块 (2)

    RA6T2的16位模数转换器操作 [5] 配置RA6T2 ADC模块 (2)
    的头像 发表于 04-04 08:05 350次阅读
    RA6<b class='flag-5'>T2</b>的16位模数转换器操作 [5] 配置RA6<b class='flag-5'>T2</b> ADC模块 (<b class='flag-5'>2</b>)

    RA6T2的16位模数转换器操作 [4] 配置RA6T2 ADC模块 (1)

    RA6T2的16位模数转换器操作 [4] 配置RA6T2 ADC模块 (1)
    的头像 发表于 03-29 08:05 359次阅读
    RA6<b class='flag-5'>T2</b>的16位模数转换器操作 [4] 配置RA6<b class='flag-5'>T2</b> ADC模块 (1)

    RZ/T2M、RZ/N2L、RZ/T2L组 硬件设计指南

    电子发烧友网站提供《RZ/T2M、RZ/N2L、RZ/T2L组 硬件设计指南.pdf》资料免费下载
    发表于 02-02 09:39 2次下载
    RZ/<b class='flag-5'>T2</b>M、RZ/N<b class='flag-5'>2</b>L、RZ/<b class='flag-5'>T2</b>L组 硬件设计指南

    RZ/T2M RZ/N2L RZ/T2L系列应用心得(上)

    T2M R9A07G075M28GBG#AC0为例,在官网找到RZ/T2M产品页,然后向下找到Product option界面。
    的头像 发表于 12-29 12:23 2550次阅读
    RZ/<b class='flag-5'>T2</b>M RZ/N<b class='flag-5'>2</b>L RZ/<b class='flag-5'>T2</b>L系列应用心得(上)