为什么需要轻量网络?

经典backbone网络存在的问题

  • 尽管随着近年来backbone网络的快速发展,由AlexNet到VGG,由VGG到GoogleNet,由GoogleNet到ResNet等等。模型的精度越来越高,
  • 但是通常模型占用内存很大,模型参数很多,这样的话在边缘设备上运行就会很慢。
  • 所以我们需要设计一些参数量更少的网络结构,这样的模型占用内存小,在边缘设备上跑的更快。

怎么解决这个问题

1. 网络压缩
2. 轻量网络的设计

本Review只是讨论轻量网络的设计

  • 轻量网络设计的发展历程,我们按照提出的时间可以分为3个版本
    (1)Version 1, 【2016-2017】,SqueezeNet–> MobileNet –> ShuffleNet –> Xception
    (2)Version 2, 【2017-2018】,SqueezeNext–> MobileNetV2 –> ShuffleNetV2
    (3)Version 3, 【2018-2019】,AutoShuffleNet–> MobileNetV3
  • 这里我们总结一下5个轻量网络,SqueezeNet,MobileNet,ShuffleNet,MobileNetV2,ShuffleNetV2

SqueezeNet

  1. 核心思想
    a. 用更多的1*1卷积核替代3*3卷积核的使用,因为1*1卷积核可以在保output=input的同时减少了通道数
    b. 在3*3卷积核中用更少的通道数,这样直接减少了模型的参数
    c. 延迟下采样
  2. 模块化卷积fire module
    fire
    fire
  • fire module包含2个部分:Squeeze Layer和Expend Layer。
  • Squeeze Layer直接用1*1降低了通道数并保持output=input
  • Expend Layer是1*1卷积和3*3卷积的混合使用
  1. 实验结果
  • SqueezeNet的参数比AlexNet少50x,但是模型性能(accuracy)与AlexNet结晶。

MobileNet

  1. 核心思想,深度可分离卷积结构 depthwise separable convolution
  • 深度可分离卷积是把一个传统卷积层分解成了2个卷积层,depthwise -wise和point-wise convolutiion.
    • depthwise -wise卷积是单独在通道上做的卷积,是分组卷积中groups=channels的极端情况。
    • point-wise卷积是用1*1卷积核连接通道之间的特征信息。
      mobilenet
      mobilenet
  • 可以计算参数如下
    traditional-convolution
    traditional-convolution
    depthwise-separable-convolution
    depthwise-separable-convolution
  • 结构图如下
    depth-wise-convlution
    depth-wise-convlution
  1. 实验结果
  • 深度可分离卷积实现了和传统卷积相同的输入和输出操作,在保证准确率的条件下,但是计算参数量减少约为原来的1/7,计算时间减少约为原来的1/9。

MobileNetV2

  1. 核心思想,Inverted Residuals & Linear Bottlenecks
  • 首先说一下ResNet中的Residual block的思想,就是在进行3*3卷积之前,插入1*1卷积进行通道数的“压缩”,在3*3卷积之后又插入1*1卷积进行通道数的“扩张”(input~=output)。

    bottleneck
    bottleneck
  • 而Inverted Residuals则是反了过来,先用1*1卷积进行通道数的“扩张”,然后经过3*3的depthwise separable convolution,最后插入1*1卷积进行通道数的“压缩”(input~=output).

    inverted-residuals
    inverted-residuals
  • Linear Bottlenecks,original bottlenecks是在卷积层之后做elwise + Relu,而linear bottlenecks则是elwise + withou relu。原因是本来参数量不多的情况下,如果用relu让负半轴为0,那么模型的学习能力就更有限了,所以直接删除relu。

  • 利用stride=2的卷积层做下采样。结构图如下

    mobilenet-v2
    mobilenet-v2

ShuffleNet

  1. 核心思想,用1*1Group Conv做channel shuffle。
    channel-shuffle
    channel-shuffle
  • shuffle unit
    shuffle-unit
    shuffle-unit

ShuffleNetV2

  1. 核心思想,Time = T(FLOPS) + T(I/O)。
  • 提出了4个指导原则,
    a, 当input channel=output channel,卷积计算所需的MAC(memory access cost)最为节省。
    Guidie-1
    Guidie-1
    b, 过多的group convolution操作会加大MAC开销。
    Guidie-2
    Guidie-2
    c, 网络结构整体的碎片化会减少其可并行优化的程序。
    Guidie-3
    Guidie-3
    d, Else-wise操作小号的时间较多。
    Guidie-4
    Guidie-4

Summary

  • 实践中,首选是ShuffleNet-V2/MobileNet-V2,第二选择是MoblileNet

References

SqueezeNet https://arxiv.org/abs/1602.07360
MobileNet https://arxiv.org/abs/1704.04861
ShuffleNet https://arxiv.org/abs/1707.01083
MobileNetV2 https://arxiv.org/abs/1801.04381
ShuffleNetV2 https://arxiv.org/abs/1807.11164
Resnet https://arxiv.org/abs/1512.03385

SqueezeNet
https://zhuanlan.zhihu.com/p/31558773
https://blog.csdn.net/csdnldp/article/details/78648543

MobileNet
https://www.cnblogs.com/adong7639/p/7918527.html

MobileNetV2
https://blog.csdn.net/u011995719/article/details/79135818

ShuffleNetV2
https://www.jianshu.com/p/71e32918ea0a

https://zhuanlan.zhihu.com/p/35405071