原论文:MobileNetV2: Inverted Residuals and Linear Bottlenecks

MobileNet v2

1、四个问题

  1. 要解决什么问题?

    • 与MobileNet v1所要解决的问题一样,为嵌入式设备或算力有限的场景下设计一个有效的模型。
  2. 用了什么方法解决?
    • 一方面,沿用了再MobileNet v1中采用的depthwise separable convolution。
    • 另一方面,新提出了inverted residual结构和linear bottleneck结构来改进模型。
  3. 效果如何?
    • 作者在论文中给出了一系列任务下的实验结果:ImageNet图像分类、目标检测、语义分割等,MobileNet v2均取得了比MobileNet v1更好的效果。
    • 就目标检测来说,由MobileNet v2扩展构建的网络,其性能相比于其他架构如:Faster-RCNN、RFCN等还是逊色不少,但是考虑到模型的实时性和计算量,MobileNet v2在各项任务的表现相比于同一量级的模型是state-of-the-art的。
  4. 还存在什么问题?
    • 社区对其的评价普遍都挺高,但也有一些人说自己复现(基于TensorFlow的)无法达到论文中的精度。网上也有挺多开源的复现代码(基于Pytorch),用的时候还是自己复现一下再下定论吧。

2、论文概述

2.1、Depthwise Separable Convolutions

  • 基本思想就是:讲一个普通的卷积操作拆分成两个卷积操作。第一层为depthwise卷积,分别对每个输入通道进行卷积;第二层是pointwise卷积,实质就是1×11 \times 11×1卷积,主要是用来将前面depthwise输出的特征组合起来构建新的特征。

2.2、Linear Bottlenecks

  • 文中,经过激活层后的张量被称为manifold of interest(看到网上将其翻译为兴趣流形,总觉得有点不到位,所以后面都直接用英文代替)。
  • manifold of interest(经过ReLU后的张量)非0的情况下,ReLU只是一个线性变换。
  • ReLU只有在input manifold处于输入空间的子空间的情况下,才能保留input manifold的全部信息。
    • 换句话说,只要使用了ReLU,就不可避免地要损失该通道内的一部分信息。
    • 文中还给了一个示例,将input先映射到高维空间然后接一个ReLU后再还原回原来的维度。
    • 示意图如下,可以看出映射的维度越高,还原的效果越好,保留的原始信息越多。

  • 一句话概括:Linear Bottlenecks就是,去掉ReLU,减小对特征的破坏,尽可能保留输入的信息。
  • Linear Bottlenecks后面会与Inverted residuals组合起来使用。

2.3、Inverted residuals

  • 网络结构基本单元的演变,如下图所示:

    1. a就是普通的3×33 \times 33×3卷积。
    2. b是Depthwise Separable Convolution操作,此前用于MobileNet v1.
    3. c由b扩展而来,在b后面加了linear bottleneck(虚线框),bottleneck层没有加ReLU。
    4. d与c很像,在堆叠网络时两者是等价的。

  • 普通的residual block与inverted residual block之间的对比:

    • 每个长方体的厚度象征着通道数。
    • a为传统的residual block。结构为:1×11 \times 11×1卷积(降维)+ReLU–>3×33 \times 33×3卷积+ReLU–>1×11 \times 11×1卷积(升维)+ReLU。
    • b为反转的residual block(inverted residual block)。结构为:1×11 \times 11×1卷积(升维)+ReLU–>3×33 \times 33×3depthwise separable卷积+ReLU–>1×11 \times 11×1卷积(降维)(注意,这里是不带ReLU的,即前面提到的linear bottleneck)。

2.4、模型结构

  • Bottleneck residual block的结构(也就是inverted residual block),其为MobileNet v2的基本组成模块。

  • MobileNet v2的总体结构:

  • 几种网络的基本模块之间的对比:

2.5、其他

  • 图a中可以看出,使用Linear bottleneck(不使用ReLU)比直接给输出接上ReLU6的效果好。

    • 我个人的理解

      • ReLU会使负值置0,所以使用ReLU一定会出现信息损失。
      • 一般情况下,普通卷积后接上ReLU应该是能取得更好地效果的,不然也不会这么多人这么用。
      • 然而,针对MobileNet这个网络,由于其使用了大量的Depthwise Separable卷积,在Depthwise卷积之后接上ReLU就更容易损失信息了,导致效果反倒下降了。
      • 为什么呢?因为Depthwise卷积是直接针对单通道的,也就是说它的输出是单通道的,而这种单通道的信息经过ReLU后更容易损失信息。前面在讨论Linear Bottleneck时,作者也提到了如果中间层的维度较低,再经过ReLU后(manifold of interest)则很容易损失信息,除非先升高到一个较高维度再降低回原来的维度,才能保留更多的信息。而普通卷积则会将各个输入通道的输出加权求和,这一点也类似于提升了维度,所以直接接上ReLU并不会损失太多信息。
  • 图b中可以看出,在bottleneck处添加shortcut会比在expanded layer处添加shortcut效果更好。

论文笔记:MobileNet v2相关推荐

  1. MobileNet V2 模型分析+解读

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

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

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

  3. MobileNet V2 论文笔记

    论文:Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segm ...

  4. 论文笔记:ShuffleNet v2

    ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design ShuffleNet v2 1.四个问题 要解决什么 ...

  5. 论文笔记 | 谷歌 Soft Prompt Learning ,Prefix-Tuning的 -> soft promt -> p tuning v2

    论文笔记 | 谷歌 Soft Prompt Learning ptuning -> Prefix-Tuning -> soft promt -> p tuning v2 " ...

  6. ConvNeXt V2 论文笔记

    ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders(2023.1.2-v1) 链接:   paper     ...

  7. 论文笔记:MobileFaceNet

    原文:MobileFaceNets: Efficient CNNs for Accurate Real-time Face Verification on Mobile Devices MobileF ...

  8. 【MobileNet V2】《MobileNetV2:Inverted Residuals and Linear Bottlenecks》

    CVPR-2018 caffe 版本的代码:https://github.com/shicai/MobileNet-Caffe/blob/master/mobilenet_v2_deploy.prot ...

  9. [论文总结] 深度学习在农业领域应用论文笔记5

    深度学习在农业领域应用论文笔记5 1. Channel pruned YOLO V5s-based deep learning approach for rapid and accurate appl ...

最新文章

  1. MySQL如何利用索引优化ORDER BY排序语句
  2. ADS 2013安装教程
  3. 批处理命令 / 延迟环境变量扩展
  4. 猪和兔子的玻璃体给人用(仅仅是个人想法)
  5. java控制台代码_Java控制台常用命令
  6. WCF把书读薄(4)——事务编程与可靠会话
  7. 番茄助手Visual Assistx报错The security key for this program currently。。
  8. 怎么彻底粉碎文件夹?文件还能恢复吗?操作过程在这里
  9. 嵌入式Linux使用TFT屏幕:使用TinyDRM点亮ST7789V屏幕
  10. 【每月总结】2021年6月
  11. python做正态分布的例子_python实现正态分布
  12. CleanMyMac X4.11.2免费版专业的Mac电脑清理软件
  13. python common很久不用我都忘了一些函数了,给boss添麻烦了
  14. 手机经常收到回复TD退订,回还是不回?今天总算是弄清楚了
  15. 汇千网-五年后,我们能用脑机接口做什么?
  16. 苹果手机注册时显示链接服务器出现问题,苹果确认iphone密码,显示连接服务器出现问题,为什么...
  17. Dota英雄卡尔有多少个技能?
  18. abp集成abp.Dapper
  19. 惊闻企业Web应用生成平台 活字格 V4.0 免费了,不单可视化设计器免费,服务器也免费!...
  20. UE4实时渲染基础及深入探究

热门文章

  1. 定义一个类mymath_C++:模板类
  2. 无限网络无限连接掉网的解决
  3. 关于main函数中argc和argv的简单介绍
  4. Nginx - request_time和upstream_response_time的区别
  5. 打造高效的工作环境 – SHELL 篇
  6. 自己动手实现的 Spring IOC 和 AOP - 上篇
  7. 感知器 Perceptron
  8. 鸟哥的Linux私房菜(基础篇)-第零章、计算机概论(零.2)
  9. 【OpenCV3】直线拟合——cv::fitLine()详解
  10. 用Jmeter做微信小程序项目接口测试【案例】