Multi-Scale Densenet续作?搞定Transformer降采样,清华联合华为开源动态ViT!
作者丨小马
编辑丨极市平台
先验知识
Transformer最近在CV领域展现出了不错的效果,Vision Transformer(ViT)的大致流程可分为两步:
1)因为Self-Attention(SA)的计算复杂度是和输入特征的大小呈平方关系的,所以如果直接将224x224的图片输入到Transformer中,会导致计算量的“爆炸”。因此,ViT的第一步是将图片转换成更小的token(比如16x16),然后将这些token进行flatten后输入到Transformer中。
2)利用Transformer进行视觉特征的提取并分类。
在第一步中,图片转换成token的操作相当于是一个降采样的操作,降采样的倍数越大(获得的token越少),损失的信息越大,ViT的计算速度也就越快。降采样的倍数越小(获得的token越多),损失的信息越小,ViT的计算速度也就越慢。在以前的ViT中,没有考虑图片的内容,将所有图片都转换成固定大小的token,就会导致对于“简单图片”,这样的“降采样”过于精细,造成计算资源的浪费;对于“复杂”图片,这样的降采样细粒度不足,造成精度的损失。因此,本文作者就提出了动态的ViT来解决这个问题。
Noting:感兴趣的同学可以再去看看黄高老师的Multi-scale DenseNet[1],我个人觉得,这篇文章的Motivation和Multi-scale DenseNet很像。
Multi-scale DenseNet的Motivation这样的:对于分类网络的测试而言,有些输入图像是网络容易分类的(也就是简单样本,通常是主体比较明确,背景比较清晰),有些输入图像是网络难分类的(也就是困难样本,通常是主体被遮挡会很小,背景比较复杂)。以softmax输出为例,假设一个2分类的例子,如果一张图像属于两个类的概率分别是0.01和0.99,和一张图像属于两个类的概率分别是0.51和0.49,显然相比之下前者更容易分类。那么从这个点出发,作者就想到了能不能对于简单图像仅采用浅层的速度较快(对应到这篇文章就是用更少的token)的网络来分类,而对于难分类图像再采用深层的(对应到这篇文章就是更多的token)速度慢一点的网络来分类。
1. 论文和代码地址
Not All Images are Worth 16x16 Words: Dynamic Vision Transformers with Adaptive Sequence Length
论文地址:https://arxiv.org/abs/2105.15075
代码地址:https://github.com/blackfeather-wang/Dynamic-Vision-Transformer
2. Motivation
首先作者做了一个实验(Table1),用14x14的token能达到76.7%的准确率;用4x4的token就能达到60.8%的准确率,这说明ImageNet中很多的图片用4x4的token就能识别准确了(也就是有很多图片都是简单样本)。用14x14token计算量是4x4的token计算量的8.5倍,因此全部图片都用14x14的token在计算上其实是一种浪费。
因此,作者就提出了先用少的token进行预测,如果置信度能够大于某一个阈值,就直接输出结果;否则就用更多的token进行预测,如果置信度能够大于某一个阈值,就直接输出结果…一直循环,直到最后一层ViT(用最多的token进行预测)。
3. 方法
3.1.1. Overview
首先我们来看整个网络的结果,非常简单,由一系列串联的ViT组成,每个结构都是接收了不同token数量表示的图片。在训练的时候,是从上层到下层,全部结构都训练;而在测试的时候,每经过一个ViT,都会对当前输出进行一次验证,如果prediction大于阈值,那么就直接输出类别;否则就进入下一层ViT进行预测。
训练时的损失函数如下:
除了串联的ViT,这个结构中三个部分值得注意1)Feature Reuse;2)Relationship Reuse;3)Exit(Adaptive Inference)。下面我们详细讲一下这三个结构的具体实现:
3.1.2. Feature Reuse
下层的ViT如果只接受更多token表示的图片信息,而将上层通过ViT后的特征进行丢弃,这就意味着上面ViT的计算结果对于下面的ViT计算毫无用处,这就造成了计算资源的浪费。因此Feature Reuse就是一个特征重用的模块,将上游ViT最后一层输出的特征取出,经MLP变换和上采样后,作为上下文信息,以Concat的方式整合入下游模型每一层的MLP模块中。
具体实现如上图的灰色框中所示的一样,首先将上层ViT的特征通过LN-MLP进行非线性变换并压缩维度:
然后,将上面的到的上下文信息El以concat的方式与当前层ViT的特征进行融合,再进行LN-MLP:
3.1.3. Relation Reuse
相比于CNN,ViT的一个显著优点是,它的Self-Attention能够聚合整个图像中的信息,从而有效地对长序列信息进行建模。既然不同token之间的关系也是非常重要的,作者进一步对上游ViT的关系矩阵进行了重用,使得下层的ViT能够进行更加准确的关系建模,这一步就是论文中的Relation Reuse。
Relation Reuse的操作如上图的灰色框所示:
对于每一层ViT,如果不进行Relation Relation,那么Self-Attention的计算过程为:
现在我们需要将上层的attention map进行重用,第一步,我们首先将上层所有的attention map进行concat:
然后我们将这些attention map通过一个转换网络rl()(结构如下图所示),使得大小和维度与当前层的attention对应;然后将转换后的上层attention map与当前层的attention进行相加,得到relation reuse的attention map。
3.1.4. Exit(Adaptive Inference)
对于第i层的预测,我们可以得到预测结果pip_ipi,并且第i层会有阈值ηi\eta _iηi,如果pi>ηip_i > \eta _ipi>ηi,那么就可以执行exit操作,输出预测结果;否则进入下一层ViT。
在FLOPs<B的情况下,我们希望能到更高的准确率,这就变成了一个优化的问题:
作者采用遗传算法来解决这个问题。
4.实验
4.1. 在ImageNet上的实验结果
上面2张图时分别用T2T-ViT和DeiT作为ViT结构的实验,可是看出在相同的准确率下,本文的结构确实可以加速很多。
下表展示了,在相同的速度下,本文准确率更高;在相同准确率下,本文速度更快。
4.2. CIFAR-10/100上的结果
从上表可以看出,在小数据集上,在相同准确率下,本文预测速度更快。
4.3. Feature Reuse的消融实验
可以看出,使用所有上层的Feature信息,比不使用和只使用浅层或者一半的效果更好。
4.3. Relation Resue的消融实验
可以看出,使用所有上层的Relation信息,比不使用和只使用浅层或者一半的效果更好。
4.4. 可视化
从图中可以看出,简单样本是那种背景简单,主体占据图片的绝大部分区域;困难样本则相反。
5. 总结
1、至少在我看来,这篇文章的思想真的跟黄高老师以前的那篇Multi-scale DenseNet的思路真的motivation非常像,当然在实现上还是有所不同的。说明一个好的idea永远不会过时。
2、这篇文章虽然测试的时候能根据图片自适应划分token,但是一次要训练多个ViT,那么训练时间就会大大延长。如果不同token数量的ViT能够参数共享,并且在训练之前就能够通过一个网络自动判断出最合适的token划分方法,那就是真正的input adaptive的动态ViT了。
参考文献
[1]. Huang, Gao, et al. “Multi-scale dense convolutional networks for efficient prediction.” arXiv preprint arXiv:1703.09844 2 (2017).
Multi-Scale Densenet续作?搞定Transformer降采样,清华联合华为开源动态ViT!相关推荐
- 三步10分钟搞定数据库版本的降迁 (将后台数据库SQL2008R2降为SQL2005版本)
三步10分钟搞定数据库版本的降迁 (将SQL2008R2降为SQL2005版本) 转载原文,并注明出处!虽无多少技术含量,毕竟是作者心血原创,希望理解. 转自 http://blog.csdn.net ...
- AI模型落地难?试试这个15分钟搞定的开源工具
自古兵家作战就讲究一个「度」. 公元 200年,官渡之战后.死敌袁绍的残兵败卒远逃塞北,劳师远征还是穷寇莫追,曹操陷入纠结.鬼才谋士郭嘉建言道:"用兵贵在神速!远征千里之外,辎重多.行军慢, ...
- mysql降低数据库版本_三步10分钟搞定数据库版本的降迁 (将后台数据库SQL2008R2降为SQ...
三步10分钟搞定数据库版本的降迁 (将SQL2008R2降为SQL2005版本) 前思后想仍觉得实战数据库版本的降迁一文中的方式不仅老土而且低效,故有了下文三步搞定数据库从MSSQL2008R2 高版 ...
- 老板要的物联网可视化大屏,我30分钟就搞定了
摘要:不知道大家在生活中有没有见过一些非常酷炫的可视化大屏应用? 本文分享自华为云社区<老板要的物联网可视化大屏,我30分钟就搞定了>,作者:华为云社区精选 . 不知道大家在生活中有没有见 ...
- 基础+优化+架构一键搞定,华为大佬的“百万级”MySQL笔记
前言 MySQL不用多说,大家都知道它是目前最为活跃热门的开源数据库,由于成本低,操作简易的特点,所以在互联网企业中被广泛使用,即使是头部的BATJ.由此可见,想要在互联网行业混得风生水起,或者说想要 ...
- NeurIPS2021 HRFormer:HRNet又出续作啦!国科大北大MSRA提出高分辨率Transformer,开源!...
关注公众号,发现CV技术之美 本文分享NeurIPS 2021论文『HRFormer: High-Resolution Transformer for Dense Prediction』,HRNet又 ...
- 通用人工智能最新突破!一个Transformer搞定一切
Datawhale干货 编辑:梦晨 鱼羊,来源:量子位 通用人工智能,还得看DeepMind. 这回,只一个模型,使用相同的权重,不仅把看家本领雅达利游戏玩得飞起. 和人类聊聊天.看图写话也不在话下. ...
- 静态内容负载均衡的具体实现-续《几百元搞定大型网站》
配置过Apache+Mod_JK+Tomcat的同学应该记得有一个workers.properties的文件,里面的格式如下: worker.list = www worker.NODE0.port= ...
- 彻底搞定用Xdoclet生成Hibernate所有配置文件
背景: 本人在用Xdoclet生成hibernate的配置文件.实体映射文件和sql脚本的时候,每次总要出点问题,今日问题再现,我在网上泡了一个多小时,没有一篇很完整,很成功的例子.一怒之下, ...
最新文章
- AAAI 2020 | 滴滴东北大学提出自动结构化剪枝压缩算法框架,性能提升高达120倍...
- 实施项目--为什么开发人员一直在抱怨需求变动
- Efficient local alignment discovery amongst noisy long reads
- Swift Package Manager 库制作
- 数据倾斜的原因和解决方案
- CMake常见变量——Project和CMake相关信息
- 6.exit _exit _Exit
- word日常排版(页眉和页脚)
- 2019牛客多校Monotonic Matrix
- System V IPC之信号灯
- .balignl 16,0xdeadbeef浅析
- Android获取屏幕实际高度跟显示高度,判断Android设备是否拥有虚拟功能键
- 实体类equals/hashCode
- Bootstrap3 列表元素的样式
- 计算机创新发展战略,计算机行业:《智能汽车创新发展战略》征求意见稿点评...
- 一台弹性云服务器可以挂载多块磁盘吗?
- matlab数字图像处理大作业_线上教学优秀案例(16) | 数字图像处理基于蓝墨云+企业微信的线上教学经验分享...
- 负载均衡器之F5和Nginx
- Xcode命令行简单了解一下
- win7删除文件夹提示找不到项目,文件删不掉怎么办?