轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)

写在前面:此文只记录了下本人感觉需要注意的地方,不全且不一定准确。详细内容可以参考文中帖的链接,比较好!!!
最近看的轻量化神经网络:SqueezeNet、Xception、MobileNet、ShuffleNet

时间轴
  • 2016.02 伯克利&斯坦福提出 SqueezeNet
  • 2016.10 google提出 Xception
  • 2017.04 google提出 MobileNet
  • 2017.07 face++提出 ShuffleNet
模型轻量化的方法
  • 卷积核分解:使用1xN和NX1卷积核代替NXN卷积核;
  • 使用深度压缩deep compression方法:网络剪枝、量化、哈弗曼编码;
  • 奇异值分解;
  • 硬件加速器;
  • 低精度浮点数保存;
小模型的好处:
  • 在分布式训练中,与服务器通信需求小;
  • 参数少,从云端下载模型的数量少;
  • 更适合在嵌入式、移动设备上部署;
几种模型小结:
  1. SqueezeNet,提出了fire module【使用 1x1 卷积替换部分 3x3 卷积核,减少参数量;同时在squeeze阶段,限制 input feature map的channel数,又一次减少参数】。在整体网络模型中减少pooling,平均每3个fire module后有一个max pooling,分类前的全连接层替换成average pooling。
  2. Xception,参差结构+可分离卷积(Separable Convolution)【对每一个通道先进行 1x1 卷积,再进行 3x3 卷积】。在Inception v3模型上改进, 参数量没减少,精度提高。
  3. MobileNetv1,宽度\分辨率因子 + 深度可分离卷积(Depthwise Separable Convolution)【对每一个通道先进行 3x3 卷积,再进行 1x1 卷积】。参数量下降
  4. MobileNetv2,倒残差结构+深度可分离卷积+relu6。发现relu对低维特征损失较严重,1)提出反残差模块【先升维:增加信息量,再降维度:较少参数】;2)较少block最后的Relu改为lineat,减少信息破坏。移动部署float16,所以换成relu6
  5. MobileNetv3,倒残差结构+深度可分离卷积+se注意力机制+h-swish激活。使用堆积木手段和nas搜索出一个small结构、一个large结构
  6. ShuffleNet,深度可分离卷积+分组卷积+shuffle机制 。借鉴Resnext的分组卷积思想,不过全部只用1x1卷积核,减少参数量;加入了shuffle机制(通道清洗),加强了通道间的信息流通,一定程度上缓解了由于分组卷积导致的通道关系损失。

1. SqueezeNet

设计原则
  • 替换3x3的卷积kernel为1x1的卷积kernel
  • 减少输入3x3卷积的input feature map数量
  • 减少pooling
Fire Module

Fire Module是本文的核心构件,思想非常简单,就是将原来简单的一层conv层变成两层:squeeze层+expand层,各自带上Relu激活层。在squeeze层里面全是1x1的卷积kernel,数量记为S11;在expand层里面有1x1和3x3的卷积kernel,数量分别记为E11和E33,要求S11 < input map number即满足上面的设计原则(2)。expand层之后将1x1和3x3的卷积output feature maps在channel维度拼接起来。

轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)_第1张图片

总体模型

总共有9层fire module,中间穿插一些max pooling,最后是global avg pooling代替了fc层(参数大大减少)。在开始和最后还有两层最简单的单层conv层,保证输入输出大小可掌握。
轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)_第2张图片 SqueezeNet参考

2. Xception

设计原则
  • 提出Separable Convolution (可分离卷积)【与 MobileNet的不同】
  • 参差思想
Separable Convolution Module

先进行普通卷积操作,再对 1×11×1 卷积后的每个channel分别进行 3×33×3 卷积操作,最后将结果 concat:
轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)_第3张图片

总体模型

Xception 的结构基于 ResNet,但是将其中的卷积层换成了Separable Convolution Module。如下图所示。整个网络被分为了三个部分:Entry,Middle和Exit。
轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)_第4张图片
Xception 在 ImageNet 上,比 Inception-v3 的准确率稍高, 同时参数量有所下降,在 Xception 中加入的类似 ResNet 的残差连接机制也显著加快了Xception的收敛过程并获得了显著更高的准确率。但由于其计算过程较为零散,现有的卷积神经网络实现中它的效率都不够高,此网络旨在提高精度、不在挺高速度。

Xception参考
深度可分离卷积理解

3. MobileNet

设计原则
  • 采用depthwise separable convolution,就是分离卷积核,减少参数量
  • 设置宽度因子width multipler【在channel上】和分辨率因子resolution multiplier【在feature map的长、宽上】,减小参数量
Depthwise Separable Convolution

轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)_第5张图片
depthwise separable convolution

总体模型

轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)_第6张图片
MobileNet参考

MobeileNetv1与v2的区别:

参考1:详解MobileNetV2
参考2:MobileNet v1 和 MobileNet v2

  1. v1使用了Depthwise Separable Convolution,通过将跨通道的3 x 3卷积换成单通道的3 x 3卷积 + 跨通道的1 x 1卷积来达到减少参数的目的【3 x 3卷积核约变为原理的1/8】
  2. v2在v1的基础上加入了残差结构,同时发现relu对低维通道的feature map映射到高维再映射回低维具有非常严重的信息损失。针对这个问题,两个办法,1.使用Inverted residuals【因为relu对于高维特征影响较小,所以扩展成高维经过relu再压缩】;2.使用Linear Bottleneck【因为高维映射到低维,使用relu会滤掉有用信息,直接换成线性激活函数】
  3. Q:为什么低维特征效果不好?
    A:因为低维特征对应的卷积核也少,卷积核少学到图片内的特征就很有限,所以效果不好

模块结构:
轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)_第7张图片

4. ShuffleNet

设计原则
  • 借鉴resnext分组卷积思想,但不同的是采用1x1卷积核;
  • 进行通道清洗,加强通道间的信息流通,提高信息表示能力;
  • 采用mobilenet的Depthwise Separable Convolution方法;
分组卷积

借鉴resnext的分组卷积,全部使用1x1卷积核
轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)_第8张图片

channel shuffle机制

什么是通道shuffle,就是在分组卷积后得到的feature map不直接进行concat,先将每组feature map按通道打乱,重新concat,如下图所示:
轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)_第9张图片

对于一个卷积层分为g组,

  1. 分组卷积后一共得到g×n个输出通道的feature map;
  2. 将feature map 进行 reshape为(g,n);
  3. 进行转置为(n,g);
  4. 对转置结果flatten,再分回g组作为下一层的输入。
    轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)_第10张图片
shuffle unit

a是标准的残差结构,不过是3x3卷积核使用了mobilenet中的depthwise convolution操作;
b是在a的基础上加了本文的通道shuffle操作,先对1x1卷积进行分组卷积操作,然后进行channel shuffle;
c是在旁路加了一步长为2的3x3的平均池化,并将前两者残差相加的操作改为了通道concat,增加了通道数量。
轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)_第11张图片

总体模型

轻量化神经网络篇(SqueezeNet、Xception、MobileNet、ShuffleNet)_第12张图片

参考链接:

  1. https://blog.csdn.net/liuxiao214/article/details/81875251

你可能感兴趣的:(深度学习,深度学习)