作者 | ChenMnZ 编辑 | 极市平台
原文链接:zhuanlan.zhihu.com/p/585108361
点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心【全栈算法】技术交流群
导读
在不影响Top-1 准确率的情况下,该方法在ImageNet上将LV-ViT-S的FLOPs降低53%, GPU上实测推理速度也加快了2倍。
此文章介绍刚被AAAI-2023会议接收的动态ViT论文
[CF-ViT: A General Coarse-to-Fine Method for Vision Transformer]
论文链接:
https://arxiv.org/abs/2203.03821
代码、训练日志、预训练模型皆已在GitHub上开源:
https://github.com/ChenMnZ/CF-ViT
TL;DR (太长不看版)
Vision Transformers (ViTs)的核心操作是self-attention,而self-attention的计算复杂度和输入token数目的平方成正比,因此压缩ViT计算量最直接的思路就是减少推理时的token数目,也即减少图像划分的patch数目。论文通过两阶段自适应推理减少推理过程的token数目:第一阶段将图像划分为粗粒度(大尺寸)patch,目的是使用较少的计算量识别“简单”样本;第二阶段将第一阶段中信息量高的粗粒度patch进一步划分成细粒度(小尺寸)patch,目的是使用较少的计算量识别“困难”样本。论文还设计了全局注意力用于识别信息量高的粗粒度patch,以及特征复用机制用于增大两阶段推理的模型容量。在不影响Top-1 准确率的情况下,该方法在ImageNet上将LV-ViT-S的FLOPs降低53%, GPU上实测推理速度也加快了2倍。
![df81a7a196f5804dd8168492b055c394.jpeg](https://i-blog.csdnimg.cn/blog_migrate/c537821869d8300d48cb1fd79d0ed0e2.jpeg)
1. Introduction (研究动机及简介)
近年来,Vision Transforms (ViTs)受到了学术界的广泛关注,被应用到各式各样的视觉任务中。ViT将图片切割成固定数目的patch,之后将每个patch线性映射成token,输入一系列堆叠的Transformer Block。其中,Transformer Block包含两个组件:Multi Head Self-Attention (MHSA) 和 Feed Forward Network (FFN)。假设图像被编码成 个 维token,则Transformer Block的计算复杂度为:
如上式,即MHSA的计算复杂度和token数的平方成正比,FFN的计算复杂度和token数成正比。因此,一种简单的高效推理思路是通过降低推理时的token数目来对ViTs的计算量进行压缩。
那么问题来了,如何降低token数目呢?token对应的是图像中的patch,也即图像中的某个区域,减少token数目的本质在于挖掘图像的空间冗余性,以减少冗余区域的token编码数量。而图像的空间冗余性根据粒度,其实可以划分为两种:
1) 图像之间的空间冗余性: 根据图像识别难度,可以将图像划分成简单图像和困难图像。如下图所示:对于简单图片,使用较低计算量就能够正确识别。对于困难图片,可能只有使用较高的计算量才能实现正确识别。
![4a5776582e08285c8959e8697366da15.jpeg](https://i-blog.csdnimg.cn/blog_migrate/da81219640a59f72d512e40fa2429149.jpeg)
2)图像内部的空间冗余性: 根据图像的语义信息,可以将图像划分成前景区域和背景区域,模型能否成功识别主要依赖于前景区域。因此,我们可以认为前景部位是重要区域,背景区域是不重要区域。假设计算量是可自适应调度的,显然,对于重要区域,应该分配更多的计算量;而对于不重要区域,则使用较少的计算量。
![2e7157a396998269dee81667169343f0.jpeg](https://i-blog.csdnimg.cn/blog_migrate/47fa8bb20b57738947a4a0181a2b63e6.jpeg)
文中探索了上述两种空间冗余性在ViT上的特殊表现形式:
1) 图像之间的空间冗余性表现为大部分图像编码成少量token即可分类成功。 如表1所示,196个token计算量是49个token的4.18倍,但带来的性能提升只有6.6%,这表明,大部分图片较为简单,例如ImageNet-1k验证集中73.2%的图片用49个token编码就能成功分类。若是推理过程中对于简单图片使用较少token数量进行编码,则可以在保证性能的同时减少计算量。
![e2897e0dd94492517fd31633c54a5503.jpeg](https://i-blog.csdnimg.cn/blog_migrate/075e7ff23ca6093d144a87959b0d5425.jpeg)
2) 图像内部的空间冗余性表现为只将重要的token输入模型,就可以获得较高准确率。 我们采用预训练好的DeiT-S模型作为baseline,其将图像编码成196个token。如图4所示,我们使用attention map在输入端对token进行筛选:分别塞选出100个注意力值最大的token(绿色)和100个注意力值最小的token(红色)。可以发现,保留注意力值最大的100个token性能优势极为明显。其中,attention map通过先将图片输入模型前向推理一次获得。
![809f60608d199201b2b5a5e092ecf9c9.jpeg](https://i-blog.csdnimg.cn/blog_migrate/2f8ed9e0a84796a93081f1db7c21da93.jpeg)
2. Method (方法详述)
受上述所观察现象的启发,同时考虑图像之间的空间冗余性与图像内部的空间冗余性,论文提出了一个由粗到细的两阶段动态推理架构(Coarse-to-Fine Vision Transformer, CF-ViT)。
![46afe33051dd63605f5911aa6f901c9f.jpeg](https://i-blog.csdnimg.cn/blog_migrate/5317e0350e5882274a1cfadedf9f7682.jpeg)
首先介绍CF-ViT的推理过程。如图5所示:
1)第一阶段是利用图像间空间冗余性的粗粒度推理,其目的是使用较少计算量获得”简单“图片的正确识别结果。 具体做法是对图像使用粗粒度patch分割,分割后的结果编码成token输入ViT模型,以低成本获得粗粒度推理结果。紧接着判断粗粒度推理结果是否可信。此处follow此前early-exiting工作,采用预测置信度与一个预设阈值进行比较。若预测置信度大于阈值,则认为结果可信,结束推理;否则认为结果不可信,进入第二阶段推理。
2)第二阶段是利用图像内空间冗余性的细粒度推理,其目的是使用较少计算量获得”困难“图片的正确识别结果。 具体做法是识别图像中重要的粗粒度patch,然后将每一个重要的粗粒度patch进行进一步的细粒度切割,获取对应的四个细粒度patch。最后将新的patch分割结果编码成token输入ViT模型以获得细粒度推理结果。
值得注意的是,两个阶段中用到的ViT模型是共享参数的,因此减少了多阶段推理的参数负担。同时,为了能够更好的协同两个推理阶段,论文设计了两个协同模块,以下进行简单介绍,详见paper:
1)第一个模块是重要区域识别 (Informative Region Identification), 其主要通过统计全局类注意力图来衡量每一个粗粒度patch的重要性,使得第二阶段可以轻量化无负担的筛选图像中的重要区域,然后进一步进行细粒度切割。
2)第二个模块是特征复用(Feature Reuse),其将第一阶段提取到的特征融合进第二阶段的推理过程。具体做法是对第一阶段提取到的特征进行线性变换和维度对齐,然后直接和第二阶段的图像编码相加,以此实现跨粒度特征注入,从而进一步提高第二阶段的模型容量。
在训练时, 我们使用真实标签 监督细粒度推理结果 , 使用细粒度推理结果 监督粗粒度推 理结果 :
3. Experiments (实验结果)
实验中,论文基于DeiT-S和LV-ViT-S测试了所提出的方法。如表2所示,在不影响模型准确率的前提下,CF-ViT分别分别将DeiT-S与LV-ViT-S的计算量降低61%和53%。值得注意的是, 表示所有的样本都会输入细粒度推理阶段,此种情形下CF-ViT分别将DeiT-S和LV-ViT-S的Top-1准确率提升1.0%和0.3%,且使用更少的计算量。同时,我们也测试了CF-ViT在ImageNet上的实际推理速度:基于Nvidia A100 GPU,batch size=1024,CF-ViT可以显著提高推理速度。
![dd7618bdc22d47e97a2f71d5ea0931a1.jpeg](https://i-blog.csdnimg.cn/blog_migrate/194a2c3bbf899855a19f822a5ece20f5.jpeg)
表3展示了CF-ViT和只利用图像内部空间冗余性的token剪枝方法的对比结果。
![0b6a8578b076b5e089e793f7f30d2f83.jpeg](https://i-blog.csdnimg.cn/blog_migrate/fb1a271ac6a04295233fffc497738a67.jpeg)
图5展示了CF-ViT和现有只利用图像间空间冗余性的early-exiting方法的对比结果。值得注意的是,CF-ViT不仅性能优于DVT,且得益于两个推理阶段共享模型参数,其参数量仅为DVT的 。
![406a0901284ef39e01d59cd7d84572ea.jpeg](https://i-blog.csdnimg.cn/blog_migrate/f110f72051e81502d0706da9cccc0813.jpeg)
图6展示了在粗粒度推理阶段被正确分类和在细粒度推理阶段被正确分类的样本,其中细粒度推理阶段没有灰色表示的是模型识别出的重要区域。可以发现,在第一阶段就被正确识别的往往是”简单“样本,其特征是目标物体较为显著,背景简单;而在第二阶段才被正确识别的往往是”困难“样本,目标物体较小,且背景较为杂乱。同时,可以发现所提出的重要区域识别模块往往能够成功定位到目标物体,符合预期。
![461e050a00b59620bd88cfcd1ba2e76c.jpeg](https://i-blog.csdnimg.cn/blog_migrate/7fc8f8abf0a0ee529a4e08eec6f40100.jpeg)
4. Conclusion (结语)
论文对ViT中存在的空间冗余性进行探究,将其划分为图像间空间冗余性与图像内部空间冗余性。此前的方法通常只考虑两种空间冗余性的一种,而此论文提出一个由粗到细的两阶段自适应推理结构,对两种类型的空间冗余性同时进行利用,实现了计算量与准确率更好的平衡。
往期回顾
史上最全综述 | 3D目标检测算法汇总!(单目/双目/LiDAR/多模态/时序/半弱自监督)
【自动驾驶之心】全栈技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、规划控制、模型部署落地、自动驾驶仿真测试、硬件配置、AI求职交流等方向;
添加汽车人助理微信邀请入群
备注:学校/公司+方向+昵称
自动驾驶之心【知识星球】
想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球(三天内无条件退款),日常分享论文+代码,这里汇聚行业和学术界大佬,前沿技术方向尽在掌握中,期待交流!