卷积神经网络从神经网络进化的过程中, 通过权重共享的方式, 极大地减少了参数的数量, 和计算量, 即便如此, 为了追求精度, 很多模型也是动辄几百兆的体积, 很难在移动平台上部署. 今天就汇总几篇通过调整网络结构, 在尽量保持模型精度, 大幅度减少模型体积和计算量的论文. 看这类文章是最轻松惬意的事情, 没有高深晦涩, 让人望而却步的公式, 该类文章只是把神经网络设计看成搭积木一样, 教你怎么搭来得更高效.

SqueezeNet1

具体细节可以参考原文, 要点是作者提出的三个策略:

  1. 用1x1代替3x3卷积
  2. 减少输入到3x3卷积的特征图数量
  3. 推迟下采样, 获得更大的激活图

文章提出的网络核心单元叫做Fire 单元: 如下图, 由”两层”卷积组成, 先是 1x1 的卷积,接着一个由 1x1 和 3x3 混合的卷积. 在实际实现中(Caffe), 是将 1x1 卷积和 3x3 卷积的结果 Concat 起来.

评测: 和AlexNet相比, 能达到50倍的压缩, 并且和AlexNet达到同等的精度, 甚至更优的精度.

SqueezeNet 当中最为高效的部分应该就是 1x1 的卷积. 1x1 的卷积最先由Network In Network2引入, 所以一般将它称作NIN层. 1x1卷积计算量和参数个数只有3x3的1/9, 在不增加太多计算量的情况下增加了网络的深度, 给我们更多的位置加入激活函数, 提高了网络的非线性能力.

Xception: DepthWise Convolution3

Inception是GoogLeNet网络的基本单元, 可以参见文章4, 或者这篇博客. Inception 网络对输入用不同大小的卷积核进行卷积, 然后将结果汇聚起来.

Xception, 顾名思义就是 Inception 的升级版. Inception 只在路径上对计算进行划分, 而Xception将输入通道划分给了不同的路径. 极端地, 如果每个通道一个卷积路径, 那结果就是 Depthwise 卷积了.

Depthwise 最早见于Rigid-Motion Scattering for Texture Classification4. SqueezeNet 提到为了减少计算量和参数量, 应该减少输入到3x3卷积层的特征图个数, 而 DepthWise卷积更彻底, 保证了每个卷积输入只有一个通道, 极大地减少了参数和计算量, 当然不可避免地网络能力也降低了. 改方法减少网络神经元的连接, 而网络能力的大小与神经元的连接个数关系紧密.

MobileNets5

MobileNets其实没啥创新, 也用到Depthwise Convolution. 它的做法是先用 3x3对输入进行 Depthwise 卷积, 然后在辅以 1x1 卷积进行通道信息的混合. 和Xception 很类似, 只不过 Depthwise 一先一后. 这样的设计, 对于减少模型大小和计算量立竿见影, 但是模型能力会变弱很多. 笔者在人脸对齐任务中尝试过类似的结构, 精度会下降, 但是模型减小非常明显. 如果仔细调整, 应该能在保持精度的前提下, 大幅度减小模型大小.

ShuffleNet6

Depthwise 卷积最大的问题是通道之间缺乏连接, MobileNets 的解决办法是接一个NIN进行混合. 而ShuffNet 则提出了另一种思路. ShuffNet的卷积不是以通道为单位的, 而是以Group为单位的, 用过caffe 的人应该对这个概念非常清楚. Group 和Depthwise 有类似的问题, 即Group 之间缺乏连接. ShuffNet 的做法就是每次进行Group 卷积之后对通道进行重新洗牌, 这样保证了下一层的Group来自上一层不同的Group, 保证了Group之间具有连接.

在做任务的时候, 常常在想, 到底怎样的网络才是最为高效的呢? 这个问题其实无法回答, 一个网络的能力跟很多因素有关. 在实践中, 往往网络结构的设计并不是最重要的, 数据才是. 虽然如此上述一些被广泛应用的技巧还是值得尝试的, 毕竟很多卷积网络存在巨大的冗余. 用上这些技巧能够让网络更为高效, 模型更小, 更容易部署到移动平台上.

此处应有打赏


  1. 1.SqueezeNet: Alexnet-Level accuracy with 50X fewer parameters and <0.5MB model size
  2. 2.Network in Network
  3. 3.Xception: Deep Learning with Depthwise Separable Convolutionsv
  4. 4.Rigid-Motion Scattering for Texture Classification
  5. 5.MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
  6. 6.ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices