Vision Transformer(ViT)在2022年能否落地在实际业务上?

苏道 发表于 2022/01/21 16:06:11 2022/01/21
【摘要】 Swin Transformer夺得ICCV 2021最佳论文,在ViT领域中独树一帜,屠宰一众CV任务榜单,那工程上的应用性如何呢?本文分析了Swin和PyramidTNT已经conv+Transformer的结构uniformer在GPU上的时延,并和传统的resnet50比较,看看ViT的表现如何

Swin Transformer夺得ICCV 2021最佳论文,在ViT领域中独树一帜,屠宰一众CV任务榜单,那工程上的应用性如何呢?

1、精度方面比较

      和传统的纯CNN模型相比,例如代表作resnet50比,在控制FLOPS下能够取得不错的精度优势,renet50冲到顶也就是80%了在imagenet 1k上。

模型

精度

Torch-推理时显存占用

Swin-Transformer-Base

83.4%

6800M

Swin-Transformer-small

83.2%

5100M

Swin-Transformer-tiny

81.2%

4900M


2、推理速度比较


1、Swin-Transformer Vs Resnet50

      但是很可惜,限制一个模型能否大规模商用更多的是时延的限制。

      大家也知道FLOPS和GPU推理并非是一个线性关系,和CPU推理就比较线性了,在评估Transformer的时候,往往有两个问题,1是FLOPs并不反映测量的latency。虽然在现有很多论文里,FLOPs被用作效率的衡量标准,但是其实在不同硬件下,FLOPs和latency之间并不完全对应,下图可见,同样的FLOPs模型的latency其实可以差很远。

搜狗截图22年01月21日1550_1.jpg

图来自论文:https://arxiv.org/abs/2005.14187

        所以个人看法真正觉得swin transformer能不能落地到实际业务场景,主要也是看时延怎么样,这里给大家一下测试数据参考。

 环境:

ubuntu 16.04 

cuda11.3

NVIDIA T4

shape:1x3x224x224

推理引擎:Tensorrt-8.2.1.8

 这边直接给大家上到tensorrt了,差不多最新版本,tensorrt8.X对bert的优化非常大,可以认为对transformer的结构做了更好的pattern,在这样的条件下降swin和resnet50对比,应该是一个比较公平的比较:


Swin-Transformer-Base

83.4%

6800M

16/8【倍数关系】

842M/666M

Swin-Transformer-small

83.2%

5100M

11/6

696M/549M

Swin-Transformer-tiny

81.2%

4900M

6/3

610M/525M

Resnet101

79.9%

 

6/2

721M/651M

Resnet50

79.1%

 

3/1

636M/579M


从上面表格可以得到几个结论:

1、swin transformer跑的非常慢,哪怕最小尺寸的tiny版本,也比resnet50慢了一倍

2、swin transformer对量化不友好,可以看到从fp32到fp16,时延都是下降了1倍,但是resnet结果可以下降3倍



2、PyramidTNT  Vs Resnet50

PyramidTNT: Improved Transformer-in-Transformer Baselines with Pyramid Architecture

论文地址:https://arxiv.org/abs/2201.00978

代码地址:https://github.com/huawei-noah/CV-Backbones/tree/master/tnt_pytorch

模型

精度

Torch-推理时显存占用

Tensorrt-8.2.1.8 cuda11.3 ubuntu16.04 T4 1x3x256x256

[fp32/fp16]

Tensorrt 推理占用显存[fp32/fp16]

PyramidTNT-S

82.0% [1x3x256x256]

 

6/4【倍数关系】

803M/575M

Resnet101

79.9%[1x3x224x224]

 

6/2

949M/656M

Resnet50

79.1% [1x3x224x224]

 

3/1

689M/581M

从上面表格可以得到几个结论:

1、PyramidTNT 比 swin transformer同精度下能推理更快,但是推理速度比resnet50还有差距

2、PyramidTNT 对量化更加不友好,说明layernorm,softmax,concat的时间占比大于matmul的qkv相乘的时间,量化了qk相乘的时间,在总时间的占比上,优化有限。这个情况有点类似于gpt:


3、Uniformer  Vs Resnet50

而近来Conv + Transformer的混合block也日进兴起,具有conv的高效性,也有MHSA的优点,那么在实际推理场景性能如何呢,这里以Uniformer的推理时延小试牛刀。

UniFormer: Unifying Convolution and Self-attention for Visual Recognition

论文地址:https://arxiv.org/abs/2201.09450

代码地址:https://github.com/Sense-X/UniFormer

【我还给作者提了个代码里的BUG,目前已经修复嘻嘻】

模型

精度

Torch-推理时显存占用

Tensorrt-8.2.1.8 cuda11.3 ubuntu16.04 T4 1x3x224x224

[fp32/fp16]

Tensorrt 推理占用显存[fp32/fp16]

Resnet101

79.9%

 

6/2【倍数关系】

721M/651M

Resnet50

79.1%

 

3/1

636M/579M

Uniforer-s

82.9%

 

4.8/3

742M/676M

在fp32下,可以比起P-TNT用更快的时延达到了更高的精度,但是量化依旧不友好

后记

Tansformer的崛起似乎已经势不可挡,在CV领域也取得了不错成效,但是距离商业化在CV领域落地还存在一定的距离,这个距离可靠大厂在推理引擎对Tansformer结构更好的适配,也可以靠学者们提出更加elegant的结构,个人感觉现在ViT还是处在VGG16时代,距离ViT的resnet时代尚未到来

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。