ECCV 2022 | 在视觉Transformer上进行递归,不增参数,计算量还少

简介: ECCV 2022 | 在视觉Transformer上进行递归,不增参数,计算量还少
今天跟大家分享一篇来自CMU等机构的论文《Sliced Recursive Transformer》,该论文已被 ECCV 2022 接收。

目前 vision transformer 在不同视觉任务上如分类、检测等都展示出了强大的性能,但是其巨大的参数量和计算量阻碍了该模型进一步在实际场景中的应用。基于这个考虑,本文重点研究了如何在不增加额外参数量的前提下把模型的表达能力挖掘到极致,同时还要保证模型计算量在合理范围内,从而可以在一些存储容量小,计算能力弱的嵌入式设备上部署。


基于这个动机,Zhiqiang Shen、邢波等研究者提出了一个 SReT 模型,通过循环递归结构来强化每个 block 的特征表达能力,同时又提出使用多个局部 group self-attention 来近似 vanilla global self-attention,在显著降低计算量 FLOPs 的同时,模型没有精度的损失。





总结而言,本文主要有以下两个创新点:

  1. 使用类似 RNN 里面的递归结构(recursive block)来构建 ViT 主体,参数量不涨的前提下提升模型表达能力;
  2. 使用 CNN 中 group-conv 类似的 group self-attention 来降低 FLOPs 的同时保持模型的高精度;


此外,本文还有其他一些小的改动:

  1. 网络最前面使用三层连续卷积,卷积核为 3x3,结构直接使用了研究者之前 DSOD 里面的 stem 结构;
  2. Knowledge distillation 只使用了单独的 soft label,而不是 DeiT 里面 hard 形式的 label 加 one-hot ground-truth,因为研究者认为 soft label 包含的信息更多,更有利于知识蒸馏;
  3. 使用可学习的 residual connection 来提升模型表达能力;


如下图所示,本文所提出的模型在参数量(Params)和计算量(FLOPs)方面相比其他模型都有明显的优势:


下面我们来解读这篇文章:

1.ViT 中的递归模块

递归操作的基本组成模块如下图:


该模块非常简单明了,类似于 RNN 结构,将模块当前 step 的输出作为下个 step 的输入重新输进该模块,从而增强模型特征表达能力。

研究者展示了将该设计直接应用在 DeiT 上的结果,如下所示:


可以看到在加入额外一次简单递归操作之后就可以得到将近 2% 的精度提升。

当然具体到全局网络结构层面还有不同的递归构建方法,如下图:


其中 NLL 层(Non-linear Projection Layer)是用来保证每个递归模块输入输出不完全一致。论文提出使用这个模块的主要原因是发现在上述 Table 1 里面更多次数的递归操作并没有进一步提升性能,说明网络可能学到了一个比较简单的状态,而 NLL 层可以强制模型输入输出不一致从而缓解这种情况。同时,研究者从实验结果发现上图 (1) internal loop 相比 external loop 设计拥有更好的 accuracy-FLOPs 结果。

2. 分组的 Group Self-attention 模块

如下图所示,研究者提出了一种分组的 group self-attention 策略来降低模型的 FLOPs,同时保证 self-attention 的全局注意力,从而使得模型没有明显精度损失:


Group Self-attention 模块具体形式如下:


Group self-attention 的缺点是只有局部区域会相互作用,研究者提出通过使用 Permutation 操作来近似全局 self-attention 的机制,同时通过 Inverse Permutation 来复原和保留 tokens 的次序信息,针对这个部分的消融实验如下所示:


其中 P 表示加入 Permutation,I 表示加入 Inverse  Permutation,-L 表示如果 group 数为 1,就不使用 P 和 I(比如模型最后一个 stage)。根据上述表格的结果,研究者最后采用了 [8, 2][4,1][1,1] 这种分组设计。

3. 其他设计

可学习的残差结构 (LRC):


研究者尝试了上图三种结构,图(3)结果最佳。具体而言,研究者在每个模块里面添加了 6 个额外参数(4+2,2 个在 NLL 层),这些参数会跟模型其他参数一起学习,从而使网络拥有更强的表达能力,参数初始化都为 1,在训练过程 6 个参数的数值变化情况如下所示:




Stem 结构组成:


如上表所示,Stem 由三个 3x3 的连续卷积组成,每个卷积 stride 为 2。

整体网络结构:

研究者进一步去掉了 class token 和 distillation token,并且发现精度有少量提升。


消融实验:


模型混合深度训练:

研究者进一步发现分组递归设计还有一个好处就是:可以支持模型混合深度训练,这种训练方式可以大大降低深度网络结构优化复杂度,研究者展示了 108 层不同模型结构优化过程的 landscape 可视化,如下图所示,可以很明显的看到混合深度结构优化过程困难程度显著低于另外两种结构。


最后,分组 group self-attention 算法 PyTorch 伪代码如下:


更多方法和实验细节可以阅读原论文和 GitHub 代码。


相关文章
|
4月前
|
弹性计算 人工智能 运维
新购续费同价,阿里云ECS云服务器2核2G3M99元1年、2核4G5M199元1年,2027年3月结束
阿里云打破“新购低价、续费高价”的行业惯例,推出“新购续费同价”的阿里云经济型e实例和通用算力型u1实例长效特惠活动,价格分别为99元/年和199元/年。活动面向新老用户、个人及企业,提供成本确定性。经济型e实例适合轻量级应用,通用算力型u1实例满足企业入门需求。此外,阿里云还为新用户提供轻量应用服务器抢购活动,价格低至38元/年。用户可在活动期内锁定长期低成本云服务。
882 6
|
4月前
|
机器学习/深度学习 弹性计算 人工智能
阿里云新用户判定规则,2026新用户新购与试用优惠政策解读
2026年,阿里云针对新用户推出精准判定规则及优惠政策。新用户指无付费记录的阿里云会员,可享轻量应用服务器超低价抢购、云服务器ECS长效特惠及第九代实例折扣。此外,新用户还能领取企业迁云补贴、学生专属优惠等,并通过组合购特惠一站式采购多种产品,享受额外折扣。对于有疑虑的用户,阿里云提供免费试用计划,可零成本体验云服务。
|
JSON 供应链 API
1688 电商 API 接口,供应商信息查询便捷通道
1688电商API接口为企业提供高效查询供应商信息的解决方案,支持自动化获取公司名称、联系方式、信用评级等核心数据,并具备批量处理与精准筛选功能,提升供应链管理效率。
|
存储 Web App开发 缓存
磁盘空间不足怎么清理?试试这7种方法
在使用电脑过程中,C盘空间不足是常见问题。本文提供多种实用清理方法,包括分析磁盘、清理文件、使用系统工具、清除软件缓存、卸载软件、调整系统保护及分区大小等,帮助你有效释放磁盘空间,提升系统运行效率。
|
8月前
|
数据采集 人工智能 监控
如何在技术面试中自信应对“大模型微调”话题?
本文整理了测试开发在面试中常见的大模型微调相关问题。涵盖了从显存需求、数据构建到训练策略等35个关键点,重点分析了SFT与预训练的区别、领域适应与灾难性遗忘等核心挑战。文章强调测试开发人员需掌握模型评估、数据质量控制和训练监控等技能,以适应AI时代对质量保障提出的新要求。
|
机器学习/深度学习 人工智能 编解码
【AI系统】ESPNet 系列
本文介绍了ESPNet系列,专注于高分辨率图像的语义分割,强调了其高效的计算性能和低内存、功耗特性。ESPNet V1提出了ESP模块,通过分解标准卷积为point-wise卷积和空洞卷积金字塔,大幅减少了参数量和计算成本。ESPNet V2则进一步优化,采用了分组卷积和深度空洞分离卷积,增强了模型的有效感受野,同时降低了浮点计算量,适用于多种视觉任务。
519 11
|
10月前
|
人工智能 供应链 算法
AI 产业服务平台:打造产业智能化的“加速器”与“连接器”
AI产业服务平台整合技术、数据、算力与人才,为中小企业提供低门槛、一站式AI赋能服务,覆盖研发、生产、营销、管理全链条,助力产业智能化转型。
378 0
ThreeJs创建球体
这篇文章讲解了如何在Three.js中创建并添加一个球体到场景中,包括定义球体的几何形状、赋予材质以及最终渲染球体的过程。
739 1
|
安全 网络协议 网络安全
BUUCTF:Misc 解析(二)
BUUCTF:Misc 解析(二)
经典面试题:用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
在 C 语言中,使用 `#define` 预处理指令可以为常量命名,提高代码可读性和易维护性。通过基本时间单位换算(1 年 = 365 天 × 24 小时 × 60 分钟 × 60 秒),可以计算出一年中的总秒数,并将其定义为 `SECONDS_IN_A_YEAR`。示例代码展示了如何定义和打印这一常量,最终输出一年中有 31536000 秒。
956 15