Mobilenet 系列论文
0. 前言
- 论文包括:
- MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
- 提出使用 Depth Seperable Convolution 替代普通卷积操作。
- MobileNetV2: Inverted Residuals and Linear Bottlenecks
- MobileNetV3: Searching for MobileNetV3
- MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
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]
- 输入尺寸是
- Depthwise Convolution
- 特点:
- 卷积核的尺寸是三维的。
- 一层输入对应一层卷积核,因此输入与输出通道数相同。
- 输入尺寸是
[in_height, in_width, in_channels]
- 输出尺寸是
[out_height, out_width, in_channels]
- 卷积核尺寸是
[kernel_height, kernel_width, in_channels]
- 特点:
- Pointwise Convolution
- 特点:
- 感觉就是卷积核为
1 * 1
的普通卷积。 - 输入与输出的卷积核长宽保持不变,改变的只有通道数量。
- 感觉就是卷积核为
- 输入尺寸是
[in_height, in_width, in_channels]
- 输出尺寸是
[in_height, in_width, out_channels]
- 卷积核尺寸是
[1, 1, in_channels, out_channels]
- 特点:
- 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
- Depthwise Convolution:
- 所以两者的比值就是
1/out_channels + 1/kernel_height*kernel_width
- 普通卷积参数数量为
- 网络结构还引入了几个超参数,从而控制网络的大小。这一点在后面几代中也会用到。
- 引入了 Depthwise Separable Convolution 来替代普通卷积。
- 效果如何?
- 基本上不用了,也就不提了。
- 还存在什么问题?
- 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一样。这个在后面介绍
- Inverted residuals
- 意思就是不是普通的bottleneck结构(channel数量先减少再增加),而是 inverted residual(channel数量先增加再减少)。
- 细节就如下图,channel数量先增加再减少。
- channel数量增加多少就通过一个参数
expansion
决定。
-
这篇笔记里有几个很不错的图,推荐大家看看。
-
- 整体模型结构
- 论文本身还提供了结构对比
- MobileNetV2主要用到的技术包括:
- 效果如何?
- 后来一直都在使用,应该属于应用比较多的轻量化网络了,说明效果肯定不错。
- 当时的准确率啥的没有啥代表性了,所以也就不放了
- 还存在什么问题?
- 不过也属于两年前的东西,最新的一些技术还没有融合进去。
- 手工设计的网络,跟NAS比可能还是稍微差一点。
3. MobileNet V3
-
要解决什么问题?
- MobileNet系列都是为了在边缘端设备上运行为而实际的。MobileNetV3突出了自己是为了在手机CPU上运行的。
- 模型能在手机上运行解决隐私权的问题,毕竟数据没有流转,都是在用户自己手上。
- 模型小了,不仅能够运行速度快、在更多型号上运行,而且还能降低电池消耗。
- MobileNetV2的提出是在18年1月,到MobileNetV3提出(19.5)已经过了很长时间,所以有很多新技术出现,MobilNetV3就融合了很多新技术。
- MobileNet系列都是为了在边缘端设备上运行为而实际的。MobileNetV3突出了自己是为了在手机CPU上运行的。
-
用什么方法解决?
- 简单说,MobileNetV3就是在MobileNetV2的基础上融合新技术而成。MobileNetV2在上面介绍了,这里就不多说了。下面就罗列下用到的新技术。
- NASNet不了解,不管了。
- Squeeze-and-Excite
- h-swish
- 网络结构的优化:
- 总体结构
-
效果如何?
-
还存在什么问题?
- 不知道在CPU上性能如何。
- 论文本身感觉不是特别出彩,但结果就是很好。