深度学习中的MobileNets:模型量化、压缩与加速技术详解
深度学习中的MobileNets:模型量化、压缩与加速技术详解
MobileNets 是 Google 为移动端设备设计的轻量级卷积神经网络,通过引入深度可分离卷积(Depthwise Separable Convolution)等技术,在保持较高准确率的同时大幅降低了模型的计算复杂度和参数量。本文将详细介绍 MobileNets V1 和 V2 的核心原理、网络结构及其在目标检测和实例分割等任务中的应用。
MobileNets V1
Deep-wise 卷积
MobileNet 使用了一种称之为 deep-wise 的卷积方式来替代原有的传统 3D 卷积,减少了卷积核的冗余表达。在计算量和参数数量明显下降之后,卷积网络可以应用在更多的移动端平台。
传统的 3D 卷积使用一个和输入数据通道数相同的卷积核在逐个通道卷积后求和最后得出一个数值作为结果,假设 M 为输入的通道数,Dk 为卷积核的宽和高,DF 为输入的宽和高,在某一层如果使用 N 个卷积核。
该卷积层总体参数量为:
DK×DK×N×M
该卷积层总体计算量为(考虑 Padding,strides=1):
如果使用 deep-wise 方式的卷积核,我们会首先使用一组二维的卷积核,也就是卷积核的通道数为 1,每次只处理一个输入通道的,这一组二维卷积核的数量是和输入通道数相同的。在使用逐个通道卷积处理之后,再使用 3D 的 1*1 卷积核来处理之前输出的特征图,将最终输出通道数变为一个指定的数量。
参数总量为:
DK×DK×M+N×M×1×1
则总体计算量为:
deep-wise 方式的卷积相比于传统 3D 卷积计算量为:
从图中可以看出,deep-wise 的卷积和后面的 1x1 卷积被当成了两个独立的模块,都在输出结果的部分加入了 Batch Normalization 和非线性激活单元。
MobileNets V2
MobileNetV2 是对 MobileNetV1 的改进,同样是一个轻量化卷积神经网络。
MobileNetV1 遗留的问题
结构问题:
MobileNet V1 的结构其实非常简单,论文里是一个非常复古的直筒结构,类似于 VGG 一样。这种结构的性价比其实不高,后续一系列的 ResNet, DenseNet 等结构已经证明通过复用图像特征,使用 Concat/Eltwise+ 等操作进行融合,能极大提升网络的性价比。Depthwise Convolution 的潜在问题:
Depthwise Conv 确实大大降低了计算量,而且 N×N Depthwise +1×1PointWise 的结构在性能上也能接近 N×N Conv。在实际使用的时候,我们发现 Depthwise 部分的 kernel 比较容易训废掉:训练完之后发现 Depthwise 训出来的 kernel 有不少是空的。当时我们认为,Depthwise 每个 kernel dim 相对于普通 Conv 要小得多,过小的 kernel_dim, 加上 ReLU 的激活影响下,使得神经元输出很容易变为 0,所以就学废了。ReLU 对于 0 的输出的梯度为 0,所以一旦陷入 0 输出,就没法恢复了。我们还发现,这个问题在定点化低精度训练的时候会进一步放大。
MobileNetV2 的创新点
Inverted residuals block
原始的 ResNet Block,先用 1x1 降通道过 ReLU,再 3x3 空间卷积过 ReLU,再用 1x1 卷积过 ReLU 恢复通道,并和输入相加。之所以要 1x1 卷积降通道,是为了减少计算量,不然中间的 3x3 空间卷积计算量太大。所以 Residual block 是沙漏形,两边宽中间窄。Inverted Residual Block 先通过 1x1 卷积提升通道数,再 Depthwise 的 3x3 空间卷积,再用 1x1 卷积降低维度。两端的通道数都很小,所以 1x1 卷积升通道或降通道计算量都并不大,而中间通道数虽然多,但是 Depthwise 的卷积计算量也不大。Linear bottlenecks
MobileNet V1 里面使用 ReLU6,ReLU6 就是普通的 ReLU 但是限制最大输出值为 6,这是为了在移动端设备 float16/int8 的低精度的时候,也能有很好的数值分辨率,如果对 ReLU 的激活范围不加限制,输出范围为 0 到正无穷,如果激活值非常大,分布在一个很大的范围内,则低精度的 float16/int8 无法很好地精确描述如此大范围的数值,带来精度损失。
MobileNet V2 为了避免 Relu 对特征的破坏,在 residual block 的 Eltwise sum 之前的那个使维度缩减 1*1 Conv 不再采用 Relu。理由是:ReLU 变换后保留非0区域对应于一个线性变换,仅当输入低维时 ReLU 能保留所有完整信息。
网络结构
MobileNetV2 的网络结构相对于 V1 有了显著的改进,通过引入倒残差结构和线性瓶颈,进一步优化了模型的计算效率和性能。
MobileNet 应用项目
MobileNet 在多个领域都有广泛的应用,特别是在目标检测和实例分割任务中。以下是几个基于 MobileNet 的典型应用项目:
- MobileNet-SSD
- MobileNet-Mask RCNN
这些项目展示了 MobileNet 在实际应用中的灵活性和高效性,特别是在资源受限的移动端设备上。