论文:http://xxx.itp.ac.cn/abs/1905.02244?context=cs
pyTorch代码:https://github.com/xiaolai-sqlai/mobilenetv3
1 核心思想
轻量化的网络结构设计,有squeezenet、shufflenet、mobilenet,以前经常用FLOPs来衡量模型的计算量,但shuffnetv2中提出了还要考虑MAC和并行化程度,建议用实际运行速度这一直接指标衡量模型的推理速度。最近关于轻量化网络的设计,衡量标准的确从减少参数量变成了减少计算量(MAdds)和实际的延迟时间(atency)。本文是谷歌在19年3月份提出的最新的轻量化网络,其核心的修改可以认为是 搜索网络结构 + SE模块 + 修改后的swish激活函数 + 网络第一层和最后层的重构 的结果。
先看效果对比:
总体看,效果是延迟小,准确率高。
1.1 网络搜索
网络搜索,金钱的味道,不太了解这个领域,这里简单罗列下文章中提到的处理过程。
Platform-Aware NAS搜索网络块的结构,NetAdapt搜索网络层的结构。
1.2 重新设计计算量大的开头结尾网络层
网络搜索过程中一般都是搜索设计中间的网络块结构,网络的开头层和结尾层还是人为设计的。使用1.1的方法完成中间部分的网络搜索之后,作者发现网络的开头和结尾层计算量大,延迟高。因此,对这两部分进行了人为调整。
网络结尾层的修改:
对于网络的后面几层,如MobileNetV2使用了一个1 * 1的卷积层作为最后一层,为了能够输出丰富的特征用于预测,一般这一层都设计了较大的channel。如,MobileNetV2中使用的就是一个1 * 1 * 1280的网络层。但是,这里作者认为这一层会带来很大的计算延迟。
作者提出的解决方案是,将最后的1 * 1卷积层移动到平均池化层之后。如果这个1 * 1的卷积在平均池化层之前,那么输入feature map的空间维度为7 * 7,将其移动到平均池化层之后,输入的feature map的空间维度就变成了1 * 1,大大减少了计算量。因为这里减少了计算量,所以和其相邻的最后一个bottleneck模块也就不再需要对输出进行通道缩减了,从而进一步减少了计算量。修改前后的网络结构如下图所示:
按照图5这样修改,在不损失准确率的情况下,MAdds的数量减少了30 million,减少了11%的延迟时间(约7ms)。
网络起始层的修改:
原始网络起始层用32个3 * 3的全卷积进行边缘检测,作者将这一层改成使用16个滤波器,使用ReLU/Swish激活函数,和原来相比,在准确率不变的情况下,节省了10 million的MAdds,推理时间缩短了2ms。
1.3 h-swish激活函数
h-swish是hard swish的缩写,是作者提出的swish激活函数的近似版本。
swish激活函数:
f
(
x
)
=
x
∗
s
i
g
m
o
i
d
(
β
x
)
f(x) = x * sigmoid(\beta x)
f(x)=x∗sigmoid(βx)
β
\beta
β是一个人为调整/参与网络训练的超参数。
Swish 具备无上界、有下界、平滑、非单调的特性。Swish 在深层模型上的效果优于 ReLU。例如,仅仅使用 Swish 单元替换 ReLU 就能把 Mobile NASNetA 在 ImageNet 上的 top-1 分类准确率提高 0.9%,Inception-ResNet-v 的分类准确率提高 0.6%。
导数图像:
当
β
=
0
\beta = 0
β=0时,swish变为
f
(
x
)
=
x
2
f(x) = \frac{x}{2}
f(x)=2x;当
β
−
>
∞
\beta -> \infty
β−>∞时,swish变成ReLU。因此,swish可以认为是介于线性函数和ReLU之间的过渡函数。
h-swish:
但是,在嵌入式设备上,sigmoid函数的计算量很大,因此作者提出了h-swish近似实现swish,并且不使用sigmoid函数。
h
s
w
i
s
h
[
x
]
=
x
R
e
L
U
6
(
x
+
3
)
6
hswish[x] = x \frac{ReLU6(x+3)}{6}
hswish[x]=x6ReLU6(x+3)
从图6中可以看出,swish和h-swish基本上一致。作者的实验表明,h-swish和swish的准确度基本一致,但有三个好处,一是在所有的软硬件平台上都可以使用ReLU6,二是量化模式下,消除了不同版本的sigmoid的精度差异,三是逐点操作的h-swish减少了内存访问,降低了延迟。
作者对h-swish的使用是只在网络的后半段才使用,前半段仍然使用ReLU。
1.4 大的SE块
作者固定在SE块中,将channel缩减为输入的1/4,这相比于MnasNet来说,使用了更多的channel,实验证明,这样做提升了准确率。
1.5 网络结构
作者依据计算平台的计算能力,设计了两个版本的网络,分别是MobileNetV3-Large和MobileNetV3-Small。
MobileNetV3-Large:
MobileNetV3-Small:
exp size是指bottleneck中间层的channel的数量。