个人学习笔记
如有错误,请指正;
如有侵权,请联系删除;
MobileNet 提出使用深度可分例卷积,将一个标准卷积分解成一个只对单通道卷积的 Depthwise Convolutional 和一个 1 × 1 1\times 1 1×1的 Pointwise Conv,可以牺牲少量性能而大大降低计算量。
但是深度可分离卷积也存在隐患:Depthwise 的 kernel 只有单通道,维度太小,在 Relu 激活后很容易变成 0,会训废掉,在 ShuffleNet 和 Xception 中都提到了在 Depthwise 后面不加非线性激活。
论文地址
官方github
MobileNet是一种流线型架构,使用深度可分离卷积(depthwise separable convolutions)来构建轻型深度神经网络,推出了两个超参 α 、 ρ \alpha 、\rho α、ρ来平衡网络性能和准确率,适用于移动端嵌入式视觉应用,包括目标检测、细粒度分类、人脸属性、大规模地理位置定位等。
构建小型高效神经网络的方法:
MobileNet提出了一种新的网络架构,可以让开发者根据硬件情况,调节两个超参 α 、 ρ \alpha 、\rho α、ρ来设定网络的计算量。
在MobileNet之前的轻型网络有:
获得小网络的方法:
深度可分离卷积:将一个标准卷积分解成一个深度(depthwise)卷积和一个逐点(pointwise)卷积,depthwise卷积在每个通道使用一个滤波器,pointwise卷积使用 1 × 1 1 \times 1 1×1的卷积组合depthwise卷积的输出,如下图所示:
标准卷积将输入同时进行滤波和组合,提取到一个新的集合中,深度可分离卷积将这一步分成了两层,depthwise用于过滤,pointwise用于组合。
下面说明MobileNet的深度可分离卷积是怎么降低计算量的:
设定输入特征图大小为 D F × D F × M D_F \times D_F \times M DF×DF×M(长-宽-通道数),输出特征图大小为 D G × D G × N D_G \times D_G \times N DG×DG×N(长-宽-通道数),标准卷积的卷积核大小为 D K × D K × M × N D_K \times D_K \times M \times N DK×DK×M×N,
则
标准卷积的计算公式为
G k , l , n = ∑ i , j , m K i , j , m , n ⋅ F k + i − 1 , l + j − 1 , m G_{k,l,n}=\sum_{i,j,m} K_{i,j,m,n} \cdot F_{k+i-1,l+j-1,m} Gk,l,n=i,j,m∑Ki,j,m,n⋅Fk+i−1,l+j−1,m,其中, K K K为卷积核, F F F为输入的特征图。
计算代价为
D K ⋅ D K ⋅ M ⋅ N ⋅ D F ⋅ D F D_K \cdot D_K \cdot M \cdot N \cdot D_F \cdot D_F DK⋅DK⋅M⋅N⋅DF⋅DF
标准卷积的计算代价与输入、输出通道数 M 、 N M、N M、N,卷积核大小、输入大小有关。
深度卷积计算公式为
G ^ k , l , m = ∑ i , j K ^ i , j , m ⋅ F k + i − 1 , l + j − 1 , m \hat{G}_{k,l,m}=\sum _{i,j} \hat{K}_{i,j,m} \cdot F_{k+i-1,l+j-1,m} G^k,l,m=i,j∑K^i,j,m⋅Fk+i−1,l+j−1,m
计算代价为
D K × D K × M × D F × D F D_K \times D_K \times M \times D_F \times D_F DK×DK×M×DF×DF
深度卷积可以输入特征图的每一个通道进行特征提取,但是无法组合不同通道的特征以产生新的特征,所以需要逐点卷积来组合通道信息,产生新的特征。
深度可分离卷积的计算代价为
D K × D K × M × D F × D F + 1 × 1 × M × N × D F × D F D_K \times D_K \times M \times D_F \times D_F+1 \times 1 \times M \times N \times D_F \times D_F DK×DK×M×DF×DF+1×1×M×N×DF×DF
标准卷积与深度可分离卷积计算代价比较:
D K × D K × M × D F × D F + M × N × D F × D F D K ⋅ D K ⋅ M ⋅ N ⋅ D F ⋅ D F = 1 N + 1 D K 2 \frac{D_K \times D_K \times M \times D_F \times D_F+ M \times N \times D_F \times D_F}{D_K \cdot D_K \cdot M \cdot N \cdot D_F \cdot D_F}=\frac{1}{N}+\frac{1}{D_K^2} DK⋅DK⋅M⋅N⋅DF⋅DFDK×DK×M×DF×DF+M×N×DF×DF=N1+DK21
网络架构:
除全连接层外,所有层后面都接着BN、Relu,如下图,全连接层接Softmax用于分类。
MobileNet共有28层。
实际运算速度不仅与乘-加(Mult-Adds)操作的次数有关,还与矩阵的稀疏度有关,非结构化稀疏矩阵的运算速度通常低于稠密矩阵的运算速度。矩阵运算时需要使用im2col将矩阵转化为列向量进行计算,im2col的示意图如下图所示:
但是MobileNet中使用的 1 × 1 1\times 1 1×1的卷积不需要im2col操作,可以节省大量时间,MobileNet花费95%的时间在 1 × 1 1\times 1 1×1的卷积上, 1 × 1 1\times 1 1×1的卷积上包含了75%的参数,剩下的参数大都在全连接层上,具体参数见下表。
MobileNet使用的优化方法为asynchronous gradient descent,与Inception-V3相同,因为是小网络,不用担心过拟合,所以只使用少量/不用正则与数据增强。
MobileNet提出的第一个超参:宽度乘子(width multiplier) α \alpha α ,用于减少通道数 M M M,加入 α \alpha α的深度可分离卷积的计算代价为
D K × D K × α M × D F × D F + α M × α N × D F × D F D_K \times D_K \times \alpha M \times D_F \times D_F+ \alpha M \times \alpha N \times D_F \times D_F DK×DK×αM×DF×DF+αM×αN×DF×DF
其中, α ∈ ( 0 , 1 ] \alpha \in (0,1] α∈(0,1],通常设置为 1 , 0.75 , 0.5 , 0.25 1, 0.75,0.5,0.25 1,0.75,0.5,0.25。该超参大约可以减少计算量 α 2 \alpha ^2 α2.
MobileNet提出的第二个超参:分辨率乘子(resolution multiplier) ρ \rho ρ ,用于减少输入图像及内部特征图的大小,在实践中,通过设置输入图像分辨率来隐性设置 ρ \rho ρ(这也算创新点???),加入 ρ \rho ρ的深度可分离卷积的计算代价为
D K × D K × α M × ρ D F × ρ D F + α M × α N × ρ D F × ρ D F D_K \times D_K \times \alpha M \times \rho D_F \times \rho D_F+ \alpha M \times \alpha N \times \rho D_F \times \rho D_F DK×DK×αM×ρDF×ρDF+αM×αN×ρDF×ρDF
其中, ρ ∈ ( 0 , 1 ] \rho \in (0,1] ρ∈(0,1],输入图像分辨率通常设置为 224 , 192 , 160 , 128 224, 192,160,128 224,192,160,128。该超参大约可以减少计算量 ρ 2 \rho ^2 ρ2.
下表为在输入为 14 × 14 × 512 14\times 14 \times 512 14×14×512,卷积核为 3 × 3 × 512 × 512 3 \times 3 \times 512 \times 512 3×3×512×512情况下,标准卷积、标准深度可分离卷积、分别加入 α \alpha α、 ρ \rho ρ之后的深度可分离卷积的计算量与参数量比较。