论文地址:
https://arxiv.org/abs/2403.19963
论文代码:
https://github.com/ma-xu/EfficientMod
Introduction
视觉
Transformer
(
ViT
)在广泛的视觉任务中展现了令人印象深刻的成就,并为视觉网络设计贡献了创新的思路。得益于自注意力机制,
ViTs
在动态特性和长距离上下文建模的能力上与传统卷积网络有所区别。然而,由于自注意力机制在视觉标记数量上具有二次复杂度,其既不具备参数效率也不具备计算效率,这阻碍了
ViTs
在边缘设备、移动设备和其他实时应用场景上的部署。因此,一些研究尝试在局部区域内使用自注意力,或者选择性地计算信息标记,以减少计算量。同时,一些工作尝试将卷积和自注意力结合起来,以实现理想的效果和效率的折衷。
最近的一些研究表明,纯卷积网络也能够与自注意力相比取得令人满意的结果。其中,
FocalNet
和
VAN
以计算效率高和易于实现而著称,展现了领先的性能且显著优于
ViT
的对应模型。一般来说,这两种方法都使用大核卷积块进行上下文建模,并通过逐元素乘法调节投影输入特征(随后是一个
MLP
块),如图1b所示。这种设计统称为调制机制,它表现出有前景的性能,并且从卷积的有效性和自注意力的动态性中获益。尽管调制机制在理论上是高效的(从参数和
FLOPs
的角度来看),但在计算资源有限时推断速度不尽如人意。造成这种情况的原因主要有两个:
-
冗余和等效操作,如连续的深度卷积和冗余的线性投影占据了大部分操作时间。
-
上下文建模分支中的碎片化操作显著增加了延迟,并违反了
ShuffleNetv2
中的指导原则
G3
。
为此,论文提出了高效调制(
Efficient Modulation
),可以作为高效模型的基本构建块(见图1c)。与
FocalNet
和
VAN
的调制块相比,高效调制块更加简单并继承了所有的优点(见图1b和图1c)。与
Transformer
块相比,高效调制块的计算复杂度与图像尺寸呈线性关系,强调大规模但局部的特征交互,而
Transformer
则与标记数量的立方相关并直接计算全局交互。与反向残差(
MBConv
)块相比,高效调制块使用更少的通道进行深度卷积,并融入了动态特性。
基于高效调制(
Efficient Modulation
)块,论文提出了基于纯卷积的新型高效网络架构
EfficientMod
。
EfficientMod
块与传统的自注意力块正交,并且与其他设计具有良好的兼容性。通过将注意力块与
EfficientMod
集成的混合架构,可以产生更好的结果。在不使用神经网络搜索(
NAS
)的情况下,
EfficientMod
在各种任务中展现出非常不错的性能。与最先进方法
EfficientFormerV2
相比,
EfficientMod-s
在
GPU
上的速度比
EfficientFormerV2-S2
快
25%
,并且在top-1准确率上超过了
EfficientFormerV2-S2
约
0.3
个百分点。此外,EfficienntMod在下游任务中也显著超越了
EfficientFormerV2
,在
ADE20K
语义分割基准测试中,其
mIoU
比
EfficientFormerV2
高出了
3.6
个百分点,而模型复杂度相当。
Method
Revisit Modulation Design
-
Visual Attention Networks
VAN 提出了一个简单且有效的卷积注意力设计。具体而言, 给定输入特征
, 首先使用一个全连接(FC)层(带有激活函数)
将
投影到一个新的特征空间, 然后将其输入到两个分支。第一个分支
提取上下文信息, 第二个分支是一个恒等映射。使用逐元素乘法来融合来自两个分支的特征, 随后添加一个新的线性投影
。具体来说, VAN 块可以写成:
其中,
表示逐元素相乘, DWConv
表示具有核大小
和扩张率
的深度可分离卷积,
是上下文分支中的另一个全连接 ( FC ) 层。遵循MetaFormer的设计理念, VAN 块被用作标记混合器, 并且后续连接一个具有深度可分离卷积的双层 MLP 块作为通道混合器。
FocalNet s引入了焦点调制来替代自注意力, 同时享有动态性和较大的感受野。FocalNe t 还提出了一种并行的双分支设计, 一个上下文建模分支
自适应地聚合不同层次的上下文, 一个线性投影分支
将
投影到一个新的空间。类似地, 这两个分支通过逐元素相乘进行融合, 然后使用一个 FC 层
。形式上, FocalNet 中的分层调制设计可以表示为(为了清晰起见, 忽略全局平均池化层) :
其中, ctx包括由具有大小为
的深度可分离卷积层分层提取的
层上下文信息,
将
通道特征投影到一个门控值。act
是在每个卷积层之后的 GELU 激活函数。
-
Abstracted Modulation Mechanism
VAN
和
FocalNet
均展示出了良好的表征能力,并表现出令人满意的性能。实际上,这两种方法都共享一些不可或缺的设计,可能就是性能提升的关键:
-
这两个并行分支是独立操作的,从不同的特征空间提取特征,类似于自注意力机制(如图1a所示)。
-
在上下文建模方面,两者均考虑了较大的感受野。
VAN
堆叠了两个具有扩张的大核卷积,而
FocalNet
引入了分层上下文聚合以及全局平均池化来实现全局交互。
-
这两种方法通过逐元素相乘将来自两个分支的特征融合在一起,这在计算上是高效的。
-
与此同时,它们也存在着明显的不同设计,比如上下文建模的具体实现以及特征投影分支的设计(共享或独立投影)。基于上述相似之处并忽略特定的差异,论文将调制机制进行抽象,如图1b所示,并形式定义如下:
这个抽象的调制机制在理论上继承了卷积和自注意力的优良特性,但实际以卷积方式运算,且具有令人满意的效率。具体地,公式 4 于逐元素相乘而具有类似自注意力的动态性。上下文分支还引入了局部特征建模,但也通过大的核大小实现了较大的感受野(这对效率来说不是瓶颈)。遵循
VAN
和
FocalNet
,在调制后引入一个两层
MLP
块。
Efficient Modulation
尽管比自注意力更高效,但抽象的调制机制在理论复杂度和推理延迟方面仍无法满足移动网络的效率要求。因此,论文提出了高效调制(
Efficient Modulation
),旨在为高效网络量身定制的同时保留调制机制的所有优良特性。
-
Sliming Modulation Design
通用的调制块具有许多零散的操作, 如图1b所示。比如未考虑上下文建模实现的细节, 引入了四个全连接(FC)层。正如 ShuffleNetv2 中的指导原则 G3 所述, 即使通过调整通道数量可以降低计算复杂度, 但太多的零散操作也将显著降低速度。因此, 论文融合了 MLP 和调制块的 FC 层, 如图1c所示。使用
基于通过扩展因子
来扩展通道维度, 并利用
来压缩通道数量。换句话说, MLP 块与调制设计融合并且具有灵活的扩展因子, 产生类似于 MBCo nv 块的统一块。
-
Simplifying Context Modeling
为了提高效率, 对上下文建模分支进行定制。给定输入
, 首先通过线性投影
将
投影到一个新的特征空间, 然后使用具有 GELU 激活的深度可分离卷积来建模局部空间信息(设置核大小为 7 , 作为平衡效率和较大感受野之间的折衷), 最后使用线性投影
进行通道间的信息交流。值得注意的是, 在整个上下文建模分支中, 通道数量保持不变。简而言之, 上下文建模分支可以表示为:
这种设计比
VAN
和
FocalNet
中的上下文建模要简单得多,通过一个大核的深度可分离卷积抛弃了等效的多个深度可分离卷积。这可能会在一定程度上牺牲性能以换取效率,但消融研究表明,上下文分支中的每个操作都是必不可少的。
Network Architecture
EfficientMod
采用了
4
个阶段的分层架构,每个阶段由一系列带有残差连接的
EfficientMod
模块组成。为了简化起见,使用重叠的图像块嵌入(通过卷积层实现下采样)分别将特征减小
4
倍、
2
倍、
2
倍和
2
倍。对于每个模块,使用层归一化来对输入特征进行归一化,然后将归一化的特征输入
EfficientMod
模块。采用随机深度和层缩放来改善模型的鲁棒性。
需要注意的是,
EfficientMod
模块与自注意机制是正交的,将
EfficientMod
模块与注意力模块相结合即可得到一种新的混合设计。混合结构将原始注意力模块引入到特征尺寸相对较小的最后两个阶段,根据纯卷积型
EfficientMod
对应模块的参数进行宽度和深度修改,保证进行公平比较。一共设计三个规模的混合结构,参数范从
4M
到
13M
,分别为
EfficientMod-xxs
,
EfficientMod-xs
和
EfficientMod-s
。
Computational Complexity analysis
给定输入特征
, EfficientMod 模块的总参数数量为
, 计算复杂度为
, 其中
为卷积核大小,
为
中的扩张比率。为了简化, 忽略了可学习层中的激活函数和偏置项。与注意力机制相比, EfficientMod 模块的复杂度与输入分辨率呈线性关系。与 MBConv 相比, EfficientMod 模块将深度可分离卷积的复杂度减少了
倍(MBConv 有升维操作),这对于有效性至关重要。
除了理论计算复杂度外,论文提供了一些实际指南:
-
通过将更多参数移至特征分辨率较小的后期阶段来减少
FLOPs
。这样做的原因在于
EfficientMod
的
FLOPs
基本上等于输入分辨率乘以参数数量。遵循这一指导方针,可以在后期阶段添加更多的模块或者大幅增加宽度。需要注意的是,这一指南并不仅适用于我们的
EfficientMod
,也可以应用于所有的全连接和卷积层。
-
只在最后两个阶段引入注意力模块,考虑到自注意力的计算复杂度,这是许多研究中的一种常见做法。
-
使用
Repeat
操作来匹配通道数(两个分支的输出特征),以节省
CPU
时间并仅需少量
GPU
开销。
EfficientFormer
观察到,对于许多模型来说,
Reshape
操作通常是瓶颈。
Reshape
在
CPU
上运行缓慢,但在
GPU
上友好。与此同时,
Repeat
操作在
CPU
上运行迅速,但在
GPU
上耗时。如图2所示(这里应该是图标反了),选择
Repeat
操作来获得最佳的
GPU-CPU
延迟折衷。(这一点有点疑问,这里使用
Repeat
是为了匹配少了的维度数,
Reshape
应该达不到这个效果。私信了作者,这里的
Reshape
实际为
torch.broadcast_to
函数)
Relation to Other Models
通过引入
Mobile Inverted Bottleneck
(简称
MBConv
)模块,
MobileNetV2
开启了高效网络领域的新时代。与顺序排列全连接层的
MBConv
模块相比,
EfficientMod
模块将深度可分离卷积层分离出来,并通过逐元素乘法将其插入到两层全连接网络的中间。由于深度可分离卷积的通道数量减少,
EfficientMod
是一种更高效的操作,并且在性能上取得了更好的表现(由于调制操作)。
SENet 通过提出通道注意力机制向 ConvNets 引入了动态特性, SE 块可以表示为
。最近许多研究将其纳入, 从而在理论上保持低复杂度的同时实现更好的准确性。然而, 由于 SE 块中的零碎操作多, 实际会显著降低 GPU 上的推理延迟。相反, EfficientMod 模块通过
连贯地进行通道注意力, 其中
自适应地调整了
的通道权重。
Experiments
对
EfficientMod
在四个任务上进行验证:在
ImageNet-1K
上进行图像分类, 在
MS COCO
上进行目标检测和实例分割,在
ADE20K
上进行语义分割。在
PyTorch
中实现了所有网络,并将其转换为
ONNX
模型在两种不同的硬件上进行测试:
-
GPU
:选择
P100 GPU
进行延迟评估,因为它可以模拟近年来大多数设备的计算能力。其他
GPU
可能会产生不同的基准结果,但我们观察到趋势是类似的。
-
CPU
:一些模型在不同类型的硬件上可能会产生不可预测的延迟(主要是由内存访问和零碎操作引起的),在
Intel(R) Xeon(R) CPU E5-2680
上的所有模型的测得延迟以进行全面比较。
对于延迟基准测试,将批处理大小分别设置为1,以模拟真实世界的应用。为了抵消方差,对每个模型重复进行
4000
次运行,并报告平均推理时间。遵循常见的做法,使用四个线程同时测试。
Image Classification on ImageNet-1K
EfficientMod
在不同硬件上的分类精度和推理延迟方面表现出色。例如,
EfficientMod-s
在
GPU
上比
EdgeViT
表现相同,但运行速度快了
15
毫秒(约快
73%
),在
CPU
上快了
11
毫秒(约快
32%
)。此外,参数和计算复杂度也更少。
EfficientMod-s
在
GPU
上也比
EfficientFormerV2-S2
有
0.6
提升,运行速度快了
1.8
毫秒(约快
25%
)。需要注意的是,一些高效设计(例如
MobileNetV2
和
FasterNet
)注重低延迟,而其他模型则注重性能(例如
MobileViTv2
和
EdgeViT
),而
EfficientMod
在
GPU
和
CPU
上运行速度快且提供了最先进的性能。
为了更好地了解
EfficientMod
的改进,我们以
EfficientMod-s
为例,概述了每个修改的具体改进。从纯卷积基础版本到混合模型,都显示在了表2中。即使
EfficientMod
的纯卷积基础版本已经以
80.5%
的显著结果,明显超过相关的基于卷积的网络。通过调整为混合架构,还可以进一步将性能提升至81.0%。
同时,一些方法采用了强大的训练策略,比如
MobileOne
中的重新参数化和
EfficientFormerV2
中的蒸馏。经过蒸馏训练,可以将
EfficientMod-s
的精度从
81.0%
提升到
81.9%
,如表3所示。