MobileNetV2神经网络
MobileNet是一个轻量化网络的经典网络,自诞生以来就被广泛应用于工业界。2016年,Google第一次提出了MobileNetV1,凭借深度可分离卷积这一创新点,整个网络在实际上成为了深度可分离模块的堆叠。自此,MobileNet作为轻量化网络,大大提高了卷积层的计算效率,进而也极大地提高了网络的运行速度。
1.深度可分离卷积
在标准的卷积过程中,输入图像(长x宽x通道数):
( h × w ) × M (h× w) × M(h×w)×M
输出图像(长x宽x通道数):
( h × w ) × N (h ×w) × N(h×w)×N
卷积核大小(3D卷积:长x宽x通道数x数量):
[ ( k × k ) × M ] ×N [(k× k) × M] × N[(k×k)×M]×N
它的卷积过程如下图:
图1 标准卷积的过程
在标准的卷积中,由于同时考虑到了对应图像区域中的所有通道,因此,计算量是巨大的,虽然对于计算机来说这点计算量不算什么,但是,随着卷积层数等参量的不断增大,就难免会降低神经网络的计算效率,影响到了运算的时间和速度。
因此,为了减少神经网络的运算量,提高网络的运算速度,深度可分离卷积应运而生。在深度可分离卷积中,输入和输出与标准卷积相同,不同的是,在卷积的过程中分成了两步,第一步是逐深度卷积,即对输入图像进行数量为M大小为k×k×1的2D卷积;第二步是点态卷积,即进行数量为N个大小为1×1×M的卷积。
它的卷积过程如下图:
图2 深度可分离卷积的过程
我们可以用比率来比较深度可分离卷积和标准卷积的计算量:
((k×k+N)×M×h×w)/((k×k+N)×M×h×w)=1/N+1/k^2
显而易见,N的取值在几百左右,k的取值在个位数,且都是正值,所以优化效果还是很明显的。
2. MobileNetV1的缺点
(1)结构问题
MobileNetV1 的结构其实非常简单,是一个非常复古的直筒结构,类似于VGG一样。这种结构的性价比其实不高,后续一系列的 ResNet, DenseNet 等结构已经证明通过复用图像特征,使用 Concat/Eltwise+ 等操作进行融合,能极大提升网络的性价比。
(2)逐深度卷积问题
在处理低维数据(比如逐深度的卷积)时,relu函数会造成信息的丢失。此外,逐深度卷积积由于本身的计算特性决定它自己没有改变通道数的能力,上一层给它多少通道,它就只能输出多少通道。所以如果上一层给的通道数本身很少的话,逐深度卷积也只能很委屈的在低维空间提特征,因此效果不够好。
3. MobileNetV2的创新点
(1)相比于MobileNetV1,先进行了1x1的卷积进行升维,目的在于获得更多特征,然后用3x3的空间卷积,最后再用1x1降维。核心思想是升维再降维,参数量更少。
(2)为了避免Relu对特征的破坏,在在3x3网络结构前利用1x1卷积升维,在3x3网络结构后,再利用1x1卷积降维后,不再进行Relu6层,直接进行残差网络的加法。
(3)网络为全卷积的,使得模型可以适应不同尺寸的图像;使用 RELU6(最高输出为 6)激活函数,使得模型在低精度计算下具有更强的鲁棒性。
MobileNetV1和MobileNetV2两者的区别可参考下图:
图3 MobileNetV1和MobileNetV2的区别
4. MobileNetV2网络结构
图4 MobileNetV2网络结构
其中,t是输入通道的倍增系数(即扩张倍数),n是该模块重复系数,c是输出通道数,s是stride(后面重复都是stride 1)。
图5 MobileNetV2流程图
如上图是MobileNetV2的流程图,这里我们需要注意的是,MobileNetV2中有两种深度可分离模块,步长为1和2的情况是不同的。步长为1时输入输出size相等,此时使用shortcut结构;步长为2时,由于input与outputsize不符,不添加shortcut结构。