关注公众号,发现CV技术之美

本文分享一篇由清华& UCLA联合研究的论文『DynamicViT: Effificient Vision Transformers with Dynamic Token Sparsifification』,提出token 的动态稀疏化采样,降低 inference 时的计算量。

详细信息如下:

  • 论文链接:https://arxiv.org/abs/2106.02034

  • 项目链接:https://github.com/raoyongming/DynamicViT

导言:

在Vision Transformer中,Attention其实是比较稀疏的。作者观察到,在视觉Transformer中的最终预测仅基于信息最丰富的token的一个子集,这足以进行准确的图像识别。基于这一观察结果,作者提出了一个动态token稀疏化框架,基于输入逐步、动态地删除冗余的token。

具体来说,作者设计了一个轻量级的预测模块,来估计给定特征的每个token的重要性分数。该模块被添加到不同的层中,分层地删除冗余token。为了以端到端的方式优化预测模块,作者提出了一种attention masking策略,通过阻止一个token与其他token的交互来修剪token。

得益于 self-attention的机制,非结构化的稀疏token对硬件是友好的,这使得本文的框架很容易实现实际的加速。通过分层修剪66%的输入token,本文的方法大大减少了31%∼37%FLOPs,提高了40%以上的吞吐量,而各种视觉Transformer的精度下降在0.5%以内。

      01      

Motivation

这些年来,CNN架构的发展带来了计算机视觉带来的巨大进步。最近的一些工作开始取代CNN,通过使用Transformer来完成许多视觉任务,如目标检测和图像分类。就像过去几年对CNN的架构所做的那样,加速Transformer的模型,使它们更适合实时应用,也是非常有意义的。

CNN网络加速的一个常见做法是修剪不那么重要的滤波器。而视觉Transformer及其变体处理输入的方式是将输入图像分割成多个独立的patch,这提供了新的的方法来引入加速的稀疏性。也就是,可以删除输入实例中不那么重要的token,因为许多token对最终预测的贡献很小。

当然,这只适用于类似Transformer的模型,因为其中的Self-Attention模块可以以可变长度的token序列作为输入,而非结构化修剪的输入不会影响Self-Attention模块。但是,丢弃某一部分像素并不能加速卷积操作,因为卷积所使用的非结构化邻域将使它很难通过并行计算来加速。在本文中,作者探索视觉Transformer的非结构化和依赖数据的降采样策略,以进一步利用Self-Attention的优势。

如上图所示,CNN模型通常利用结构化降采样策略来构建层次架构,如(a)所示。(b)中的非结构化和数据依赖的降采样方法可以更好地利用输入数据的稀疏性。由于自注意力操作的性质,非结构化的token集也很容易通过并行计算来加速。(c)可视化了每个空间位置对DeiT-S模型中最终预测的影响。这些结果表明,视觉Transformer的最终预测仅基于信息最丰富的token的一个子集,因此大量的token可以在不损害性能的情况下被删除。

在这项工作中,作者使用了一个轻量级的预测模块来确定哪些token将被动态地修剪,称为DynamicViT。对于每个输入实例,预测模块生成一个定制的二进制决策mask,以决定哪些token没有信息,需要丢弃。该模块被添加到视觉Transformer中,随着每个预测模块后逐步增加修剪token的数量,可以分层进行稀疏化。一旦token在某一层之后被修剪,它将永远不会在FFN过程中使用。与通过消除无信息token而节省的计算开销相比,这个轻量级模块引入的额外计算开销相当小。

为了能够与视觉Transformer主干一起以端到端方式联合优化,作者采取了两种专门的策略。

第一个方法是采用Gumbel-Softmax 来克服从分布中采样的不可微问题,从而进行端到端训练。

第二个方法是关于如何应用这个学习到的二进制决策mask来修剪不必要的token。考虑到二进制决策mask中的零元素数量是不同的,在训练过程中直接消除每个输入实例的无信息token将使并行计算是不可能的。此外,这也将阻碍预测模块的反向传播,因为即使某个token最终被消除,预测模块需要计算是否保留该token的概率分布。此外,直接将废弃的token设置为零向量也不行,因为零向量仍然会影响注意力矩阵的计算。因此,作者提出了一种称为注意力mask 的策略,即基于二进制决策mask,将从丢弃的token到注意力矩阵中所有其他token的连接删除。

此外,作者还修改了视觉Transformer的原始训练目标函数,通过添加一个项来限制特定层后的修剪token的比例。在推理阶段,可以直接在每个输入实例的特定层后放弃固定数量的token,因为这时已经不再需要考虑该操作是否可微,这将大大加快推理速度。

作者在 DeiT和 LV-ViT模型上基于ImageNet数据集上做了实验,结果表明通过分层修剪66%的输入token,可以大大减少31%∼37% GFLOPs和40%的吞吐量,精度下降在0.5%以内。

      02      

方法

2.1 Overview

模型总体框架如上图所示。DynamicViT由一个普通的视觉Transformer作为主干和几个预测模块组成。预测模块负责生成删除/保留token的概率。token稀疏化通过在整个网络的某些位置分层执行。例如,给定一个12层Transformer,作者可以在第4、第7和第9个block之前进行token稀疏化。在训练过程中,由于注意力mask策略,预测模块和主干网络可以进行端到端的优化。在推理过程中,只需要根据预定义的剪枝比和预测模块计算的分数来选择信息最多的token,就可以降低计算量和推理时间。

2.2 Hierarchical Token Sparsification with Prediction Modules

DynamicViT的一个重要特征是,token稀疏化是分层执行的,也就是说随着计算的进行,网络逐步删除无信息的token。为了实现这一点,作者维护了一个二进制决策掩码


















来指示是删除或保留每个token,其中N=HW为patch的数量。

首先将决策掩码中的所有元素初始化为1,并逐步更新掩码。预测模块以当前决策









和token













作为输入。首先使用一个MLP来映射token到一个新的维度:

类似地,可以通过以下方法来计算一个全局特征:

Agg是聚合所有现有token信息的函数,可以用AvgPool实现:

局部特征对某个token的信息进行编码,而全局特征包含整个图像的上下文,因此它们都是有信息的。因此,作者结合局部和全局特征,获得局部-全局embedding,并将它们提供给另一个MLP,以预测删除/保留token的概率:

其中,





π





,





表示丢弃第i个token的概率,





π





,





是保留它的概率。

然后,通过从π中采样来生成当前的决策D,并通过更新









一旦一个token被删除,它将永远不会被使用。

2.3 End-to-end Optimization with Attention Masking

虽然本文的目标是执行token稀疏化,但作者发现在训练过程中实现并不简单。首先,从π得到二进制决策掩码D的采样是不可微的,这阻碍了端到端的训练。为了克服这一问题,作者使用Gumbel-Softmax技术从概率π中采样:

第二个困难是在训练中修剪token时,决策mask









通常是非结构化的,不同样本的mask包含不同数量的1。因此,简单地丢弃














的token就会导致Batch内样本的token数量不一致,这使得计算难以并行化。因此,必须保持token的数量不变,同时减少修剪后的token和其他token之间的相互作用。作者发现,仅仅根据二进制掩码









将需要丢弃的token置为零是不可行的。

因为如果直接将Attention置为0,在Softmax的时候还是会有影响。为此,作者设计了一种注意力mask的策略,它可以完全消除被丢弃的token的影响。具体来说,可以通过以下方法来计算注意矩阵:

这一步之所以不用-inf直接对Attention Map进行mask,而是在Softmax中加入了乘上mask map的操作,是因为这里作者还需要训练预测mask的结构。如果直接对Attention Map用-inf来mask,这一步是不可导的,就不能进行端到端的训练了。

2.4 Training and Inference

DynamicViT的训练包括训练预测模块,使它们能够产生有利的决策,并微调主干网络,使其适应token稀疏化。交叉熵损失函数如下:

其中




为预测的概率,









为ground truth。

为了最小化token稀疏化对性能的影响,作者使用原始的主干网络作为教师模型,并希望DynamicViT的行为尽可能接近教师模型。具体来说,作者从两个方面来考虑这种约束。首先,将剩余的token接近教师模型的token,这可以看作是一种自蒸馏:

其中,
















分别表示DynamicViT和教师模型的最后一个block之后的第i个token。












,





是在第s个稀疏化阶段的第b个样本的决策mask。

其次,通过KL散度来最小化DynamicViT与其老师之间的预测的差异:

其中,







是教师模型的预测结果。

最后,作者还约束了保留的token与预定义值的比值。给定S阶段的一组目标比率




ρ






ρ



(



),



,



ρ







,作者使用了MSE损失来监督预测模块:

最后总的损失函数为:

在预测的时候,作者就是根据比例来挑选需要丢弃的token,用剩下的token的预测:

通过这种方式,DynamicViT在运行时动态地删除信息较少的token,从而可以降低推理过程中的计算成本。

      03      

实验

3.1 Main results

DynamicViT可以将计算成本降低31%∼37%,并在运行时加速推理提高43%∼54%,而性能的影响可以忽略(−0.2%∼−0.5%)。

3.2 Comparisons with the-state-of-the-arts

我们还可以观察到,DynamicViT比LV-ViT系列可以实现更好的trade-off。

3.3 Analysis

DynamicViT for model scaling

通过将DynamicViT应用于DeiT-256,可以获得了一个与DeiT-Ti具有相当的计算复杂度的模型,但ImageNet的Top-1准确率高了4.3%左右。

Visualizations

上图展示了被丢弃的token分布,可以看到,DynamicViT可以逐渐删除无信息标记。

作者使用DynamicViT生成ImageNet验证集中所有图像的决策,并计算所有三个阶段中每个token的保持概率。中间的token往往被保留下来,因为在大多数图像中,物体位于中心。

Comparisons of different sparsification strategy

上表展示了不同采样策略的结果,可以看出,动态稀疏化采样的效果是比较好的。

      04      

总结

在这项工作中,作者利用输入图像中patch信息的稀疏性,开辟了一条加速视觉Transformer的新路径。对于每个输入实例,DynamicViT模型根据从轻量级预测模块输出的定制的二进制决策mask,以动态的方式修剪不太重要的token,它融合了token中包含的局部和全局信息。作者将预测模块添加到多层,以便以分层方式执行token剪枝。为了实现端到端的训练,作者还是用了Gumbel-Softmax和Attention masking。在推理阶段,DynamicViT可以通过逐步修剪66%的输入token来大大提高效率,而不同Transformer主干网络的精度下降小于0.5%。

作者介绍

研究领域:FightingCV公众号运营者,研究方向为多模态内容理解,专注于解决视觉模态和语言模态相结合的任务,促进Vision-Language模型的实地应用。

知乎/公众号:FightingCV

END,入群????备注:TFM

还在用全部token训练ViT?清华UCLA提出token的动态稀疏化采样,降低inference时的计算量...相关推荐

  1. 清华鲁继文团队提出DynamicViT:一种高效的动态稀疏化Token的ViT

    [导读] 由于随着ViT中的token数量的增长,会导致计算成本呈平方级急剧增加!近期,清华黄高团队提出了自适应序列长度的DVT方案,本篇文章,我们将介绍另一种方法.6月3日,清华鲁继文教授团队提出了 ...

  2. NeurIPS2021 MBT:多模态数据怎么融合?谷歌提出基于注意力瓶颈的方法,简单高效还省计算量...

    关注公众号,发现CV技术之美 本文分享 NeurIPS 2021 论文『Attention Bottlenecks for Multimodal Fusion』,思考<MBT>多模态数据怎 ...

  3. 并非所有图像都值16x16个词--- 清华华为提出一种自适应序列长度的动态ViT

    [导读]ViT在大规模图像识别方面取得了显著的成功.但随着数据集规模以及自注意力中的tokens数量的增长,会导致计算成本呈平方级急剧增加!最近,清华自动化系的助理教授黄高的研究团队和华为的研究人员, ...

  4. 训练ViT和MAE减少一半计算量!Sea和北大联合提出高效优化器Adan,深度模型都能用

    转载自 | 新智元 [导读]换个优化器,计算量少一半. 自Google提出Vision Transformer(ViT)以来,ViT渐渐成为许多视觉任务的默认backbone.凭借着ViT结构,许多视 ...

  5. 训练ViT和MAE减少一半计算量!Sea和北大联合提出高效优化器Adan,深度模型都能用...

      视学算法报道   编辑:LRS 好困 [导读]换个优化器,计算量少一半. 自Google提出Vision Transformer(ViT)以来,ViT渐渐成为许多视觉任务的默认backbone.凭 ...

  6. 训练ViT和MAE减少一半计算量!Sea和北大提出新优化器Adan:深度模型都能用!

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入-> CV 微信技术交流群 转载自:新智元  |  编辑:LRS 好困 [导读]换个优化器,计 ...

  7. 叶开|Token的10大设计模式及Token金融与治理(长篇干货)

    作者:叶开 Token经济系统设计方面的先行者. 矩阵数字经济智库合伙人,林达控股(1041HK)执行董事,中农普惠金服董事合伙人,南京大学兼职教授.专注于传统产业升级.产业金融和区块链,著有< ...

  8. 【最强ResNet改进系列】IResNet:涨点不涨计算量,可训练网络超过3000层!

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 [导读]本篇文章是[最强ResNet改进系列]的第四篇文章,前面我们已经介绍了Res2Net和 ...

  9. token干什么用_浅谈Token理解运用

    周末没带电脑,闲着也是闲着,出来分享一点东西,也当自己学习和巩固了. 今天分享一下Token的理解,首先Token的定义是什么? 概念 Token被翻译成为('令牌','标记')在计算机中的含义也差不 ...

最新文章

  1. MRJob 极速入门教程,使用Python玩转Hadoop
  2. 测试Live Write的插件
  3. 什么是 Unix 以及它为什么这么重要?
  4. C++-实现matlab的meshgird(OpenCV)
  5. 机器学习的实现(语言及库的选择)
  6. Kotlin基础学习第5章—表达式
  7. 应用内收费--商品列表--子龙山人
  8. ANSYS 2020R2 workbench汉化的方法
  9. 简述计算机程序执行过程,计算机程序的执行过程
  10. java缺陷管理系统_简述:一款优秀的缺陷管理系统有哪些功能特点!
  11. linux bt测试命令,Android命令行测试BT,WIFI,Sensor工作状态
  12. js获取父元素、子元素、兄弟元素的方法
  13. 树形DP总结,持续更新
  14. cmd 添加端口映射
  15. CycleGAN实现斑马变马 结构主体代码分析(附加内容待完成)
  16. PAT甲级训练合集(1-70)
  17. python使用多线程进行爬豆瓣电影top250海报图片,附源码加运行结果
  18. 基于 Labelme 制作手部关键点数据集 并转 COCO 格式
  19. POJ 3984 迷宫问题 BFS DFS两种解法
  20. jbod ugood 磁盘驱动状态_storcli64和smartctl定位硬盘的故障信息

热门文章

  1. Tensorflow 十六 用tf.keras函数重写Mnist识别
  2. OpenCV--fstream格式化读取坐标数据存为vector
  3. GOF之行为型模式Ⅰ(重点)
  4. 线性代数第9版英文pdf_线性代数(英文版·第9版)
  5. python注入点查找_python注入点查找工具
  6. vnc 字体设置_Xterm字体大小的设置
  7. html5 canvas移动位置,HTML5 Canvas 移动
  8. 计算机密码学奖,上海交通大学计算机科学与工程系(CSE)
  9. .net 链oracle,.net链数据库oracle
  10. Java基础题笔记1