清晰明了的MobileNet

  • 传统的卷积神经网络,内存需求大,运算量大,导致无法在移动设备及嵌入式设备上运行,之前的VGG-16模型的权重大概有490M,ResNet-152模型的权重大概有644M,这么大的模型参数基本上是不可能在移动设备和嵌入式设备上进行运行的,而做深度学习最终是为了服务社会而不是简单的在实验室玩,MobileNet网络就实现了让深度学习网络在移动设备中进行运行。
  • MobileNet网络是有google团队在2017年提出的,是专注于移动端及嵌入式设备中的轻量级网络,相比传统卷积神经网络,在准确率小幅降低的前提下大大减少模型参数与运算量,如MobileNet-v1网络,相对于VGG-16在ImageNet数据集上,分类准确率减少了0.9%,但模型参数只有VGG的1/32。
  • 网络的亮点:1>本文中最大的亮点:Depthwise Convolution(DW卷积能大大减少运算量和参数数量)
    2>增加了两个超参数α(控制卷积层卷积核个数的超参数),β(控制输入图像大小的超参数)

Depthwise Convolution(DW卷积)

左图就是传统卷积,总结为两句话:

  • 任何一个卷积核的深度=输入特征矩阵的深度
  • 输出特征矩阵深度=卷积核个数

右图是DW卷积,每个卷积核的深度都是1,其只负责与输入特征矩阵一个通道进行卷积运算,在得到输出特征的一个通道,既然每个卷积核负责一个channel,那么所采用的卷积核的个数就应该与输入特征矩阵的深度相同,这样就能确保每一个卷积核负责一个channel,且输出特征矩阵的深度=输入特征矩阵的深度。因此通过DW卷积之后,特征矩阵的深度是不会发生变化的。
在这里插入图片描述

Depthwise Separable Conv(深度可分卷积)

在这里插入图片描述
该卷积操作由两部分组成:DW卷积+PW卷积(Pointwise Conv),PW卷积就是我们普通的卷积,只不过卷积核的大小是等于1的,通常DW和PW是放在一起使用的,每个卷积核的深度等于输入特征矩阵的深度,输出特征矩阵的深度等于卷积核的个数。使用深度可分卷积相比普通的卷积而言到底能减少多少参数呢?下面做一个对比:
在这里插入图片描述
上半部分是普通的卷积操作,下图是DW+PW操作(MobileNet-v1网络结构),以得到同样深度的特征矩阵为例,DF为输入特征矩阵的高和宽,DK代表卷积核的大小,M代表输入特征矩阵的深度,N代表输出特征矩阵的深度即卷积核的个数,由于DK默认在MobileNet中默认是等于3的,根据计算公式可以得出,理论上普通卷积的计算量是DW+PW卷积的8~9倍。如图是MobileNet-v1网络的模型结构,conv/s2就代表普通卷积且步距为2,33332的第三个3表示输入的是三通道图像,32表示32个卷积核,conv DW代表DW卷积操作,由于DW卷积核的深度为1,所以忽略不写。
在这里插入图片描述
Table8中对比了MobileNet、GoogleNet和VGG网络在ImageNet上的准确率、运算量及模型参数。相比于VGG,MobileNet网络的准确率只减小了0.9,但模型参数只有VGG的1/32。
Table6中不同的α时对应的效果:α用来控制卷积核的个数,当α=1.0时,准确率为70.6%,当α=0.75时,卷积核个数缩减为原来的0.75倍时降为68.4%,后面对应了计算量及模型参数,当α=0.5时,卷积核个数缩减为原来的一半,其准确率等如图所示。所以可以根据项目需求,选择合适的α值。
Table7反映了不同的输入图像尺寸对于网络的分类准确率和模型计算量的对比,β为分辨率超参数,对于224
224的RGB图像,准确率为70.6%,计算量为569Mollion,以此类推。同样的通过适当的减小输入图像的大小,在保证输入准确率降低很小的前提下,大幅减少运算量。

在MobileNet-v1网络的使用过程中,DW在训练完之后,部分卷积核会废掉,在观察DW的参数时发现大部分的参数都是等于0的,也就是DW卷积核是没有启到作用的,针对这个问题,在MobileNet-v2中会有一定的改善。

  • MobileNet-v2网络是由google团队在2018年提出的,相比MobileNet-v1网络只隔了一年,准确率更高,模型更小。
  • 该网络的两个亮点:Inverted Residuals(倒残差结构)和Linear Bottlenecks

下面先回顾一下ResNet网络时所提供的一个残差结构:首先对于输入特征矩阵采用11的卷积核进行压缩,减小channel,再用33的卷积核进行卷积处理,最后再用11的卷积核来扩充channel,这样就形成了两头大中间小的瓶颈结构,另外其所采用的激活函数为ReLU激活函数。
在MobileNet-v2版本中所采用的叫做倒残差结构: 先用1 * 1的卷积核进行升维,将channel变的更深,在通过3
3的DW卷积操作进行卷积,最后再通过1*1的卷积进行降维,其激活函数为ReLU-6激活函数。
在这里插入图片描述

在这里插入图片描述
针对到残差结构的最后一个卷积层,其使用了线性的激活函数而不是ReLU激活函数, 为什么要这样做呢?
在原论文中,作者做了这样一个实验:输入一个二维矩阵,分别采用不同的维度矩阵T对其进行变换,变换到更高的维度上,再使用ReLU得到输出,之后再使用T矩阵的逆矩阵,将输出矩阵还原回二维矩阵,当T的维度为2和3时,图中最后的输出反映丢失了很多信息,但随着T的维度不断的加深,丢失的信息越来越少,即ReLU激活函数对低维特征信息会造成比较大的损失,对高维特征造成的损失很小,而倒残差结构中两边细中间粗,输出为低维特征向量,所以需要使用线性激活函数替代ReLU激活函数避免信息损失
MobileNet-v2
下图左边时MobileNet-v2原论文中所给的倒残差结构的结构图:也就同时对应着表格中每一层的信息,t代表扩展因子。有一点需要强调:MobileNet-v2网络中并不是每个倒残差结构都有捷径分支,当stride=1时且输入特征矩阵与输出特征矩阵shape相同时才有shortcut连接,不满足则一定没有
在这里插入图片描述
注意:第一个bottleneck中t=1,也就是第一层是没有对我们输入特征矩阵的深度进行调整的,也要可不要。
在这里插入图片描述

性能对比

在这里插入图片描述
针对分类任务而言,MobileNet-v2的准确率是72%,而MobileNet-v1是70.6%,很明显准确率上升了,且模型参数,运算量,运算时间都明显比MobileNet-v1更加的优秀,在特定的手机上测试,预测一张图片仅需75ms,基本上可以说是在移动设备上的实时效果,当α=1.4时,准确率已经达到了74.7%。
针对目标检测而言,将MobileNet-v2与SSD联合使用,即将MobileNet-v2当前置网络,将SSD的卷积层也换成深度可分卷积(dw+pw),相比SSD300、SSD512、YOLOv2等其准确率为22.1,其执行时间,运算量等都是最优的。

猜你喜欢

转载自blog.csdn.net/qq_42308217/article/details/110585357