27_MobileNetV3网络详解
https://www.bilibili.com/video/BV1GK4y1p7uE/?spm_id_from=333.999.0.0&vd_source=7dace3632125a1ef7fd32c285eb2fbac
V1:02_Google轻量化网络MobileNet v1-CSDN博客
V2:https://blog.csdn.net/qq_51605551/article/details/139333500?spm=1001.2014.3001.5501
1.1 简介
MobileNetV3是Google在2019年推出的一个高效、轻量级的卷积神经网络模型,专为移动设备和嵌入式系统设计。它是MobileNet系列的第三代产品,旨在通过减少计算量和内存占用,同时保持高性能,来优化在资源受限环境下的图像分类、目标检测和语义分割等计算机视觉任务。
关键特点与改进
-
NAS(Neural Architecture Search,神经架构搜索): MobileNetV3的设计引入了AutoML技术,特别是神经架构搜索(NAS),来自动发现最优的网络架构。这使得模型能够针对特定的硬件和目标应用场景进行优化,进一步提高效率。
-
Squeeze-and-Excitation(SE)模块: 引入了从 SENet 中借鉴的 Squeeze-and-Excitation (SE) 模块,这是一种通道注意力机制,用于调整网络中不同特征通道的重要性,从而提升模型的表达能力并减少计算成本。
-
Hard Swish激活函数: MobileNetV3采用了新的激活函数Hard Swish,它是Swish函数的一种变体,计算更加高效。Hard Swish函数在低输入值时接近线性,高输入值时接近ReLU函数,能够在保持模型性能的同时降低计算复杂度。
-
Efficient Linear Bottleneck: 在MobileNetV2的基础上,V3对线性瓶颈进行了改进,使用了带SE模块的线性瓶颈,并且根据NAS的指导调整了瓶颈结构,使得模型在保持高效的同时提高了表示能力。
-
轻量级深度可分离卷积: 继续使用了MobileNetV1引入的深度可分离卷积(Depthwise Separable Convolution),这种卷积方式能显著减少计算量和参数数量,非常适合移动设备。
-
多尺度特征图: 在网络的末端,MobileNetV3设计了多尺度的特征图输出,这对于检测不同大小的目标非常有用,提升了模型在目标检测和语义分割等任务上的表现。
-
性能提升: 相比于MobileNetV2,MobileNetV3在多个基准测试上(如ImageNet分类任务)实现了更高的精度,同时保持或减少了推理时间,特别是在COCO目标检测数据集上,MobileNetV3相较于V2在延时减少25%的情况下,保持了相似的精度水平。
应用场景
MobileNetV3因其高效的特性,非常适合部署在移动设备、IoT设备等资源有限的平台上,广泛应用于实时图像识别、视频分析、增强现实(AR)、移动应用中的图像处理等功能。
结论
MobileNetV3是轻量化神经网络设计的一个重要里程碑,它展示了如何通过先进的自动化设计方法(如NAS)结合精心设计的网络结构和激活函数,来达到性能与效率的平衡。这一模型的提出,不仅推动了计算机视觉领域在移动设备上的应用,也为后续的轻量级模型设计提供了宝贵的经验和技术基础。
1.2 V3网络结构的更新
V2:倒残差结构(先升维后降维),然后1x1卷积后面跟着BN和RELU6激活函数。然后3x3DW卷积,后跟BN和RELU6。/然后1X1卷积降维,注意,1X1降维后只有BN没有RELU6。
V3:加了一个SE注意力机制。先全局平均池化变为1x1xc的向量,然后通过FC+RELU缩短通道数,接着FC+Hard Swish还原通道数,然后对原来的特征矩阵进行逐元素相乘。
NL指非线性激活函数。
SE注意力
SE注意力的工作流程:
(H-sig)即hard sigmoid激活函数。
重新设计耗时层结构
第1点节省了2ms,第2点的优化节省了7ms(这个7ms占据了整个推理过程11%的时间).
1.4 重新设计激活函数
Swish激活函数
Swish激活函数的主要缺点如下:
-
计算复杂度较高:Swish函数的表达式为 f(x)=x⋅σ(βx),其中 𝜎σ 表示Sigmoid函数。由于Sigmoid函数涉及指数运算,这使得Swish在计算上比ReLU等简单函数更为复杂,可能导致在大规模模型或高通量应用场景中计算速度较慢,资源消耗大。
-
训练时的内存占用:Swish函数在前向传播和反向传播过程中都需要保存中间变量(即Sigmoid函数的输出),这会增加模型训练时的内存需求。
-
硬件兼容性和效率问题:在某些硬件平台上,特别是针对移动和嵌入式设备的优化库中,Swish函数的原生支持可能不如ReLU等经典激活函数广泛,这可能影响到模型的部署效率。
-
训练稳定性:虽然Swish函数的平滑性有助于缓解梯度消失问题,但其复杂的非线性特性也可能使得网络训练过程中的收敛性不如ReLU那样稳定,特别是在某些特定的网络架构或超参数设置下。
由于这些原因,尽管Swish在某些任务上可以提供性能优势,但在实际应用中,研究者有时会倾向于使用其简化版本,如Hard Swish,以在保持性能提升的同时,解决计算效率和资源消耗的问题。
Hard Sigmoid激活函数
Hard Swish激活函数
Hard Swish激活函数就是x乘以hard sigmoid。
右图可以看到,hard sigmoid 和sigmoid图像是比较像的,swish和hard swish也是。
1.5 V3 Large和Small网络结构
operator意思是操作,out代表输出的特征矩阵的channel,NL代表非线性激活函数,HS是hard swish,s代表步距stride,exp size即expand size代表1x1卷积升高的维数。SE代表是否使用SE注意力机制,打勾的表示使用。下方的NBN代表不使用(non)batch Normalization。
注意,第二行,输入16扩充后还是16说明是没有1x1卷积层的。
1.6 模型性能
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)