CVPR2023 RIFormer, 无需TokenMixer也能达成SOTA性能的极简ViT架构

编辑 | Happy
首发 | AIWalker
链接 | https://mp.weixin.qq.com/s/l3US8Dsd0yNC19o7B1ZBgw

project,
paper,
code

Token Mixer是ViT骨干非常重要的组成成分,它用于对不同空域位置信息进行自适应聚合,但常规的自注意力往往存在高计算复杂度与高延迟问题。而直接移除Token Mixer又会导致不完备的结构先验,进而导致严重的性能下降。

基于此,本文基于重参数机制提出了RepIdentityFormer方案以研究无Token Mixer的架构体系。紧接着,作者改进了学习架构以打破无Token Mixer架构的局限性并总结了5条指导方针。搭配上所提优化策略后,本文构建了一种极致简单且具有优异性能的视觉骨干,此外它还具有高推理效率优势。

实验结果表明:通过合适的优化策略,网络结构的归纳偏置可以被集成进简单架构体系中。本文为后续优化驱动的高效网络设计提供了新的起点和思路。

背景与动机

Token Mixer是ViT架构中用于空域信息聚合的关键模块,但由于采用了自注意力机制导致其计算量与内存消耗与图像尺寸强相关(quadratic)。

基于修正版12层ViT-B架构,作者进行了系统的延迟分析(可参考上图)。从仅包含Input Embedding的模块出发,逐步添加不同的操作单元,如LN、Attention、MLP等,最终构成了无GAP与分类头的ViT-Base架构。从图示可以看到:
Token Mixer部分耗时约为1433.6ms,约占整个架构耗时的46.3%

也就是说,Token Mixer对于模型延迟有非常大的影响,这无疑限制了其实际应用。不有而然升起一个疑问:是否可以移除Token Mixer同时保持其高性能呢?MetaFormer提出了无Token Mixer的架构,但发现会导致不可忽视的性能退化。基于此,本文旨在通过先进的优化策略(如知识蒸馏、结构重参数等)来挖掘极简ViT架构的潜力

RIFormer探索之路

接下来,我们将呈现出从全监督到更先进训练体系的探索之路,调研并指定了不同的优化机制。RIFormer采用了与MetaFormer相同的宏观与微观模块,区别仅在于RIFormer未使用Token Mixer。

无Token Mixer的视觉骨干

本文旨在移除每个基础模块中的TokenMixer以得到更高推理速度且性能保持的视觉骨干(仅在推理时移除)。

以PoolFormer-S12为起点,将其中用于TokenMixer的Pooling操作替换为Identity,同时采用常规监督方式进行训练,可以看到:RIFormer-S12会导致不可接受的性能下降(下降约2.7%)。也就是说,当没有TokenMixer操作时,常规的监督式训练在辅助模型学习有用信息时存在一定局限性,需要更先进的训练机制

接下来,作者调查并修改了一系列训练机制以改善基线模型性能,可总结如下:

  • Knowledge distillation
  • teacher type influence
  • Structure Re-parameterization
  • Module Imitation
  • Local partial parameters from teacher.

Distillation Paradigm Design

上表对比了四种不同训练配置下的性能对比,默认老师模型为GFNet-H-B,从中可以看到:

  • Hard标签蒸馏可以将模型性能从72.31%提升至73.51%。这说明带TokenMixer的老师模型对于无TokenMixer的学生模型可以起到正面促进作用了;
  • Soft标签蒸馏可以取得最佳性能,学生模型性能可提升至74.05%。

总体来看:监督式训练范式看起来并非无TokenMixer架构的最佳训练方式;带TokenMixer的老师模型有助于引导训练,但仍无法弥补因移除TokenMixer导致的性能损失,即还需要引入其他策略。

Re-parameterization for Identity Mapping

这几年,重参数方法在各个领域得到了广泛的应用。RIFormer推理时的TokenMixer模块可以视作LN+Identity组合。因此,训练时模块续满足以下两个前提条件:

  • per-location操作以支撑等价变换;
  • parameteric操作以支撑额外的表达能力。

基于上述分析,作者在训练阶段采用仿射变换以替代恒等变换,它仅在通道维度进行缩放与移位操作,见上图。在推理阶段,该仿射变换参数可以合并进LN层,故训练时的LN+仿射变换可以等价为LN+Identity。详细分析请查看原文,这里给出参数变换公式如下:
γ i ′ = γ i ( s i − 1 ) β i ′ = β i ( s i − 1 ) + t i \gamma_i^{'} = \gamma_i(s_i - 1) \\ \beta_i^{'} = \beta_i(s_i - 1) + t_i γi=γi(si1)βi=βi(si1)+ti

从上表可以看到:直接使用结构重参数机制并无显著优势。作者认为:导致该现象的原因在于LN中的仿射变换是一种线性变换。因此,如果仅仅通过模型的输出进行监督训练,额外参数的潜力可能并未得到充分挖掘。与此同时,老师与学生模型的同构设计促使我们探索一种更有效的方式进行模块间的知识迁移。

Module Imitation

有鉴于上述分析,作者进一步提出了Module Imitation以充分利用老师模型TokenMixer后的有用信息。如上图所示,作者希望:在训练过程中仿射操作能近似模拟TokenMixer的行为。此时,两者之间的MSE可以计算如下:
L i n = α i ∥ L N ( T ( a ) , m ) − L N ( T ( t ) , m ) ∥ F 2 \mathcal{L}_{in} = \alpha_i \| LN(T^{(a), m}) - LN(T^{(t),m}) \|_F^2 Lin=αiLN(T(a),m)LN(T(t),m)F2
考虑到当前层的输入为前一Block的输出特征,因此,作者从Block层面进行匹配,此时上述损失简化为:
L i n ′ = α i ∥ T ( a ) , m + 1 − T ( t ) , m + 1 ∥ F 2 \mathcal{L}_{in}^{'} = \alpha_i \| T^{(a), m+1} - T^{(t),m+1}\|_F^2 Lin=αiT(a),m+1T(t),m+1F2

此外,在输出特征层面还进行隐状态蒸馏:
L r e l = α w ∥ R ( T ( a ) , m + 1 ) − R ( T ( t ) , m + 1 ) ∥ F 2 \mathcal{L}_{rel} = \alpha_w \| \mathcal{R}(T^{(a), m+1}) - \mathcal{R}(T^{(t), m+1}) \|_F^2 Lrel=αwR(T(a),m+1)R(T(t),m+1)F2

仿射操作与TokenMixer输出的MSE计算如下:
L o u t = α 1 ∥ f ( L N ( T ( a ) , m ) ) − g ( L N ( T ( t ) , m ) ) ∥ F 2 \mathcal{L}_{out} = \alpha_1 \| f(LN(T^{(a), m})) -g(LN(T^{(t), m})) \|_F^2 Lout=α1f(LN(T(a),m))g(LN(T(t),m))F2

组合上述公式即可得到最终总损失:
L = L s o f t + λ 1 L i n ′ + λ 2 L o u t + λ 3 L r e l \mathcal{L} = \mathcal{L}_{soft} + \lambda_1 \mathcal{L}_{in}^{'} + \lambda_2 \mathcal{L}_{out} + \lambda_3 \mathcal{L}_{rel} L=Lsoft+λ1Lin+λ2Lout+λ3Lrel

从上表可以看到:Module Imitation对与学生模型有正向促进作用。最贱方案已取得了75.13%,超越了PoolFormer-S12的75.01%。

从上表可以看到:尽管GFNet-H-B并没有最佳指标,但它仍是更佳的选择(无论是否使用Module Imitation)。可能这与感受野有关,对于有限感受野的RIFormer而言,具有更大感受野的模型会是更优的老师选型,而GFNet具有全局感受野。

最后,作者还尝试了直接加载老师模型中除TokenMixer之外的预训练参数到学生模型,学生模型的性能可以从75.13%提升至75.36%

本文实验

上表给出了RIFormer与其他方案的性能对比,从中可以看到:

  • RIFormer-M36的吞吐量可达1185,同时精度高达82.6%;而PoolFormer-M36的吞吐量为109,精度为82.1%。
  • 对比GFNet与RIFormer,GFNet-H-B吞吐量为939,精度为82.9%,但需要特殊的、硬件不友好的FFT操作;而RIFormer可达到与之相关的水准且无复杂的操作。

全文到此结束,更多消融实验与分析请移步原文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/424089.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记录一次架构优化处理性能从3千->3万

0.背景 优化Kafka消费入Es,适配600台设备上报数据,吞吐量到达2万每秒 1.环境配置 2.压测工具 3.未优化之前的消费逻辑 4.优化之后的消费流程 5.多线程多ESclient 6.修改ES配置,增加kafka分区,增加线程,提升吞吐量 7.…

pytest多重断言插件-pytest-assume

最近准备废弃之前用metersphere做的接口自动化,转战pytest了,先来分享下最近接触到的一个插件:pytest-assume。 在使用这个插件之前,如果一个用例里面有多个断言的话,前面的断言失败了,就不会去执行后面的断…

vite+vue3图片引入方式不生效解决方案

vitevue3图片引入方式不生效解决方案 引入方式改成 const wordImgnew URL(/src/assets/MicsosoftWord.png,import.meta.url).href;原理

Pycharm的下载安装与汉化

一.下载安装包 1.接下来按照步骤来就行 2.然后就能在桌面上找到打开了 3.先建立一个文件夹 二.Pycharm的汉化

Unity--自动版面(Horizontal Layout Croup)||Unity--自动版面(Vertical Layout Group)

Unity--自动版面(Horizontal Layout Croup) Horizontal Layout Croup: “水平布局组”组件将其子布局元素并排放置。它们的宽度由各自的最小,首选和灵活的宽度决定,具体取决于以下模型: 所有子布局元素的…

python模块和包概念与使用

python模块和包概念与使用 Python模块与包的关键概念 在Python编程中,模块和包是代码组织和管理的基石。以下是关于Python模块与包的核心要点: 模块: 模块是一个包含Python代码的.py文件,它可以定义函数、类、变量等。通过导入模…

● 70. 爬楼梯 (进阶)● 322. 零钱兑换 ● 279.完全平方数

● 70. 爬楼梯 (进阶) 题目:57. 爬楼梯 题目描述: 根据示例: 可知1到m的阶数可以重复选择,跳了1阶之后还能跳一阶,所以是完全背包,又因为考虑了顺序问题,所以是完全背包的…

排序(4)——堆排序

目录 堆排序(回顾) 基本思路 代码实现 向下调整排序 AdjustDown 建堆排序 时间复杂度 特性总结 堆排序(回顾) 重点回顾戳👉堆排序 基本思路 堆排序(Heapsort)是指利用堆积树(堆)这种数…

备战蓝桥杯---动态规划的一些思想1

话不多说,直接看题: 目录 1.双线程DP 2.正难则反多组DP 3.换个方向思考: 1.双线程DP 可能有人会说直接贪心:先选第1条的最优路径,再选第2条最优路径。 其实我们再选第1条时,我们怎么选会对第2条的路径…

【leetcode】有效的括号

大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 点击查看题目 思路: 实现栈在上个博客中已经写过,在这就不在赘述 点击进入博客:【数…

vscode如何远程到linux python venv虚拟环境开发?(python虚拟环境、vscode远程开发、vscode远程连接)

文章目录 1. 安装VSCode2. 安装扩展插件3. 配置SSH连接4. 输入用户名和密码5. 打开远程文件夹6. 创建/选择Python虚拟环境7. 安装Python插件 Visual Studio Code (VSCode) 提供了一种称为 Remote Development 的功能,允许用户在远程系统、容器或甚至 Windows 子系统…

LeetCode 2368.受限条件下可到达节点的数目:搜索 + 哈希表

【LetMeFly】2368.受限条件下可到达节点的数目:搜索 哈希表 力扣题目链接:https://leetcode.cn/problems/reachable-nodes-with-restrictions/ 现有一棵由 n 个节点组成的无向树,节点编号从 0 到 n - 1 ,共有 n - 1 条边。 给…

Leetcoder Day35| 动态规划part02

62.不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径&#xff…

腾讯云幻兽帕鲁游戏存档迁移教程,本地单人房迁移/四人世界怎么迁移存档?

腾讯云幻兽帕鲁游戏存档迁移的方法主要包括以下几个步骤: 登录轻量云控制台:首先,需要登录到轻量云控制台,这是进行存档迁移的前提条件。在轻量云控制台中,可以找到接收存档的服务器卡片,并点击进入实例详情…

2023年12月CCF-GESP编程能力等级认证Scratch图形化编程四级真题解析

一、单选题(共15题,共30分) 第1题 现代计算机是指电子计算机,它所基于的是( )体系结构。 A:艾伦图灵 B:冯诺依曼 C:阿塔纳索夫 D:埃克特-莫克利 答案:B 第2题 默认小猫角色,执行下列程序,以下说法正确的是? ( ) A:舞台上会出现无数个小猫 B:舞台只会出现…

k8s的adm方式部署

1 k8s kubeadm搭建 1.1 k8s kubeadm搭建步骤 kubeadm init 在使用kubeadm方式安装k8s集群是,可根据初始化配置文件或配置参数选项快速的初始化生成一个k8s的master管理平台 kubeadm join 根据kubadm init初始化的提示信息快速的将一个node节点或其他的master节…

新项目,Linux上一键安装MySQL,Redis,Nacos,Minio

大家好,我是 jonssonyan 分享一个我的一个开源项目,这是一个在 Linux 平台上一键安装各种软件的脚本项目,脚本使用 Shell 语言编写,后续还会增加更多软件的一键安装,代码在 GitHub 上全部开源的,开源地址如…

scrapy 中间件

就是发送请求的时候,会经过,中间件。中间件会处理,你的请求 下面是代码: # Define here the models for your spider middleware # # See documentation in: # https://docs.scrapy.org/en/latest/topics/spider-middleware.html…

Java构造方法总结(很清晰)

构造方法扫盲:构造方法就是为了创建对象的 解释:真正创建对象的是 new 这个关键字,Java 虚拟机在创建对象时是有很多步骤的,构造方法只是其中的一步,它的作用是进行成员变量初始化。

怎么优雅地访问ChatGPT

ChatGPT,这颗璀璨的智能结晶,在2022年岁末之际,由OpenAI实验室倾力铸就,犹如夜空中跃动的智慧星辰,点亮了人工智能领域的新纪元。犹如汪洋中的一座灯塔,ChatGPT以其独特的智慧光辉引人注目,然而…