Mobilenet 系列论文

0. 前言

  • 论文包括:
    • MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
      • 提出使用 Depth Seperable Convolution 替代普通卷积操作。
    • MobileNetV2: Inverted Residuals and Linear Bottlenecks
    • MobileNetV3: Searching for MobileNetV3

1. MobileNet V1

  • arxiv
  • 本节配图如无说明都是来自 这篇文章
    • 这配图真的好
  • 要解决什么问题?
    • 当时的模型都比较大,轻量化网络的工作并不太多。
  • 用什么方法解决?
    • 引入了 Depthwise Separable Convolution 来替代普通卷积。
      • 论文的配图没有下面这几张好。
    • 普通卷积:
      • 输入尺寸是 [in_height, in_width, in_channels]
      • 输出尺寸是 [out_height, out_width, out_channels]
      • 卷积核尺寸是 [kernel_height, kernel_width, in_channels, out_channels]
      • image_1dulvsrdo19ej9ukgln1fsm1bpr9.png-145.1kB
    • Depthwise Convolution
      • 特点:
        • 卷积核的尺寸是三维的。
        • 一层输入对应一层卷积核,因此输入与输出通道数相同
      • 输入尺寸是 [in_height, in_width, in_channels]
      • 输出尺寸是 [out_height, out_width, in_channels]
      • 卷积核尺寸是 [kernel_height, kernel_width, in_channels]
      • image_1dum02fbe1g876i618pe1vrbtabm.png-126.3kB
    • Pointwise Convolution
      • 特点:
        • 感觉就是卷积核为1 * 1的普通卷积。
        • 输入与输出的卷积核长宽保持不变,改变的只有通道数量。
      • 输入尺寸是 [in_height, in_width, in_channels]
      • 输出尺寸是 [in_height, in_width, out_channels]
      • 卷积核尺寸是 [1, 1, in_channels, out_channels]
      • image_1dum1488115bn43c1fs6ek61vi413.png-107.3kB
    • Depth Separable Convolution
      • 其实就是用一次 Depthwise Convolution 与一次 Pointwise Convolution 来替代普通卷积。
      • 假设
        • 输入特征图尺寸为 [in_height, in_width, in_channels]
        • 输出特征图尺寸为 [out_height, out_wdith, out_channels]
        • 普通卷积核的尺寸为 [kernel_height, kernel_width, in_channels, out_channels]
      • 参数对比:
        • 普通卷积参数数量为 kernel_height * kernel_width * in_channels * out_channels
        • Depth Separable Convlution的参数数量是
          • Depthwise Convolution:kernel_height * kernel_width * in_channels
          • Pointwise Convolution:1 * 1 * in_channels * out_channels
        • 所以两者的比值就是 1/out_channels + 1/kernel_height*kernel_width
    • 网络结构还引入了几个超参数,从而控制网络的大小。这一点在后面几代中也会用到。
  • 效果如何?
    • 基本上不用了,也就不提了。
  • 还存在什么问题?
    • Depthwise Convolution 虽然能够减少参数数量与计算量,但不一定能够真正的减少模型运行时间。
    • 按照作者的说法,这篇论文相关内容其实在论文发表前1年就有了,是看没人占坑才发出来的。
    • MobileNetV1的总体结构并没有什么大不了的,也没有引入residual,后面也基本上不用了,所以就不介绍了。

2. MobileNet V2

  • arxiv
  • 知乎讨论参考笔记
  • 要解决什么问题?
    • MobileNetV1的结构中引入了Depthwise Separable Convolution,但其中的 Depthwise Convolution 可能会导致kernel训练废掉(这个是别人的说法,感觉意思就是特征退化,也就是得到的大量特征都是0,啥都没学到)。
    • 另外,MobileNetV1的总体结构太一般了,类似于VGG的结构,而没有引入resnet densenet这些的新研。
  • 用什么方法解决?
    • MobileNetV2主要用到的技术包括:
      • Depthwise Separable Convolutions:这个与MobileNetV1相同,所以就不详细说明了。
      • Linear Bottlenecks
      • Inverted residuals
    • Linear Bottlenecks
      • 意思是在Bottlenecks中,不使用Relu而使用Linear。
      • 在卷积神经网络中有一个假设:
        • "manifold of interest"可以通过一个更低纬度的子空间表示。
        • 关于 manifold of interest 我不知道确切含义,也不知道该怎么翻译,可能是“关键信息”的意思?
        • 猜测整体意思就是,神经网络中流转的信息可以通过更低纬度的特征图来表示(比如resnet中的bottleneck结构,就会先对特征图进行降维然后升维,那降维也不会导致信息丢失太多),但低纬度信息在训练过程中不容易保存,所以通过高纬度来表示。
      • 通过上面的假设,虽然低纬度可以保存信息,但通过Relu后保存的信息会有很大部分丢失,所以就不使用Relu而使用Linear。
      • 论文的这个配图要好好说道说道,开始看得我要哭了
        • A图是普通的卷积操作,注意,单次卷积操作是同时对所有channel进行操作的,所以红色的立方体包含了所有的输入channel。
        • B图是Depthwise Separable Convolution,包括一次 depthwise convolution 和一次 pointwise convolution。对于depthwise,其实是对每个channel单独做了一次 3*3*1*1 的卷积操作,所以输入数据中的红色只有一层,表示为一个平面(而不是A图中所有channel,表示为一个长方体)。pointwise convolution本质就是一次普通的 1*1 卷积,输入数据是对所有 channel 进行操作的,所以图中显示的是一个细长的长方体。
        • C图是bottleneck结构的separable convolution with linear,大概意思就是先进行depthwise convolution(包含relu),再进行pointwise convolution(包含relu),最后在进行一次1*1卷积(不包含relu,而是使用linear)进行升维。整体结构就是一个bottleneck,即channel数量先减少再增加。
        • D图的本质与C图一样,如果有多个C图结构连接起来,那中间截取一段就如图D一样。这个在后面介绍
        • image_1eb3a1ipd1a931d511kdl4f5120n9.png-120.6kB
    • Inverted residuals
      • 意思就是不是普通的bottleneck结构(channel数量先减少再增加),而是 inverted residual(channel数量先增加再减少)。
      • 细节就如下图,channel数量先增加再减少。
      • channel数量增加多少就通过一个参数 expansion 决定。
      • image_1eb3am4fslqp25u1jdbqie1046m.png-97.5kB
    • 这篇笔记里有几个很不错的图,推荐大家看看。
      • image_1eb3b09tj1qhav9592hadar8913.png-89.5kBimage_1eb3b0ed67gs19ph12u31l1mo0l1g.png-24.2kBimage_1eb3b0khu1usbpm31fnu18b8hd81t.png-53.1kB
    • 整体模型结构
      • image_1eb3b90dt1t1b1sjt1qafool1lt32a.png-86.8kB
    • 论文本身还提供了结构对比image_1eb3ban8i2iqausr11dv1co034.png-148.3kB
  • 效果如何?
    • 后来一直都在使用,应该属于应用比较多的轻量化网络了,说明效果肯定不错。
    • 当时的准确率啥的没有啥代表性了,所以也就不放了
  • 还存在什么问题?
    • 不过也属于两年前的东西,最新的一些技术还没有融合进去。
    • 手工设计的网络,跟NAS比可能还是稍微差一点。

3. MobileNet V3

  • arxiv

  • 知乎讨论

  • 要解决什么问题?

    • MobileNet系列都是为了在边缘端设备上运行为而实际的。MobileNetV3突出了自己是为了在手机CPU上运行的。
      • 模型能在手机上运行解决隐私权的问题,毕竟数据没有流转,都是在用户自己手上。
      • 模型小了,不仅能够运行速度快、在更多型号上运行,而且还能降低电池消耗。
    • MobileNetV2的提出是在18年1月,到MobileNetV3提出(19.5)已经过了很长时间,所以有很多新技术出现,MobilNetV3就融合了很多新技术。
  • 用什么方法解决?

    • 简单说,MobileNetV3就是在MobileNetV2的基础上融合新技术而成。MobileNetV2在上面介绍了,这里就不多说了。下面就罗列下用到的新技术。
    • NASNet不了解,不管了。
    • Squeeze-and-Exciteimage_1eb3gfthd4v41vca1u9h19s1r2m4b.png-78.2kB
    • h-swishimage_1eb3gff1613gmgmk74tiuo1t8s3u.png-6.4kB
    • 网络结构的优化:
      • image_1eb3ftnes1b0mogc164018fp1m7h3h.png-62.3kB
    • 总体结构
      • image_1eb3gi0ss1ui51f6e1vub1pco1h0s4o.png-146.1kB
      • image_1eb3gi8i4hgr1svv1qq8kju9mv55.png-102.1kB
  • 效果如何?

    • image_1eb3gjjk5our2jkkag6dd1cp25i.png-209.8kB
  • 还存在什么问题?

    • 不知道在CPU上性能如何。
    • 论文本身感觉不是特别出彩,但结果就是很好。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章