利用Pytorch实现MobileNet网络

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

目录

1. MobileNet v1网络

2. MobileNet v2网络

2.1 Inverted Residual

2.2 Linear Bottlenecks

2.3 MobileNet v2模型的网络结构

3. MobileNet v3网络

3.1 注意力机制

3.2 重新设计耗时层结构

3.3 重新设计激活函数

3.4 MobileNet v3模型的网络结构

4. 利用Pytorch实现MobileNet

4.1 MobileNet v1、v2

4.2 MobileNet v3

5. 训练结果


1. MobileNet v1网络

在传统的卷积神经网络中,模型参数都比较大,而且对算力的要求很高,很难在移动设备和嵌入式设备上运行,MobileNet实现了将深度学习网络在移动设备和嵌入式设备上运行。

MobileNet网络是Google团队在2017年提出的,是专注于移动端或者嵌入式设备中的轻量级CNN网络。相比传统CNN网络,在准确率小幅度降低的前提下大大减少了模型的参数和运算量。该网络有以下两个亮点:

  • Depthwise Convolution(DW卷积,大大减少了参数数量和运算量)
  • 增加了控制卷积核个数的超参数\alpha和控制输入图像大小的超参数\beta

在传统的卷积操作中,卷积核的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,公式为

y=ReLU6\left ( x \right )=min\left ( max\left ( x,0 \right ) ,6\right )


2.2 Linear Bottlenecks

针对倒残差结构的最后一个卷积层,使用了线性的激活函数而非ReLU激活函数,原文作者进行了实验,内容是ReLU激活函数对低维特征信息会造成大量损失,对高维特征信息造成的损失很小,而倒残差结构是两边细中间粗的结构,输出是一个低维的特征向量,因此使用ReLU激活函数损失会比较大,所以使用线性的激活函数进行替代。

MobileNet v2的block块如下图所示:

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


2.3 MobileNet v2模型的网络结构

t为扩展因子,即将输入升为多少维;

c为输出特征矩阵深度;

n为bottleneck的重复次数;

s为第一层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,精简之前的模型如下:

精简之后的模型:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值