当前位置: 首页 > article >正文

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-swish[x]的激活函数

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

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

h-swish[x]激活函数

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

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

模型的前一半层使用常规ReLU(第一个conv层之后的除外)。h-swish[x]激活函数仅在更深层次上有用。此外,考虑到特征图在较浅的层中往往更大,因此计算其激活成本更高,所以作者选择在这些层上简单地使用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 网络结构


http://www.kler.cn/a/537697.html

相关文章:

  • R语言 文本分析 天龙八部
  • 青少年编程与数学 02-008 Pyhon语言编程基础 22课题、类的定义和使用
  • Deepseek52条喂饭指令
  • 高速网络的未来:零拷贝Zero-Copy架构
  • P3654 First Step (ファーストステップ)(贪心算法)
  • 2、k8s的cni网络插件和基本操作命令
  • Spring 中的 事务 隔离级别以及传播行为
  • kafka 3.5.0 raft协议安装
  • PHP在线客服系统
  • 【WebLogic】Oracle发布WebLogic 14c最新版本-14.1.2.0
  • 「JVS更新日志」生产计划排程系统APS已上线!以及智能BI、低代码、规则引擎2.6更新说明
  • anaconda中可以import cv2,但是notebook中cv2 module not found
  • 深入理解 C++17 std::is_swappable
  • 使用 Axios ——个人信息修改与提示框实现
  • 参数映射服务完整解决方案
  • Could not create task ‘:mainActivity:minifyReleaseWithR8‘.
  • 【Flink快速入门-8.Flink Flink 架构介绍】
  • 利用Termux在安卓手机中安装 PostgreSQL
  • CPP集群聊天服务器开发实践(一):用户注册与登录
  • Chrome谷歌多开教程:实用方法与工具
  • 使用Python和`moviepy`库从输入的图片、动图和音频生成幻灯片式视频的示例代码
  • 盘姬工具箱:完全免费的电脑工具箱
  • DeepSeek从入门到精通:全面掌握AI大模型的核心能力
  • 【Outlook】如何将特定邮件显示在Outlook的重点收件箱中
  • 机器学习数学基础:19.线性相关与线性无关
  • TaskBuilder项目实战:创建项目