导读:
MobileNet的核心是卷积分解,本文先从宏观层面,叙述了普通卷积网络和MobileNet网络,在卷积的功能上,是相似的。通过实验,证明了MobileNet的分解方法,是正确的、有效的,可以获得和之前的卷及网络相同的功能,减少了参数数量,且只损失很少精度。MobileNet使用了两个超参数,宽度乘数width multiplier 和 分辨率乘数 resolution multiplier,来获得更好的结果。
MobileNet由Google研究团队发表于CVPR2017,其主要目的是加速卷积神经网络的计算。主要是用深度可分解卷积结构,巧妙地分解卷积核,将复杂的操作变成简单的操作,从而加速计算,减少参数。
MobileNetV2由谷歌于2018年4月4日发布,这是基于MobileNets的重大更新。在结构上仍然基于深度可分解卷积,在层与层之间增加了线性瓶颈,并增加残差连接,因此速度更快精度更高。
通过实例运行MobileNet SSD,进行Object在视频实时获取数据的情况下,可以达到~16fps(NVIDIA GTX 1080),比没有Mobile 结构的网络快很多。
代码和数据来自于TensorFLow/models, github
MobileNets
摘要:
提出一种以depthwise的可分离卷积为基础的网络结构,适用于移动和嵌入式设备。使用两个超参数去平衡(tradeoff)速度和精度。且广泛应用于物体检测、分类、人脸识别等任务。
介绍:
AlexNet在ImageNet图像分类挑战中的出色挑战,引起了学界对卷积神经网络的研究热潮。其基本的发展趋势加深网络和设计更复杂的网络结构,以期得到更高的准确率,但是这必然会引起效率的降低。在现实世界中,需要面临许多时间和计算平台都受限的复杂任务。用高效神经网络结构和两个超参数去设计适用于嵌入式视觉任务。
相关工作:
在最近的很多文献中,已经对构建小的效率高的网络燃起了兴趣。许多不同的方法可以普遍归结为两种:要么压缩预训练网络,要么直接训练小的网络。这篇文章提出了一类网络架构:允许一个模型开发者为了匹配他们应用的资源约束(延迟,尺寸)来特定地选择一个小的网络。MobileNets主要关注延时的优化并且产生小的网络。然而许多关于小网络的论文仅仅关注尺寸而不考虑速度。
MobileNets的构建主要来自最初在“Rigid-motion scattering for image classification”这篇论文中介绍的depthwise可分解的卷积,并且之后在“Batch normalization: Accelerating deep network training by reducing internal covariate shift”这篇论文中在概念模型中被使用来减少在最初几层的计算。来自论文“Flattened convolutional neural networks for feedforward acceleration.”中的扁平网络建立了一个由完全分解的卷积组成的网络并且展现了完全可分解网络的可能性。独立于上一篇论文,来自“Factorized convolutional neural networks”论文中的分解网络介绍了一个相似的可分解卷积和拓扑逻辑连接。之后,在“Deep learning with depthwise separable convolutions”论文中的Xception 网络展示了怎样扩展depthwise 可分的滤波器去战胜Inception V3网络。另外一个小的网络是“ Squeezenet: Alexnet-level accuracy with 50x fewer parameters and 1mb model size”论文中提出的Squeezenet,其使用一个瓶颈的方法去设计一个非常小的网络。其他的关于减少计算的网络包括论文“Structured transforms for small-footprint deep learning”中的结构化的转换网络和“Deep fried convnets”论文中的深的fried卷积网。
一个为了获得小的网络的不一样的方法是收缩,分解和压缩预训练网络。基于内积量化的压缩,哈希和剪枝,向量量化和哈夫曼编码已经在文献中被提出。除此之外,不同的分解方式已经被提出来加速预训练的网络。另外一个用来训练小的网络的方法是蒸馏,其使用一个大的网络去教授一个小的网络。它是对我们方法的补充并且被覆盖在我们在第四部分使用的案例当中。另外一个出现的方法是低的位网络。
模型结构:
深度可分解卷积结构
- 卷积结构
将卷积分解成一个深度卷积(depthwise resolution)和一个点卷积(pointwise resolution),深度卷积将每个卷积核应用到每一个通道,将结果组合输出。
- 参数数量变化
MobileNets的参数数量和原先的参数数量相比较,大概减少了8~9倍。
公式中,Dk表示卷积核大小,DF表示输出feature map的储存,M代表输入一张图像的通道(或者是feature map)的数量,N代表每个batch输入图像的数量。
可以看到,其实参数的变化和N、Dk2 都有关系。由于N比较大,Dk2 比较小,所以大概参数减少的数量是在8~9倍。
网络结构和训练
MobileNet除了第一层是全卷积以外,其他的都是深度卷积。每一层之后都跟着batchnorm和ReLU层,下采样使用带步长的深度卷积来做,最后的平均池化采用的是大小为1的深度卷积。但是只用乘加操作是不够的,例如稀疏卷积操作不会比稠密矩阵做得更快。我们的模型将所有的计算都放到了稠密的1✖️1的卷积中,可以被高度优化过后的矩阵乘法GEMM库计算。通常需要被GEMM实现的卷积操作,都要将输入首先放入im2col
(功能为将图像转换成可以直接使用矩阵乘法做卷积的矩阵)的函数中。MobileNet花费了95%的计算和75%的参数在1✖️1的卷积层中,而剩余的所有参数都几乎在全连接层中。
在TensorFlow中用RMSprop的方法训练MobileNet。但是和大模型的训练不同,小模型不容易出现overfit,因此我们更少的使用正则化和数据增强技术。除此以外,我们发现,在深度滤波中使用更小的或者没有权重衰退是非常重要的。
宽度乘数(Width Multiplier):更薄的模型
尽管MobileNet已经非常精简了,但还是有可以提升的方法。为了使得每层网络都可以统一的变薄,我们引入了超参数α。模型的输入将会变成αM,输出将会变成αN层,α的推荐值是1,0.75,0.5。α2。这是具有普适性的超参数,在任何网络里面都会使得网络深度变浅,从而加速和减少计算。
缩放乘数(Resolution Multiplier):规约表示
第二个超参数是ρ,我们将feature map的宽度变成ρDf,从而达到减少参数的作用。推荐将输入设置成224,192,160,128,已获得更好的效果。
结论:
提出了基于depthwise可分离卷积结构的网络模型,使用了两个超参数,宽度乘数width multiplier 和 分辨率乘数 resolution multiplier,通过实验证明MobileNets具有普适性,减少了参数数量,且只损失很好啊的精度。
实验:
-
模型选择
1.1 相较于基于全卷积的模型,使用深度可分离卷积的MobileNet在ImageNet上的准确率仅降低了1%,但是却节省了大量的计算和参数。全卷积模型的参数约为深度可分卷积模型的7倍。对比实验结果如下表所示:
1.2 其次,对比了模型在减小宽度和减小深度两种情况下的实验效果,发现宽度减小的模型准确率比深度减小的模型高3%。对比实验结果如下表所示:
-
收缩模型超参数
2.1 随着模型超参数alpha的收缩,准确率平滑的下降,直到alpha=0.25时,模型过小,准确率有了很大的降低。下表展示了随着超参数收缩,准确率,计算量和参数量的变化:
2.2 当输入的分辨率减小时,准确率平滑下降。下图展示了随着分辨率的减小,模型准确率,计算量和参数量的变化:
2.3 当alpha={1, 0.75, 0.5, 0.25} ,分辨率={224, 192, 160, 128}时,可以产生16个不同的模型,下图展示了随着alapha 和分辨率的变化,准确率和计算量之间的平衡关系。准确率和计算量之间是近似对数线性关系的,但是在alpha=0.25 时有波动:
2.4 下图展示了这16个模型在ImageNet上的准确率和参数量的关系:
2.5 下表展示alpha=1,分辨率为224时的MobileNet和GoogleNet,VGG16在ImageNet上的效果。可以看出MobileNet准确率和VGG16相当,但是模型大小是后者的1/32,计算强度是后者的1/27。MobileNet准确率高于GoogleNet,并且模型比后者小,计算强度是后者的1/4。
2.6 当alpha=0.5,分辨率为160*160时,将模型与AlexNet和Squeezenet相比。MobileNet准确率比AlexNet高4%,但是后者的计算量是前者的9.4倍,模型参数是前者的45倍。同样的,MobileNet准确率比Squeezenet高4%,模型参数相当,但是后者的计算量是前者的22倍,结果如下表所示:
-
细粒度识别
在Stanford Dogs数据集上训练MobileNet。从互联网上收集了更大且包含更多噪音的训练集,在这些数据上训练模型,然后再Stanford Dogs数据集上进行微调。结果如下表所示,MobileNet的结果可以和当前流行方法相当的准确率,并且可以大幅减小计算量和模型大小。
-
大范围地理定位
PlaNet是一种解决定位一张图片拍摄地点的方法。这种方法将地球分为地理上的网格,提供目标类别,然后在数以百万计的标注图片上进行训练。PlaNet在定位大量不同的照片时很有效,优于Im2GPS方法。
本文使用MobileNet结构,在相同的数据集上重新训练了PlaNet。完整的PlatNet是基于V3架构的,共有5200万参数,57.4亿mult-adds。MobileNet只有1300万参数,和58万mult-adds。实验结果表明,MobileNet的性能比PlaNet性能稍差,但是仍优于Im2GPS
-
人脸属性分类
在人脸属性分类任务上,只是用7500万参数和160000万mult-adds,进行大规模人脸属性分类实验。使用和YFCC100M相似的数据集。结合distillation training的可伸缩性和MobileNet的简约参数,得到的系统不需要正则化(如权重衰减和提前停止),并且提高了效果。实验结果如下表所示:
-
目标检测
MobileNet同样可以适用到目标检测中。本文在COCO数据集上进行了实验。结果如下表所示,MobileNet可以达到同VGG、Inception V2模型相媲美的结果,但是计算量和模型尺寸比两个模型小很多。
-
Face Embedding
FaceNet模型基于triplet损失构建face embedding。本文训练了mobile FaceNet模型,结果如下所示:
MobileNetV2
导读
MobileNetV2 提出了一种广泛适用的模型,并且应用SSDLIte框架进行物体检测(ObjectDetection),将本模型集成到MobileDeepLabV3框架中。
摘要
基于反向残差结构,薄的瓶颈层之间有连接(shortcut connection),中间扩展层用的是基于depthwise的卷积表示,作为非线性源过滤特征。另外,研究发现,为了维持表示能力,需要去除狭窄(narrow)层的非线性。这可以提高性能,并且作为直觉指导设计出了这种结构。
最后,为了减少输入输出的传输依赖,本文多次进行了解耦合。且在ImageNet、COCO、VO数据及上有很好的效果。使用准确度和乘加操作的数量作为trade-off的评价标准,同时熟用了准确度和参数数量作为评价标准。
参考文献:
[1]MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
Andrew G. Howard, Menglong Zhu, Bo Chen, Dmitry Kalenichenko, Weijun Wang, Tobias Weyand, Marco Andreetto, Hartwig Adam.CVPR.2017
[2]MobileNetV2: Inverted Residuals and Linear Bottlenecks
Mark Sandler, Andrew Howard, Menglong Zhu, Andrey Zhmoginov, Liang-Chieh Chen.CVPR.2018
[3]TensorFlow/models