• MobileNext:打破常规,依图逆向改造inverted residual block | ECCV 2020


    论文深入分析了inverted residual block的设计理念和缺点,提出更适合轻量级网络的sandglass block,基于该结构搭建的MobileNext。根据论文的实验结果,MobileNext在参数量、计算量和准确率上都有更优的表现,唯一遗憾的是论文没有列出在设备上的实际用时,如果补充一下更好了

    来源:晓飞的算法工程笔记 公众号

    论文: Rethinking Bottleneck Structure for Efficient Mobile Network.pdf

    Introduction

    ***

    在介绍MobileNext前,先回顾一下bottleneck结构:

    • Residual block with bottleneck structure,包含两个\(1\times 1\)卷积层用于维度的降低和扩大,以及中间的\(3\times 3\)卷积用于提取特征,如图2a。这个结构不适用于轻量级网络,因为中间的\(3\times 3\)卷积的参数量和计算量都非常大。
    • Depthwise separable convolutions,为了解决标准卷积带来的参数量和计算量问题,将其分解为depthwise卷积和pointwise卷积,前者用于提取单维度的特征,后者用于线性组合多维度特征,大幅降低了计算量和参数量。
    • Inverted residual block,专为移动设备设计,为了节省计算量,输入改为低维度特征,先通过pointwise卷积扩大维度,然后通过depthwise卷积提取特征,最后通过pointwise卷积降低维度输出,如图2b。这里有两点不影响准确率的性能改进:1)skip path仅建立在低维度bottleneck间。2)最后一个pointwise卷积不需要非线性激活。

    尽管Inverted residual block性能不错,但中间需要将特征先降到较低的维度,会导致以下几个问题:

    • 降低维度可能不足以保留足够的有用信息。
    • 近期有研究发现更宽的网络结构有助于缓解梯度混淆(不同batch产生的梯度抵消),能够提升网络性能。
    • shortcut建立在bottleneck之间,由于bottleneck维度较少,也可能会阻碍梯度的回传。

    为了解决上述问题,论文提出了设计更优的sandglass block,结构如图3c,基于此搭建了MobileNeXt,在性能和计算量上都优于MobileNetV2。

    论文的主要贡献如下:

    • 重新思考移动网络的bottleneck结构,发现inverted residual并不是最优的bottleneck结构。
    • 研究发现,shortcut应该建立在高维度特征上,depthwise卷积应该应用在高维度特征空间上学习更多样特征,linear residual是bottleneck结构的关键。
    • 基于上述发现提出sandglass block,更适合移动网络的搭建。

    Method

    ***

    Sandglass Block

    Sandglass Block的设计核心主要基于以下两个想法,也是与其他轻量级结构的主要区别:

    1. 为了更好地保留信息的传递和梯度的回传,shortcut应当建立在高维度特征之间。
    2. 卷积核较小的depthwise卷积是轻量的,可用于对高维度特征进行进一步的特征提取。
    • Rethinking the positions of expansion and reduction layers inverted residual block先进行维度扩展,最后再进行缩减,根据设计核心将两个pointwise卷积的顺序互换。定义sandglass block的输入和输出为\(F\in \mathbb{R}^{D\_f\times D\_f\times M}\)\(G\in \mathbb{R}^{D\_f\times D\_f\times M}\),则维度变化可表示为:

    \(\phi\_e\)\(\phi\_r\)为用于维度扩展和缩减的pointwise卷积。这样的设计将bottleneck保持在residual path中间能够减少参数量和计算量,最重要的是,能将shortcut建立在维度较大的特征上。

    • High-dimensional shortcuts shortcut不再连接低维度的bottleneck,而是连接维度较高的\(F\)\(G\)。能够更好地传递信息和回传梯度。
    • Learning expressive spatial features

    pointwise卷积只能捕捉通道间特征,缺乏空间特征的捕捉能力。可以像inverted residual block那样中间使用depthwise卷积来显示地提取空间特征,如图3a所示。但由于sandglass block中间是bottleneck,中间添加的depthwise卷积的卷积核数量很少,只能捕捉少量空间信息。通过实验也发现,这样设计的准确率会比MobileNetV2下降1%。

    因此,sandglass block将depthwise卷积置于residual path的开头和结尾,如图3b所示,可表示为:

    \(\phi_{i,p}\)\(\phi_{i,d}\)代表\(i\)个pointwise卷积和depthwise卷积。对比inverted residual block,由于现在depthwise卷积的输入为高维度特征,可以提取更丰富的空间信息。

    • Activation layers 有研究发现,使用线性bottleneck能够防止特征值变为零,减少信息丢失。根据这一建议以及实验结果,sandglass block仅在第一个depthwise卷积后面和第二个pointwise卷积后面添加激活层,其余的均不添加。
    • Block structure

    sandglass block的结构如表1所示,当输入和输出维度不一样时,不添加shortcut,depthwise卷积采用\(3\times 3\)卷积核,在需要的地方采用BN+ReLU6的组合。

    MobileNeXt Architecture

    基于sandglass block,构建了如表2所示的MobileNeXt,开头是32维输出的卷积,后续是sandglass block的堆叠,最后是全局平均池化,将二维的特征图压缩为一维,最后再由全连接层输出每个类别的分数。

    • Identity tensor multiplier 尽管shortcut连接有助于梯度的回传,但论文通过实验发现,其实不需要保持完整的特征去跟residual path结合。为了让网络对移动设备更友好,论文提出超参数identity tensor multiplier \(\alpha\in0,1\),用于控制shortcut传递的特征维度。undefined 定义\(\phi\)为residual path的转换函数,原来的residual block计算可表示为\(G=\phi(F)+F\),加上超参数后,residual block变为:

    下标代表通道,使用较小的\(\alpha\)有两个好处:

    • 耗时的element-wise addition的计算将会减少。
    • 耗时的内存访问(MAC)将减少,另外由于需要缓存的tensor变小了,有助于将其缓存在高速内存中,可以进一步加速。

    Experiment

    ***

    与MobileNetV2在ImageNet上进行对比。

    与其他网络在ImageNet上进行对比。

    不同identity tensor multiplier的对比。

    作为检测网络的主干网络的对比。

    Conclustion

    ***

    论文深入分析了inverted residual block的设计理念和缺点,提出更适合轻量级网络的sandglass block,基于该结构搭建的MobileNext。sandglass block由两个depthwise卷积和两个pointwise卷积组成,部分卷积不需激活以及shorcut建立在高维度特征上。根据论文的实验结果,MobileNext在参数量、计算量和准确率上都有更优的表现,唯一遗憾的是论文没有列出在设备上的实际用时,如果补充一下更好了。

    如果本文对你有帮助,麻烦点个赞或在看呗~undefined更多内容请关注 微信公众号【晓飞的算法工程笔记】

    work-life balance.

  • 相关阅读:
    mysql数据库操作
    django
    django-rest framwork
    Maven项目POM文件错误,提示“Plugin execution not covered by lifecycle configuration”的解决方案
    [Flutter] FFI之生成Ansi字符串指针
    多label实现准确率和召回率
    pickle.dump()和pickle.load()
    numpy.take()
    通俗易懂的lambda表达式,不懂来找我!
    collections(python常用内建模块)
  • 原文地址:https://www.cnblogs.com/VincentLee/p/16381619.html
Copyright © 2020-2023  润新知