论文笔记:MobileNet v2

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hongbin_xu/article/details/82992589

原论文: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 × 1 1 \times 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 × 3 3 \times 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 × 1 1 \times 1 卷积(降维)+ReLU–> 3 × 3 3 \times 3 卷积+ReLU–> 1 × 1 1 \times 1 卷积(升维)+ReLU。
    • b为反转的residual block(inverted residual block)。结构为: 1 × 1 1 \times 1 卷积(升维)+ReLU–> 3 × 3 3 \times 3 depthwise separable卷积+ReLU–> 1 × 1 1 \times 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效果更好。

猜你喜欢

转载自blog.csdn.net/hongbin_xu/article/details/82992589