MobileNet系列很重要的轻量级网络家族,出自谷歌,MobileNetV1使用深度可分离卷积来构建轻量级网络,MobileNetV2提出创新的inverted residual with linear bottleneck单元,虽然层数变多了,但是整体网络准确率和速度都有提升,MobileNetV3则结合AutoML技术以及人工微调进行更轻量级的网络构建MobileNetV1 论文: MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
?
来源:晓飞的算法工程笔记 公众号
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/1fdf223321ff4d5d80fa3086aaeab61c.jpg)
文章图片
- 论文地址:http://arxiv.org/pdf/1704.04861.pdf
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/ddc0f5d352004759b854b90ae75f3514.jpg)
文章图片
? MobileNet基于深度可分离卷积构建了非常轻量且延迟小的模型,并且可以通过两个超参数来进一步控制模型的大小,该模型能够应用到终端设备中,具有很重要的实践意义。
Depthwise Separable Convolution
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/5bf4c54cd54e47d59c06be157ea84543.jpg)
文章图片
? 假设标准卷积的输入和输出分别为DF?×DF?×M的特征图F和DF?×DF?×N的特征图G(假设特征图大小不变),卷积核大小为DK?×DK?×M×N,则输出特征图的计算为:
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/97af9b48dd6c42a1a3c743188160eddb.jpg)
文章图片
? 计算量为:
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/e0982addac13488a82f519620b8484d6.jpg)
文章图片
? 计算量与输入维度M、输出维度N、卷积核大小DK?以及特征图大小DF?相关。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/3470db32f8d945299af2c9a1f4615022.jpg)
文章图片
? MobileNet通过深度可分离卷积优进行计算量优化,将标准卷积转化为深度卷积和$1\times 1$pointwise卷积,每层后面都会接BN和ReLU。 深度卷积的每个输入维度对应一个卷积核,对于相同的输入,深度卷积的输出特征图计算为:
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/1d2dd6fb33674be6af3e6bfd2736d8b0.jpg)
文章图片
? K^是大小为DK?×DK?×M的深度卷积核,K^的mth?卷积核对应输入F的mth?特征图和输出G^的mth?特征图,深度卷积的计算量为:
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/9e0e87f05f884329bb09ee1bbab5e4ca.jpg)
文章图片
? 尽管深度卷积更高效,但没有很好地融合多个输入维度,所以需要额外层来对其输出进行线性组合,这里使用$1\times 1$pointwise卷积来生成新特征图,即深度可分离卷积,计算量为:
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/e323397602fe4f3cbb862338baa73904.jpg)
文章图片
? 深度可分离卷积和标准卷积的计算量缩放比为:
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/0f3ae859b27242b595b305d1b69c4f9d.jpg)
文章图片
? MobileNet使用$3\times 3$的深度可分离卷积,所以大概会有8-9倍的计算量减少,准确率仅会有些许降低。
Network Structure and Training
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/495c67b005de4e7d804e031365d789a5.jpg)
文章图片
? MobileNet的结构如表1所示,除第一层外其它均是深度可分离卷积,除了最后一层全连接层外每层都接BN和ReLU,总共28层。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/744429ddbadc4e2d880ee05a5bb70a89.jpg)
文章图片
? 论文提到不能直接通过计算量来代表网络的高效性,还需要看操作的具体实现方法。如表2所示,MobileNet的大部分计算量和参数都在pointwise卷积上,不管在CPU设备还是GPU设备,都已经有很高效的实现方法。至于训练的设置,论文也有较详细的提及,有兴趣的可以去看看原文。
Width Multiplier: Thinner Models
【MobileNetV1/V2/V3简述 | 轻量级网络】? 尽管MobileNet已经很轻量了,但还可以使用宽度缩放因子α来进一步轻量化,将每层的输入输出维度变为αM和αN,缩放后的计算量变为:
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/5d5f2b53866a40a99c5778df78c1cc5b.png)
文章图片
? α∈(0,1],宽度缩放因子的计算量缩放比大约为α2,能够让用户根据任务对准确率和速度进行trade off。
Resolution Multiplier: Reduced Representation
? MobileNet还可以通过分辨率缩放因子ρ来缩放模型的大小,结合宽度缩放因子α,缩放后的计算量为:
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/95188744efd04b6f98f8a19f532e73c2.png)
文章图片
? ρ∈(0,1],分辨率缩放因子的计算量缩放比大约为ρ2。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/d020ab5a17dd4337be4f333aed59fbdd.jpg)
文章图片
? 论文也对深度可分离卷积、宽度缩放因子以及深度缩放因子的效果进行了对比。
Experiments
? MobileNet的实验做得挺详细的,在多种任务上进行性能对比,这里只列举了部分结果,具体的可以看原文,但比较遗憾的是没有贴推理耗时的对比结果。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/71c40eea59c54011b39ee7d391dc666a.jpg)
文章图片
? 对比MobileNet的全卷积版本和深度可分离卷积版本。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/ab5b9886030f47359b54164d1aba1e00.jpg)
文章图片
? 对比宽度缩放和直接去除最后5层$14\times 14\times 512$深度分离卷积的效果。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/e7c6b59ed7964d81bda472a3a5e83d4b.jpg)
文章图片
? 对比不同宽度缩放因子的效果。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/0e59cee57043427d86aca05eefb66c4e.jpg)
文章图片
? 对比不同分辨率缩放的效果。
CONCLUSION
? MobileNet运用深度可分离卷积进行轻量级网络的构建,在准确率没有大幅下降的情况下,能把参数量和计算量降低大约8倍,具有很重要的实践意义。
MobileNetV2 论文: MobileNetV2: Inverted Residuals and Linear Bottlenecks
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/7dd952593f8946608e87ab400ab38bc3.jpg)
文章图片
- 论文地址:http://arxiv.org/pdf/1801.04381.pdf
? MobileNetV2提出新的层单元inverted residual with linear bottleneck,该结构类似与残差网络单元,都包含shorcut,区别在于该结构是输入输出维度少,中间通过线性卷积先扩展升维,然后通过深度卷积进行特征提取,最后再映射降维,可以很好地保持网络性能且网络更加轻量。
Linear Bottlenecks
? 神经网络的高维特征中的关键信息(manifold of interest)是分散分布的,实际可以用紧凑的低维特征进行表示,因此理论上可以通过降低层输出的维度来降低操作空间的维度。而论文认为,当层中存在非线性激活时,则可能会打破上面的理论,于是去除了低维特征的非线性操作,基于下面两点发现:
- 根据ReLU的属性,若输出为非零,则相当于对该输入进行了线性变化,可认为部分输入空间进行了线性变化,而网络仅对这些非零输出进行后续处理。由于特征的关键信息一般经过ReLU后输出全是非0,因此可以认为ReLU对关键信息(低维特征)都进行了线性操作。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/5fd74c9545f74de68062060e3656c472.jpg)
文章图片
- 论文将2维输入通过矩阵T线性升维至d,再通过ReLU进行非线性激活,最后使用矩阵T?1恢复至2维。从可视化结果来看,维度越低,ReLU对输入的信息丢失越多。这表明,假设非线性操作的输入特征能够压缩成较低维特征时,需要输入特征有足够大的复杂度,非线性操作才能保留较完整的信息。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/b1177bdb4a7341bdb6bdda68b0c43715.jpg)
文章图片
? 假设层输出的关键信息可以通过低维特征进行表示,则可以使用线性bootleneck进行提取,结构如图2c所示,在深度卷积后接pointwise卷积进行降维,但在降维后不再使用非线性激活,仅对高维特征进行非线性激活。而图2d是结构c的前一部分,两者合起来构成一个完整的MobileNetV2 bottleneck,先通过pointwise卷积升维,然后深度卷积提取特征,最后再使用pointwise卷积进行降维,其中升维的比例称为expansion ratio。
Inverted residuals
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/b1bf87d4f491455297dd0c3b3e797b0a.jpg)
文章图片
? MobileNetV2的residual block与Resnet的residual block类似,重点是为了更好地回传梯度以及特征重用,区别在于MobileNetV2连接的是bottleneck特征,即维度较小的特征。如前面描述的,论文认为较低维的特征包含了所有的必须信息,而expansion layer仅是为了实现非线性变化的一个手段。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/2be5caef89474ce5a2398430804d26e7.jpg)
文章图片
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/e465d258646f4772afea33b63ce32842.jpg)
文章图片
? residual block的操作以及输入输出如表1所示,尽管相对于MobileNetV1多了一个pointwise卷积,但这样的结构允许更少的输入输出维度。从表3的对比可以看出,MobileNetV2的内存使用更少。而expansion ratio的设置可以允许结构有很多种变化,设为0时就是identity mapping,设为大于1则是Resnet的residual block。
Model Architecture
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/ffa801d806e04b1f92c605a4486818a1.jpg)
文章图片
? MobileNetV2 unit包含stride=1和stride=2两种。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/79864520ccdf491891b2addb52a33c7f.jpg)
文章图片
? MobileNetV2的整体结构如表2所示,通过堆叠图4d的结构进行构建,首层使用普通的卷积层,另外也可以通过宽度缩放因子和分辨率缩放因子来进行准确率和时延之间的trade off。
Experiments
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/c9a32540e13e47208258dae7ce9ff644.jpg)
文章图片
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/6cb77be9a3c649a094d7ed571f89a448.jpg)
文章图片
? 论文对比MobileNetV2与其它网络在图像分类上的性能。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/fb3c7159041c48689a63f6cd29e4126e.jpg)
文章图片
? 论文对比MobileNetV2与其它网络在目标检测上的性能。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/70560b5511254c08a180a0db560102f7.jpg)
文章图片
? 论文对比MobileNetV2与其它网络在语义分割上的性能。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/59550a9dee3144d0b55d01c288a2bb64.jpg)
文章图片
? 另外论文对inverted residual with linear bottleneck的改进进行验证。
Conclusions
? MobileNetV2基于inverted residual with linear bottleneck进行轻量级网络构建,整体的结构都挺创新的,包括Inverted residuals以及expansion layer,linear Bottlenecks的分析也很有启发意义,到现在很多终端算法仍是以MobileNetV2作为主干网络。
MobileNetV3 论文: Searching for MobileNetV3
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/6505ab5eefdb47508ea60f0dde0a680a.jpg)
文章图片
- 论文地址:http://arxiv.org/pdf/1905.02244.pdf
? MobileNetV3基于AutoML构建,再人工微调对搜索结果进行优化,搜索方法使用了platform-aware NAS以及NetAdapt,分别用于全局搜索以及局部搜索,而人工微调则调整了网络前后几层的结构、bottleneck加入SE模块以及提出计算高效的h-swish非线性激活。
Network Search
? MobileNetV3首先使用MnasNet的platform-aware NAS进行每个block的层结构搜索,再将搜索结果按照预设的网络结构搭建起来,有兴趣的可以去看看公众号的讲解。platform-aware NAS主要是以准确率和实际时延的加权ACC(m)×[LAT(m)/TAR]w作为优化指标,逼近帕累托最优(准确率和时延分别不能再同时增加)。论文在实践时发现,对于小模型而言,时延的增加会导致精度急剧增大,因此需要增大w=?0.07为w=?0.15,加大对时延增加的惩罚。
? 在完成初步的网络搜索后,论文使用NetAdapt进行逐层地调整 ,作为对MnasNet的搜索方法的补充,NetAdapt的具体步骤如下:
- 基于MnasNet搜房方法得到的种子网络作为开始。
- 生成新proposal集,每个proposal代表对种子网络的一种修改,必须能带来δ=0.01倍的时延下降。
- 对于每个proposal,使用上一step的训练模型进行参数初始化,缺失的参数随机初始化,然后finetune T=10000轮得到大致的准确率。
- 根据指标选择最好的proposal。
- 迭代步骤234直到满足目标时延。
- 减小任意expansion layer的大小
- 减小所有相同大小的bottleneck的大小
? 在得到搜索结果后,论文发现通常网络的前后几层开销都相对较多,因此针对这几层进行了特定的修改。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/cb06d32c3ea2477f9a12d673becd6985.jpg)
文章图片
? 对最后几层的改造如图5,前置了avg pool,使得后续升至高维的操作能在$1\times 1KaTeX parse error: Can't use function '$' in math mode at position 12: 特征图上进行,而不是在$?7\times 7特征图上进行,节省了大量的时间。而由于avg pool前置这个操作已经节省了大量的计算量,也就不需要前一个bottleneck的DConv+pointwise conv操作(该操作为了从160维生成320维特征,避免直接从160维到1280维)来减轻计算量了,直接去除,进一步节省计算量,这样的改进大概能带来7毫秒(11%)的速度提升。
? 对于前几层,一般的网络都使用32维$3\times 3$的卷积,论文认为这些卷积里面存在冗余,通过实验,将维度降维16维不影响准确率,带来2毫秒的速度提升,非线性激活使用了论文提出的hwish非线性激活,效果与其它函数差别不大。
Nonlinearities
? swish作为ReLU的替代品,能带来显著的准确率提升,swish的定义如下:
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/c93a3ed426754703b6f4891f5d7d2cd9.jpg)
文章图片
? 由于swish包含了sigmoid函数,在移动设备上计算没有很好地优化。因此,论文将sigmoid替换成分段线性模拟6ReLU6(x+3)?,提出了改进版hwish:
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/af8a21bc8b0243a886f92accfa238a9d.jpg)
文章图片
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/aed6fc4863bd4e89a3ca9684255423be.jpg)
文章图片
? 从图6的可视化结果来看,swish和h-swish的曲线十分接近。非线性操作在网络越深处的耗时会低(特征图大小减小一半),因此,仅在网络的后半段使用h-swish。
Large squeeze-and-excite
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/266f621fdd4540549a3f4402c03953cc.jpg)
文章图片
? MobileNetV3的bottleneck在V2的基础上加了SE模块,其中SE ratio固定为0.25。论文提到这里的实现与MansNet不太一样,固定为expansion layer的1/4,但我看来好像没什么区别,知道的朋友麻烦告知一下。
MobileNetV3 Definitions
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/028fd1b33e2145ce9a77bf8aa1f4ae73.jpg)
文章图片
? MobileNetV3分为MobileNetV3-Large和MobileNetV3-Small两个版本。
Experiments
? 论文的实验很充分,这里只贴了部分任务的主要实验结果,其它可以查看原文。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/7cea93d3329b475fabf460e0f6e52fc7.jpg)
文章图片
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/0bd581ef54bb4f67b8f6cfbb4baa54b7.jpg)
文章图片
? 论文对比MobileNetV3与其它网络在图像分类上的性能。
![MobileNetV1/V2/V3简述 | 轻量级网络](https://img.it610.com/image/info8/8837efc98e6f4ccf908dd8a8d9b6a95c.jpg)
文章图片
? 论文对比MobileNetV3与其它网络在目标检测上的性能。
Conclusion
? MobileNetV3首先使用AutoML方法获取到最优的网络结构,再通过人工的部分修改来达到最终的精度,虽然网络不是直接通过搜索得来的,但是实验的效果还是有的,里面的improvement也值得参考和借鉴。
Conclusion ? MobileNet系列是很重要的轻量级网络家族,MobileNetV1使用深度可分离卷积来构建轻量级网络,MobileNetV2提出创新的inverted residual with linear bottleneck单元,虽然层数变多了,但是整体网络准确率和速度都有提升,MobileNetV3则结合AutoML技术以及人工微调进行更轻量级的网络构建
?
推荐阅读
- 历史上的今天|【历史上的今天】1 月 10 日(算法分析之父出生;史上最失败的世纪并购;含冤 50 年的计算机先驱)
- Python舆论篇|自学Python(做不到这几点,一般人我还是劝你算了吧!)
- 算法|我工作第五年的学习与读书之法
- 机器人教育|在学习少儿编程中体会AI乐趣
- 人工智能|英媒(人工智能终于接近人类智能了吗())
- java|支付宝集五福最全攻略!「一行黑科技」
- 人工智能|参赛指南 | 教育部白名单竞赛少年硅谷 AI算法竞技赛
- 神经网络|构建自定义 CNN 模型(识别 COVID-19)
- 人工智能|名校硕士苦攻5年AI无论文痛苦吐槽,导师放养怎么办()