轻量级网络之mobilenet_v1详解
前言:学习网络结构有一段时间了,记录下mobilenet_v1的结构
论文地址:https://arxiv.org/pdf/1704.04861.pdf
一、mobilenet_v1 研究背景
1.随着Alexnet 获得2012年的 ILSVRC 2012的挑战冠军,通常的趋势是通过搭建更深的和更复杂的网络来获得更高的准确率。这些进步虽然可以提高精度,但在推理速度和模型大小却不一定是高效的。
2.考虑在有限算力的平台上需要实时获得识别任务, 提出在移动端或者嵌入式中的轻量级神经网络。
二、如何实现轻量级神经网络
1.将标准的卷积核改成深度可分离卷积。
1.1 标准卷积(以3*3 为例子)
标准卷积计算量 = H * W * Dk * Dk * M * N
1.2 深度可分离卷积对比
参数计算量:包括深度卷积和逐点卷积
其中深度卷积计算量 = H * W * Dk * Dk * M
逐点卷积计算量 = M * N * 1 * 1 * H * W
1.3 标准卷积与深度可分离卷积计算量之比
倍率 = (H * W * Dk * Dk * M + M * N * 1 * 1 * H * W ) / (H * W * Dk * Dk * M * N )
= 1/N +1/( Dk * Dk)
1.4结论
深度可分离卷积的计算量是标准卷积 的 1/N +1/( Dk * Dk)倍。通常情况下,N (输出通道)远大于卷积核尺寸,故1/N +1/( Dk * Dk) 近似等于 1/( Dk * Dk)。当卷积核的大小为Dk =3 时,深度可分离卷积的计算量约为标准卷积的1/9倍。
2.提供宽度因子和图像分辨率因子来控制模型的大小及输入图片的大小。
2.1宽度因子
在有些应用场景中,可能需要更小的模型。因此引入了一个称为宽度因子的非常简单的参数α。宽度因子α的作用是在每层均匀地缩小网络。对于给定的层并且宽度乘法器α,那么输入通道M的数量变为αm,输出通道n的数量变为αn。α的取值范围通常为(0,1],当然大于1也可以。在速度、大小和精度上做权衡。
2.2图像分辨率因子
减少计算的第二个超参数,分辨率因子ρ。通过减少图片的输入尺寸来减少计算量。
原来图像大小为H * W,加入分辨率因子后图像大小为 ρH * ρW。通常取值范围为(0,1]
2.3 宽度因子和分辨率因子结合,深度可分离卷积的计算量如下所示
计算量 = DK · DK · αM · ρDF · ρDF + αM · αN · ρDF · ρDF。
三、网络结构介绍
1.mobilenet_v1 网络结构如下:
2.参数量如图所示
四、网络模块介绍
1.Conv (标准卷积)
2. Depthwise Conv + Pointwise Conv (深度可分离卷积)
3.Avg Pool (平均池化)
平均池化:计算图像区域的平均值作为该区域池化后的值。常规的平均池化计算过程如下图所示
注意:mobilenet_v1中平均池化采用的步长(stride =1)、卷积核尺寸为7*7。步长为1,平均池化后输入的特征图大小不变,依然为7 * 7 * 1024。
4.FC(全连接层)
全连接层将前面平均池化层的特征图拉成一维的向量:7 * 7 * 1024 ——> 1 * 1 * 50176
将一维向量 1 * 1 * 50176 乘以 权重,然后加上偏置,获得 1 * 1 * 1024 的向量。
5.SoftMax
将全连接层的一维向量 通过公式 获得每一类的分数,公式如下:
其中,Zi为第i个节点的输出值,C为输出节点的个数。通过以e为底数的Zi 次方,将第i 个节点的输出值(实数)映射到0到正无穷;通过归一化的方法,将映射的值转换成0-1的概率值,也就是类别的分数值。