神经网络学习笔记12——高效卷积神经网络架构MobileNet
系列文章目录
文章目录
- 系列文章目录
- 前言
- 模型的发展
- 更大更强
- 更小更快
- 高效卷积神经网络架构
- 模型名称
- 参数量
- 乘加运算量
- 评价指标
- 高效卷积神经网络的比较
- 一、MobileNet
- 1、Mobilenet v1
- 1.标准卷积Convolution
- 2.深度可分离卷积Depthwise Separable Convolution
- 3.层结构与模型结构
- 4.宽度因子α\alphaα(Width multiplier )
- 5.分辨率因子ρ\rhoρ(resolution multiplier )
- 2、Mobilenet v2
- 1.残差结构Residual Block
- 2.倒置残差结构Inverted Residuals Block
- 3.Linear、ReLU和ReLU6激活函数
- 4.线性瓶颈Linear Bottlenecks
- 5.层结构与模型结构
- 3、Mobilenet v3
- 1.激活函数优化
- 2.标准SE模块
- 3.MobieNetV3的SE模块
- 4.精简模型结构
- 5.层结构与模型结构
- 4、Mobilenet v4
- 1.通用倒置瓶颈Universal Inverted Bottleneck
- 2. 移动优化注意力机制Mobile MQA
- 总结
前言
模型的发展
从2012年发展至今,神经网络模型经历了从卷积神经网络CNN到注意力机制Transformer等范式性的演进。然而,贯穿始终的核心研究驱动力始终围绕着两个相辅相成又看似矛盾的方向:
更大更强
追求模型的极致能力和认知边界突破。
能够学习更多的信息,捕捉更细的特征,提升泛化能力,解决开放域问题等。
目的是为了能处理更复杂的任务,比如通用人工智能、自然语言理解与生成、科学计算模拟等。主要通过增大模型参数规模、增加训练数据量、构建复杂的架构以及优化训练技术来实现这一目标。
更小更快
追求模型的实用效率和普适部署。
能够为了在能维持一定精度的前提下减少参数量和运算量。
目的是满足边缘/终端设备的低功耗、实时性、低成本、隐私保护要求,降低云端推理成本、提高响应速度,主要通过设计更高效的模型架构,进行裁剪、量化、蒸馏对模型进行压缩,优化特定算子和结合AI硬件加速来实现这一目标。
高效卷积神经网络架构
SqueezeNet-skwiːz斯奎兹
MobileNet-məʊbaɪl莫拜尔
ShuffleNet-ˈʃʌfl沙弗
EfficientNet-ɪˈfɪʃənt伊菲申特
GhostNet-ɡəʊst戈斯特
模型名称
表示轻量化神经网络模型的名称,名称中包含着几个重要信息:
1、不同的架构家族 (如 squeezenet, Mobilenet, ShuffleNet, EfficientNet, GhostNet, DeiT, ConvVT)。
2、不同的版本/变体标识 (如V1, V2, V3)。
3、不同的规模/宽度乘子 (如 0.5, 0.75, 1.0, 1.5x, 2x, -Small, -Large)。
4、其他配置参数 (如 160, 224 通常指输入图像的尺寸, g=3/8 对 ShuffleNet 指分组卷积的分组数,还有像b0/b1/b2/b3、S/M/L、A1/A2/A3、lite0/lite1/lite2/lite3/lite4等模型设置,特指不同尺寸或者不同复杂度)。
参数量
参数量是指模型中需要学习的参数总数。
1、参数量决定模型的内存占用(如显存和内存)和数据加载和传输时间,参数需从内存频繁读取到计算单元,高参数量可能导致内存带宽瓶颈,拖慢推理速度(尤其在移动设备)。
2、参数量与模型的复杂度、学习能力和表达能力有紧密关系(通常参数越多,模型越复杂,理论上拟合能力越强)。
3、参数量也是衡量模型“轻量化”程度的最关键指标之一,轻量化模型的核心目标就是在保持一定性能的前提下,尽可能减少参数量。
乘加运算量
乘加运算量是指模型进行一次前向推理(处理一张图片)所需完成的 乘法累加操作的总次数。一次乘加运算通常指 a * b + c 这样的计算。
1、乘加运算量是衡量模型计算复杂度和推断速度(尤其是在硬件上)的最常用指标之一,与模型的耗电量(对移动设备尤为重要)强相关。
2、乘加运算量是衡量模型“轻量化”程度的核心指标,直接决定计算时间(如GPU/CPU的浮点运算耗时),需要在满足性能要求下降低此值。
3、神经网络中的主要计算(如卷积、全连接层)绝大部分都是由大量的乘加操作构成的,统计乘加次数能有效反映整体的计算负担。
评价指标
ImageNet fp32 top1 accuracy评价指标是衡量不同轻量化模型分类准确性的核心依据。它直观地告诉我们在识别 1000 类物体时,模型猜中“第一名”的概率是多少。用户可以通过这个值直接比较不同模型在相同的权威数据集和评估标准下的表现优劣。数值越高越好。
1、fp32是模型在运行/评估时使用的数值精度,代表 单精度浮点数(Single-precision floating-point format),是一种在计算机中表示实数的格式,使用 32 位(4 字节)存储一个数字。有些轻量化模型在部署时可能会使用更丰富的精度选择,比如fp16、int8、int4、int2以及混合精度,通过对模型量化以加速和减小模型体积,但在学术论文和基准对比中,通常报告 fp32 精度以保证公平比较。
2、ImageNet数据集是一个巨大的、公开的图像数据集,具体是指 ILSVRC 2012 数据集(ImageNet Large Scale Visual Recognition Challenge 2012)。它包含超过 140万 张训练图像,5万 张验证图像,10万 张测试图像,涵盖了 1000 个不同的物体类别(如“猫”、“狗”、“汽车”、“杯子”等)。
3、top1 accuracy是评估图像分类任务最直接、最重要的性能指标。在推理过程中对验证/测试集中的每一张图片都会输出一个包含 1000 个类别的概率分布也就是置信度。而top1 accuracy指的是模型预测的概率最高的那个类别恰好等于图片真实标签的比例。有时还会使用top5 accuracy,它指的是图片的真实标签出现在模型预测的前5个最高概率类别之中的比例。
高效卷积神经网络的比较
一、MobileNet
1、Mobilenet v1
Mobilenet v1论文地址
1.标准卷积Convolution
Fstd=DK⋅DK⋅M⋅N⋅DF⋅DF=DK2⋅M⋅N⋅DF2F_{std} = D_K \cdot D_K \cdot M \cdot N \cdot D_F \cdot D_F= D_K^2 \cdot M \cdot N \cdot D_F^2Fstd=DK⋅DK⋅M⋅N⋅DF⋅DF=DK2⋅M⋅N⋅DF2
DKD_KDK: 卷积核的空间尺寸(高度/宽度)。通常表示为 K或 Kernel Size。例如,一个 3x3的卷积核,DKD_KDK = 3。
M: 输入特征图的通道数(Input Channels / Depth)。
N: 输出特征图的通道数(Output Channels / Depth)。
DFD_FDF: 输出特征图的空间尺寸(高度/宽度)。通常取决于输入尺寸、卷积核大小、步长(Stride)和填充(Padding)。
为了计算输出特征图 (DF⋅DFD_F \cdot D_FDF⋅DF) 上某个位置的某一个输出通道 (N) 的值,需要将卷积核 (DK⋅DKD_K \cdot D_KDK⋅DK) 在输入特征图上对应的局部区域 (DK⋅DKD_K \cdot D_KDK⋅DK) 滑动覆盖。
卷积核有M个通道(与输入通道数匹配),对于输入特征图的每一个输入通道 (M),都需要用该通道对应的DK⋅DKD_K \cdot D_KDK⋅DK卷积核与输入特征图上对应位置的DK⋅DKD_K \cdot D_KDK⋅DK区域做逐元素相乘。
然后将 M个通道上所有的乘积结果相加,得到该输出像素上该输出通道的值。所以计算一个输出像素的一个输出通道需要DK⋅DK⋅MD_K \cdot D_K \cdot MDK⋅DK⋅M次乘法操作。
扩展到所有输出像素和所有输出通道:
输出特征图有DF⋅DFD_F \cdot D_FDF⋅DF个空间位置(像素)。
输出特征图有 N个通道。
因此,总乘法操作数FstdF_{std}Fstd = (单个像素单个通道的计算量) * (像素总数) * (输出通道数)。
2.深度可分离卷积Depthwise Separable Convolution
Fdws=DK⋅DK⋅M⋅DF⋅DF+M⋅N⋅DF⋅DF=DK2⋅M⋅DF2+M⋅N⋅DF2F_{dws} = D_K \cdot D_K \cdot M \cdot D_F \cdot D_F + M \cdot N \cdot D_F \cdot D_F = D_K^2 \cdot M \cdot D_F^2 + M \cdot N \cdot D_F^2Fdws=DK⋅DK⋅M⋅DF⋅DF+M⋅N⋅DF⋅DF=DK2⋅M⋅DF2+M⋅N⋅DF2
深度卷积:
对每个输入通道独立应用一个空间卷积。卷积核尺寸是DK⋅DKD_K \cdot D_KDK⋅DK。关键点在于输入通道数M也是DW输出通道数(深度卷积的输出通道数等于输入通道数)。每个输出通道只由对应的一个输入通道计算得来,通道之间没有信息混合。
计算单个输出像素的单个(唯一与之对应的)输出通道(深度卷积的输出通道数 = M),只需要DK⋅DKD_K \cdot D_KDK⋅DK次乘法(作用于单个输入通道上),输出特征图(深度卷积的输出)有DF⋅DFD_F \cdot D_FDF⋅DF个像素和M个通道。
深度卷积总乘法操作数 = (单个像素单个通道的计算量) * (像素总数) * (输出通道数)。
逐点卷积:
将深度卷积输出的 M个通道通过 1 × 1 卷积组合起来,转换成所需的 N个输出通道,实际就是一个MK=1M_K=1MK=1的标准卷积。
计算单个输出像素的单个输出通道需要 1⋅1⋅M1 \cdot 1 \cdot M1⋅1⋅M次乘法(1 × 1 卷积核作用于所有 M个输入通道上,然后相加)。输出特征图(最终输出)有DF⋅DFD_F \cdot D_FDF⋅DF个像素和 N个通道。
逐点卷积总乘法操作数 = (单个像素单个通道的计算量) * (像素总数) * (输出通道数)
深度可分离卷积总计算量:
将上述两步的计算量相加:FdwsF_{dws}Fdws = (深度卷积计算量) + (逐点卷积计算量)
DK⋅DK⋅M⋅DF⋅DF+M⋅N⋅DF⋅DFDK⋅DK⋅M⋅N⋅DF⋅DF\frac{D_{K} \cdot D_{K} \cdot M \cdot D_{F} \cdot D_{F} + M \cdot N \cdot D_{F} \cdot D_{F}}{D_{K} \cdot D_{K} \cdot M \cdot N \cdot D_{F} \cdot D_{F}}DK⋅DK⋅M⋅N⋅DF⋅DFDK⋅DK⋅M⋅DF⋅DF+M⋅N⋅DF⋅DF
=DK2⋅M⋅DF2+M⋅N⋅DF2DK2⋅M⋅N⋅DF2=(DK2+N)⋅M⋅DF2DK2⋅N⋅M⋅DF2= \frac{D_K^2 \cdot M \cdot D_F^2 + M \cdot N \cdot D_F^2}{D_K^2 \cdot M \cdot N \cdot D_F^2}= \frac{(D_K^2 + N)\cdot M \cdot D_F^2}{D_K^2 \cdot N \cdot M \cdot D_F^2}=DK2⋅M⋅N⋅DF2DK2⋅M⋅DF2+M⋅N⋅DF2=DK2⋅N⋅M⋅DF2(DK2+N)⋅M⋅DF2
=DK2+NDK2⋅N=DK2DK2⋅N+NDK2⋅N=1N+1DK2= \frac{D_K^2 + N}{D_K^2 \cdot N} = \frac{D_K^2}{D_K^2 \cdot N} + \frac{N}{D_K^2 \cdot N}= \frac{1}{N} + \frac{1}{D_{K}^{2}}=DK2⋅NDK2+N=DK2⋅NDK2+DK2⋅NN=N1+DK21
如果使用的卷积核都是3×3卷积核,那么深度可分离卷积的计算量是标准卷积的(1N+19)(\frac{1}{N} + \frac{1}{9})(N1+91)倍,也就是说使用深度可分离卷积能减少8到9倍的计算量,代价是损失一点准确度。
3.层结构与模型结构
上图左边的是标准卷积层:
使用的是3×3卷积Conv,加上批量归一化Batch Normalization,加上激活函数ReLU
上图右边的是深度可分离卷积层:
使用的是3×3深度卷积DW Conv,加上批量归一化Batch Normalization,加上激活函数ReLU。接着是1×1逐点卷积PW Conv(实际上就是标准的1×1卷积),同样加上批量归一化Batch Normalization和激活函数ReLU。
input size:表示输入数据或者说是上一层的输出数据。
filter shape:表示卷积核形状,也就是卷积核的大小与数量,比如标准卷积的是H×W×M×N,深度卷积的是H×W×M dw。
Conv:表示标准卷积,如果filter shape中的是3×3×M×N就是3×3标准卷积,1×1×M×N就是1×1标准卷积也就是逐点卷积。
Conv dw:表示深度卷积,对应3×3×M dw。
stride:s1表示步长为1,特征图宽高不变。s2表示步长为2,特征图宽高减半。
avgpool:空间维度压缩,生成类别概率向量。
FC:表示全连接层,该层的每个神经元与前一层的所有神经元相连,实现全局特征的整合与映射,常作为分类器或回归器使用。
softmax:输出预测结果。
总的来说使用了1个标准卷积和13个深度可分离卷积进行串行学习。
4.宽度因子α\alphaα(Width multiplier )
在Mobilenet v1中除了使用深度可分离卷积来压缩模型大小外,还参考SqueezeNet模型引进了控制模型大小的超参数:宽度因子α\alphaα(Width multiplier ),用于控制输入和输出的通道数,即输入通道从M MM变为αM\alpha MαM,输出通道从N变为αN\alpha NαN。其中可设置α∈(0,1]\alpha∈(0,1]α∈(0,1],通常取1 , 0.75 , 0.5 和 0.25,将计算量和参数降低了约α2\alpha^2α2倍,可很方便的控制模型大小。
DK⋅DK⋅αM⋅DF⋅DF+αM⋅αN⋅DF⋅DFDK⋅DK⋅M⋅N⋅DF⋅DF=αN+α2DK2\frac{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}}{D_{K} \cdot D_{K} \cdot M \cdot N \cdot D_{F} \cdot D_{F}}= \frac{\alpha}{N} + \frac{\alpha^2}{D_{K}^{2}}DK⋅DK⋅M⋅N⋅DF⋅DFDK⋅DK⋅αM⋅DF⋅DF+αM⋅αN⋅DF⋅DF=Nα+DK2α2
5.分辨率因子ρ\rhoρ(resolution multiplier )
除了宽度因子α\alphaα还引入了控制模型大小的超参数是:分辨率因子rhorhorho(resolution multiplier ),用于控制根源性输入和内部层的计算量。其中可设置输入分辨率ρ\rhoρ为224,192,160和128,将计算量和参数降低了约ρ2\rho^2ρ2倍,可很方便的控制模型大小
DK⋅DK⋅M⋅ρDF⋅ρDF+M⋅N⋅ρDF⋅ρDFDK⋅DK⋅M⋅N⋅DF⋅DF=ρN+ρ2DK2\frac{D_{K} \cdot D_{K} \cdot M \cdot \rho D_{F} \cdot \rho D_{F} + M \cdot N \cdot \rho D_{F} \cdot \rho D_{F}}{D_{K} \cdot D_{K} \cdot M \cdot N \cdot D_{F} \cdot D_{F}}= \frac{ \rho}{N} + \frac{ \rho^2}{D_{K}^{2}}DK⋅DK⋅M⋅N⋅DF⋅DFDK⋅DK⋅M⋅ρDF⋅ρDF+M⋅N⋅ρDF⋅ρDF=Nρ+DK2ρ2
结合两个超参数一起使用,那么计算量和参数可以降低了约α2ρ2\alpha^2\rho^2α2ρ2倍
DK⋅DK⋅αM⋅ρDF⋅ρDF+αM⋅αN⋅ρDF⋅ρDFDK⋅DK⋅M⋅N⋅DF⋅DF=αρN+α2ρ2DK2\frac{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}}{D_{K} \cdot D_{K} \cdot M \cdot N \cdot D_{F} \cdot D_{F}}= \frac{\alpha \rho}{N} + \frac{\alpha^2 \rho^2}{D_{K}^{2}}DK⋅DK⋅M⋅N⋅DF⋅DFDK⋅DK⋅αM⋅ρDF⋅ρDF+αM⋅αN⋅ρDF⋅ρDF=Nαρ+DK2α2ρ2
2、Mobilenet v2
Mobilenet v2论文地址
1.残差结构Residual Block
resnet论文地址
残差模块(Residual Block)是ResNet深度卷积神经网络的基本构建单元。它通过引入快捷连接(跳跃连接)机制解决了深度神经网络中的梯度消失问题,从而使得更深层次的网络可以有效地训练。残差模块的核心思想是学习输入和输出之间的残差函数,而不是直接学习输入到输出的映射,这样可以让网络更容易优化。
一个典型的残差模块包含两条路径:
主路径(主分支):
通过多个卷积层、批归一化层和非线性激活函数来提取特征。
快捷连接(残差分支):
将输入直接连接到输出,从而实现残差学习。
在ResNet深度卷积神经网络中有两种常用的残差结构:
左图:基础残差块 (Basic Block)
第一层(3x3卷积): 通道数保持 64→ 接 ReLU激活。
第二层(3x3卷积): 通道数保持 64→ 接 ReLU激活。
跳跃连接(Shortcut):输入特征直接与核心路径输出相加,要求输入与输出维度相同。
特点:适用于浅层网络(如ResNet-18/34),无维度变化操作,计算量较小,保留原始信息的同时学习残差。
右图:瓶颈残差块 (Bottleneck Block)
第一层(1x1卷积): 1x1 卷积将通道数从 256降维4倍至 64→ 接 ReLU激活。
第二层(3x3卷积): 通道数保持 64→ 接 ReLU激活。
第三层(1x1卷积): 1x1 卷积将通道数从 64升维4倍至 256→ 接 ReLU激活。
跳跃连接(Shortcut):输入特征直接与核心路径输出相加,要求输入与输出维度相同。
特点:设计用于深层网络(如ResNet-50/101/152),通过先降维再升维减少参数量和计算量,中间3x3卷积在低维度下计算,效率更高。
2.倒置残差结构Inverted Residuals Block
倒置残差模块(Inverted Residuals Block)是MobileNet V2高效卷积神经网络基于瓶颈残差模块提出的一种构建单元。它的核心作用是保证模型在维持低 FLOPs 和低参数量的前提下,显著提升模型的表达能力,使得轻量级网络也能达到不错的精度。
左图:瓶颈残差块
第一层(1x1卷积): 1x1 标准卷积将通道数从256降维4倍至 64→ 接 ReLU激活。
第二层(3x3卷积): 3x3 标准卷积数保持 64→ 接 ReLU激活。
第三层(1x1卷积): 1x1 标准卷积将通道数从64升维4倍至256→ 接 ReLU激活。
跳跃连接(Shortcut):输入特征直接与核心路径输出相加,要求输入与输出维度相同。
特点:"降维→特征提取→升维" 的维度变化顺序,跳跃连接确保网络能学习残差 而非完整映射,提升训练稳定性。
右图:倒置瓶颈残差块
第一层(1x1卷积):1x1 标准卷积将通道数从64升维4倍至256→ 接 ReLU6激活。
第二层(3x3卷积):3x3 DW卷积,stride=1,通道数保持 256→ 接 ReLU6激活。
第三层(1x1卷积):1x1 PW卷积将通道数从256降维4倍至 64→ 接 Linear激活。
跳跃连接(Shortcut):输入特征直接与核心路径输出相加,要求输入与输出维度相同。
特点:"升维→特征提取→降维" 的维度变化顺序,极大地增强了 Depthwise Conv 的特征提取能力,克服了其在低维空间的表达瓶颈。线性瓶颈和条件性残差连接确保特征信息有效流动且不被破坏。在提升轻量级模型精度的同时,还能几乎不增加额外计算负担。
3.Linear、ReLU和ReLU6激活函数
Linear(x)=xLinear(x) = xLinear(x)=x
对于Linear激活函数,输出值跟输入值一样。
优点:
计算极其简单: 仅仅返回输入本身,是所有激活函数中最简单的,计算开销为零。在需要快速计算的简单模型中可能有轻微优势。
无梯度消失/爆炸问题(理论上): 导数为常数1,梯度在反向传播时不会放大或缩小(前提是整个网络都是线性的)。
可解释性: 输出直接是输入的线性缩放,关系清晰。
缺点:
关键缺陷:无法引入非线性! 这是致命的缺点。深度神经网络之所以强大,就在于能够组合和逼近复杂的非线性函数。无论堆叠多少层线性激活函数,整个网络仍然等价于单层线性变换(W_total * x + b_total),表达能力极其有限,无法学习复杂模式。
表达能力受限: 只能解决线性可分的问题(如简单的线性回归),对于图像识别、自然语言处理等复杂非线性任务完全无能为力。
ReLU(x)=max(0,x)ReLU(x) = max(0,x)ReLU(x)=max(0,x)
对于ReLU激活函数,当输入值小于0的时候,默认都将它置0。当输入值大于0的时候,输出值跟输入值一样,不做处理。
优点:
高效计算: 计算只涉及一次 max 操作,比 Sigmoid/Tanh 中的指数运算快得多,这是其在深度学习中普及的关键原因之一。
缓解梯度消失: 在输入 x > 0的区域,导数恒为1,梯度可以无衰减地通过,有效解决了 Sigmoid/Tanh 等函数在深层网络中梯度消失严重的问题。
鼓励稀疏激活: 大约 50% 的神经元(对于输入为负的)输出恒为零。这模拟了生物神经元的选择性激活特性,可能提高网络的表征效率(仅使用部分神经元识别特定特征),并引入了一定的正则化效果。
广泛流行与验证: 作为深度学习革命的基石之一,ReLU 及其变体在大量任务和网络结构(尤其是 CNN)中被证明效果非常好,通常被当作首选的默认激活函数。
缺点:
Dying ReLU Problem (神经元死亡问题): 这是最严重的缺点。如果一个神经元的输出在大多数训练数据点上都为负(即大部分输入都小于0),那么它的梯度将恒为0,权重永远不会更新。这个神经元就永久性地“死亡”了,不再对学习过程产生贡献,相当于网络失去了一部分容量。
输出范围无上限: 当输入为正时,输出可以非常大,在训练初期或遇到异常输入时可能导致数值不稳定。
非零中心化: 输出范围 [0, +∞),不以零为中心,可能导致梯度更新在特定方向上有偏向。
ReLU6(x)=min(max(0,x),6)ReLU6(x) = min(max(0,x),6)ReLU6(x)=min(max(0,x),6)
对于ReLU6激活函数,当输入值小于0的时候,默认都将它置0。在[0,6]区间内,不会改变它的输入值,但是当输入值大于6的时候,就会将输出值置为6。
优点:
高效计算: 计算量比 ReLU 略大(多一次 min 比较),但依然远比 Sigmoid/Tanh 高效。
缓解梯度消失: 在输入 0 <= x <= 6的区域,导数恒为1。
鼓励稀疏激活: 输入小于0时输出为零,与 ReLU 相同。
缓解 Dying ReLU (间接): 通过限制上界,在某种程度上(虽然不直接针对原因)可能减轻训练不稳定性,间接影响导致神经元死亡的情况。
核心优势:控制正区间输出范围! 将正区间的输出限制在 [0, 6],这在以下场景极其关键:
量化友好性: 这是 ReLU6 被设计的主要目的。在移动端、嵌入式设备等需要将浮点模型转换为低精度(如 int8)模型的场景中,已知的上限(6)使得量化参数的确定(缩放因子、零点)更加简单和鲁棒,显著降低量化损失,提高部署效率。
提高数值稳定性: 避免了输入过大导致的潜在数值溢出问题。
学习更鲁棒的特征: 限制特征值范围可能有助于模型学习对输入尺度变化不敏感的、更具鲁棒性的特征。
缺点:
牺牲了一些表达能力: 人为设定了输出上限(6),可能会限制模型在某些情况下拟合极大正数值的能力(虽然现实中很多特征值本身有自然的上限)。这通常是模型设计时可控的权衡。
计算略复杂于 ReLU: 多一次 min 操作。
Dying ReLU 问题依然存在: 虽然输出上界被限制,但对于负输入导致的神经元死亡问题依然存在,并未从根本上解决。
使用标准的 ReLU,在量化过程中,非常大的激活值会“挤占”用于表示较小值的量化范围,导致小数部分的量化精度急剧下降,严重影响模型在低精度下的性能。ReLU6 将激活值上限强行限制在 6,强制限定了激活值的动态范围([0, 6])。
深度可分离卷积的参数少容量小,如果扩展层中使用标准的 ReLU,过大的激活值在被压缩层处理时,可能会被“粗暴”地投影到低维空间,破坏或过度扭曲原始的低维特征结构。通过限制激活值的最大幅度,能够减轻压缩层线性投影的压力,允许高维空间保留更丰富的信息扩展到更多通道,同时避免单个通道的极端值在压缩时过度扭曲低维特征。这有助于在复杂的特征提取(高维)和高效的表示(低维)之间取得更好的平衡。
固定的、有限的激活值范围使得后续的量化步骤变得更简单、更稳定,能更均匀地分配量化区间,保留更多有效信息,从而在量化后获得更好的精度。
4.线性瓶颈Linear Bottlenecks
MobileNet V2 引入的 Linear Bottleneck(线性瓶颈) 是一个关键创新点,与 Inverted Residuals(倒残差)结构紧密结合,旨在解决低维空间中深度卷积应用 ReLU 激活函数导致信息损失的问题,从而显著提高模型的效率和准确率。
图中Input代表一个嵌入在二维空间的、螺旋结构的特征矩阵,类比神经网络中某一层的输入特征,在本质上是低维且有结构的。
使用随机矩阵T(卷积核)映射升维到N维空间 (n = 2, 3, 5, 15, 30),模拟神经网络中通过卷积核将输入特征从低维通道数M映射到高维通道数N,在N维空间中会应用ReLU或者ReLU6激活函数处理输出信息。应用随机矩阵T的逆矩阵T−1T^{-1}T−1将激活后的N维数据投影降维回二维空间,目的是为了可视化经过卷积+ReLU后的数据在原始低维空间中的变化,并非神经网络中的必要处理。
当输出维度N只有2层或者3层时,观察投影的输出数据,发现螺旋结构被严重截断破坏,大部分区域坍缩重叠在在同一点上(通常是原点附近),丢失了大量原始信息。这是因为原始输入数据升维后的空间维度本身不够高,数据在随机矩阵T映射升维的空间中部分可能会跨越ReLU的零点,也就是这些负值点被ReLU强制归零。导致表达不同信息的负值数据全部丢失信息,所以T−1T^{-1}T−1无法区分它们,使得它们在降维映射中全都坍缩到同一个点上。这就是所谓的信息丢失(Information Loss)或流形坍缩(Manifold Collapse)。
当输出维度N增加到5层时,观察投影的这5层输出数据,会发现坍缩现象相较减轻,但螺旋结构仍然有明显的扭曲断裂与小部分信息丢失。升维维度N的加深,使得输入数据中的某个值在随机矩阵T的映射下有了更丰富的表达,不再拘泥于负值,不会轻易被ReLU零点全部抹除或截断,但是维度仍然不够高,不足以避免重要信息的破坏和变形。
当输出维度N达到15层或者30层时,观察投影的输出数据,会发现螺旋结构基本得以完整保留,没有明显的点坍缩或大范围断裂。然而随着升维维度N的加深,螺旋形状发生了复杂的高度非线性的变形,不再是光滑有序的螺旋线,螺旋结构变得扭曲,部分数据表达更稀疏或者稠密。升维维度N的加深,为高维空间提供了充足的“空间”,使得输入的特征矩阵中每个数据都得到了丰富的表达,其大部分数据都有正值表达,从而能够避开ReLU的零点限制,展现出一个 高度非凸(Highly Non-Convex) 但 结构完整(Structure Preserved) 的形状。
5.层结构与模型结构
在紧接降维操作之后直接使用ReLU是危险的,在MobileNetV1和类似模型中,如果深度可分离卷积块的输入通道/输出通道维度不够高,ReLU 可能会导致严重的信息丢失坍缩,破坏流形结构和特征信息,导致部分训练参数归零。所以MobileNetV2不再在降维的瓶颈层使用ReLU或者ReLU6激活函数。
左图:带跳跃连接的倒置瓶颈残差块
第一层(1x1卷积):1x1 标准卷积,通道数升维,使用ReLU6激活。
第二层(3x3卷积):3x3 DW卷积,stride=1,通道数保持不变,使用ReLU6激活。
第三层(1x1卷积):1x1 PW卷积,通道数降维,使用Linear激活。
跳跃连接(Shortcut):输入特征直接与核心路径输出相加,要求输入与输出维度相同。
右图:无跳跃连接的倒置瓶颈残差块
第一层(1x1卷积):1x1 标准卷积,通道数升维,使用ReLU6激活。
第二层(3x3卷积):3x3 DW卷积,stride=2,通道数保持不变,使用ReLU6激活。
第三层(1x1卷积):1x1 PW卷积,通道数降维,使用Linear激活。
无跳跃连接(Shortcut):输入与输出的H×W×C不相同,不能相加。
input:表示输入数据或者说是上一层的输出数据,表示H×W×C。
operator:表示使用的神经网络层。
t:表示倒置残差结构中的扩展倍率。
c:表示输出特征矩阵的通道数。
n:表示对应神经网络层重复次数。
s:表示步长,会影响特征矩阵的宽高。在同一operator的重复的bottleneck中,s步长只代表第一个bottleneck的步长,剩下的bottleneck的步长为1。
3、Mobilenet v3
Mobilenet v3论文地址
1.激活函数优化
sigmoid(x)=11+exp−xsigmoid(x) = \frac{1}{1+exp^{-x}}sigmoid(x)=1+exp−x1
输出范围:
当x → -∞时,输出趋近 0。
当x → +∞时,输出趋近 1。
当x = 0时,输出为 0.5。
优缺点:
sigmoid激活函数具有非线性,能够赋予神经网络强大的拟合能力,输出具有概率意义,介于0-1之间,能用于二分类输出层。
但是sigmoid激活函数也具有饱和性问题、非零中心输出问题和计算复杂度高的问题。
ReLU6(x)=min(max(0,x),6)ReLU6(x) = min(max(0,x),6)ReLU6(x)=min(max(0,x),6)
hard_sigmoid(x)=min(max(0,x+3),6)6=ReLU6(x+3)6hard \_sigmoid(x) = \frac{min(max(0,x+3),6)}{6} = \frac{ReLU6(x+3)}{6}hard_sigmoid(x)=6min(max(0,x+3),6)=6ReLU6(x+3)
输出范围:
当 x ≤ -3时,输出为 0(因 sigmoid(-3) ≈ 0.047,可近似为 0)。
当 x ≥ 3时,输出为 1(因 sigmoid(3) ≈ 0.952,可近似为 1)。
当 -3 < x < 3时,设计线性函数需满足x = -3时输出 0,x = 3时输出 1,斜率为 (1 - 0)/(3 - (-3)) = 1/6。
优缺点:
hard_sigmoid激活函数计算速度快,仅使用加法、乘法和比较操作,避免了昂贵的指数运算,在CPU/GPU上计算效率显著高于Sigmoid,更容易被加速和在专用硬件上实现。
hard_sigmoid激活函数的输出近似Sigmoid,输出范围也是(0, 1)或一个非常接近的子集。
hard_sigmoid激活函数虽然是Sigmoid的分段线性近似,但是没有Sigmoid曲线那样平滑而且精度较差。
hard_sigmoid激活函数虽然梯度计算更快,但仍存在饱和性问题,没有解决梯度消失的根本问题。
hard_sigmoid激活函数的非零中心问题依然存在。
swish(x)=x⋅σ(x)=x⋅11+exp−xswish(x) = x \cdot \sigma(x) = x \cdot \frac{1}{1+exp^{-x}}swish(x)=x⋅σ(x)=x⋅1+exp−x1
输出范围:
当x → -∞时,输出趋近 0。
当x → +∞时,输出趋近 +∞。
当x = 0时,输出为 0。
优缺点:
无上界有下界,当输入x趋近于正无穷时,输出趋近于正无穷,当输入x趋近于负无穷时,输出趋近于0。
swish激活函数曲线是平滑的,在x > 0区间是单调递减,在x < 0的部分不是单调的,存在一个极小值点。这一特性被认为有助于增强表达能力。
swish激活函数昂贵的指数运算,计算开销显著高于ReLU或其硬版本,接近Sigmoid。
swish激活函数的饱和性问题未完全解决,虽然在x < 0时梯度不会完全消失,但当x趋近负无穷大时会趋近于0,梯度仍然会变得非常微弱,但相比Sigmoid改善很多。
hard_swish(x)=x⋅ReLU6(x+3)6hard\_swish(x) =x\cdot \frac{ReLU6(x+3)}{6}hard_swish(x)=x⋅6ReLU6(x+3)
输出范围:
当 x ≤ -3时,输出为 0。
当x ≥ 3时,输出为 x。
当 -3 < x < 3时,输出为x⋅(x+3)6\frac{x \cdot (x+3)}{6}6x⋅(x+3)。
优缺点:
hard_swish激活函数核心操作是ReLU6,本质也是min、max和加法,避免了指数运算,运算速度快,对硬件友好,比Swish快得多。
hard_swish激活函数的曲线近似Swish曲线。
hard_swish激活函数的曲精度不如原始Swish。
hard_swish激活函数在近似分段点(x ≈ -3 和 x ≈ 3)处,函数虽然连续但其导数不连续。这在理论上不是最优,但在实际应用中影响常被容忍。
hard_swish激活函数在负区间存在饱和性问题。
使用 hard_sigmoid 替换了SE模块中的 sigmoid 和 swish 激活函数。
sigmoid 涉及指数运算,计算成本高,尤其在移动端硬件上,而hard_sigmoid 通过分段线性近似实现,仅需加减和乘法,显著降低计算量。
hard_sigmoid 的输出范围固定为 [0, 6],更易适配定点量化(如 INT8),减少精度损失。
使用 hard_swish 替换了倒残差模块非线性激活层中的部分 ReLU6 和全部 swish 函数,仅在深层使用 hard_swish,浅层仍保留 ReLU6。
swish 依赖 sigmoid,导致求导和推理开销大,而 hard_swish 通过 ReLU6 近似 sigmoid,大幅简化计算流程。
swish 在深层网络中能提升特征表达能力,但硬件支持差。hard_swish 在精度损失极小的前提下,将推理速度提升 15–20%。
2.标准SE模块
SE模块论文地址
SE(Squeeze-and-Excitation)模块可以显式地建模卷积特征通道之间的相互依赖性来提高网络的表示能力,使得网络能够执行特征重新校准,通过这种机制可以学习使用全局信息来选择性地强调信息特征并抑制不太有用的特征。
特征图X:H′×W′×C′H' × W' × C'H′×W′×C′,宽×高×深度。
特征图U:H×W×CH × W × CH×W×C,宽×高×深度。
特征图X~\tilde{X}X~:H×W×CH × W × CH×W×C,宽×高×深度。
FtrF_{tr}Ftr:特征图转换函数,使用一个卷积核对特征图X进行卷积操作得到特征图U。
FsqF_{sq}Fsq:特征图压缩函数,使用全局平均池化将特征图的全局信息嵌入压缩到一维特征向量。
FexF_{ex}Fex:自适应权重函数,使用两个全连接层进行自适应校正通道权重。
FscaleF_{scale}Fscale:特征图加权函数,通道权重应用到特征图上。
uc=Ftr(X)=vc∗X=∑s=1C′vcs∗Xsu_c =F_{tr}(X) = v_c \ast X = \sum_{s=1}^{C'} v_c^s \ast X^suc=Ftr(X)=vc∗X=s=1∑C′vcs∗Xs
ucu_cuc:输出特征图U的第c个通道的二维特征矩阵。
vcv_cvc:用于生成特征图U的第 c个通道的二维特征矩阵的卷积核。
vcsv_c^svcs:vcv_cvc在输入X的第s个通道上的权重切片。
FtrF_{tr}Ftr是一个标准的卷积操作,通过输入的特征图和卷积核计算得到新的特征图,宽高不变,但深度可能会发生变化。
zc=Fsq(uc)=1H×W∑i=1H∑j=1Wuc(i,j)z_c = F_{sq}(u_c) = \frac{1}{H × W} \sum_{i=1}^{H}\sum_{j=1}^{W}u_c(i, j)zc=Fsq(uc)=H×W1i=1∑Hj=1∑Wuc(i,j)
zcz_czc:一维向量z的第c个元素。
i, j:特征图U的第c个通道在空间位置 (i, j)处的值。
FsqF_{sq}Fsq是一个特征图压缩函数,使用全局平均池化将特征图中每个通道的二维特征矩阵压缩成一个标量值,表示在该通道上的全局信息的激活强度,最终压缩得到的向量z尺寸为1×1×C1 × 1 × C1×1×C,向量的长度C对应特征图的深度C。
s=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z))s = F_{ex}(z,W) = \sigma (g(z,W)) = \sigma (W_2\delta(W_1z))s=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z))
s: 通道注意力向量,重要性分数,值越大越重要。
z:输入的一维向量。
W:W1和 W2的统称,W1为第一个全连接层的权重矩阵 (C × C/r),W2为第二个全连接层的权重矩阵 (C/r × C)。
r:约简率,控制瓶颈层的压缩程度,是SE模块需要调优的超参数,作用是减少模型复杂度和参数。
δ\deltaδ:ReLU激活函数,为第一个全连接层提供非线性。
σ\sigmaσ:Sigmoid 激活函数,将第二个全连接层的输出值映射到 [0, 1]区间,表示学习到的每个通道的自适应权重。
FexF_{ex}Fex是一个自适应权重函数,由一个两个全连接层网络完成,第一个全连接层把C个通道压缩成了C/r个通道来降低计算量,再通过一个RELU非线性激活层,第二个全连接层将通道数恢复回为C个通道,再通过Sigmoid激活得到权重s,最后得到的这个s的维度是1×1×C,它是用来刻画特征图U中C个特征图的权重。
一个全连接层无法同时应用relu和sigmoid两个非线性函数,但是两者又缺一不可,所以先缩小,再放大,同时为了减少参数,设置了r比率。
x~c=Fscale(uc,sc)=scuc\tilde{x}_c = F_{scale}(u_c, s_c) = s_cu_cx~c=Fscale(uc,sc)=scuc
x~c\tilde{x}_cx~c: 特征图x~c\tilde{x}_cx~c中第c个通道的特征矩阵。
ucu_cuc: 特征图U中第c个通道的特征矩阵。
scs_csc: 通道注意力向量s的第c个元素值。
FscaleF_{scale}Fscale是一个特征图加权函数,使用逐通道乘法将学习到的通道权重s映射到特征图U上,也就是将自适应权重向量s的第c个元素值乘以特征图U的第c个特征矩阵的每一个元素。
3.MobieNetV3的SE模块
在mobilenet v2中,使用的是倒置残差结构Inverted Residuals Block和ReLU6、Linear激活函数,核心作用是保证模型在维持低 FLOPs 和低参数量的前提下,显著提升模型的表达能力,使得轻量级网络也能达到不错的精度。
第一个特征图→第二个特征图:使用 1×1 标准卷积核对第一个特征图的通道数进行升维,再使用ReLU6函数进行非线性激活。
第二个特征图→第三个特征图:使用 3×3 DW卷积核对第二个特征图进行学习,stride=1,使用NL非线性激活(h-swish)。
第三个特征图→Pool操作:使用全局平均池化把空间信息压缩为一维特征向量。
Poo操作→lFC + ReLU操作:使用一个全连接层进行通道压缩来降低计算量,再使用ReLU6函数进行非线性激活。
FC + ReLU操作→FC + hard-sigmoid操作:使用一个全连接层将通道数恢复回为C个通道,再通过hard-sigmoid函数得到特征图权重。
FC + hard-sigmoid操作→第四个特征图:使用逐通道乘法⨂\bigotimes⨂将自适应权重向量s的第c个元素值乘以特征图U的第c个特征矩阵的每一个元素。
第四个特征图→第五个特征图:使用 1×1 PW卷积核对第四个特征图的通道数进行降维,stride=1,使用NL非线性激活(h-swish)。
跳跃连接:输入特征直接与核心路径输出相加,要求输入与输出维度相同。
MobileNet V3引入SE注意力模块的核心目标是在保持轻量化设计的同时,显著提升模型的特征提取能力和分类精度。以下是具体原因及作用机制:
SE模块通过动态学习不同通道的重要性权重,使模型能够自适应地强化关键特征并抑制冗余信息。
首先对每个通道进行全局平均池化,将空间信息压缩为通道描述符。随后通过全连接层学习通道间的依赖关系,最终用学习到的权重对原始特征图进行缩放。这一过程使模型能够捕捉全局上下文信息,弥补了轻量级模型因参数减少导致的感受野局限。
SE模块虽然增加少量参数(通常为输入通道数的1/4),但只在部分关键层(如深层或大卷积核层)加入SE模块,避免在所有层使用以控制计算量,却带来显著的精度提升。
深度可分离卷积虽然减少参数量,但该操作可能导致通道间信息交互不足,SE模块通过重标定通道权重,强化了通道间的关联性,弥补了分离卷积的不足。
深度可分离卷积压缩通道数使得低维特征易受ReLU等激活函数的信息损失影响,SE模块通过特征重加权,使低维特征也能保留关键信息。
SE模块的计算主要由全局池化和全连接层构成,易于在移动端硬件上并行优化,实际部署时延迟增加可控。
4.精简模型结构
移除了原始末阶段中完整的 3×3 DConv+ BN + H-Swish激活模块。
深度可分离卷积虽然比标准卷积高效,但在靠近网络尾端的特征图尺寸已经很小的情况下,其相对于1x1卷积的计算量优势减弱,且同样带有显著的计算开销。
删除最后的 1×1 Conv + BN 层。
从原来将320通道升维到1280通道的卷积操作,修改为将960通道直接通过avgpool + 1×1 Conv + H-Swish激活模块升维到1280通道。使得最后阶段的数据流更短、更直接,还极大地降低了后续卷积的计算量,同时基本保持了模型的精度。
更新网络后准确率是几乎没有变化的,但是节省了7ms的执行时间。这7ms占据了推理11%的时间,因此使用Efficient Last Stage取代Original Last Stage对速度提升还是比较明显的。
5.层结构与模型结构
Large模型
Small模型
input:表示输入数据或者说是上一层的输出数据,表示H×W×C。
operator:表示使用的神经网络层,混合使用3×3 和 5×5尺寸的卷积核。
exp size:表示在深度可分离卷积结构中使用逐点卷积进行升维的中间通道数。
#out:表示当前层输出的特征图通道数。
SE:表示是否启用通道注意力机制,✓表示启用。
NL:表示使用的非线性激活函数类型。
s:表示步长,会影响特征矩阵的宽高。在同一operator的重复的bottleneck中,s步长只代表第一个bottleneck的步长,剩下的bottleneck的步长为1。
NBN:表示这卷积不使用BN结构,最后两个卷积相conv2d 1x1当于全连接的作用。
MobileNetV3-Large: 优先保证精度。为此采用了更深、更宽(更多通道、更大扩展因子)的网络结构,在更多瓶颈块中部署SE模块,并主要在深层使用计算量更高的Hard Swish激活函数。
MobileNetV3-Small: 优先追求极致的速度和效率。为此网络设计得更浅、通道数更低、扩展因子更小、精简SE模块的使用、并在早期和中期更多地使用计算量较低的HS激活函数。
4、Mobilenet v4
Mobilenet v4论文地址
1.通用倒置瓶颈Universal Inverted Bottleneck
通用倒置瓶颈UIB是一个统一、灵活的基础模块架构,适用于高效网络设计的可适应构建块,它具有灵活地适应各种优化目标的能力,而不会使搜索复杂度爆炸性增长。
UIB结构
第一层:可选的DW卷积
第二层:升维的PW卷积
第三层:可选的DW卷积
第四层:降维的PW卷积
Extra DW结构
第一层:DW卷积
第二层:升维的PW卷积
第三层:DW卷积
第四层:降维的PW卷积
MobileNet Inverted Bottleneck结构
第一层:无
第二层:升维的PW卷积
第三层:DW卷积
第四层:降维的PW卷积
ConvNext-Like结构
第一层:DW卷积
第二层:升维的PW卷积
第三层:无
第四层:降维的PW卷积
ViT-FFN结构
第一层:无
第二层:升维的PW卷积
第三层:无
第四层:降维的PW卷积
通过开关可选DW层,UIB可转化为各种的常规模块。
Fused IB结构
第一层+第二层:融合的标准Conv2D卷积
第三层:无
第四层:降维的PW卷积
Fused IB 模块在UIB模块的基础上进行改进,融合了UIB模块中的预膨胀DW卷积和升维PW卷积,将空间滤波和通道滤波的功能融合到了一个标准的Conv2D操作中。
GPU的瓶颈常是内存带宽而非计算能力,而独立的DW卷积和PW卷积需多次读写中间特征图数据,导致高内存延迟。融合的DW和PW的连续计算合并为单次核函数,中间结果无需写入外部内存,访存量减少30%以上,在保持或提升模型表达能力的同时,减少计算量和延迟,使其在硬件上的运行更加高效。
2. 移动优化注意力机制Mobile MQA
Mobile MQA(Multi-Query Attention) 是一种专为移动加速器优化的注意力机制,旨在显著提升推理速度同时保持模型精度。其核心设计结合了标准多查询注意力(MQA) 和非对称空间下采样(Asymmetric Spatial Reduction),以降低内存访问开销并提高操作强度。
标准多查询注意力的轻量化改进:
传统多头注意力MHA(Multi-Head Attention)对输入特征分别投影生成独立的 Query、Key、Value 矩阵,导致内存访问频繁,尤其在移动加速器上(计算能力强但内存带宽有限)成为性能瓶颈。
通过保留多组 Query 投影(每个注意力头独立),而 Key 和 Value 在所有注意力头之间共享。这减少了约25%的参数量和内存访问量,同时实验表明对精度影响极小。
非对称空间下采样(Spatial Reduction, SR):
混合模型中,早期卷积层已提取空间局部相关性,因此在注意力模块中对 Key/Value 进行下采样不会显著丢失信息。
对 Key 和 Value 进行空间下采样(步长为2的深度卷积 DWConv),保持 Query 的分辨率不变。
公式中的 SR(X)表示对输入特征图 X的空间缩减操作,通过步长为2的3 × 3深度可分离卷积替代AvgPooling实现,以低成本扩大感受野并减少计算量12。
Attention(Q,K,V)=softmax(QKTdk)VAttention(Q, K, V ) = softmax(\frac{QK^T}{\sqrt{d_k}})VAttention(Q,K,V)=softmax(dkQKT)V
whereattentionj=softmax((XWQj)(SR(X)WK)Tdk)(SR(X)WV)where \ attention_j = softmax\left( \frac{(XW^{Q_j})(SR(X)W^K)^T}{\sqrt{d_k}}\right)(SR(X)W^V)where attentionj=softmax(dk(XWQj)(SR(X)WK)T)(SR(X)WV)
MultiHead(Q,K,V)=Concat(head1,...,headh)WOMultiHead(Q,K,V)=Concat(head_1, ..., head_h)W^OMultiHead(Q,K,V)=Concat(head1,...,headh)WO
Mobile_MQA(X)=Concat(attention1,...,attentionn)WoMobile\_MQA(X) = Concat(attention_1,...,attention_n)W^oMobile_MQA(X)=Concat(attention1,...,attentionn)Wo
XXX:输入特征图
ConcatConcatConcat:张量拼接,会扩充两个张量的维度。
attentionjattention_jattentionj:第j个注意力头。
WoW^oWo:多头输出的融合矩阵。
softmaxsoftmaxsoftmax:激活函数,将输出的分类结果映射到[0,1]之间。
WQjW^{Q_j}WQj:第 j个注意力头的 Query 投影矩阵。
WKW^KWK:共享的Key投影矩阵。
WVW^VWV:共享的Value投影矩阵。
SRSRSR:空间缩减函数,使用深度可分离卷积实现的非对称下采样。
dkd_kdk:Key 向量的维度。
输入X直接投影生成第j个头的Query,保持原始空间分辨率H×W,通过SR下采样投影生成共享的Key 和Value。然后参考原始Attention公式进行计算,得到在第j个位置上的注意力头输出。
在多头机制下,输入的序列数据会被分成多个头,每个头进行独立的计算,得到不同的输出。这些输出最后被拼接在一起,通过WoW^oWo融合为最终结果。
总结
MobileNet系列(V1到V4)通过持续引入深度可分离卷积、倒残差结构、注意力机制及神经网络搜索等技术,显著推动了轻量化模型的发展,在保持高精度的同时极大提升了计算效率,深刻影响了移动端和嵌入式设备上的视觉应用部署。