这篇文章在MobileNet v2的基础上提出了一个新型的轻量级网络结构MobileNet v3。其是用NAS与NetAdapt两个算法搜索出来的。这篇文章针对MobileNet v3给出了两个版本的实现MobileNetV3-Large和MobileNetV3-Small,分别应对资源消耗高低的场景。这两个网络结构成功用于目标检测与语义分割任务中。对于语义分割任务文章提出了一个新的高效解码器LR-ASPP(Lite Reduced Atrous Spatial Pyramid Pooling)。相对MobileNet v2这篇文章给出的两种网络结构分别提升了4.6%与3.2%,速度上快了5%与15%。在检测与分割任务上使用large的版本比MobileNet v2在相同精度下快了25%和30%。
文章的主要工作内容:
前面内容已经提到,MobileNetV3 是神经架构搜索得到的模型,其内部使用的模块继承自:
在网络结构搜索中,作者结合两种技术:资源受限的NAS(platform-aware NAS)与NetAdapt,前者用于在计算和参数量受限的前提下搜索网络的各个模块,所以称之为模块级的搜索(Block-wise Search) ,后者用于对各个模块确定之后网络层的微调,主要是确定每层的filter数量(Layer-wise Search)。
这两项技术分别来自论文:
M. Tan, B. Chen, R. Pang, V. Vasudevan, and Q. V. Le. Mnasnet: Platform-aware neural architecture search for mobile. CoRR, abs/1807.11626, 2018.
T. Yang, A. G. Howard, B. Chen, X. Zhang, A. Go, M. Sandler, V. Sze, and H. Adam. Netadapt: Platform-aware neural network adaptation for mobile applications. In ECCV, 2018
除了使用搜索算法搜索网络的整体结构之外,文章还从如下的两个方面进行改进:重新设计网络开始和结束位置处开销大的层;改进swish激活函数,使其能够快速高效计算。
文中指出网络的开端和结尾存在开销较大的层,这是在现有的网络搜索空间中无法找到的,所以这里对其进行了手工改进。
文中对网络的最后一个stage进行了改进,作者首先移动average pooling层,使得最后特征的集合分辨率得以降低到1x1。由于特征生成层的cost被减少,之前的bottleneck也不再需要了,这就使得可以移除之前bottleneck中的层进一步减少计算量(带来15%的时间节省,10ms),从新得到的最后stage结构如下所示:
对于网络的头部一般的channel是32,这里使用改进的hard swish与channel为16的卷积去替换,从而进一步减少3ms。
作者发现一个新的激活函数可以改进网络的性能:
s w i s h ( x ) = x ⋅ σ ( x ) swish(x)=x\cdot \sigma (x) swish(x)=x⋅σ(x)
这个激活函数虽好,但是在移动设备上计算开销比较大,这里对其进行了拟合改进,得到h-swish(hard swish):
h − s w i s h [ x ] = x R e L U 6 ( x + 3 ) 6 h-swish[x]=x\frac{ReLU6(x+3)}{6} h−swish[x]=x6ReLU6(x+3)
下面两个激活函数的曲线对比:
激活函数对网络性能的影响:
MobileNetV3-Large:
MobileNetV3-Small: