Vision Transformer(ViT)在2022年能否落地在实际业务上?
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其实可以差很远。
图来自论文: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时代尚未到来
- 点赞
- 收藏
- 关注作者
评论(0)