论文:《Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation》
论文链接:https://arxiv.org/abs/1801.04381
前文链接:MobileNet-v1详解

概述

MobileNet-v2的主要思想就是在v1的基础上引入了线性瓶颈 (Linear Bottleneck)和逆残差 (Inverted Residual)来提高网络的表征能力,同样也是一种轻量级的卷积神经网络。MobileNet-v1的主要思想就是深度可分离卷积,如果对这个方面不太了解的话,可以参考我的另一篇文章,链接已放在文章开头。

1. MobileNet-v1存在的问题

结构问题:MobileNet-v1的结构非常简单,类似于VGGNet,是一个非常复古的直筒结构。这种结构的性价比其实不高,后续一系列的ResNet、DenseNet等结构已经证明通过复用图像特征,使用Concat/Elwise+等操作进行融合,能极大提升网络的性价比。
       Depthwise convolution存在的问题:Depthwise convolution确实是大大降低了计算量,Depthwise+Pointwise的结构在性能上也能接近普通卷积。但是在实际应用时我们发现Depthwsie部分的kernel比较容易训废掉,训练完之后发现Depthwise训出来的kernel有不少是空的。因为depthwise每个kernel_dim相对于普通卷积要小得多,过小的kernel_dim加上ReLU的激活影响下,使得输出神经元很容易变为0,所以就学废了。ReLU对于0的输出梯度为0,所以一旦陷入0输出,就没法恢复了。

2. Inverted Residual(逆残差)


                                                                   原始Residual block和Inverted residual block对比

(a)Original residual block:reduce – transfer – expand (中间窄两头宽)
       Residual block先用1x1卷积降通道过ReLU,再3x3卷积过ReLU,最后再用1x1卷积过ReLU恢复通道,并和输入相加。之所以要1*1卷积降通道,是为了减少计算量,不然中间的3x3卷积计算量太大。所以Residual block是中间窄两头宽。
(b)Inverted residual block:expand – transfer – reduce (中间宽两头窄)
       在Inverted Residual block中,3x3卷积变成Depthwise了,计算量很少了,所以通道数可以多一点,效果更好,所以通过1x1卷积先提升通道数,再Depthwise3x3卷积,最后用1x1卷积降低通道数。两端的通道数都很小,所以1x1卷积升通道和降通道计算量都并不大,而中间的通道数虽然多,但是Depthwise 的卷积计算量也不大。下图即为具体实例:

– 为什么要使用Inverted residual

skip connection这种bottleneck的结构被证明很有效,所以想用。但是如果像以前那样先压缩channal,channal数本来就少,再压没了,所以不如先增大后减少。

3. Linear Bottleneck(线性瓶颈层)

Original bottlenecks:Elwise + with ReLU at end of a bottleneck
Linear bottlenecks:Elwise + with NO ReLU at the end of a bottleneck

论文中对这块的描述比较晦涩难懂,其实大致意思就是:我们在设计网络结构的时候,想要减少运算量,就需要尽可能将网络维度设计的低一些,但是维度如果低的话,ReLU激活函数可能会滤除很多有用信息。而ReLU对于没有滤除的部分,即非零的部分的作用是一个线性分类器。既然在低维空间中使用ReLU做激活变换会丢失很多信息,论文针对这个问题在Bottleneck末尾使用linear bottleneck(即不使用ReLU激活,做了线性变换)来代替原本的非线性激活变换。
       实验证明,使用linear bottleneck可以防止非线性破坏太多信息。

– 为什么要使用Linear Bottleneck

ReLU让负半轴为0。本来参数就不多,学习能力就有限,这一下再让一些参数为0了,就更学不着什么东西了,干脆在elwise+那里不要ReLU了。

4. Inverted Residual + Linear Bottleneck

结构如下图所示。在MobileNet-v2的网络设计中,除了继续使用Depthwise Conv(Bottleneck中间的卷积层)结构之外,还使用了Expansion layer和 Projection layer。Expansion layer是使用1x1卷积将低维空间映射到高维空间(扩大通道数),这里Expansion有一个超参数是维度扩展几倍,可以根据实际情况来做调整的,默认值是6,也就是扩展6倍。Projection layer也是使用1x1卷积,他的目的是希望把高维特征映射到低维空间去(减小通道数)。需要注意的是residual connection是在输入和输出的部分进行连接。另外,前面已经说过,因为从高维向低维转换,使用ReLU激活函数可能会造成信息丢失或破坏,所以在Projection convolution这一部分,我们不再使用ReLU激活函数而是使用线性激活函数。

5. MobileNet-v2整体网络结构

MobileNetV2的模型如下图所示,其中t为Bottleneck内部升维的倍数,c为通道数,n为该bottleneck重复的次数,s为sride。

       其中,当stride=1时,才会使用elementwise 的sum将输入和输出特征连接(如下图左侧);stride=2时,无short cut连接输入和输出特征(下图右侧)。

● 需要注意的是:
       1)当n>1时(即该瓶颈层重复的次数>1),只在第一个瓶颈层stride为对应的s,其他重复的瓶颈层stride均为1;
       2)只在stride=1时,输出特征尺寸和输入特征尺寸一致,才会使用elementwise sum将输出与输入相加;
       3)当n>1时,只在第一个瓶颈层升维,其他时候channel不变。(针对整个瓶颈层的维度)

(例如,对于该图中56x56x24的那层,共有3个该瓶颈层,只在第一个瓶颈层使用stride=2,后两个瓶颈层stride=1;第一个瓶颈层由于输入和输出尺寸不一致,因而无short cut连接,后两个由于stride=1,输入输出特征尺寸一致,会使用short cut将输入和输出特征进行elementwise的sum;另外,只在第一个瓶颈层最后的1x1conv对特征进行升维,后两个瓶颈层输出维度不变(不要和瓶颈层内部的升维弄混了)。该层输入特征为56x56x24,第一个瓶颈层输出为28x28x32(特征尺寸降低,特征维度增加,无short cut),第二个、第三个瓶颈层输入和输出均为28x28x32(此时c=32,s=1,有short cut)。)
       另外表中还有一个k。mobileNet-v1中提出了宽度缩放因子,其作用是在整体上对网络的每一层维度(特征数量)进行瘦身。在MobileNetV2中,当k<1时,最后的1*1conv不进行宽度缩放,否则进行宽度缩放。

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

【轻量级网络】MobileNet-v2详解相关推荐

  1. 轻量级网络之mobilenet_v1详解

    轻量级网络之mobilenet_v1详解 前言:学习网络结构有一段时间了,记录下mobilenet_v1的结构 论文地址:https://arxiv.org/pdf/1704.04861.pdf 一. ...

  2. 轻量化CNN网络MobileNet系列详解

    MobileNet系列作为轻量级网络的代表,使得CNN轻量化和移动端的部署成为可能.MobileNet系列目前总共有三个版本, 分别是MobileNet v1.MobileNet v2和MobileN ...

  3. 【深度学习】轻量化CNN网络MobileNet系列详解

    深度学习100问 Author:louwill Machine Learning Lab MobileNet系列作为轻量级网络的代表,使得CNN轻量化和移动端的部署成为可能.MobileNet系列目前 ...

  4. 【轻量级网络】MobileNet-v1详解

    论文:<MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications> 论文链接:h ...

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

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

  6. 科普:5G网络关键技术详解

    不久前,中国华为公司主推的Polar Code(极化码)方案,成为5G控制信道eMBB场景编码方案.消息一出,在网络上就炸开了锅,甚至有媒体用"华为碾压高通,拿下5G时代"来形容这 ...

  7. openstack架构详解图_英特尔顶级技术专家合力缔造精品:Linux开源网络全栈详解...

    日常水开篇 自1991年诞生起,Linux已经走过了接近三十年.Linux早已没有了问世时的稚气,正在各个领域展示自己成熟的魅力. 以Linux为基础,也衍生出了各种开源生态,例如网络和存储.而生态离 ...

  8. 2020中级计算机工程师,2020年上半年中级网络工程师报考详解

    原标题:2020年上半年中级网络工程师报考详解 软考全称叫做"全国计算机技术与软件专业技术资格(水平)考试"已经开展了十多年了,所受到的欢迎程度也是越来越高,据统计累计参加软考的人 ...

  9. iOS开发——使用Charles进行https网络抓包详解

    我在前面两篇博客中<网络抓包工具Charles的介绍与使用><iOS开发--使用Charles进行http网络抓包详解>对Charles的http抓包进行了详细的讲解.今天我们 ...

最新文章

  1. 数据库管理系统的组成和结构
  2. 优秀领导者,离不开这6个品质
  3. fx-4500科学计算机用法,应用CASIOfx-4500PA计算器计算LC50的方法
  4. python转行it好学吗-转行IT做后端开发,学python还是java?
  5. JAVA基础5——与String相关的系列(1)
  6. linux——系统日志的信息、采集、查看、保存
  7. python编程基础张勇答案_Python程序开发、编程基础阶段试题及答案
  8. 3-JAVA中的JSON操作
  9. window.location.search 跳转
  10. C++11多线程---互斥量、锁、条件变量的总结
  11. Java Web中相对路径与绝对路径的分析
  12. Linux selinux关闭方法和防火墙关闭方法
  13. 两组树形数据的比对_Python数据分析-可视化“大佬”之Seaborn
  14. 理解ThreadLocal(一)
  15. MySQL 阿里巴巴JAVA开发手册-MySQL相关
  16. 中航信e-build php,学习PHP精粹,编写高效PHP代码之质量保证
  17. 网站服务器 80端口吗,你的服务器打开IIS80端口了吗?
  18. 电子计算机eniac的储存能力有限 只能,电子计算机ENIAC的存储能力有限,只能存储简单的控制程序代码。...
  19. 理财投资理念黄金法则
  20. aptx与ldac音质区别_搞清楚LDAC、aptX这些蓝牙编码都有啥区别

热门文章

  1. (7)UART接收verilog与Systemverilog编码
  2. ajax回调函数有时成功有时失败,javascript - Ajax 回调函数行为随机。我做错了什么?...
  3. 为什么我的mysql比redis快_为什么redis是单线程的以及为什么这么快?
  4. linux多线程学习(六)——信号量实现同步
  5. ARM开发步步深入之NandFlash 4KB突围
  6. volatile的作用及原理
  7. html 头尾代码自动,HTML Head Generator - 纯 CSS 实现的头部元标签代码生成器 - 钉子の次元...
  8. mysql数据还原命令_mysql数据备份和还原命令:mysqldump
  9. 【LeetCode】【HOT】206. 反转链表(迭代/递归)
  10. 力扣1175.质数排列