TRT-ViT(ByteDance)

paper:TRT-ViT: TensorRT-oriented Vision Transformer

背景和出发点

近年来,视觉Transformer(Vision Transformer,ViT)在各种计算机视觉任务中取得了显著的成功,表现出相对于卷积神经网络(CNN)的性能提升。然而,尽管在性能上有所提升,Transformer在实际场景中的部署仍面临巨大挑战,尤其是在资源受限的设备上。现有的研究主要关注通过计算效率(如FLOPs或参数数量)来优化ViT,但这些间接标准无法准确反映真实场景中的效率问题,如内存访问成本和I/O吞吐量。

现有的衡量计算效率的标准(如FLOPs或参数数量)被认为是片面的、次优的,并且与硬件特性关联不紧密。实际部署中,模型需要适应环境的不确定性,包括内存访问成本和I/O吞吐量等硬件感知特性。 本文旨在解决现有Transformer在实际部署中的效率瓶颈,提出以TensorRT在特定硬件上的延迟作为直接效率反馈。

创新点

本文解决了如下问题:

  • 现有Transformer的计算资源开销过大,难以在资源受限设备上高效部署。
  • 现有的效率优化标准(如FLOPs或参数数量)不能充分反映实际部署中的性能。
  • 需要在保持Transformer性能的同时,提升其在实际应用中的效率。

创新点如下:

  1. 直接效率反馈:提出以TensorRT延迟作为效率衡量标准,提供了更全面的反馈,涵盖计算能力、内存成本和带宽。
  2. 混合设计:通过系统地探索CNN与Transformer的混合设计,提出在不同阶段(stage)和块(block)级别结合CNN和Transformer的架构。
  3. 设计指南:总结出四条实用的TensorRT优化设计指南:
    (1)在后期阶段使用Transformer块以优化效率和性能的权衡。
    (2)采用浅层-深层阶段模式提升模型性能。
    (3)在块级别上结合Transformer和BottleNeck块以提高效率。
    (4)使用全局-局部块模式弥补性能问题。
  4. TRT-ViT模型:基于上述设计指南,提出了一系列混合网络,显著提高了在图像分类、目标检测和语义分割任务中的延迟-精度权衡。例如,在ImageNet-1k上达到82.7%精度的同时,比CSWin快2.7倍,比Twins快2.0倍。

方法介绍

作者首先给出了一些实验发现,然后提出了四条设计指南来设计在TensorRT上的高效网络。然后开发了一种高效、高性能的新体系结构,命名为TRT-ViT。

作者主要研究ResNet和ViT两个代表网络的运行性能,为了更好地说明实证结果,遵循RepLKNet(具体介绍见RepLKNet(CVPR 2022, MEGVII)-CSDN博客)本文使用一个operation或block的计算密度来量化其在硬件上的效率,如下

从图1(a)和表1可以看出bottleneck的效率更高,而Transformer block在ImageNet上的精度更高。本文的目标是设计一个网络,同时具有ResNet的效率和Transformer的性能,将bottleneck和Transformer block直接混合会导致较差的性能和速度,因此作者总结了四条在TensorRT上设计高效网络的准则。

 

Guideline 1:在网络late stage的Transformer block可以最大限度地平衡效率和性能。普遍认为Transformer block比卷积block更强大但效率更低,因为Transformer旨在建立一个特征之间的全局连接,而卷积只捕获局部信息。

如表1所示,当输入分辨率为56x56时,Transformer的TeraFLOPS为81,不到BottleNeck的378的四分之一,但当输入分辨率为7x7时,两者的TeraFLOPS几乎相等分别为599和670,即当输入分辨率变小时,两者的效率差距减小。这一发现促使作者在设计高效网络时将Transformer block放在网络的后期阶段,以平衡性能和效率。

Guideline 2:先浅后深的stage模式提高了性能。人们普遍认为参数越多网络容量越大,我们的目标是开发一个在不牺牲效率的前提下参数更多的stage模式。类似于式(1)作者定义了一个参数密度来量化一个operation或block在硬件上的容量,如下

如表1所示,bottleneck的TeraParams在网络后期越来越突出,表明在网络的后期阶段堆叠更多的bottleneck block会带来更大的容量,Transformer中也有类似的趋势。这一观察促使作者将网络的early stage设计的更浅即block数更少,将late stage设计的更深即更多的block。为了验证这一点,作者将ResNet的前两个stage的block数从3、4减少到2、3并将最后一个stage的block数从3增加到5,结果如表2所示,可以看到改进后的ResNet50比原始的ResNet50在ImageNet上的精度高了0.3%,同时在TensorRT上延迟更低。

 

Guideline 3:一个block里混合使用Bottleneck和Transofrmer比只用Transformer更高效。我们的目标是构建一个具有ResNet效率和Transformer性能的网络,为了实现这一点,作者寻求设计一个新的block,其中混合使用Transformer和BottleNeck从而可以利用两者的好处。

 

如图3(a)(b)所示,作者给出了两种选择,一种是Transformer和BottleNeck并行称为MixBlockA,另一种是串行称为MixBlockB。如表1所示,两个mixed block相比Transformer的TeraFLOPS都更高,表明它们的效率更高。同时TeraParams也更高,表明它们具有更高性能的潜力。

 

作者用MixBlockA和MixBlockB分别构建了MixNetA和MixNetB,如表3所示,其中C,T,M分别表示卷积、Transformer和MixBlock,可以看到MixNetA和MixNetB的表现都超过了ResNet50,但在精度方面都不如MixNetV(MixNetV是使用准则1、2但没用3构建的网络)。

Guideline 4:先全局后局部的block模式有助于弥补性能问题。Transformer更关注全局信息,卷积更关注局部信息。先提取全局信息再进行局部细化的方式相比先提取局部信息后进行全局细化更合理。此外MixBlockB中的shrinking ratio R只能为0.5,失去了进一步调整的灵活性,而先全局后局部的模式不存在这个问题,其中R值可以是0到1之间的任何值。

基于这条准则,作者调换了MixBlockB中Transformer和卷积的顺序得到了MixBlockC,如图3(c)所示。基于MixBlockC构建的MixNetC结果如表3所示,可以看到MixNetC在速度和精度方面都超越了ResNet50和MixNetV。

作者根据ResNet的基本配置和上述四条准则构建了TRT-ViT,如下图所示。

网络采用特征金字塔结构,特征图的分辨率随着网络深度的增加而降低,通道数则增加。整个网络分为5个stage,只在后期stage使用MixBlockC,早期阶段使用卷积。此外与ResNet相比,使用shallow-then-deep的阶段模式,即早期阶段较浅,后期阶段较深。

作者一共构建了TRT-ViT-A/B/C/D四个网络,具体配置如下

其中3x3表示卷积核为3,C表示输出通道数。R,S,K分别表示Transformer block中的spatial reduction ratio、MixBlockC中BottleNeck中的卷积核大小、以及shrinking ratio。为了简洁R统一设置为0.5,TRT-ViT-A/B/C/D的阶段深度分别为2-4-5-4、3-4-7-4、3-4-9-6、4-5-9-5。对于较小的A和B只在最后一个stage使用MixBlockC,而对于更大的C和D在stage4中额外加了2个MixBlockC。MLP中的expansion ratio为3,Transformer中的head数量为32。对于标准化和激活函数,BottleNeck中使用BN和ReLU,Transformer中使用LN和GeLU。

实验结果

和其它SOTA模型在ImageNet上分类性能对比如表5所示,可以看到TRT-ViT取得了最佳的精度-速度平衡。例如TRT-ViT-A取得了81.2%的top-1精度,比ResNet-50高了2.2%,同时延迟低了10%。TRT-ViT-B取得了和最近的SOTA模型ConNeXt-T相似的精度,但速度快了2.3倍。

在ADE20K上语义分割的性能对表6所示,其中语义分割模型采用了Semantic FPN和UperNet,backbone在ImageNet-1K上预训练后在ADE20K上微调。可以看到在Semantic FPN上,TRT-ViT-B的mIoU超过了Twins-SVT-S 2.2%,同时延迟低了83%。在UperNet上,TRT-ViT-C比SOTA CNN模型ConvNeXt-T的MS mIoU高了2.2%,同时少了17%的推理时间。

 

在COCO数据集上的目标检测和实例分割性能如表7所示。其中模型采用Mask R-CNN,在1x schedule下,TRT-ViT-B 达到了与 Twins SVT-S 相当的性能,而推理速度快了4.7倍。在 3× schedule 的设置下,TRT-ViT-C实现了47.3 AP,比ConvNeXt-T高了1.1,同时延迟更低。

 

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据提供的引用内容,可以得出以下结论: 根据引用\[1\]中的推导过程,torch==1.13.0对应torchvision==0.14.0。这是因为torch和torchvision的小版本号是一一对应的,所以可以根据这个思路来确定它们的对应关系。 引用\[2\]提供了关于torch.triu()函数的信息,它是torch库中的一个函数,用于返回一个张量的上三角部分。 引用\[3\]提供了安装torch和torchvision的命令。可以使用pip命令来安装torch和torchvision的特定版本。 综上所述,根据提供的信息,无法确定torch2trt-0.4.0的相关信息。请提供更多关于torch2trt-0.4.0的信息,以便我能够为您提供更准确的答案。 #### 引用[.reference_title] - *1* [torch 1.13.0 对应的torchvision版本](https://blog.csdn.net/weixin_43301333/article/details/128060203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [torch.triu() - torch.triu_() - v1.5.0](https://blog.csdn.net/chengyq116/article/details/106877146)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [安装torch1.2.0 和 torchvision0.4.1(0.4.0没有成功..)](https://blog.csdn.net/weixin_42521185/article/details/127166109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

00000cj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值