移动端网络模型总结

移动端网络模型

SqueezeNet

  • ICLR-2017-SqueezeNet-伯克利&斯坦福

    • 背景:从block内部构件组合角度考虑,基于AlexNet网络做的相关改进

    • 创新点:

      • 将 3x3卷积替换成 1x1卷积(参数量减少了9倍)

      • 减少 3x3 卷积的通道数(将3X3XMXN,中的输入通道M和输出通道N数量减少)

      • 将降采样后置(提升精度,但该方式增加了计算量)

      • 采用了模块化的卷积:Fire 模块。Fire模块主要包含两层卷积操作:一是采用1x1卷积核的squeeze层;二是混合使用1x1和3x3卷积核的expand层(对结果进行concatenate)。在squeeze层卷积核数记为 s1 ,在expand层,记1x1卷积核数为 e1 ,而3x3卷积核数为 e2 。为降低3x3卷积计算量,e1<s1+s2。Fire模块如下图

        移动端网络模型总结

MobileNet系列

  • **CVPR-2017-MobileNetV1-Google **

    • 背景:提出新的卷积类型层面进行网络加速

    • 创新点:

      • 提出深度可分离卷积减小模型大小和计算量:depth-wise卷积 + point-wise 卷积

      • 提出两个超参数Width Multiplier(网络宽度系数)和Resolution Multiplier来平衡时间和精度

      • 可分离卷积如下图:

        移动端网络模型总结

  • **2018-MobileNetV2-Google **

    • 背景:在残差网络风靡当时的背景下,引入残差块设计

    • 创新点:

      • 设计“反向残差块”,之所以称为反向残差:正常残差是降维-卷积(2D卷积)-升维,而此处为升维-卷积(深度卷积)-降维。反向残差结构如下图:

      移动端网络模型总结

      • linear bottleneck。在block中的最后一个PointWise卷积后不再使用(去掉)非线性**ReLU减少信息损失。下图中的 linear 1x1 conv2d即为所谓的线性瓶颈。

        移动端网络模型总结

        上图中t为扩张因子,s为可分离卷积中的步长,s可为1 或2, 当stride为2时,输出feature map的w和h与输入不同,此时block中无short cut。因此block存在下图两种形式:

        移动端网络模型总结

  • **2019-MobileNetV3-Google **

    • 背景:NAS网络搜索引入网络结构的设计

    • 创新点:

      • 网络搜索

        • NAS通过优化每个网络块来搜索全局网络结构
        • 用NetAdapt算法搜索每个层的过滤器数量
      • 人工再设计

        • 更改初始端为16个卷积核
        • 引入H-Swish**函数:计算速度比swish更快(比RELU慢),更易于量化,网络越深越能够有效的减少网络参数量。下图为swish与h-swish**函数

        移动端网络模型总结

        移动端网络模型总结

        • 加入SE模块

ShuffleNet系列

  • 2017-ShuffleNet v1

    • 背景:

      • ResNeXt的文章中,分组卷积作为传统卷积核深度可分离卷积的一种折中方案被采用;
      • 对所有特征图的Pointwise卷积成为了推理速度(性能)瓶颈(大量的1×1卷积耗费很多计算资源)
      • 基于MobileNet V1结构引入以上两方面的改进
    • 创新点:

      • 提出使用逐点组(pointwise group)卷积,将pointwise卷积应用到每个分组中,节省计算资源

      • 基于组卷积的通道混洗,解决因逐点组卷积的使用引发的降低通道组之间的信息流通和信息表示能力问题。逐点组卷积及通道shuffle具体可见下图

        移动端网络模型总结

        下图为MobileNetV1,ShuffleNetV1,ShuffleNet v1降采样的block对比

        移动端网络模型总结

  • 2018-ShuffleNet v2-Face++

    • 参照解析

    • 背景:在shuffleNet V1的基础上进行改进

    • 提出的高效网络设计准则:

      • 网络层相同的输入输出通道宽度可最小化内存访问成本(MAC):使用相同的通道宽度

      • 过度的组卷积(组数太多,如深度卷积)会增加 MAC:分割出两路即为两组

      • 网络碎片化(例如 GoogLeNet 的多路径结构)会降低并行度:降低碎片化程度,只有两路

      • 元素级运算不可忽视:减少元素级运算(不使用如skip connect 的逐像素加运算)

    • 基于设计准则的网络结构(创新点):

      • 通道分割:将输入特征通道分为两支,并通过满足上述准则,形成新的网络结构block设计

        下图分别为ShuffleNet V1,ShuffleNet V1 下采样,ShuffleNet V2,ShuffleNet V2 下采样的block结构设计,V2版本将1x1组卷及变为普通卷积(本身两路可视为两组);V2版本为保证两组信息流的交互,将channel shuffle置后;V2版本将Short Cut的像素相加变为feature map的concat;V2版本的下采样block没有进行通道分割,因此输出通道数double。

        移动端网络模型总结

VarGnet

  • 2019-VarGnet-地平线
    • 详细解析:链接

    • 背景:在MobileNet和ShuffleNet基础上对模型的优化

    • 高效网络的设计规则:

      • Block间feature-map 的size尽量小
      • block内各层的计算强度尽量均衡
    • 创新点:

      • 提出可变组卷积:不像传统的组卷积固定组数,VarGnet将输入每个组卷积中的通道数固定,这样就可以平衡block中卷积与pointwise卷积的计算平衡。具体依据组卷积的计算量(MAdds)公式可知,通过固定G = Channels/Groups,块内的计算强度更加均衡:

      移动端网络模型总结

      不同类型卷积计算量计算可参照博客

      下图为VarGNet 正常block和下采样block的设计:

      移动端网络模型总结

      1、对于Normal block:通过设置指定通道数使VarGCov与1x1卷积的计算强度(计算量/feature)达到均衡;通过设置每个VarGConv输入通道相同(均为C),使不同的VarGConv计算强度更加均衡

      2、对于Down Sampling block:原理同Normal,当上方并行分支输出的通道为2C时,因后面接的时VargConv所以计算强度与前面输入通道为C的VarGConv是相同的。