1、MobileNet V1
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
参考:
https://zhuanlan.zhihu.com/p/33075914
1.1 Prior Work
- 解决什么问题?
深度学习在图像分类,目标检测和图像分割等任务表现出了巨大的优越性。计算量,存储空间以及能耗方面的巨大开销,使得其在某些真实的应用场景如移动或者嵌入式设备是难以被应用的。
目前的研究总结来看分为两个方向:
- 压缩预训练模型。
获得小型网络的一个办法是减小、分解或压缩预训练网络,例如量化压缩(product quantization)、哈希(hashing )、剪枝(pruning)、矢量编码( vector quantization)和霍夫曼编码(Huffman coding)等;此外还有各种分解因子(various factorizations )用来加速预训练网络;还有一种训练小型网络的方法叫蒸馏(distillation ),使用大型网络指导小型网络,这是对论文的方法做了一个补充,后续有介绍补充。
- 直接设计小型模型
例如Flattened networks利用完全的因式分解的卷积网络构建模型,显示出完全分解网络的潜力;Factorized Networks引入了类似的分解卷积以及拓扑连接的使用;Xception network显示了如何扩展深度可分离卷积到Inception V3 networks;Squeezenet 使用一个bottleneck用于构建小型网络。
小型化方面常用的手段有:
(1)卷积核分解,使用1×N和N×1的卷积核代替N×N的卷积核
(2)使用bottleneck结构,以SqueezeNet为代表
(3)以低精度浮点数保存,例如Deep Compression
(4)冗余卷积核剪枝及哈弗曼编码
- MobileNet 目标
在保持模型性能(accuracy)的前提下降低模型大小(parameters size),同时提升模型速度(speed, low latency)
1.2 Network
MobileNet网络的计算与参数分布:
在MobileNet中,有95%的计算量和75%的参数属于1x1卷积。
1.3 ⭐Depthwise Separable Convolution
MobileNet的基本单元是深度级可分离卷积(depthwise separable convolution),即Xception变体结构。
可以分解为两个更小的操作:depthwise convolution 和 pointwise convolution
图a中的卷积核就是最常见的3D卷积,替换为deep-wise方式:一个逐个通道处理的2D卷积(图b)结合3D的1*1卷积(图c)
- Depthwise convolution 和标准卷积不同,对于标准卷积其卷积核是用在所有的输入通道上(input channels),而depthwise convolution针对每个输入通道采用不同的卷积核,就是说一个卷积核对应一个输入通道,所以说depthwise convolution是depth级别的操作。
- pointwise convolution 其实就是普通的卷积,只不过其采用1x1的卷积核
采用depthwise convolution对不同输入通道分别进行卷积,然后采用pointwise convolution将上面的输出再进行结合,这样其实整体效果和一个标准卷积是差不多的,但是会大大减少计算量和模型参数量。
- 计算量
M为输入的通道数
DF为输入的宽和高
Dk为卷积核的宽和高
- 在某一普通卷积层如果使用N个卷积核,这一个卷积层的计算量为:
- 使用deep-wise方式的卷积核,一个逐个通道处理的2D卷积(图b)结合3D的1*1卷积(图c)
- 一组和输入通道数相同的2D卷积核的运算量为:
- 3D的1*1卷积核的计算量为:
- 一组和输入通道数相同的2D卷积核的运算量为:
Architectural
传统的3D卷积常见的使用方式如下图左侧所示,deep-wise卷积的使用方式如下图右边所示。
deep-wise的卷积和后面的1x1卷积被当成了两个独立的模块,都在输出结果的部分加入了Batch Normalization和非线性激活单元。
example
输入图片的大小为(6,6,3) ,原卷积操作是用(4,4,3,5) 的卷积(4×4 是卷积核大小,3是卷积核通道数,5个卷积核数量),stride=1,无padding。输出的特征尺寸为(6-4)/1+1=3,即输出的特征映射为(3,3,5)
将标准卷积中选取序号为 n 的卷积核,大小为(4,4,3) ,标准卷积过程示意图如下(注意省略了偏置单元):
黑色的输入为(6,6,3) 与第n 个卷积核对应,每个通道对应每个卷积核通道卷积得到输出,最终输出为2+0+1=3 。(这是常见的卷积操作,注意这里卷积核要和输入的通道数相同,即图中表示的3个通道~)
对于深度分离卷积,把标准卷积(4,4,3,5)分解为:
depthwise 卷积部分:大小为(4,4,1,3) ,作用在输入的每个通道上,输出特征映射为 (3,3,3)
pointwise 卷积部分:大小为 (1,1,3,5),作用在深度卷积的输出特征映射上,得到最终输出为(3,3,5)
例中depthwise 卷积卷积过程示意图如下:
输入有3个通道,对应着有3个大小为(4,4,1) 的深度卷积核,卷积结果共有3个大小为(3,3,1) ,我们按顺序将这卷积按通道排列得到输出卷积结果(3,3,3) 。
1.4 Width and Resolution Multiplier
为了获得更小更快的模型
- Width Multiplier: Thinner Models
宽度因子α是一个属于(0,1]之间的数,作用于网络的通道数。是新网络中每一个模块要使用的卷积核数量相较于标准的MobileNet比例。对于deep-wise结合1x1方式的卷积核,计算量为:
α常用的配置为1,0.75,0.5,0.25;当α等于1时就是标准的MobileNet。通过参数α可以非常有效的将计算量和参数数量约减到α的平方倍。
- Resolution Multiplier: Reduced Representation
分辨率因子β的取值范围**在(0,1]**之间,是作用于每一个模块输入尺寸的约减因子,简单来说就是将输入数据以及由此在每一个模块产生的特征图都变小了,结合宽度因子α,deep-wise结合1x1方式的卷积核计算量为:
不同的β系数作用于标准MobileNet时,对精度和计算量以的影响(α固定)
使用宽度和分辨率参数调整网络结构之后,都要从随机初始化重新训练才能得到新网络。
1.5 Module
Training
作者基于TensorFlow训练MobileNet,使用RMSprop算法优化网络参数。考虑到较小的网络不会有