这篇文章从Vision Transformer的实际应用的角度进行了回顾和探索。
现有的Vision Transformer虽然精度很高,但是却并不像ResNet那样高效,且逐渐偏离了实际部署场景的需求。作者们认为这可能是因为当前对于模型计算效率的评估方式决定的,例如FLOPs或者参数量都仅仅是片面的、次优的,而且对于具体的硬件并不敏感。实际上,模型必须应对部署过程中的环境不确定性,其中涉及硬件特性,例如内存访问成本和I/O吞吐量。
由于TensorRT在实践中已经成为一个通用且部署友好的解决方案,它能够提供方便的硬件导向的指导,所以本文将模型设计考虑的重点放到了更具针对性的效率指标的优化上,即特定硬件设备上的TensorRT延时,这可以提供涉及计算能力、内存消耗和带宽的全面反馈。这也随之引出了本文主要围绕的问题:如何设计一个模型,能有 Transformer 那样的高性能,又可以有像 ResNet 那样快的预测速度?
针对这一问题,文章系统的探索了CNN和Transformer的混合设计。通过一系列实验,整理出了四条针对TesnorTR导向和部署友好型的模型设计指导,其中包含两条stage级别的,领条block级别的:
基于这些原则,作者们设计了一系列TensorrtTR-oriented Transformers,即TRT-ViT,这些模型都是CNN与Transformer的混合体。提出的TRT-ViT在视觉分类任务中,关于时延和准确率的权衡上,超过了现有的卷积网络和Vision Transformer。并且在下游任务上的时延和准确率上,也展现出了更显著的提升。
这里的运行时分析主要基于卷积网络和视觉Transformer的各自的典型代表ResNet和ViT:
针对性能的分析,这里引入了数个针对模型效率的分析指标:
通过分析对现有的Transformer、BottleNeck模块本身在分类任务中典型的四个特征图尺寸的情况下计算密度(表1),以及对应典型模型的分类性能和时延情况(图1),可以看到:
所以Transformer Block适合放到模型后期阶段中,以便于平衡性能和效率。
基于此作者设计了第一版模型,即使用使用Transformer Block替换卷积网络深层的BottleNeck。命名为MixNetV。这比Transformer要快,还比ResNet性能好(表3)。
一种广泛认可的观点是参数越多模型容量越高(过参数化)。为了尽可能提升模型的参数但是却不损害效率,这里对参数密度定义为参数量和时延的比值,并以此作为分析的依据。
在Transformer和BottleNeck模块在不同尺寸特征输入时参数密度的对比中可以看到:
这意味着,我们应该让深层更深,浅层更浅。同时,深层堆叠BottleNeck可以更有效地扩充模型的容量而且不会影响模型的效率。
在对ResNet和PVT按照这一观察进行修改后的实验(表2)对比中看到,虽然增加了FLOPs和Params,但是提升了性能的同时还提升了时延。
基于此,对MixNetV做出了同样的改动,减少了浅层block的数量,加深了最深层的数量。得到了Refined-MixNetV,进一步提升了性能,并维持了时延。但是当前的时延仍然要不ResNet50高一些。
为了进一步压缩时延,并同时提升性能,作者们针对结构中的Transformer进行了重新的设计。
设计了Transformer与BottleNeck的三种混合结构,分别是并行式结构的MixBlockA和串行式结构的MixBlockB以及MixBlockC。本部分仅讨论A和B型结构。
这样的结构获得了比Transformer更高的计算密度和参数密度,更有效率和潜力。所以作者用它们替换MixNetV中的Transformer结构。
实验(表3)对比可以看到,虽然替换后的结构MixNetA和MixNetB获得了更好的时延的提升,但是仍然没有超过MixNetV,并且和现有的纯Transformer结构PVT-Medium仍有差距。
考虑到Transformer的全局交互特性与Convolution的局部挖掘特性,相较于“先提取局部信息再在全局细化”,“先获取全局信息再在本地细化”要更加合理。
基于这一规则,对MixBlockB中的Transformer和Convolution位置进行了交换,得到了MixBlockC。而且计算密度不会变化。表3实验结果中证实了这种改进更加有效,获得了和PVT-Medium相同的精度,但是却具有更低的推理延时。
由此,MixBlockC被当做本文模型设计的基础单元。
延续ResNet的基本配置,作者们构建了TRT-ViT的四个变体,仍然延续金字塔结构。模型的构建同样遵循了这四条原则,MixBlockC仅被用在模型最后一个阶段中。模型中的Transformer部分,MLP扩张率设为3,头的维度设为32,使用LN和GeLU,而BottleNeck中使用BN和ReLU。
从下面的三组与一众SOTA的对比中可以看到,在推理时延和性能的权衡上具有着明显的优势。
这里对不同stage中的结构逐步替换为MixBlock,以及MixBlock中的通道收缩参数R分别进行了针对性的消融实验。但是在前面与SOTA的对比中选用的是“C-C-C-M”和“R=0.5”的配置。