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

    文章

    1020

    浏览量

    20554
  • 深度学习
    +关注

    关注

    73

    文章

    5237

    浏览量

    119908
  • cnn
    cnn
    +关注

    关注

    3

    文章

    327

    浏览量

    21298

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

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

收藏 人收藏

    评论

    相关推荐

    双向可控硅导通问题,去掉触发信号,T1,T2极也断开了

    multisim14 中用双向可控硅MAC12HCDG仿真时,为什么触发电流撤掉后,T1,T2极也断开了灯泡不亮,电路如下图,请帮忙看看电路是否有问题?
    发表于 02-04 13:24

    如何使用UART将TRAVEOTM T 2G设备从深度睡眠中唤醒

    睡眠模式下可用,但是 UART 模式不支持从深度睡眠唤醒。 在这种情况下,要通过 UART 实现从深度睡眠中唤醒,一种选择是使用 UART_RX 引脚的 GPIO 中断作为唤醒源。 在此应用程序中,在
    发表于 01-31 06:08

    【涂鸦T2-U开发板试用体验】嵌入式linux开发板涂鸦T2-U

    喜欢互联网产品的朋友们,大家都听说过涂鸦,是全球化的家IoT[开发平台]。也在卖开发板,没想到就给卖爆了,好几次缺货,价格只要29.9元,可以说很香了。 这是我到手的涂鸦T2-U开发板产品
    发表于 12-22 11:21

    【涂鸦T2-U开发板试用体验】涂鸦T2-U开发板初体验

    今天刚收到涂鸦T2-U开发板,先给朋友做个开发板简单介绍; 涂鸦 T2-U 开发板,是专为帮助开发者快速开发出智能硬件而生的款开发板。它的主控采用低功耗嵌入式 Wi-Fi 模组,模组内置了
    发表于 12-22 10:59

    搭建T2 Development Board V1.0.0的Arduino环境

    Development Board V1.0.0的行为是否符合您的预期。您可以使用适当的电源适配器为T2 Development Board V1.0.0供电。 进行进步配置和开发: 根据需要
    发表于 12-15 17:59

    【涂鸦T2-U开发板试用体验】+T2 Development Board V1.0.0 python环境搭建

    使用pip安装所需的库和工具。例如,如果您需要安装NumPy库,可以运行以下命令: ```pip3 install numpy``` 6. 现在,您可以T2 Development Board V1.0.0上使用Python
    发表于 12-15 17:55

    【涂鸦T2-U开发板试用体验】2、添加光感bh1750

    前言 本章介绍如何在涂鸦T2-U开发板上添加光感bh1750驱动实现定时读取数据。 、基础介绍 BH1750( GY-302 )光照传感器 这篇文章有bh1750的基础介绍。 我这里总结
    发表于 12-01 22:55

    【涂鸦T2-U开发板试用体验】1、T2-U开发环境搭建及调试

    专为信号处理扩展的指令使其可以有效地实现音频编码和解码== 模组规格书,存疑 三、电路图 https://github.com/tuya/tuyaos-development-board-
    发表于 11-25 23:38

    【涂鸦T2-U开发板试用体验】远程调试blink

    的使用体验。 在试用过程中,我选择了远程调试Blink主题作为示例项目。Blink是个基于tuyaos平台的开源智能家居系统,可以通过Wi-Fi控制LED等设备的开关状态。在涂鸦T2开发板上实现
    发表于 11-17 15:54

    【涂鸦T2-U开发板试用体验】第帖-开箱体验

    先感谢涂鸦智能提供的试用机会,有幸体验T2-U开发板。 涂鸦 T2-U 开发板 是款专为开发者打造的智能硬件产品原型开发板。可与其他功能电路模组或电路板配合使用,实现各种智能硬件产品的开发。 涂鸦
    发表于 11-16 20:19

    想使用卡模拟(CE) T4T的P2P demoIni()初始化接口需要如何配置?

    想使用卡模拟(CE),T4T的P2P,demoIni()初始化接口需要如何配置?还有就是这个P2P和AP2P有什么区别?
    发表于 08-05 07:49

    ARM 11556T2-S 技术参考手册

    ARM11556T2-S 技术参考手册
    发表于 08-02 19:39

    ARM 940T 技术的参考手册

    都很重要的嵌入控制应用程序。ARM 940T 支持32比特的ARM和16比特的缩略图教学组,允许用户在高性能和高代码密度之间进行交换。ARM 940T 支持ARM调试结构,包含用于协
    发表于 08-02 18:37

    ARM920T处理器技术参考手册

    处理器核心是一种哈佛体系结构的设备,使用由Fetch、Decode、Execute、Memory和Write阶段组成的五级流水线实现。它可以作为个独立的核心提供,
    发表于 08-02 13:05

    ARM1020T技术参考手册

    ARM1020T处理器集成了ARM10TDMI整数单元,实现了ARMv5T架构。它支持ARM和Thumb指令集,包括嵌入式ICE逻辑和JTAG软件调试功能。ARM1020T
    发表于 08-02 08:33