专栏首页YZh学习记录MobileNetV2 论文阅读
原创

MobileNetV2 论文阅读

MobileNetV2:Inverted Residuals and Linear BottleNecks

1 引言

MobileNetv2架构是基于倒置残差结构(inverted residual structure),原本的残差结构的主分支是有三个卷积,两个逐点卷积通道数较多,而倒置的残差结构刚好相反,中间的卷积通道数(依旧使用深度分离卷积结构)较多,旁边的较小。此外,我们发现去除主分支中的非线性变换是有效的,这可以保持模型表现力

论文的主要贡献在于提出一种新型层结构: 具有线性瓶颈的倒残差结构(the inverted residual with linear bottleneck)。

该模块首先将输入的低维压缩表示(low-dimensional compressed representation)扩展到高维,使用轻量级深度卷积做过滤;随后用linear bottleneck将特征投影回低维压缩表示。

2 改进点

2.1 Linear Bottlenecks

上图是作者展示用RELU激活时,当channel越小,丢失的信息越多,当channel越大,丢失的信息越少。其实不难理解,

当channel为2时,信息都集中在这两个channel中,如果有部分数值小于0就会被RELU激活丢失掉。

而如果channel为30,其实信息是分散的,而且具有了冗余,所以通过RELU激活后归于0的值可能并不会影响太多信息的存储。

所以作者建议对于channel数很少的那些层做线性激活(linear Bottlenecks)bottlenect就表示缩减的层(降维后的层)

linear bottleneck表示对channel减少的层(降维后的层)做线性激活

如果要用RELU激活需要先增加channel数再做RELU激活

论文针对这个问题使用linear bottleneck(即不使用ReLU激活,做了线性变换)的来代替原本的非线性激活变换。到此,优化网络架构的思路也出来了:通过在卷积模块中后插入linear bottleneck来捕获兴趣流形。 实验证明,使用linear bottleneck可以防止非线性破坏太多信息。

2.2 Inverted residuals

MobileNetV2的网络模块样子是这样的:

网络设计思路:

在V2的网络设计中,我们除了继续使用深度可分离(中间那个)结构之外,还使用了Expansion layer和 Projection layer。

这个projection layer也是使用 1x 1 的网络结构,他的目的是希望把高维特征映射到低维空间去。另外说一句,使用的网络结构将高维空间映射到低纬空间的设计就是作者提出的Bottleneck layer。

Expansion layer的功能正相反,使用 1x 1 的网络结构,目的是将低维空间映射到高维空间。这里Expansion有一个超参数是维度扩展几倍。可以根据实际情况来做调整的,默认值是6,也就是扩展6倍。

此图更详细的展示了整个模块的结构。我们输入是24维,最后输出也是24维。但这个过程中,我们扩展了6倍,然后应用深度可分离卷积进行处理。整个网络是中间胖,两头窄,像一个纺锤形。bottleneck residual block(ResNet论文中的)是中间窄两头胖

在MobileNetV2中正好反了过来,所以,在MobileNetV2的论文中我们称这样的网络结构为Inverted residuals。需要注意的是residual connection是在输入和输出的部分进行连接。另外,我们之前已经花了很大篇幅来讲Linear Bottleneck,因为从高维向低维转换,使用ReLU激活函数可能会造成信息丢失或破坏(不使用非线性激活数数)。所以在projection convolution这一部分,我们不再使用ReLU激活函数而是使用线性激活函数。

3. 网络结构比较

3.1 MobileNetV2 和 V1

相同点:

都使用了DW + PW 的组合来提取特征。

这种方法在mobilenetv1 、 Xception 中提及。主要是用来减少卷积层的时间复杂度以及空间复杂度。

不同点: Linear Bottleneck

3.2 比较ResNet 与 MobileNet V2 的微结构

参考链接:

https://zhuanlan.zhihu.com/p/98874284

https://zhuanlan.zhihu.com/p/33075914

https://zhuanlan.zhihu.com/p/60668529

https://www.jianshu.com/p/38dc74d12fcf?utm_source=oschina-app

https://blog.csdn.net/stesha_chen/article/details/82744320

https://blog.csdn.net/u011974639/article/details/79199588

https://blog.csdn.net/heiheiya/article/details/89023513

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 相机标定1:坐标系关系

    于是,从世界坐标系到相机坐标系,涉及到旋转和平移(其实所有的运动也可以用旋转矩阵和平移向量来描述)。绕着不同的坐标轴旋转不同的角度,得到相应的旋转矩阵,如下图所...

    yzh
  • squeezenet 论文阅读

    最近对深卷积神经网络 (CNNs) 的研究主要集中在提高计算机视觉数据集的精确度上。对于给定的精度级别, 通常可以用不同的 CNN 体系结构来实现了该精度级别。...

    yzh
  • CAM 论文阅读

    重新审视《 Network in network》中提出的全局平均 池化层(global average pooling),并阐明了它是如何通过图片标签就能让卷...

    yzh
  • 【深度学习】CNN图像分类:从LeNet5到EfficientNet

    在对卷积的含义有了一定的理解之后,我们便可以对CNN在最简单的计算机视觉任务图像分类中的经典网络进行探索。CNN在近几年的发展历程中,从经典的LeNet5网络到...

    黄博的机器学习圈子
  • 前沿 | 新研究发现深度学习和量子物理的共同点,或可用物理学打开深度学习黑箱

    选自arXiv 作者:Yoav Levine等 机器之心编译 参与:吴攀 深度学习和量子物理是两个看似关联很小的领域,但研究者还是找到了它们之间的共同之处。近日...

    机器之心
  • java基础io流——配角也风流(不求甚解)

    PrintStream是OutputStream的子类,PrintWriter是Writer的子类,两者处于对等的位置上,所以它们的API是非常相似的。

    100000860378
  • python的并发和异步编程实例

    关于并发、并行、同步阻塞、异步非阻塞、线程、进程、协程等这些概念,单纯通过文字恐怕很难有比较深刻的理解,本文就通过代码一步步实现这些并发和异步编程,并进行比较。...

    py3study
  • C++经典算法题-Shell 排序法 - 改良的插入排序

    插入排序法由未排序的后半部前端取出一个值,插入已排序前半部的适当位置,概念简单但速度不快。

    cwl_java
  • .NETCore3.1中的Json互操作最全解读-收藏级

    我很高兴,.NETCore终于来到了3.1LTS版本,并且将支持3年,我们也准备让部分业务迁移到3.1上面,不过很快我们就遇到了新的问题,就是对于Json序列化...

    梁规晓
  • 浏览器响应数据long型超长自动转换精度丢失

    最近在洗敏感数据id,用类似snowflake算法加入分表基因生成新的ID,返回给前端,前端整数显示不正常。

    sdcuike

扫码关注云+社区

领取腾讯云代金券