如何设计低时延、高性能模型?最新轻量化视觉模型漫谈(一)

火山方舟

小伙伴们,轻量化视觉基础模型系列文章来啦!

基础模型架构一直是计算机视觉中十分活跃的研究领域。随着使用更强的算力和更海量的数据,越来越多的新模型、大模型涌现出来。它们一方面突破了大家一些原有的认知,另一方面也推动了整个计算机视觉领域的研究。计算机视觉领域的发展既要“顶天”,又要“立地”,既要在模型的性能上限上继续突破,又要在模型的落地上不断探索。

最近两年里,基础模型架构领域取得了丰硕的成果,既有不断突破性能上限的新架构、新方法,也有越来越多的轻量化模型涌现出来。 在新升级的 MMClassification 1.0 中,我们也重点支持了一系列的轻量化视觉模型

在本系列文章里,我们将对最新的一些轻量化视觉模型进行介绍,分三期介绍相关新算法。

本期我们将从 MobileViT 和 EdgeNeXt 展开介绍,这两个模型都采用了将 Attention 引入 CNN 的思路进行设计。

移动端往往计算资源有限,通常希望模型具有轻量、低时延(Latency)和高性能的特点,这对模型结构设计和模型优化都提出了很高的要求。

我们将首先介绍最近 Apple 提出的 MobileViT,该工作试图结合 CNN 和 Self-Attention 各自的优势,来设计出能适用于移动端设备的轻量级模型。

MobileViT:

从 CNN 和 Self-Attention 各取所长

Self-Attention 机制对全局关系的建模有助于显著提升模型的性能,但较大的计算量也限制了其在移动端设备上应用的前景。在 MobileViT 中,作者从 MobileNetV2 的基本结构出发,在整个网络中间加入了若干个用于建模全局关系的 MobileViT Block,在维持了模型低时延特点的同时也获得了较高的性能表现。

整体结构

MobileViT 整体结构如下:

picture.image

图 1:MobileViT 整体结构

其中的 MV2 是 MobileNetV2 中以卷积为主的基本 Block,MobileViT Block 是本文提出的一种高效 Attention 机制。

picture.image

图 2:MobileNetV2 Block(图片来自 LocalViT)

我们再次回顾一下被广泛使用的 MobileNetV2 Block,其基本结构与近期各类视觉Transformer 有异曲同工之处,Transformer 中常用的 FFN 和 MobileNetV2 Block 都是 Inverted Residual 的结构,即先升维,再降维,区别在于是否在中间加入一个 DepthWise Conv。最近也有工作尝试将 Transformer 中的 FFN 换成 MobileNetV2 Block,如 LocalViT[]。

MobileViT Block

MobileViT 引入了改进的注意力机制来帮助提升轻量级模型的性能,其本质上是一种 Efficient Attention 机制。在具体实现过程中,它把原来需要在 L=H*W 上进行的 Self-Attention(H,W 是特征图的尺寸),分成了两步。

第一步是先对每个位置(以一个蓝色的位置为例)的特征进行局部(Local)信息建模,这步由一个卷积来实现。

第二步是全局建模,首先把整个特征图划分为没有重叠的 N 个 Patch,即下图中的 9 个黑粗线标出的 Patch,对于一个 Patch 内的一个位置(如蓝色/红色的位置),会与 N 个 Patch 内的相同位置的点取出来做 Self-Attention,即下图中的蓝色方块与红色方块一同做 Self-Attention。

需要特别注意的是,下图的蓝色箭头线代表的是基于卷积的局部建模,粉色箭头线是基于 Self-Attention 的全局建模(稀疏)。相当于把传统的一步的 Self-Attention 拆成了两步走,进而实现复杂度的降低。

picture.image

图 3:MobileViT Block 建模机制示例

有了上边的分析,我们就能理解框架图里的 MobileViT 的整体操作了,如下图。其中的 unfold 的操作即把一个 HWd 的特征图转换成不 Overlap 的 Patch,总共有 N 个这样的 Patch,每个 Patch 内部包括 P 的 location,如上图 2 中,P=9 代表每个 Patch 内的尺寸,N=9 代表总共 9 个Patch。Fold 操作即将其转换回 HWd 的特征图。

picture.image

图 4:MobileViT Block 结构图

训练技术优化

除了上述模型架构上的改进,MobileViT 也在训练技术上进行了一些优化。多尺度训练是基础模型里常用的提升性能的方法,但传统的方法往往是分成多个步骤,比如先使用 384 进行训练,再使用 224 进行微调(fine-tuning)。

也有一些方法是先用一个分辨率训练一定的 iteration,再换用其他分辨率训练一定的 iteration,但一般是 batch size 固定,调整分辨率。这种方式在小分辨率时,GPU 无法被充分利用(由于 batch size 是固定的)。

本文提出了一种动态调整 batch size 和分辨率的机制,即在小分辨率时,使用大 batch size,这样既可以充分利用 GPU,又可以显著提高训练效率。

picture.image

图 5:多尺度 Sampler 示意图,每张 GPU 上的 batch size 会根据当前使用的分辨率进行动态调整,尽可能地提升 GPU 利用率。 右侧展示的是 Multi-scale Sampler 相比标准方式的效率提升。

实验结果

以下展示 MobileViT 和其他轻量级模型的一些性能对比,我们可以看出其具有明显的性能优势。

picture.image

图 6:分类性能比较

本文也在速度上进行了比较和分析,如下图所示:

picture.image

图 7:速度比较

相比于传统的 CNN 模型,MobileViT 的速度还是偏慢的,但是相比于其他的 Transformer 模型,还是具有一定的性能优势,如果未来业界能够针对 Attention 算子进行优化,那该模型的速度也有进一步提升的空间。

EdgeNeXt:

使用 Channel Attention 来提升 CNN 模型

EdgeNeXt 也是采用类似的思路,将 Attention 机制引入 CNN 模型,不过本文使用的并非传统的空间注意力机制,而是使用的通道助力机制来减少 Attention计 算量。

整体结构

picture.image

图 8:EdgeNeXt 的整体结构

模型构造了如上图的架构,主要包括 Conv Encoder 和 SDTA Encoder,其中 Conv Encoder 是 ConvNeXt 中的 block 机制,如下图所示,DWConv 代表 Depth-wise Conv。

picture.image

图 9:Conv Encoder 结构

SDTA Encoder

我们简单介绍一下 SDTA Encoder 的基本结构,其中左侧是一个级联的卷积结构,将特征按通道分为 s 组,按图中的方式依次进行级联, 3x3 代表的是 depth-wise 卷积,中间为通道自注意力机制,最右侧为一个 FFN 结构。本模型相当于在 ConvNeXt 的基础上在每个阶段的最后,添加了一个轻量级的注意力机制。

picture.image

图 10:SDTA Encoder 架构图

实验结果

picture.image

图 11:性能比较

picture.image

图 12:速度比较

本模型相比 MobileViT 在性能上有一定的优势,同时也有更快的推理速度。文章也对模型在检测分割等任务上的性能进行了实验和分析,在此就不展开赘述了。

总结

本文介绍的两个模型主要从 CNN+Attention 的角度探索了轻量级模型设计的新思路,不过总体上讲,相比已有的 CNN 轻量级模型,在速度上仍没有特别明显的优势。

以上两个模型目前已经集成在了 MMClassification 的 1.x 分支当中,欢迎对相关模型感兴趣的同学试用。

参考文献:

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
vivo 容器化平台架构与核心能力建设实践
为了实现规模化降本提效的目标,vivo 确定了基于云原生理念构建容器化生态的目标。在容器化生态发展过程中,平台架构不断演进,并针对业务的痛点和诉求,持续完善容器化能力矩阵。本次演讲将会介绍 vivo 容器化平台及主要子系统的架构设计,并分享重点建设的容器化核心能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论