CNN-day10-经典神经网络MobileNet V1&V2&V3

day11-经典神经网络MobileNet V1&V2&V3

一、MobileNet V1

1 网络简介

传统的卷积神经网络参数量大,导致预测时算力大,对于手机、嵌入式等移动设备来讲部署慢且占用空间,无法满足需求。

2017年,Google提出的移动端高效率模型MobileNet:相比VGG16,分类准确率下降了0.9%,但是模型参数仅仅是VGG16的1/32到1/33。

2 网络创新

2.1 Depth wise Convolution深度可分离卷积

DW卷积核的通道等于1,每个卷积核分别与输入特征每个channel进行卷积计算,从而得到输出特征矩阵的每个channel,总结:输入特征的channel = 卷积核个数 = 输出特征channel。

计算量相比于标准卷积降低了1个数量级,但++没有有效利用不同通道在相同空间位置上的信息++,鉴于此,我们需要再加一个PW卷积(Pointwise Conv,点卷积,大小1×1)

2.2常规卷积与DW卷积对比

3 整体结构

4 压缩比较

模型参数量与计算量压缩比较:

通常DW卷积和PW卷积是放在一起的,这种卷积比普通卷积能节省大量的计算量,论文中有相关公式求解计算量:分子为深度可分卷积的计算量,分母为普通卷积的计算量(步距默认为1):DW负责特征提取,PW负责特征融合

5 MobileNet 大小控制

Width multiplier 系数α:按比例减少通道数 Resolution multiplier 系数ρ:按比例降低特征图的大小

5.1宽度系数

Width multiplier系数α取值范围为(0,1],计算公式公式:

D_K\\cdot D_K\\cdot\\alpha M\\cdot D_F\\cdot D_F+\\alpha M\\cdot\\alpha N\\cdot D_F\\cdot D_F

常取值为1,0.25,0.5,0.75,计算量与参数量大概按着\\alpha\^2比例下降。

5.2分辨率系数

Resolution multiplier系数ρ取值范围为(0,1],计算公式如下:

D_K\\cdot D_K\\cdot\\alpha M\\cdot\\rho D_F\\cdot\\rho D_F+\\alpha M\\cdot\\alpha N\\cdot\\rho D_F\\cdot\\rho D_F

网络输入分辨率通常为224,192,160,128,计算量与参数量大概按着\\rho\^2比例下降。

5.3实验性能对比

6 V1存在的问题

使用ReLU后会造成信息丢失,通道少的特征图尤其明显:

对输入图像先通过随机矩阵T将数据转换为n维,后对n维数据进行ReLU操作,最后使用T的逆矩阵转换回来。当n很小,会导致很多信息的丢失,维度越高还原的图片和原图越相似。ReLU能够保持输入流形的完整信息,但前提是输入流形位于输入空间的低维子空间中。

当输出维度m=2,3时,信息坍塌,当m>15时,信息基本被保留。

二、MobileNet V2

MobileNet V1网络的Depth wise部分的卷积核容易参数为0,导致浪费掉。

MobileNet V2网络是由谷歌团队在2018年提出的,它对于MobileNet V1而言,有着更高的准确率和更小的网络模型。

1 网络的创新

  • 整体采用MobileNet V1的通道可分离卷积来降低运量

  • 采用ResNet思想,引入了特征复用结构,缓解特征退化问题(低精度训练尤其有效)

  • 采用Inverted residual block结构,回避ReLU缺陷,通道数比较少的瓶颈层不采用非线性激活函数

1.1倒残差结构

先升维再降维,中间深两边浅

倒残差结构的过程是:

  1. 首先会通过一个1x1卷积层来进行升维处理,在卷积后会跟有BN和ReLU6激活函数

  2. 紧接着是一个3×3大小DW卷积,卷积后面依旧会跟有BN和ReLU6激活函数

  3. 最后一个卷积层是1x1卷积,起到降维作用,注意卷积后只跟了BN结构,并没有使用ReLU6激活函数。

在MobileNet V1中,DW卷积的个数局限于上一层的输出通道数,无法自由改变,但是加入PW卷积之后,也就是升维卷积之后,DW卷积的个数取决于PW卷积的输出通道数,而这个通道数是可以任意指定的,因此解除了3x3卷积核个数的限制。

1.2拓展因子t

瓶颈层到中间层通道数的提升比例

1.3ReLU6

在低维空间使用非线性函数(如ReLU)会损失一些信息,高维空间中会损失得相对少一些,引入Inverted Residuals升维之后再卷积,能够更好地保留特征。

V2卷积之后的激活函数是ReLU6,输入小于0时,结果为0,输入大于6时:结果为6。在0到6之间时:y=x。

y=ReLU6(x)=min(max(x,0),6)

1.4Shortcut

残差结构提出的Shortcut

shortcut将输入与输出直接进行相加,可以使得网络在较深的时候依旧可以进行训练。

这里只有stride=1且输入特征矩阵与输出特征矩阵shape相同时才有shortcut连接。

2 模型结构

第一层是标准卷积,后面是前述的瓶颈结构。其中t是扩展因子,c是输出通道数,n是重复次数,s代表步长。

三、MobileNet V3

1905.02244 Searching for MobileNetV3

在现在比较流行一些边缘终端上,以MobileNetV3为识别网络或者为骨干网络是比较常用的。在相同延时下,MobileNet V3准确率更高。

MobileNetV3提出了large和small两个版本(区别在于网络结构不同),paper中讲在MobileNetV3 Large在ImageNet分类任务上,较MobileNetV2,TOP1准确率提高了大约3.2%,时间减少了20%。与具有同等延迟的MobileNetV2模型相比,Mobile NetV3 Small的准确率高6.6%。

1 网络的创新

1.1更新Block

加入SE模块(注意力机制),更新了激活函数

1.1.1加入SE模块

在MobileNetV2中,采用了倒残差结构:

  1. 首先会通过一个1x1卷积层来进行升维处理,在卷积后会跟有BN和ReLU6激活函数

  2. 紧接着是一个3x3大小DW卷积,卷积后面依旧会跟有BN和ReLU6激活函数

  3. 最后一个卷积层是1x1卷积,起到降维作用,注意卷积后只跟了BN结构,并没有使用ReLU6激活函数。

当stride=1且输入特征矩阵=输入特征矩阵时,还有shortcut结构。

MobileNetV3中的某些层中(注意不是全部),在进行最后一个1x1卷积之前,要进行一个SE模块注意力机制,针对于得到的特征矩阵,对每一个channel进行池化处理,有多少channel,得到的池化后的一维向量就有多少个元素,接下来通过第一个全连接层,这个全连接层的节点个数=特征矩阵channel的1/4,接下来是第二个全连接层,它的节点个数=特征矩阵channel。所以SE模块可以理解为:对特征矩阵的每个channel分析出一个权重关系,它把比较重要的channel赋予更大的权重值,把不那么重要的channel赋予比较小的权重值。

1.1.2更新激活函数

激活函数用了NL进行表示,NL指的是非线性激活函数,在不同的层中,使用了不同的激活函数,所以只是用了NL进行表示具体哪一层用了什么激活函数,会在网络的结构中指出。

在很多网络中,使用的是swish x激活函数,swish x激活函数就是x乘以sigmoid激活函数,图像如下图右侧图的虚线所示,它的公式是:

swish x=x \\cdot \\sigma(x)

\\mathrm{sigmoid}={\\frac{1}{1+e\^{-x}}}

swish x激活函数确实可以提高准确性,但是计算以及求导过于复杂,同时对量化过程不太友好,量化过程是指在模型中,用更少的数据位宽来表示原始数据,达到节约资源,加快运算的目的,在MobileNetV3中,提出了一个h-swishx的激活函数

\\mathrm{h}-\\mathrm{sigmoid}={\\frac{\\mathrm{ReLU6}(x+3)}{6}}

h-sigmoid激活函数与sigmoid激活函数比较接近,但是公式要简单的多得多,那么在计算和求导时,就会快很多,所以在很多场合下,会用h-sigmoid激活函数替代sigmoid激活函数。

h-swishx激活函数

\\mathrm{h}-\\mathrm{swish}\[x\]={x}\\cdot{\\frac{\\mathrm{ReL}\\mathrm{U}6({x}+3)}{6}}

h-swishx激活函数其实是x乘以h-sigmoid激活函数,h-swishx激活函数与swish x激活函数非常相似,而且公式更为简单,没有幂运算,计算速度更快,同时对量化过程更加友好。

模型的前一半层使用常规ReLU(第一个conv层之后的除外)。h-swishx激活函数仅在更深层次上有用。此外,考虑到特征图在较浅的层中往往更大,因此计算其激活成本更高,所以作者选择在这些层上简单地使用ReLU(而非ReLU6),因为它比h-swish省时。

1.2使用NAS搜索参数

NAS是Neural Architecture Search,实现网络结构搜索,由资源受限的 NAS 执行整体模块结构搜索。过去神经网络搜索都是针对一个卷积模块内部的结构进行搜索,然后网络各层重复利用这个模块,这种方法潜在的问题是会失去模块与模块(层与层)之间的多样性,而层的多样性对于实现高精度和低延迟非常重要。

MobileNetV3将网络以倒残差模块为单位分解为独立的块,然后为每一个块在宏观上搜索网络结构,这样将会允许不同的块使用不同的宏观结构。例如,在网络的早期阶段(靠近输入的几层),通常会处理大量的数据,这些层关于延迟的影响要比远离输入的层大得多,所以对比后面的层应该有不同的结构。

在执行 NAS 网络搜索时,MobileNet v3 采用的是强化学习求解多目标优化问题(accuracy 和 latency)。

使用资源受限的 NAS 执行整体模块结构搜索后,MobileNet v3 继续使用 NetAdapt 算法对各层的结构进行精调。这个过程主要是在 NAS 搜索得到的网络基础上,对网络的某一层生成一些新的待选结构,先测试新的结构是否能降低延迟,在此基础上对能降低延迟的结构再测试其对应的模型准确率,最后选择的是最优的结构。总体来说,NetAdapt 实现了两个结果:

  1. 降低了倒残差模块 Expansion Layer 的大小;

  2. 降低了倒残差模块 Projection Layer 的大小,让模型各层 Projection Layer 大小相同,保证各层都使用残差连接。

使用NAS搜索参数原理部分转载自:https://zhuanlan.zhihu.com/p/450940875

1.3重新设计耗时层

1.3.1减少C1层卷积核个数

MobileNetV3将第一层卷积的卷积核个数由32个减少到16个,准确率是一样的,但是会节省2ms的时间。

1.3.2精简Last Stage

提出Efficient Last Stage,在进行第一个卷积之后,直接就进行了池化,然后跟着两个卷积层进行输出,相对于原来的结构,节省了7ms的时间,占据了整个推理过程的11%的时间。

2 网络问题

更关注的是网络在Android设备上的表现,事实也的确如此,作者主要针对Google Pixel硬件对网络做了参数优化。可能会出现V3准确率不如V2的情况,它无法再其他一些设备上达到最佳效果。

3 网络结构

相关推荐
xqqxqxxq几秒前
技术笔记:上下文工程(Context Engineering)心得总结(李博杰《深入理解 AI Agent》2.1,2.2观后总结)
人工智能·笔记
成都被卷死的程序员1 分钟前
生活与工作AI高效使用指南
人工智能·生活
万岳科技系统开发4 分钟前
智慧医院小程序开发推动医疗服务流程全面线上化
大数据·开发语言·人工智能
用户8181870627469 分钟前
第5章 核心对象与配置系统
人工智能
Litluecat13 分钟前
2026年7月24日科技热点新闻
人工智能·科技·新闻·每日·速览
用户81818706274617 分钟前
第6章 thinkingLevel 思维层级体系
人工智能
熙丫 1338148238625 分钟前
人工智能训练工程师考试报名2026:报考条件、报名入口及注意事项
人工智能
凡情30 分钟前
dify 图片提取文字
人工智能
恒知学术40 分钟前
SCI 文献怎么检索?英文关键词、DOI、被引量和开放获取线索整理
人工智能·深度学习·sci·文献检索·谷歌学术·doi
greatonce44 分钟前
巨益及核全球电商业财一体化方案 | 行业能力概览
人工智能