一、论文:

https://arxiv.org/abs/18

非官方Caffe代码:https://github.com/shicai/MobileNet-Caffe

二、论文理解

MobileNet V2 是对 MobileNet V1 的改进,同样是一个轻量级卷积神经网络。

1)基础理论--深度可分离卷积(DepthWise操作)

标准的卷积过程可以看上图,一个2×2的卷积核在卷积时,对应图像区域中的所有通道均被同时考虑,问题在于,为什么一定要同时考虑图像区域和通道?我们为什么不能把通道和空间区域分开考虑?

Xception网络就是基于以上的问题发明而来。我们首先对每一个通道进行各自的卷积操作,有多少个通道就有多少个过滤器。得到新的通道feature maps之后,这时再对这批新的通道feature maps 进行标准的1×1跨通道卷积操作。这种操作被称为“DepthWise convolution”,缩写“DW”。

这种操作是相当有效的,在 ImageNet 1000 类分类任务中已经超过了InceptionV3 的表现,而且也同时减少了大量的参数,我们来算一算,假设输入通道数为3,要求输出通道数为256,两种做法:

1. 直接接一个3×3×256的卷积核,参数量为:3×3×3×256 = 6,912

2. DW 操作,分两步完成,参数量为:3×3×3 + 3×1×1×256 = 795,又把参数量降低到九分之一!

因此,一个 Depthwise 操作比标准的卷积操作降低不少的参数量,同时论文中指出这个模型得到了更好的分类效果。

2)MobileNetV1遗留的问题

1、结构问题:

MobileNet V1 的结构其实非常简单,论文里是一个非常复古的直筒结构,类似于VGG一样。这种结构的性价比其实不高,后续一系列的 ResNet, DenseNet 等结构已经证明通过复用图像特征,使用 Concat/Eltwise+ 等操作进行融合,能极大提升网络的性价比。

2、Depthwise Convolution的潜在问题:

Depthwise Conv确实是大大降低了计算量,而且N×N Depthwise +1×1PointWise的结构在性能上也能接近N×N Conv。在实际使用的时候,我们发现Depthwise部分的kernel比较容易训废掉:训练完之后发现Depthwise训出来的kernel有不少是空的。当时我们认为,Depthwise每个kernel dim相对于普通Conv要小得多,过小的kernel_dim, 加上ReLU的激活影响下,使得神经元输出很容易变为0,所以就学废了。ReLU对于0的输出的梯度为0,所以一旦陷入0输出,就没法恢复了。我们还发现,这个问题在定点化低精度训练的时候会进一步放大。

3MobileNet V2的创新点

1、Inverted Residual Block

MobileNet V1没有很好的利用Residual Connection,而Residual Connection通常情况下总是好的,所以MobileNet V2加上。先看看原始的ResNet Block长什么样,下图左边:

先用1x1降通道过ReLU,再3x3空间卷积过ReLU,再用1x1卷积过ReLU恢复通道,并和输入相加。之所以要1x1卷积降通道,是为了减少计算量,不然中间的3x3空间卷积计算量太大。所以Residual block是沙漏形,两边宽中间窄。

但是,现在我们中间的3x3卷积变为了Depthwise的了,计算量很少了,所以通道可以多一点,效果更好,所以通过1x1卷积先提升通道数,再Depthwise的3x3空间卷积,再用1x1卷积降低维度。两端的通道数都很小,所以1x1卷积升通道或降通道计算量都并不大,而中间通道数虽然多,但是Depthwise 的卷积计算量也不大。作者称之为Inverted Residual Block,两边窄中间宽,像柳叶,较小的计算量得到较好的性能。

2、ReLU6

首先说明一下 ReLU6,卷积之后通常会接一个 ReLU 非线性激活,在 MobileNet V1 里面使用 ReLU6,ReLU6 就是普通的ReLU但是限制最大输出值为 6,这是为了在移动端设备 float16/int8 的低精度的时候,也能有很好的数值分辨率,如果对 ReLU 的激活范围不加限制,输出范围为0到正无穷,如果激活值非常大,分布在一个很大的范围内,则低精度的float16/int8无法很好地精确描述如此大范围的数值,带来精度损失。

本文提出,最后输出的 ReLU6 去掉,直接线性输出,理由是:ReLU 变换后保留非0区域对应于一个线性变换,仅当输入低维时ReLU 能保留所有完整信息。

在看 MobileNet V1的时候,我就疑问为什么没有把后面的 ReLU去掉,因为Xception已经实验证明了 Depthwise 卷积后再加ReLU 效果会变差,作者猜想可能是 Depthwise 输出太浅了, 应用 ReLU会带来信息丢失,而 MobileNet V1还引用了 Xception 的论文,但是在 Depthwise 卷积后面还是加了ReLU。在 MobileNet V2 这个 ReLU终于去掉了,并用了大量的篇幅来说明为什么要去掉。

总之,去掉最后那个 ReLU,效果更好。

4 网络结构

这样,我们就得到 MobileNet V2的基本结构了,左边是 V1 的没有 Residual Connection并且带最后的 ReLU,右边是 V2 的带Residual Connection 并且去掉了最后的 ReLU:

网络的整体配置清单如下:

其中:

t  是输入通道的倍增系数(即中间部分的通道数是输入通道数的多少倍)

是该模块重复次数

c 是输出通道数

s 是该模块第一次重复时的 stride(后面重复都是 stride 1)

5 实验结果

通过 Inverted residual block这个新的结构,可以用较少的运算量得到较高的精度,适用于移动端的需求,在 ImageNet 上的准确率如下所示:

可以说是又小又快又好。另外,应用在目标检测任务上,也能得到很好的效果。

应用在目标检测任务上,基于 MobileNet V2的SSDLite 在 COCO 数据集上超过了 YOLO v2,并且大小小10倍速度快20倍:

6 总结

1、CNN 在 CV 领域不断突破,但是深度模型前端化还远远不够。目前 MobileNet、ShuffleNet参数个位数(单位 M ),在ImageNet 数据集上,依 top-1 而论,比 ResNet-34,VGG19 精度高,比 ResNet-50 精度低。实时性和精度得到较好的平衡。

2、本文最难理解的其实是 Linear Bottlenecks,论文中用了很多公式来描述这个思想,但是实现上非常简单,就是在 MobileNet V2 微结构中第二个PW后去掉 ReLU6。对于低维空间而言,进行线性映射会保存特征,而非线性映射会破坏特征。

三、参考博客

MobileNet V2的Caffe模型:https://github.com/shicai/MobileNet-Caffe

Depthwise Convolutional Layer: github.com/yonghenglh6/DepthwiseConvolution

MobileNet-SSD: https://github.com/chuanqi305/MobileNet-SSD

知乎:https://www.zhihu.com/question/265709710/answer/298927545

轻量级模型:MobileNet V2相关推荐

  1. 基于轻量级神经网络MobileNet V2的水果识别种类算法研究

    基于轻量级神经网络MobileNet V2的水果识别种类算法研究 时代背景 农用机器人,是由现代农业中发展出来的一个能够部分取代人类劳动力的高智能精密机械装置.它是现代农业生产中不能缺少的环节,也是未 ...

  2. MobileNet V2 模型分析+解读

    一.论文: https://arxiv.org/abs/18 转载自https://blog.csdn.net/kangdi7547/article/details/8143157 二.论文理解 Mo ...

  3. 轻量级深度学习网络——MobileNet MobileNet v2

    这篇文章主要讲的是深度学习网络篇中轻量化网络之一的MobileNet和MobileNet v2.在深度学习中轻量化网络有很多方法, 比如说卷积核分解.使用bottleneck结构.用低精度浮点数保存模 ...

  4. 轻量级网络——MobileNet系列学习(理论篇)

    目录 一.MobileNetV1 1.1 Depthwise separable convolution(深度级可分离卷积) 参数对比 1.2 MobileNet网络结构 1.3 MobileNet网 ...

  5. 轻量级网络模型MobileNet发展脉络(V1-V2-V3)

    卷积神经网络发展 卷积神经网络被广泛应用在图像分类.目标检测等视觉任务中,并取得了巨大的成功.然而,卷积神经网络通常需要较大的运算量和内存占用,在移动端以及嵌入式设备等资源受限的环境中受到限制,因此需 ...

  6. 论文笔记:MobileNet v2

    原论文:MobileNetV2: Inverted Residuals and Linear Bottlenecks MobileNet v2 1.四个问题 要解决什么问题? 与MobileNet v ...

  7. MobileNet V2 复现

    MobileNet V2 复现 Windows 10 python 3.7.6 tensorflow 2.1 cuda 10.2 模型文件 model.py # -*- coding:utf-8 _* ...

  8. MobileNet V2简单总结

    2017_MobileNetV2_谷歌: 图: 网络描述: MobileNet V2提出了 the inverted residual with linear bottleneck,线性瓶颈反残差结构 ...

  9. 基于FPGA的MobileNet V2卷积神经网络加速器

    MobileNet V2介绍 MobileNetV2是在V1基础之上的改进.V1主要思想就是深度可分离卷积.而V2则在V1的基础上,引入了Linear Bottleneck 和 Inverted Re ...

  10. MobileNet v2中 Inverted Residual 和 Linear Bottleneck 是怎么回事

    MobileNet v2中 Inverted Residual 和 Linear Bottleneck 是怎么回事 flyfish MobileNet v1的深度可分离卷积 Block的结构 先从Mo ...

最新文章

  1. 2019,不可错过的NLP“高光时刻”
  2. 剑指offer--变态跳台阶--递归和循环
  3. Python并发Gevent库(一)
  4. hibernate教程--关联关系的映射详解
  5. LWIP裸机环境下实现TCP与UDP通讯
  6. Serval and Toy Bricks
  7. Eigen+suitesparse for windows 安装
  8. 中科院,NASA日全食网络直播[多个观测点入口]
  9. 光纤交换机zone配置
  10. 勒索团伙正奔向 SonicWall 设备
  11. 地铁关门提示音,可使用倒计时
  12. Atitit 同步获取阻塞式命令行输出 费阻塞式样命令行执行完毕后退出了,可以直接获取其输出 InputStream is = new StreamGobbler(session.getStd
  13. flowable 配置自定义表单_web工作流管理系统开发之四 自定义表单
  14. 基于SSM框架的生源地助学贷款管理系统的设计与实现
  15. c语言99乘法表 倒三角形书写
  16. c语言公历转农历程序,用c如何编写 农历转换成公历
  17. Vue中报如下错误Uncaught (in promise) NavigationDuplicated解决方案
  18. 无疆_炎戎的2011跨年总结
  19. [翻译]Reactor Netty参考指南 - 8.UDP客户端
  20. can not be named yunan because its located directly under the workspace root

热门文章

  1. 如何查询硬盘序列号,百度的答案全是错的
  2. 系统、驱动相关软件下载
  3. 浏览器指纹?(防关联浏览器/指纹浏览器/超级浏览器/候鸟浏览器)
  4. 完整美团饿了么外卖红包源码
  5. ELK日志管理系统图示全过程详解
  6. [Linux]----马哥Linux运维共208讲(初级+中级+高级+必备软件+PPT)01_04_Linux操作系统基础
  7. 【指南 】北理珠第十届C语言程序设计挑战杯
  8. (Python)计算器的设计与实现
  9. Python实战——过采样数据的处理之改进的SMOTE算法
  10. H3C交换机设置与无线控制器时间同步