简介
Mobilenet是由Google公司创造的网络系列,目前已经发布至V3版本,每一次版本更新都是在前一次网络上的优化修改。Mobilenet主打的是轻量级网络,也就说网络参数量较少,执行速度较快,也更容易部署到终端设备上。在移动端和嵌入式设备上也有了很多的应用。
MobilenetV3对MobilenetV2进行了一系列小的修改,实现了精度的再次突破,速度也有所提升。
主要结构
深度可分离卷积
MobilenetV3的主体部分大量使用了深度可分离卷积,这种卷积结构极大地减少了参数量,对于轻量级的网络是非常有利的。
SE注意力机制
在MobilenetV3的基础结构中,使用了SE注意力机制,虽然SE注意力机制会增加少量的参数,但对于精度有提升,所以MobilenetV3中对某些层加入了SE注意力机制,来追求精度和参数量的平衡。并且对初始的注意力机制也做了一定的修改,主要体现在卷积层和激活函数。
新型激活函数
MobilenetV3中使用Hardswish激活函数来代替Swish激活。
从上面的公式来看,Hardswish使用了幂函数来代替Swish中的指数函数部分,从而降低了计算的成本,使模型更加轻量化。
上图是Hardswish和Swish的函数图像和梯度图像。可以看出两函数图像非常接近,但在梯度图上Hardswish存在突变,这对于训练是不利的,而swish梯度变化平滑。也就是说Hardswish加快了运算速度,但是不利于提高精度。MobilenetV3经过多次实验,发现Hardswish在更深的网络中精度损失较小,因为此时变量的范围大都聚集在两突变之间,所以在网络的前半部分使用Relu激活,在深层网络中则使用Hardswish激活。
修改了尾部结构
MobilenetV3修改了MobilenetV2的尾部结构,具体修改如下:
MobilenetV2最后的尾部使用了四层卷积层再接了一个平均池化,MobilenetV3仅通过一个卷积层修改通道数后,直接接了平均池化层。这也大大减少了网络的参数量,在实验中发现,精度并没有降低。
整体网络
经过以上的一些小的修改后,MobilenetV3的整体网络形式就非常清晰了,它的通用结构单元如下:
整体网络就是由多个这样的单元堆叠而成。MobilenetV3有large和small两个版本,我们以large为例分析。
表中input表示输出的shape,exp size表示扩大的通道数,out表示输出通道数,SE表示是否使用SE注意力机制,NL表示使用的激活函数,S表示卷积的步长。
bneck就是第一个图所示的格式,可以看到中间重复使用了多次。先使用一个卷积层,把通道数扩充到16,之后通过多个bneck充分提取特征,然后接着使用一个尾部结构,最后输出一个类别数的矩阵。因为目前写论文通常使用的是imagenet数据集,是一个1000类别的庞大分类数据集,所以官方网络一般最后输出的维度都是1000。
参考资料
https://arxiv.org/abs/1905.02244
https://github.com/PaddlePaddle/PaddleClas
https://blog.csdn.net/qq_42617455/article/details/108165206