原文地址:MobileNetV2
论文介绍了一种新的轻量级网络——MobileNetV2,与其他的轻量级网络相比,它在多个任务上都达到了最先进的水平。我们介绍了一种将轻量级网络应用在目标检测中的模型SSDLite,另外我们展示了如何通过DeepLabv3的一种简化形式——Mobile DeepLabv3来构建移动语义分割模型。
MobileNetV2是基于倒置的残差结构,普通的残差结构是先经过 1x1 的卷积核把 feature map的通道数"压下来",然后经过 3x3 的卷积核,最后再用 1x1 的卷积核将通道数"扩张回去",即先压缩后扩张,而MobileNetV2的倒置残差结构是先扩张后压缩。另外,我们发现移除通道数很少的层做线性激活非常重要。
论文对模型在ImageNet分类、COCO目标检测和VOC图像分割的表现进行了度量,评估权衡了精度、乘加操作次数,实际延迟和参数的数量。
目前在算法结构探索进行的尝试包括:
3.1 深度级分离卷积
MobileNetV2是基于深度级可分离卷积构建的网络,它是将标准卷积拆分为了两个操作:深度卷积(depthwise convolution) 和 逐点卷积(pointwise convolution),Depthwise convolution和标准卷积不同,对于标准卷积其卷积核是用在所有的输入通道上(input channels),而depthwise convolution针对每个输入通道采用不同的卷积核,就是说一个卷积核对应一个输入通道,所以说depthwise convolution是depth级别的操作。而pointwise convolution其实就是普通的卷积,只不过其采用1x1的卷积核。
3.2 Liner Bottlenecks
乍一看,可通过减少层维度从而降低激活空间的维度。MobileNetv1就是通过宽度因子(width factor)在计算量和精度之间取折中,直到 manifold of interest 横跨整个空间。
当激活函数是ReLU时,神经网络的作用就相当于一个在输出域的非零部分的线性分类器;
正如Figure1中所示,input是一条二维的螺旋线,我们先通过矩阵T将输入映射到n维,在这里 n = 2, 3, 5, 15, 30;然后再过ReLU函数,最后再通过矩阵T的转置矩阵映射回二维空间,我们可以看到当 n = 2或者3时中心点崩塌了,信息损失很严重,而 n = 15甚至更高时信息则保留的相对完整;原因在于当channel较小时,信息都集中在这几个channel中,如果有部分数值小于0就会被RELU激活丢失掉。而如果channel比较多时,其实信息是分散的,而且具有了冗余,所以通过RELU激活后归于0的值可能并不会影响太多信息的存储。这说明一个问题——在低维空间做非线性变换会损失掉很多信息,而当维度较高时可能就不会存在这种情况。
Figure2表示了卷积模块的演变史:
(a) 标准的卷积结构;
(b) MobileNetV1 中提出的深度级分离卷积,先做深度卷积,后做逐点卷积;
© 具有bottleneck的深度分离卷积,比b多了一个压缩步骤;
(d) 先对bottleneck进行扩张,然后再做深度分离卷积,虚线后面的激活函数都是线性激活,表示对通道数少的feature做卷积之后过的是线性函数。
3.3 Inverted residuals
(a) 是标准的残差模块,它有一个压缩的步骤,也称为 bottleneck 结构,目的是为了减少计算量;(b) 是倒置残差模块,先进行channel扩张,然后进行channel缩减,这是作者对残差block提出的一个改进;(b)和Figure2中的(d)结构就是有无shortcut连接的差别。
MobileNet v2的基本单元为Bottleneck residual block,其基本实现如 table 1 所示:
整体结构如下 table 2 所示,MobileNetV2的第一层卷积是一个32个卷积核的标准卷积,接下来是19个残差瓶颈层。我们使用ReLU6作为非线性激活函数是由于其在低精度计算中更具有鲁棒性,同时使用 3 x 3 的卷积核作为标准卷积核的大小,在训练期间加入了dropout 和 BN。
权衡超参数
如同我们之前在MobileNetV1中一样,我们可以通过设置宽度因子和分辨率因子这两个超参来实际调整我们的模型,使得可以在模型的准确率与性能之间做一个折衷。当我们把宽度因子从0.35调整到1.4,输入分辨率由96调整到224,模型的计算量增加了7倍达到了 585M 次MAdds,模型的参数量由 1.7M 变化到了 6.9M。
5.1 内存高效推理
对于移动应用来说,倒置的残差瓶颈层允许特殊的内存高效执行是非常重要的,推断的高效执行的标准方法就是使用TensorFlow或者Caffe建立一个直接无环的计算图G,计算图的边表示具体操作,结点表示中间张量的计算;为了最小化需要存储的张量数量,计算是依次执行的。一般情况下,会搜索所有合理的计算顺序进而挑选出最小的那一个:
6.1 ImageNet分类
训练细节:我们使用的是TensorFlow框架,标准的RMSProp优化方法,并且将衰减率和动量都设置为0.9,在每一层后都是用批量归一化,标准的权重衰减率设置为0.00004,使用和V1中相同的初始学习率0.045,并将学习衰减率设置为0.98,16个GPU异步工作,一个batch size为96.
结果对比:
我们比较MobileNetV1、ShuffleNet、NASNet-A与MobileNetV2模型的核心卷积单元:
性能、参数量和计算量对比如下:
MobileNetV2在不同宽度因子和分辨率因子下的对比如下:
我们描述了一种简单的网络架构,基于它可以建立非常高效的移动模型;我们的基本单元有几个属性使得非常适合用在移动应用上,一是它有非常高效的内存推理,二是它使用所用神经网络框架中的标准操作。
在理论方面我们提出了一种具有独特属性的卷积块,它可以从网络容量中分离除网络的表达,继续在这个方面探索是未来的一个重要研究。
源码地址:https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet
源码解读:https://blog.csdn.net/stesha_chen/article/details/82744320