本文作者丨盘子正@知乎    编辑丨极市平台

来源丨https://zhuanlan.zhihu.com/p/569482746

我(盘子正@知乎)的PhD课题是Vision Transformer的efficiency问题,这个topic范围很广,可以是inference efficiency, 力争speed and accuracy trade-off。也可以是training efficiency,让模型更容易训练,如训练时间少,需要的硬件资源不用很多。也可以是energy efficiency,减少模型部署时在硬件上的功耗。当然也有data efficiency,怎么用更少的数据在短时间训练出较好的模型。

本文主要讲inference time的效率问题,简单说就是如何让模型更快,同时性能不掉太多甚至反升。从个人角度来看,如果性能的增长是以巨大的速度牺牲为代价,那么模型的意义便少了许多。

背景

2021开年后,Transformer在CV任务中大放光彩,Google的初版Vision Transformer(ViT)虽然方法简单,但通过大量的实验证明了Transformer在计算机视觉(CV)任务上,特别是image classification上的可能性。论文展示,ViT经过large-scale pretrain之后在ImageNet上可以达到和CNN媲美的性能。

然而,CV的任务可不止image classification,给一个图片预测一个label就结束了。对于大量dense prediction的任务而言, 比如object detection和segmentation,Transformer都有其局限性,而其中最关键的有两点,

  1. 缺少金字塔特征(Pyramid Feature Map)。 层级特征对物体的检测很重要,特别是小物体,因为feature map的scale如果比较小的话,小物体相当于直接被忽视了。常见的CNN,如ResNet将网络划分四个stage,每个stage处理一种scale的feature map, 如1/4,1/8, 1/16,1/32。这样出来的层级特征可以送入FPN进行处理,然后作为输入给detection或者segmentation的head。而ViT只处理1/16这个scale下的feature map,直观上来看是对dense prediction任务不利的。

  2. Multi-head Self-attention(MSA)计算开销问题。 MSA是一个quadtic complexity的模块,小图还好,但是遇到分辨率大的时候,无论是显存占用还是计算速度都会大打折扣。然而像detection和segmentation这种任务,图片一般都比较大,如512x512。按照ViT的patch embedding划分,图片会分成 (512/16)x (512/16) = 1024。此时ViT-Base的单层MSA会消耗4G FLOPs。然而整个ResNet-50也才消耗4G FLOPs. 因此MSA的计算开销限制了ViT在高分辨率图像上的效率。

对于第一个问题,一个自然的想法就是给ViT引入pyramid feature map, 这也是ICCV 2021积极涌现的idea,如Swin, PVT。然而,引入结构上的hierarchy造成了前期feature map的scale比较大,此时MSA的计算开销上涨。这使得efficient attention在ViT上成为了必需品,正如Swin用到的local window attention和PVT的spatial reduction attention,当然后面有更多的architecture,更多的attention,在此就不一一举例了。

自此,ViT适配下游任务已经基本没有了大的障碍。大致结构上和CNN保持一致,如划分stage,逐渐对feature map做downsampling。得益于attention的结构, ViT在各个task上性能都保证的不错。那接下来的主要问题就是对ViT在CV任务中进行优化。

什么最影响ViT的速度?

影响一个模型速度的东西无非是两个大方面,一是结构,二是处理的数据规模,剩下基本是工程上的优化。从个人观点来看,对于ViT来说,影响结构效率的有两个,

  1. Efficient General Architecture. 整体结构上的设计需要变得有效并且scalable

  2. Efficient Multi-head Self-attention. 注意力机制必须足够efficient

对于处理的数据规模问题,这个CNN也有,但有一个明显区别于CNN的是,ViT对input是permutation-invariant的,只要加入了positional encoding就可以无视2D spatial order。所以针对ViT而言,减少input tokens是可以做推理加速的,如本人在ICCV 2021上的工作HVT: Scalable Vision Transformers with Hierarchical Pooling(https://arxiv.org/abs/2103.10619)。

结构上怎么设计最合理?- LITv1

HVT之后,我们曾经的一个想法是进一步对token做一个dynamic的选取,因为直觉上来讲dynamic要比unifrom的pooling要好,了解这一领域的同学可能有点耳熟,没错,这个思路就是DynamicViT(https://arxiv.org/abs/2106.02034)。

然而,实验过程中的一个发现,使得我们展现给大家的是LIT, Less is More: Pay Less Attention in Vision Transformers(https://arxiv.org/abs/2105.14217) (AAAI 2022)。

和DynamicViT利用pretrained weights和plain ViT不一样,我们直接从hierarchical Vision Transformer入手并且train from scratch,如PVT,用几层FC对前两个stage中每个block的input tokens做一个dynamic的选取,使得前期MSA只需要处理1/4, 1/8 scale下选取的部分token。这个思路听起来感觉没什么问题,可视化效果也确实不错,如下面是去年基于PVT-S做sparse选取token做的一个可视化:

虽然但是,当我们对比random sampling的baseline时,发现性能差距并不大,一番分析之后,我们直接训练了一个完整的基于原始MSA的PVT-Small,通过可视化attention head, 我们发现前期的head只能关注于很小的local区域,尤其是第一个stage的MSA,attention weight基本都在关注自己,我们进一步在论文给出了理论上的解释。

基于这个发现,我们做了一个在当时来看(2021.05)比较大胆的决定,直接拿掉前两个stage的所有MSA layer,这样前期的Transformer block中只剩下了FFN, 而后期的两个stage直接采用最原始的MSA。这使得我们模型的整体结构看起来非常简单,如下面所示。

我们把这种设计原则在Swin Transformer和PVT上做了验证,结果显示这种方案不仅不降性能,还因为避开了前期MSA的计算开销,减小了理论复杂度,大幅度加快了推理速度。

Model Params (M) FLOPs (G) Throughputs (imgs/s) ImageNet@Top-1
PVT-S 25 3.8 1,058 79.8
PVT-S w/ remove early MSAs 19 3.6 1,388 80.4
Swin-Ti 28 4.5 960 81.3
Swin-Ti w/ remove early MSAs 27 4.1 1,444 81.3

另外我们在LIT中提出了一个Deformable Token Merging module (DTM),使得feature map在下采样时可以动态的根据前景信息对token做选取。经过可视化发现学习到的offset十分精准地捕捉到了前景物体信息。相关可视化代码已公开在https://github.com/ziplab/LIT。

上面每张图片中,绿框代表最后一个scale下(1/32)的某个位置的token,红色点表示DTM在downsample时最终选取的1/4 scale的token

阶段总结: LIT在结构上主要陈述了一个事情,backbone前期采用MSA的效益并不高。即使是擅长global attention的MSA也依然重点关注local区域,何况前面的feature map比较大,MSA处理高分辨图像的开销很大,即使采用efficient attention也难以避开这部分计算。

所以我们看到后来的Uniformer, MobileViT,EfficientFormer都是这种前面local后面global的结构。想要快,前面还是得尽量避开MSA。

Architecture和Attention一起优化 - LITv2

在前期的工作中,我们定下了ViT的Architecture设计原则,但第一版LIT有两个问题影响实际推理速度,

  1. RPE虽然能涨点,但对于LIT来说,由于后面需要动态根据input大小做插值,所以对速度影响很大。

  2. 后两个stage的原始MSA针对高分图像还是会有很大的计算开销。

基于此,我们提出了LITv2:Fast Vision Transformers with HiLo Attention(https://arxiv.org/abs/2205.13213) (NeurIPS 2022), 主要对LIT做了两点改进,

  1. 去掉了relative positional encoding (RPE), FFN中加入depthwise convolution来引入conditional positional embedding。通过引入depthwise conv不仅能引入positional encoding, 还能同时增大网络前期的receptive field。(因为LIT前面两个stage只有FFN)

  2. 换上了全新的attention方法,HiLo。

Attention还能更快

直接影响ViT在高分辨率图像上的效率的还是attention。从21年到现在,这一领域已经针对ViT提出了不少attention的变种,如SRA(https://arxiv.org/abs/2102.12122)(ICCV-21),local window(https://arxiv.org/abs/2103.14030)(ICCV-21), focal attention(https://arxiv.org/abs/2107.00641)(NeurIPS-21), QuadTree(https://arxiv.org/abs/2201.02767) (ICLR-22)。和MSA相比,这些方法都能保证更优的理论复杂度。但是我们注意到FLOPs只能反映理论复杂度,而真正想在CV任务中beat过纯CNN的话,除了性能,实测速度也十分关键,因为理论复杂度并不能反应GPU和CPU上的实际速度。影响实测throughput/latency的还有memory access cost和其他难以被统计进FLOPs的因素,如for-loop。

以实测速度为核心,我们在LITv2中提出了HiLo。HiLo的设计理念很简单: 在信号处理中,高频关注local detail, 因此就用部分head做local window attention去捕获,而低频关注global structure,对local detail并不太在乎,所以另一部分head只需处理average pool的低频信号,这样高低频同时捕捉,实现单层MSA同时抓取local和global信息。相对应的branch,我将它命名为Hi-Fi和Lo-Fi,如下图所示。

为了保证实际速度,HiLo避开了一些不能算到FLOPs但损害速度的运算,如overlapping window和interpolation。基于此,HiLo在实测速度,memory占用,以及性能上都超越了SOTA方法。

在CPU和GPU上,单层HiLo的推理速度非常快

上图的测试结果可以参考我的vit-attention-benchmark(https://github.com/HubHop/vit-attention-benchmark)仓库。

又快,又好,又容易训练的LITv2

LITv2共推出了三个变种,small, medium, base, 为了公平对比,三个模型的宽度和深度和Swin Transformer一样,超参seed一点没调。LITv2整体在ImageNet-1K上效果占优,同时降低了训练显存要求,推理速度更快。

由于资源实在有限,对比Swin-Large和ImageNet-22k上的setting确实没法跑。。。。

另外我们在多个GPU平台上测试了推理速度(来自reviewer的意见)。对比ResNet-50和其他11个最近的ViT模型,相似参数量下,LITv2-S在速度和理论复杂度上实现了全面超越,同时ImageNet的Top-1 accuracy在第一梯队。

上面关于LITv2的Speed测试和运行示例都已公开在:https://github.com/ziplab/LITv2,欢迎大家尝试。

未来还能做什么

Vision Transformer的故事还在继续,今年NeurIPS投稿也能看到大家陆续也在关注实测速度了,如TRT ViT,EfficientFormer, 但实际上ViT的工业落地相比CNN可能还是会有障碍。如量化上,ViT还是在低bit上还有很大提升空间。除此之外,我们组(https://ziplab.github.io/)也在探索Transformer的其他efficiency问题,比如

ViT的Training efficiency还有很大的空间。 ViT普遍难训练,需要的显存大,训练时间长。特别是backbone的公认setting是1024的batch size + 8 GPUs,使得很多小组连ViT跑都跑不起来(8卡 32GB V100不是所有人都有的),针对这一问题我们提出了一个针对Transformer的一个memory-efficient的训练框架: Mesa: A Memory-saving Training Framework for Transformers(https:arxiv.org/abs/2111.11124). 和普通训练相比,Mesa可以做到显存节省一半,同时与checkpointing和gradient accumulation等技术方案不冲突。

Transformer的能源消耗也是一个问题,特别是当下很多大组在跑以Transformer为backbone的大模型,训练时所造成的电力损耗,碳排放对Green AI这一长远目标不利。针对Energy efficiency,我们组在NeurIPS 2022最新的工作 EcoFormer: Energy-Saving Attention with Linear Complexity(https://arxiv.org/abs/2209.09004) 提出了一个Transformer二值化的全新方案,全新设计的EcoFormer是一个general的efficient attention, 性能和功耗上都优于一众线性复杂度的Linformer, Performer等,同时在45nm CMOS microcontroller上能耗更低,速度更快。

至于CNN和Transformer哪个好的问题,这个答案其实不必再过多讨论了,因为两者互补。通过合理地配置CNN和MSA在Backbone中的位置,可以让网络得到双倍的快乐。更不用说Convolution和MSA两者之间本身存在一种联系,比如我们组的另一篇工作:Pruning Self-attentions into Convolutional Layers in Single Path(https://arxiv.org/abs/2111.11802), 巧妙地通过参数共享将计算复杂度较高的attention layer剪成更为efficient的convolutional layer,工程细节可以参考:https://github.com/ziplab/SPViT。

个人主页:Zizheng Pan:https://link.zhihu.com/?target=https%3A//zizhengpan.github.io/

实验室主页:Zhuang Intelligent Processing Lab (ZIP Lab):https://link.zhihu.com/?target=https%3A//ziplab.github.io/

文中如有错误,欢迎指出,同时欢迎各位进行学术交流~

猜您喜欢:

 戳我,查看GAN的系列专辑~!

一顿午饭外卖,成为CV视觉的前沿弄潮儿!

最新最全100篇汇总!生成扩散模型Diffusion Models

ECCV2022 | 生成对抗网络GAN部分论文汇总

CVPR 2022 | 25+方向、最新50篇GAN论文

 ICCV 2021 | 35个主题GAN论文汇总

超110篇!CVPR 2021最全GAN论文梳理

超100篇!CVPR 2020最全GAN论文梳理

拆解组新的GAN:解耦表征MixNMatch

StarGAN第2版:多域多样性图像生成

附下载 | 《可解释的机器学习》中文版

附下载 |《TensorFlow 2.0 深度学习算法实战》

附下载 |《计算机视觉中的数学方法》分享

《基于深度学习的表面缺陷检测方法综述》

《零样本图像分类综述: 十年进展》

《基于深度神经网络的少样本学习综述》

Vision Transformer在CV任务中的速度如何保证?相关推荐

  1. 【读点论文】A Survey on Vision Transformer,2022年华为诺亚最新综述研究,从发展到任务,整体到局部。ViT有研究价值在于有很多问题还没有解决,真理是阶段性的产物

    A Survey on Vision Transformer Abstract transformer最早应用于自然语言处理领域,是一种主要基于自注意机制的深度神经网络.由于其强大的表示能力,研究人员 ...

  2. Vision Transformer 论文

    https://openreview.net/pdf?id=YicbFdNTTy AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOG ...

  3. [Transformer]A Survey on Vision Transformer

    A Survey on Vision Transformer 视觉Transformer综述 Abstract: Transformer是一种基于自注意力机制的深度神经网络,最初被用于NLP,由于其强 ...

  4. ICCV2021 | Vision Transformer中相对位置编码的反思与改进

    前言  在计算机视觉中,相对位置编码的有效性还没有得到很好的研究,甚至仍然存在争议,本文分析了相对位置编码中的几个关键因素,提出了一种新的针对2D图像的相对位置编码方法,称为图像RPE(IRPE). ...

  5. 【Transformer】一文搞懂Transformer | CV领域中Transformer应用

    目录 阅读本文的基础: 一.发展历史: 二.从上向下的理解Transformer 1.Transformer整体结构简单介绍 2.Transformer中的Self-attention (1)引入 ( ...

  6. (五)比赛中的CV算法(下)目标检测终章:Vision Transformer

    --NeoZng[neozng1@hnu.edu.cn] 如果觉得笔者写得还不错,点个赞加个关注吧! Transformer是NLP领域的基础架构,也即是前述的自注意力机制加上Encoder-Deco ...

  7. Vision Transformer中的自监督学习

    任何接触过机器学习的人都肯定听说过监督学习和无监督学习.这些实际上是机器学习的两种重要的可能方法,已被广泛使用多年.然而,直到最近,一个新术语"自我监督学习"出现了爆炸式增长!但是 ...

  8. 【解析】Vision Transformer 在图像分类中的应用

    An Image is Worth 16x16 Words:Transformers for Image Recognition at Scale 代码:https://github.com/goog ...

  9. NeurIPS 2021 Transformer部署难?北大华为诺亚提出Vision Transformer的后训练量化方法...

    关注公众号,发现CV技术之美 本文分享 NeurIPS 2021 论文『Post-Training Quantization for Vision Transformer』,由北大&华为诺亚联 ...

最新文章

  1. 小米一键上锁工具_小米新品人脸识别智能锁:3D识别加红外,开门只需看一眼...
  2. mysql索引碎片产生原因_解析mysql 表中的碎片产生原因以及清理
  3. jmeter constant timer 如何添加_阿里巴巴在开源压测工具 JMeter 上的实践和优化
  4. url、base64、blob,三者之间的转化
  5. mysql f_MySQL
  6. 月球-I型,月份日历生成器----基于PHP7.3
  7. Eclispe创建jsp文件,提示错误:“The import Xxx cannot be resolved“的解决方案
  8. 函数式编程之一柯里化
  9. Android Lint简介
  10. 数据仓库详细介绍(九.数据质量)流程与工具
  11. 顺丰同城赴港IPO 有望凭借高增速和生态布局成为第三方即时配送平台第一股
  12. 数字信号处理(自学篇)
  13. CenOS7 搭建无人值守安装服务器
  14. matlab snapnow,任意倾斜椭圆方程的画法.pdf
  15. Cortex-M3/M4芯片启动流程概括
  16. 007 - 配置 Clion 调试显示 Qt 变量
  17. 大数据可视化的方法、挑战及进展
  18. 豆粕四连跌见顶?系统性风险降低通胀压力大,甲醇05-09季节性反套2022.3.29
  19. 【较全面】LaTeX tcolorbox的使用(添加阴影,支持跨页,设置颜色,设置缩进,设置边距,设置线框类型,隐藏线框)
  20. 软件测试员这些坑一定要记住了,不要再往里面掉了

热门文章

  1. Camtasia Studio 9录制高清、超清视频教程
  2. indexOf的各种用法
  3. kaldi-yesno例子
  4. Android 音乐播放器用到的几个方法解说
  5. FlatBuffer 使用
  6. 《央视影音》用户体验报告
  7. 紫光fpga logos2 pango design 开发工具 黑金 axp100开发板资料 带 ddr 以及高速收发器例子
  8. ADuM1201助我实现串口隔离通信应用
  9. oracle表分区设计_Oracle数据库分区技术
  10. 项目中的软件质量管理