第27篇MobileNetV2:倒置残差和线性瓶颈
Posted AI浩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第27篇MobileNetV2:倒置残差和线性瓶颈相关的知识,希望对你有一定的参考价值。
MobileNetV2:倒置残差和线性瓶颈
摘要
在本文中,我们描述了一种新的移动架构 MobileNetV2,它提高了移动模型在多个任务和基准测试以及不同模型大小范围内的最新性能。 我们还描述了在我们称为 SSDLite 的新框架中将这些移动模型应用于对象检测的有效方法。 此外,我们演示了如何通过我们称之为 Mobile DeepLabv3 的 DeepLabv3 的简化形式来构建移动语义分割模型。
基于倒置残差结构,其中快捷连接位于薄瓶颈层之间。 中间扩展层使用轻量级深度卷积来过滤特征作为非线性源。 此外,我们发现去除窄层中的非线性以保持代表性很重要。 我们证明这可以提高性能并提供导致这种设计的直觉。
最后,我们的方法允许将输入/输出域与转换的表达性分离,这为进一步分析提供了一个方便的框架。 我们测量了我们在 ImageNet [1] 分类、COCO 对象检测 [2]、VOC 图像分割 [3] 上的性能。 我们评估权衡
精度与乘加 (MAdd) 测量的操作数量以及实际延迟和参数数量之间的关系。
1、简介
神经网络彻底改变了机器智能的许多领域,为具有挑战性的图像识别任务提供了超人的准确性。 然而,提高准确性的动力往往是有代价的:现代最先进的网络需要大量的计算资源,超出了许多移动和嵌入式应用程序的能力。
本文介绍了一种专门为移动和资源受限环境量身定制的新神经网络架构。 我们的网络通过显着减少所需的操作和内存数量,同时保持相同的准确性,推动了移动定制计算机视觉模型的最新技术。
我们的主要贡献是一个新的层模块:具有线性瓶颈的倒置残差。该模块将低维压缩表示作为输入,首先将其扩展为高维并使用轻量级深度卷积进行过滤。 随后将特征投影回具有线性卷积的低维表示。 官方实现在 [4] 中作为 TensorFlow-Slim 模型库的一部分提供。
该模块可以在任何现代框架中使用标准操作有效地实现,并允许我们的模型使用标准基准在多个性能点上击败最先进的技术。 此外,这个卷积模块特别适用于移动设计,因为它允许通过从不完全实现大型中间张量来显着减少推理期间所需的内存占用。 这减少了许多嵌入式硬件设计中对主存储器访问的需求,这些设计提供少量非常快速的软件控制高速缓存。
2、相关工作
在过去几年中,调整深度神经架构以在准确性和性能之间取得最佳平衡一直是一个活跃的研究领域。 由众多团队进行的手动架构搜索和训练算法的改进都导致了对早期设计(如 AlexNet [5]、VGGNet [6]、GoogLeNet [7])的显着改进。 和 ResNet [8]。 最近在算法架构探索方面取得了很多进展,包括超参数优化 [9、10、11] 以及各种网络修剪方法 [12、13、14、15、16、17] 和连通性学习 [18、19] . 大量的工作也致力于改变内部卷积块的连接结构,例如在 ShuffleNet [20] 或引入稀疏性 [21] 和其他 [22]。
最近,[23,24,25,26]开辟了将包括遗传算法和强化学习在内的优化方法引入建筑搜索的新方向。 然而,一个缺点是最终的网络非常复杂。 在本文中,我们追求的目标是开发关于神经网络如何运行的更好直觉,并使用它来指导最简单的网络设计。 我们的方法应该被视为对 [23] 中描述的方法和相关工作的补充。 在这种情况下,我们的方法类似于 [20, 22] 所采用的方法,并允许进一步提高性能,同时提供对其内部操作的一瞥。 我们的网络设计基于 MobileNetV1 [27]。 它保留了其简单性并且不需要任何特殊的操作员,同时显着提高了其准确性,在移动应用程序的多个图像分类和检测任务上实现了最先进的水平
3、预备、讨论和直觉
3.1、深度可分离卷积
深度可分离卷积是许多高效神经网络架构的关键构建块 [27,28,20],我们也在当前的工作中使用它们。 基本思想是用将卷积分成两个独立层的分解版本替换完整的卷积算子。 第一层称为深度卷积,它通过对每个输入通道应用单个卷积滤波器来执行轻量级滤波。 第二层是 1×1 卷积,称为逐点卷积,负责通过计算输入通道的线性组合来构建新特征。
标准卷积采用 h i × w i × d i h_i\\times w_i\\times d_i hi×wi×di输入张量 L i L_i Li,并应用卷积核 K ∈ R k × k × d i × d j K\\in R^k \\times k \\times d_i \\times d_j K∈Rk×k×di×dj以产生 h i × w i × d j h_i\\times w_i\\times d_j hi×wi×dj输出张量 L j L_j Lj。 标准卷积层的计算成本为 h i × w i × d i × d j × k × k h_i\\times w_i\\times d_i\\times d_j\\times k \\times k hi×wi×di×dj×k×k。
深度可分离卷积是标准卷积层的直接替代品。 从经验上讲,它们的工作原理几乎与常规卷积一样好,但只是成本:
h
i
⋅
w
i
⋅
d
i
(
k
2
+
d
j
)
h_i \\cdot w_i \\cdot d_i\\left(k^2+d_j\\right)
hi⋅wi⋅di(k2+dj)
这是depthwise和1×1 pointwise卷积的总和。 与传统层相比,有效的深度可分离卷积减少了几乎 k 2 k^2 k2 的计算量。 MobileNetV2 使用 k = 3(3 × 3 深度可分离卷积),因此计算成本比标准卷积小 8 到 9 倍,而准确度仅略有降低 [27]。
3.2、线性瓶颈
考虑一个由 n 层 L i L_i Li组成的深度神经网络,每个层都有一个维度为 h i × w i × d i h_i\\times w_i \\times d_i hi×wi×di 的激活张量。 在本节中,我们将讨论这些激活张量的基本属性,我们将其视为具有 d i d_i di 维度的 h i × w i h_i \\times w_i hi×wi“像素”的容器。 非正式地,对于一组输入的真实图像,我们说这组层激活(对于任何层 L i L_i Li)形成了一个“感兴趣的流形”。 长期以来,人们一直认为神经网络中感兴趣的流形可以嵌入到低维子空间中。 换句话说,当我们查看深度卷积层的所有单个 d 通道像素时,这些值中编码的信息实际上位于某个流形中,而流形又可以嵌入到低维子空间中。
乍一看,可以通过简单地减少层的维数来捕获和利用这样的事实,从而减少操作空间的维数。 这已被 MobileNetV1 [27] 成功利用,通过宽度乘数参数有效地在计算和准确性之间进行权衡,并已被纳入其他网络的有效模型设计中 [20]。 按照这种直觉,宽度乘数方法允许人们减少激活空间的维数,直到感兴趣的流形跨越整个空间。 然而,当我们回忆起深度卷积神经网络实际上具有非线性的每坐标变换(例如 ReLU)时,这种直觉就会被打破。 例如,应用于一维空间中的一条线的 ReLU 会产生一条“射线”,
其中与在
R
n
R^n
Rn 空间中一样,它通常会产生具有 n 个关节的分段线性曲线。
不难看出,一般来说,如果一个层变换的结果 ReLU(Bx) 的体积 S 非零,映射到内部 S 的点是通过输入的线性变换 B 得到的,因此表明对应于全维输出的输入空间仅限于线性变换。换句话说,深度网络仅在输出域的非零体积部分具有线性分类器的能力。我们参考补充材料以获得更正式的声明。
另一方面,当 ReLU 折叠通道时,它不可避免地会丢失该通道中的信息。但是,如果我们有很多通道,并且激活流形中有一个结构,那么信息可能仍会保留在其他通道中。在补充材料中,我们表明,如果输入流形可以嵌入到激活空间的显着低维子空间中,那么 ReLU 变换会保留信息,同时将所需的复杂性引入可表达的函数集
总而言之,我们强调了两个属性,这些属性表明感兴趣的流形应该位于高维激活空间的低维子空间中:
-
如果感兴趣的流形在 ReLU 变换后保持非零体积,则对应一个线性变换
-
ReLU 能够保留有关输入流形的完整信息,但前提是输入流形位于输入空间的低维子空间中
这两个见解为我们提供了优化现有神经架构的经验提示:假设感兴趣的流形是低维的,我们可以通过将线性瓶颈层插入卷积块来捕获这一点。 实验证据表明,使用线性层至关重要,因为它可以防止非线性破坏太多信息。 在第 6 节中,我们凭经验表明,在瓶颈中使用非线性层确实会降低几个百分点的性能,进一步验证了我们的假设。 我们注意到,在 [29] 中报告了有助于非线性的类似报告,其中非线性从传统残差块的输入中移除,从而提高了 CIFAR 数据集的性能。
在本文的其余部分,我们将使用瓶颈卷积。 我们将输入瓶颈的大小与内部大小之间的比率称为扩展比率。
3.3、倒置残差
瓶颈块看起来类似于残差块,其中每个块包含一个输入,然后是几个瓶颈,然后是扩展 [8]。 然而,受到瓶颈实际上包含所有必要信息的直觉的启发,而扩展层仅充当伴随张量非线性变换的实现细节,我们直接在瓶颈之间使用快捷方式。图 3 提供了示意图 设计差异的可视化。 插入快捷方式的动机类似于经典的残差连接:我们希望提高梯度在乘法器层中传播的能力。 然而,倒置设计的内存效率要高得多(详见第 5 节),并且在我们的实验中效果更好。
瓶颈卷积的运行时间和参数计数 基本实现结构如表 1 所示。对于大小为 h × w h \\times w h×w、扩展因子为 t 和内核大小为 k 的块,具有 d ′ d^\\prime d′ 个输入通道和 d ′ ′ d^\\prime \\prime d′′个输出通道,所需的乘加总数 是 h ⋅ w ⋅ d ′ ⋅ t ( d ′ + k 2 + d ′ ′ ) h \\cdot w \\cdot d^\\prime \\cdot t\\left(d^\\prime+k^2+d^\\prime \\prime\\right) h⋅w⋅d′⋅t(d′+k2+d′′)。 与(1)相比,这个表达式有一个额外的项,因为我们确实有一个额外的 1 × 1 卷积,但是我们网络的性质允许我们使用更小的输入和输出维度。 在表 3 中,我们比较了 MobileNetV1、MobileNetV2 和 ShuffleNet 之间每种分辨率所需的大小。
3.4、信息流解读
我们架构的一个有趣特性是它提供了构建块(瓶颈层)的输入/输出域和层转换之间的自然分离——这是一种将输入转换为输出的非线性函数。前者可以看作是网络在每一层的容量,而后者可以看作是表现力。这与常规和可分离的传统卷积块形成对比,在传统卷积块中,表现力和容量都纠缠在一起,并且是输出层深度的函数。
特别是,在我们的例子中,当内层深度为 0 时,由于快捷连接,底层卷积是恒等函数。当扩展比小于 1 时,这是一个经典的残差卷积块 [8, 30]。然而,为了我们的目的,我们表明大于 1 的膨胀比是最有用的。
这种解释使我们能够将网络的表达能力与其容量分开研究,我们相信有必要进一步探索这种分离,以更好地理解网络属性。
4、模型架构
现在我们详细描述我们的架构。 如上一节所述,基本构建块是带有残差的瓶颈深度可分离卷积。 该块的详细结构如表 1 所示。MobileNetV2 的架构包含具有 32 个过滤器的初始全卷积层,随后是表 2 中描述的 19 个残差瓶颈层。由于其鲁棒性,我们使用 ReLU6 作为非线性 当与低精度计算一起使用时[27]。 我们始终使用现代网络的标准内核大小 3 × 3,并在训练期间利用 dropout 和批量归一化。
除第一层外,我们在整个网络中使用恒定的扩展率。 在我们的实验中,我们发现在 5 到 10 之间的扩展率会导致几乎相同的性能曲线,较小的网络在扩展率稍低的情况下效果更好,而较大的网络在扩展率较大的情况下性能稍好。
对于我们所有的主要实验,我们使用 6 的扩展因子应用于输入张量的大小。 例如,对于采用 64 通道输入张量并产生具有 128 通道的张量的瓶颈层,则中间扩展层为 64×6 = 384 通道。
权衡超参数 如在 [27] 中,我们通过使用输入图像分辨率和宽度乘数作为可调超参数来定制我们的架构以适应不同的性能点,可以根据所需的精度/性能权衡进行调整。 我们的主网络(宽度乘法器 1,224 × 224)的计算成本为 3 亿次乘加,并使用了 340 万个参数。 我们探讨了性能权衡,输入分辨率从 96 到 224,宽度乘数从 0.35 到 1.4。 网络计算成本范围从 7 乘加到 585M MAdds,而模型大小在 1.7M 和 6.9M 参数之间变化。
与 [27] 的一个小的实现差异是,对于小于 1 的乘数,我们将宽度乘数应用于除最后一个卷积层之外的所有层。 这提高了较小模型的性能。
5、实施说明
5.1、内存高效推理
倒置残差瓶颈层允许实现特别高效的内存实现,这对于移动应用程序非常重要。使用例如 TensorFlow[31] 或 Caffe [32] 的标准高效推理实现构建了一个有向无环计算超图 G,由边组成 表示表示中间计算张量的操作和节点。 计划计算以最小化需要存储在内存中的张量总数。 在最一般的情况下,它搜索所有合理的计算顺序 Σ(G) 并选择最小化的。
M
(
G
)
=
min
π
∈
Σ
(
G
)
max
i
∈
1..
n
[
∑
A
∈
R
(
i
,
π
,
G
)
∣
A
∣
]
+
size
(
π
i
)
M(G)=\\min _\\pi \\in \\Sigma(G) \\max _i \\in 1 . . n\\left[\\sum_A \\in R(i, \\pi, G)|A|\\right]+\\operatornamesize\\left(\\pi_i\\right)
M(G)=π∈Σ(G)mini∈1..nmax⎣⎡A∈R(i,π,G)∑∣A∣⎦⎤+size(πi)
其中
R
(
i
,
π
,
G
)
R(i, \\pi, G)
R(i,π,G) 是连接到任何
π
i
…
π
n
\\pi_i \\ldots \\pi_n
πi…πn节点的中间张量列表,
∣
A
∣
|A|
∣A∣表示张量 A 的大小,size(i) 是内部所需的内存总量 操作期间的存储 i。
对于仅具有平凡并行结构(例如残差连接)的图,只有一个非平凡的可行计算顺序,因此可以简化计算图 G 上推理所需的内存总量和界限: 以上是关于第27篇MobileNetV2:倒置残差和线性瓶颈的主要内容,如果未能解决你的问题,请参考以下文章 改进YOLO系列 | YOLOv5/v7 更换骨干网络之 MobileNeXt 图像分类实战:mobilenetv2从训练到TensorRT部署(pytorch) 图像分类实战:mobilenetv2从训练到TensorRT部署(pytorch)
M
(
G
)
=
max
o
p
∈
G
[
∑
A
∈
o
p
inp