【轻量化网络】ShuffleNet 和 MobileNet

ShuffleNet、MobileNet

算法层面有效的压缩存储和计算量。

一、Group convolution

【轻量化网络】ShuffleNet 和 MobileNet
假设有输入feature map,大小为H x W x C,用k个h x w大小的卷积核去进行卷积运算,输出H’ x W’ x k。(不关心H’ 和 W’)
而Group convolution的实质就是将convolution分为g个独立的组,分别进行计算。
【轻量化网络】ShuffleNet 和 MobileNet
这里g=2。

  • 把输入的特征图分为g组,每组H x W x (C/g)
  • 把卷积核也分为g组,每组h x w x (k/g)
  • 按顺序,每组特征图和卷积核,分别做卷积,输出g组特征

二、MobileNet v1

Mobilenet v1希望能在移动设备或者嵌入式设备(所以叫Mobile)中,最大化使用模型。
Mobilenet v1核心是把卷积拆分为Depthwise+Pointwise两部分。
【轻量化网络】ShuffleNet 和 MobileNet
假设有H x W x C的输入,同时有k个3 x 3的卷积,如果pad=1且s=1,得到H x W x k的输出。
【轻量化网络】ShuffleNet 和 MobileNet
而在Depthwise中,将输入分成C组,每一组做3 x 3的卷积,相当于收集每个通道的空间特征。
【轻量化网络】ShuffleNet 和 MobileNet
Pointwise是对输入做k个普通的1 x 1的卷积,这样相当于收集每个像素点的特征。
【轻量化网络】ShuffleNet 和 MobileNet
Depthwise+Pointwise最终输出也是H x W x k。
对比普通卷积和深度分离卷积。
【轻量化网络】ShuffleNet 和 MobileNet

三、ShuffleNet v1

主要思路是使用Group convolution和Channel shuffle改进ResNet,可以看作是ResNet的压缩版本。
【轻量化网络】ShuffleNet 和 MobileNet
这里是ResNet的bottleneck结构。通道的变化:256D->64D->256D,像中间细两端粗的瓶颈,所以叫bottleneck。
【轻量化网络】ShuffleNet 和 MobileNet
这是ShuffleNet的结构,(a)是加入Depthwise的ResNet bottleneck结构,(b)和 © 是加入Group convolution和Channel Shuffle的ShuffleNet结构。
对比(a)和(b)的参数量,可以发现ShuffleNet保留了ResNet结构,同时又压低了计算量。

为何要做Channel Shuffle操作:
ShuffleNet的本质是将卷积运算限制在每个Group内,但是这样会导致模型的信息流限制在各个group中,组与组之间没有信息交换,会影响模型的表示能力。因此需要引入组间信息交换的机制,就是Channel Shuffle操作。
【轻量化网络】ShuffleNet 和 MobileNet

  • (a)是group convolution,分成了3组,组与组之间没有联系,独立开来了。
  • (b)将每组的特征,再分成3份,然后分别输入3个组中。
  • ©就是(b)的同等实现方式,每一组都是红绿蓝,这样信息就均匀分布在三个组中。

ShuffleNet有2个重要缺点:

  • Shuffle channel在实现的时候需要大量的指针跳转和Memory set,这本身就是极其耗时
  • Shuffle channel规则是人工设计出来的,不是网络自己学出来的。不符合网络负反馈学习的原则。

四、MobileNet v2

MobileNet v2主要解决V1在训练过程中容易特征退化的问题。
卷积计算方式的进化过程:

  • 普通卷积 (如AlexNet/VGG)
  • 深度分离卷积(把普通卷积拆为Depthwise和Pointwise)
  • 引入ResNet bottleneck
  • 把bottleneck结构反过来,两头细中间粗
    【轻量化网络】ShuffleNet 和 MobileNet
    然而卷积结构存在一定问题:
  • channel少的feature map不应后接ReLU,否则会破坏feature map。
  • V1中没有复用特征,而ReNet结构的特征复用可以减缓特征退化(值变为0)如下图。
    【轻量化网络】ShuffleNet 和 MobileNet
    因此,Mobilenet v2提出了Linear Bottlenecks+Inverted residual block(反转残差块)。
    【轻量化网络】ShuffleNet 和 MobileNet
    可以看出Mobilenet V2的基本卷积单元结构由如下特点:
  • 继续使用V1的深度分离卷积,来降低运算量
  • 引入了特征复用结构(ResNet bottleneck)
  • 采用了Inverted residual block。使用Pointwise先对特征图进行升维,再升维后接上Relu,减少Relu对特征的破坏。