目录
1. MobileNet v1网络
在传统的卷积神经网络中,模型参数都比较大,而且对算力的要求很高,很难在移动设备和嵌入式设备上运行,MobileNet实现了将深度学习网络在移动设备和嵌入式设备上运行。
MobileNet网络是Google团队在2017年提出的,是专注于移动端或者嵌入式设备中的轻量级CNN网络。相比传统CNN网络,在准确率小幅度降低的前提下大大减少了模型的参数和运算量。该网络有以下两个亮点:
- Depthwise Convolution(DW卷积,大大减少了参数数量和运算量)
- 增加了控制卷积核个数的超参数
和控制输入图像大小的超参数
在传统的卷积操作中,卷积核的channel数等于输入特征矩阵的channel数,输出特征矩阵的channel数等于所使用卷积核的个数:

而对于DW卷积,卷积核的channel数为1,输入特征矩阵的channel数等于卷积核个数等于输出特征矩阵channel数:

Depthwise Separable Conv由DW卷积和PW卷积组成,PW卷积和传统卷积操作相似,只是卷积核大小均为1×1,理论上传统卷积的计算量是Depthwise Separable Conv操作的8到9倍。
2. MobileNet v2网络
在MobileNet的使用当中,DW卷积的卷积核参数大部分为0,这部分的卷积核没有起到作用,这个问题在MobileNet v2中有所改善,该网络有以下两个亮点:
- Inverted Residual(倒残差结构)
- Linear Bottlenecks
2.1 Inverted Residual
传统的残差结构是先用1×1的卷积核进行降维,然后通过3×3的卷积核进行卷积处理,最后采用1×1的卷积核进行升维,形成了一个两头大中间小的瓶颈结构;而倒残差结构首先利用1×1的卷积核进行升维,然后通过3×3的卷积核进行DW卷积,最后采用1×1的卷积核进行降维处理,和普通的残差结构正好相反。
在普通的残差结构中采用的是ReLU激活函数,而在倒残差结构中采用的则是ReLU6激活函数:
- ReLU激活函数:输入值小于0时默认置0,输入值大于0则不进行操作
- ReLU6激活函数:输入值小于0默认置0,输入值在0~6之间不进行操作,而输入值大于6时则置6,公式为
2.2 Linear Bottlenecks
针对倒残差结构的最后一个卷积层,使用了线性的激活函数而非ReLU激活函数,原文作者进行了实验,内容是ReLU激活函数对低维特征信息会造成大量损失,对高维特征信息造成的损失很小,而倒残差结构是两边细中间粗的结构,输出是一个低维的特征向量,因此使用ReLU激活函数损失会比较大,所以使用线性的激活函数进行替代。
MobileNet v2的block块如下图所示:

要注意只有stride=1且输入特征矩阵与输出特征矩阵的shape相同时才有shortcut连接(即左面那种情况)。
2.3 MobileNet v2模型的网络结构

为扩展因子,即将输入升为多少维;
为输出特征矩阵深度;
为bottleneck的重复次数;
为第一层bottleneck的步长,其余层均为1。
3. MobileNet v3网络
MobileNet v3有以下三个改进点:
- 更新了Block(bneck,在倒残差结构上进行了简单的改动)
- 使用了NAS(Neural Architecture Search)搜索参数的技术
- 重新设计了一些耗时层的结构
对于Block的更新主要有亮点:加入了SE模块,更新了激活函数。结构图如下:

3.1 注意力机制
针对得到的输出矩阵的每个channel进行池化处理,得到一维向量的元素个数等于channel数;经过第一个全连接层,节点个数是channel个数的1/4,激活函数是ReLU;经过第二个全连接层,节点个数等于channel个数,激活函数是hard-sigmoid;最后输出的向量是对矩阵的每个channel分析出了权重关系,重要的channel会分配一个比较大的权重,原理图如下:

3.2 重新设计耗时层结构
减少第一个卷积层的卷积核个数,从32减到16,并且不会影响准确率;精简Last Stage,精简之前的模型如下:

精简之后的模型:

文章详细介绍了MobileNet系列的三个版本——MobileNetv1、v2和v3的设计原理,包括DW卷积、InvertedResidual结构、LinearBottlenecks、注意力机制、激活函数的优化以及如何使用Pytorch实现这些网络。MobileNet系列旨在提供轻量级的深度学习模型,适合在移动设备和嵌入式设备上运行。
最低0.47元/天 解锁文章

3597

被折叠的 条评论
为什么被折叠?



