(四十六)论文阅读 | 轻量级网络之MobileNetV2


简介

在这里插入图片描述

图1:论文原文

该文是对 M o b i l e N e t V 1 {\rm MobileNetV1} MobileNetV1的进一步改进,基本模块还是深度可分离卷积。在此基础上,作者引入带线性瓶颈模块的反向残差模块从而得到 M o b i l e N e t V 2 {\rm MobileNetV2} MobileNetV2。实验证明 M o b i l e N e t V 2 {\rm MobileNetV2} MobileNetV2在多项实时性视觉任务上均达到 S O T A {\rm SOTA} SOTA论文原文


0. Abstract

论文提出新的适用于移动端的架构, M o b i l e N e t V 2 {\rm MobileNetV2} MobileNetV2,基于反向残差结构线性模块。最后,作者在图像分类、目标检测、图像分割等视觉任务上证明了 M o b i l e N e t V 2 {\rm MobileNetV2} MobileNetV2的有效性。

论文贡献:(一)指出在低维空间下使用非线性变换会丢失大量有用信息,从而设计处线性瓶颈模块;(二)提出反向残差模块,由此得到 M o b i l e N e t V 2 {\rm MobileNetV2} MobileNetV2;(三) M o b i l e N e t V 2 {\rm MobileNetV2} MobileNetV2在多项实时性视觉任务上达到了 S O T A {\rm SOTA} SOTA


1. Introduction

论文的主要创新点是提出带有线性模块的反向残差结构,该结构以低维的压缩特征为输入,将其扩展到高维后使用轻量级深度卷积,最后使用线性结构将特征映射回低维。


2. Related Work

M o b i l e N e t V 2 {\rm MobileNetV2} MobileNetV2的设计主要基于 M o b i l e N e t V 1 {\rm MobileNetV1} MobileNetV1,在后者的基础上, M o b i l e N e t V 2 {\rm MobileNetV2} MobileNetV2显著提高了模型精度,并在多项视觉任务上达到 S O T A {\rm SOTA} SOTA


3. Preliminaries, discussion and intuition

3.1 Depthwise Separable Convolutions

根据上一文,深度可分离卷积的计算量为: h i ⋅ w i ⋅ d i ( k 2 + d j ) (1) h_i\cdot w_i\cdot d_i(k^2+d_j)\tag{1} hiwidi(k2+dj)(1)

其中, h i h_i hi w i w_i wi d i d_i di表示输入特征图的尺寸, k k k表示卷积核的大小, d i d_i di表示输出特征图的通道数。

3.2 Linear Bottlenecks

考虑一个由 n n n L i L_i Li组成的深度神经网络,其中每层都有一个维度为 h i × w i × d i h_i\times w_i\times d_i hi×wi×di的激活张量。对于一组输入图像,作者将一系列激活层称为兴趣流型(manifold of interest),有研究表明兴趣流型可以嵌入到低维子空间中。即,当我们观察卷积层中所有单个 d d d通道的像素时,像素值信息位于某流型中,则其可嵌入到低维子空间中。

乍一看,该想法容易得到验证,即减少层维度从而减少激活空间的维度,而 M o b i l e N e t V 1 {\rm MobileNetV1} MobileNetV1中通过宽度缩放系数达到模型精度和速度的折中即证明了这一点。基于宽度缩放的观点,可以减少激活空间的维度从而使兴趣流型横跨整个空间。然而,深度神经网络中的非线性函数会破坏这一假设。如, R e L U {\rm ReLU} ReLU应用于一维空间时会产生一条射线,在 R n {\mathcal R}^n Rn空间内即会得到 n n n条互连的线性曲线。

显然,如果 R e L U ( B x ) {\rm ReLU}(Bx) ReLU(Bx)含有一个非零值 S S S,则映射到 S S S内部的点是通过线性变换 B B B作用于输入得到的。从而表明对于全部输出空间,仅对应于线性变换部分的输入空间。换句话说,深度网络在非零值处仅有线性分类的能力。

此外,由于 R e L U {\rm ReLU} ReLU破坏了特征图的通道维度,而必然会带来信息的丢失。然而,如果我们有很多通道,在丢失部分通道信息时,有价值的兴趣流型仍可能存在于其他通道中。作者证明,如果输入流型可以嵌入到激活空间的一个低维子空间中,那么 R e L U {\rm ReLU} ReLU变换在引入其非线性时也保留了信息。

作者总结了兴趣流型位于高维激活空间的低维子空间的必要性:如果兴趣流型在经过 R e L U {\rm ReLU} ReLU变换后得到非零值,则对应于线性变换;只有当输入流型位于输入空间的低维子空间时, R e L U {\rm ReLU} ReLU才能保留输入流型的完整信息。

基于上述两点,作者提出了针对当前神经网络的优化:假设兴趣流型是低维的,则可以通过在卷积块插入线性模块来获得兴趣流型信息。后续实验证明使用线性模块的有效性,它可以避免信息过多地丢失。


3.3 Inverted Residuals

在这里插入图片描述

图2:The difference between residual block and inverted residual

左图是经典的残差模块,1 x 1(降维)、3 x 3(卷积)、1 x 1(升维),期间均使用非线性激活函数;右图是论文提出的反向残差结构,1 x 1(点卷积升维)、3 x 3(深度卷积 + 非线性激活函数)、1 x 1(降维 + 非线性激活函数)。由于前面提到非线性激活函数仅在低维空间中损失较多信息,所以在反向残差结构中仅在高维空间中使用非线性激活函数。

反向残差结构的计算量: h ⋅ w ⋅ d ′ ⋅ t ( d ′ + k 2 + d ′ ′ ) (2) h\cdot w\cdot d'\cdot t(d'+k^2+d'')\tag{2} hwdt(d+k2+d)(2)

其中, ( h × w × d ′ ) (h\times w\times d') (h×w×d)表示输入大小, t t t表示扩张系数即第一次升维的倍数、 k k k表示卷积核大小, d ′ ′ d'' d表示输出特征图的通道数。如下:
在这里插入图片描述


4. Model Architecture

在这里插入图片描述

图3:MobileNetV2

图中的bottleneck即为图2中的右图结构,其中 n n n表示模块的重复次数。这里,如果输入特征图的通道数是 64 64 64,输出通道数是 128 128 128,扩张系数是 t = 6 t=6 t=6,那么在反向残差结构中的中间通道数为 64 × 6 = 384 64\times6=384 64×6=384


5. Implementation Notes

Memory efficient inference

对于计算图 G G G而言,其由表示运算的边和表示张量的节点构成。最小化整个计算图等价于最小化计算数与张量数,即计算图的拓扑结构: M ( G ) = min ⁡ π ∈ ∑ ( G ) max ⁡ i ∈ 1 , . . . , n [ ∑ A ∈ R ( i , π , G ) ∣ A ∣ ] + s i z e ( π i ) (3) M(G)=\min_{\pi\in\sum(G)}\max_{i\in1,...,n}\left[\sum_{A\in R(i,\pi,G)}|A|\right]+size(\pi_i)\tag{3} M(G)=π(G)mini1,...,nmaxAR(i,π,G)A+size(πi)(3)

其中, R ( i , π , G ) R(i,\pi,G) R(i,π,G)表示中间张量列表, ∣ A ∣ |A| A表示张量 A A A的大小, s i z e ( i ) size(i) size(i)表示操作 i i i所占用内存。其中,内层最大化保证最大张量所需的内存;外层最小化保证整体计算图所需内存最少。

对于仅含平行结构(如残差连接)的计算图,则计算图所需最小内存可简化为: M ( G ) = max ⁡ o p ∈ G [ ∑ A ∈ o p i n p ∣ A ∣ + ∑ B ∈ o p o u t ∣ B ∣ + ∣ o p ∣ ] (4) M(G)=\max_{op\in G}\left[\sum_{A\in{\rm op}_{inp}}|A|+\sum_{B\in{\rm op}_{out}}|B|+|op|\right]\tag{4} M(G)=opGmaxAopinpA+BopoutB+op(4)

即此时计算图所需内存大小为所有输入输出及其对应操作的大小。

Bottleneck Residual Block 瓶颈残差块 F ( x ) \mathcal F(x) F(x)如图2中的右图所示,其可以看作是三个部分的组合,即 F ( x ) = [ A   ∘   N   ∘   B ] x \mathcal F(x)=[A\ \circ\ \mathcal N \ \circ\ B]x F(x)=[A  N  B]x。其中 A A A是线性变换 R s × s × k → R s × s × n \mathcal R^{s\times s\times k}\rightarrow \mathcal R^{s\times s\times n} Rs×s×kRs×s×n N \mathcal N N是针对每个通道的非线性变换 R s × s × n → R s ′ × s ′ × n \mathcal R^{s\times s\times n}\rightarrow \mathcal R^{s'\times s'\times n} Rs×s×nRs×s×n B B B是线性变换 R s ′ × s ′ × n → R s ′ × s ′ × k ′ \mathcal R^{s'\times s'\times n}\rightarrow \mathcal R^{s'\times s'\times k'} Rs×s×nRs×s×k

对于结构 N = R e L U 6   ∘   d w i s e   ∘   R e L U 6 \mathcal N={\rm ReLU6}\ \circ\ {\rm dwise}\ \circ\ {\rm ReLU6} N=ReLU6  dwise  ReLU6,其作用于每个通道。设输入域的大小为 ∣ x ∣ |x| x,输出域的大小为 ∣ y ∣ |y| y,则 F ( X ) F(X) F(X)操作的内存占用为 ∣ s 2 k ∣ + ∣ s ′ 2 k ′ ∣ + ∣ O ( max ⁡ ( s 2 , s ′ 2 ) ) ∣ |s^2k|+|s'^2k'|+|O(\max(s^2,s'^2))| s2k+s2k+O(max(s2,s2))

这里,内部张量 I \mathcal I I可以表示为 t t t个大小为 n / t n/t n/t的张量的级联,则 F ( x ) F(x) F(x)可以表示为: F ( x ) = ∑ i = 1 t ( A i   ∘   N   ∘   B i ) ( x ) (5) F(x)=\sum_{i=1}^t(A_i\ \circ\ N\ \circ\ B_i)(x)\tag{5} F(x)=i=1t(Ai  N  Bi)(x)(5)

通过累加和,我们仅需在内存中保存一个大小为 n / t n/t n/t的中间块。如果 n = t n=t n=t,则我们仅需保留中间结果的单个通道。而使用上述两个技巧的限制是:内部变换是逐通道的;非逐通道运算的输入输出具有显著比。对于大多数传统神经网络而言,该技巧不会产生显著的影响。

注意到,使用 t t t划分的方式计算 F ( X ) F(X) F(X)所需乘法加法操作与参数 t t t无关,但当前的实现方式,即使用多个小矩阵乘法代替大矩阵乘法,将降低运行性能,这主要是由于访问未命中率的提高。作者发现,最佳的 t t t值是 2 2 2 5 5 5。这时,模型显著降低了其所占内存,并且仍受益于高效的矩阵乘和卷积操作。


6. Experiments

6.1 ImageNet Classification

在这里插入图片描述

图4:ImageNet Classification

在这里插入图片描述

图5:Object Detection

在这里插入图片描述

图6:Semantic Segmentation Based on DeepLabV3

在这里插入图片描述

图7:Ablation


7. Conclusions and future work

论文提出一种简单高效的模块以构建适用于移动端的神经网络结构,主要部分是带线性瓶颈模块的反向残差结构,最终设计了 M o b i l e N e t V 2 {\rm MobileNetV2} MobileNetV2。实验结果表明,通过引入反向残差结构, M o b i l e N e t V 2 {\rm MobileNetV2} MobileNetV2在多项实时性视觉任务上均达到了 S O T A {\rm SOTA} SOTA


参考

  1. Sandler M, Howard A, Zhu M, et al. Mobilenetv2: Inverted residuals and linear bottlenecks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 4510-4520.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值