轻量级模型解读——MobileNet系列

MobileNet系列到现在2024年,已经出到了第四个版本,分别如下:
2017年MobileNetv1——>2018年MobileNetv2——>2019年MobileNetv3——>2024年MobileNetv4,下面简要概述一下几个版本的改进部分。



介绍之前先上一张MobileNet系列各个版本汇总的对比情况,如下,表中数据均来自论文。
在这里插入图片描述

1、MobileNetv1

论文地址:MobileNetv1
MobileNetv1 是一种轻量级的卷积神经网络架构,由 Google 团队在 2017 年提出。作者设计初衷就是为了模型能部署在移动端和嵌入式设备实现高速推理任务。MobilenetV1的主要创新点是提出了深度可分离卷积(Depthwise Separable Convolution)。
在这里插入图片描述
深度可分离卷积将常规卷积(上图(a))拆分成Depthwise卷积(上图(b))和1x1卷积核组成的Pointwise卷积(上图©)。在保证精度的条件下大大减小了参数量。具体来说,可解释为:
Depthwise卷积是对输入特征图按每个通道(channel)分别进行卷积操作,等效于group数量等于input channel的group卷积。这一操作用于提取输入特征图的空间信息的同时大大减小了参数量。
Pointwise卷积可看作常规卷积操作,不同点是它的卷积核空间尺寸是1x1大小,用1x1大小的卷积核对上一步得到的特征图进行逐点卷积,从而恢复输入特征图的通道数量。这一步主要用于融合通道之间的有用信息。

常规的卷积+bn+ReLU模块,替换成深度可分离卷积后,变成如下图所示的模块:
在这里插入图片描述

下表中展示了MobileNet采用深度可分离卷积和采用常规卷积的对比情况:
在这里插入图片描述
可以看到准确率只下降了1.1%,但是计算量和参数量都大大减小。

标准的MobileNet和小版本的MobileNet与当前流行的网络结构再ImageNet数据集上的表现情况如下表:
在这里插入图片描述


2、MobileNetv2

论文地址:MobileNetv2
MobileNetV2是MobileNet系列的第二个版本,由谷歌团队在2018年提出,它在v1的基础上进一步改进网络结构,提升了网络结构运算效率与识别精度。创新点如下:

  1. Inverted residuals,按照之前残差结构的通常用法,都是先经过一个1x1的卷积操作将特征图通道数减少,再做3x3卷积,最后再通过1x1卷积操作升维,将特征图通道扩充回到想要的数量,这样将通道先“压缩后扩张”的方式可以减少参数量。但是MobileNetv2的做法是反着来的,即“先扩张后压缩”。
  2. Linear bottlenecks,为了避免ReLU激活函数对特征的破坏,在residual block的Eltwise sum之前的那个 1*1 Conv 不再采用ReLU。

其中mobilenetv1和mobilenetv2在卷积模块中的不同点如下:
在这里插入图片描述
Mobilenetv2相对于v1版本主要改进点是,在做Depthwise卷积操作前,先用Pointwise卷积将通道数扩张,且在模块最后没有用非线性激活函数。
同时,MobileNetv2也借鉴ResNet结构,设计了残差结构,和Resnet中标注的卷积不同,mobilenetv2中采用Depthwise卷积,两者对比如下:
在这里插入图片描述
可见,和Resnet最大的不同是一个采用标准卷积一个采用Depthwise卷积,这个不同点,直接促使mobilenetv2在做Depthwise卷积之前可以将通道数量扩张而不是压缩,因为depthwise卷积的参数量本来就大大减少了。

相较于目前的轻量级网络,mobilenetv2在imagenet分类数据集上的表现如下表所示:
在这里插入图片描述
可以看到,相较于v1版本,参数量和复杂度都减小了,但准确率提升了1.4%,并且推理速度更快。


3、MobileNetv3

论文地址:MobileNetv3
Mobilenetv3是谷歌团队在2019年提出的,论文标题全名叫“Searching for Mobilenetv3”,从名字中可以看出,该版本的网络结构是结合了自动搜索方式得到的。该版本针对高资源设备和低资源设备分别提出了MobileNetv3-large和MobileNetv3-small两个版本的网络结构。

回顾:
MobileNetv1提出深度可分离卷积在保持精度基本不变的情况下,大大减小参数量;
MobileNetv2引入线性瓶颈层和反转残差结构来构建更有效的网络结构;
MnasNet在MobileNetv2基础上引入轻量化的注意力模块,该注意力模块由SE(squeeze and excitation)子模块组成,该模块放置在扩展中的DW Conv操作之后,以便将注意力集中在最大的表示上。
而MobileNetv3,为了构建最有效的模型,使用这些层的组合作为构建块,激活函数替换成了h-swish,在残差层中应用SE模块,并且在不同的层中应用不同的非线性激活函数。

MobileNetv3网络结构的改变
1、网络结构尾部的优化
针对224x224的输入,当前基于MobileNetv2的倒置瓶颈结构和变体使用1x1卷积作为最后一层,以便扩展到更高维度的特征空间。这一层对于拥有准确的预测特征是至关重要的。然而,这是以额外的延迟为代价的。为了减少延迟并保留高维特征,作者将升维这一动作移到最终的平均池化之后。如下图所示,高效的最后阶段将延迟减少了7毫秒,占运行时间的11%,并在几乎没有准确性损失的情况下将操作次数减少了3000万次。
在这里插入图片描述
2、头部卷积核个数减半
当前的MobilenetV2开始使用32个3x3的卷积核,作者发现使用h-swish激活函数相比于使用ReLU或者swish函数,可以在保持精度不减的情况下,将卷积核降低到16个,并且提速2ms、减少了1000万次加法运算。
在这里插入图片描述
在这里插入图片描述
可以看到MobileNetv2和Mobilenetv3-small的结构,后者在第一层特征图的通道设置为了16。

3、非线性激活函数
Swish激活函数作为ReLU的替待形式,可以显著提升模型的准确性,但为了在移动设备上移植更友好,作者参考ReLU-6提出了h-swish激活函数,公式如下:
在这里插入图片描述
在这里插入图片描述

4、在残差模块中加入SE模块
在这里插入图片描述
这个注意力子模块来自SENet,它通过对前一层特征图(N个channel)按通道在空间尺度上做avg pooling,得到和输入通道相同的N个值,然后经过两个FC层,两个FC层都有非线性激活,一个是ReLU,一个是h-sigmoid,最后得到N个非线性变换后的值,将这N个值与原有的N个输入通道做乘积将得到N个通道的重要程度加权,也就是加了通道注意力。

下表展示了MobileNetv3与其他轻量级模型在ImageNet数据集上的表现情况:
在这里插入图片描述
在同级别上,MobileNetv3相对于v2版本表现出了较大优势。


4、MobileNetv4

论文地址:MobileNetv4
在2024年,MobileNet迎来了第4个版本更新,名为MobileNetv4(MNv4),也是应用神经网络架构搜索(NAS)方式搜索得到的,其核心部分在于提出了通用倒置瓶颈块(Universal Inverted Bottlenecks, UIB),它是一个统一且灵活多变的结构,包含了倒置瓶颈(IB),ConvNext,前馈神经网络(FFN)以及一种新的额外深度可分 (ExtraDW) 变体的各种组合。同时,作者还提出了Mobile MQA,这是一个专为移动加速器设计的注意力块,能带来显著的39%速度提升。

回顾:优化模型的准确率和效率是长期深入研究的问题。可分为如下几个方面:
移动卷积网络(Mobile Convolutional Networks): 如MobileNetv1利用深度可分离卷积提升效率,MobileNetv2引入线性瓶颈和倒置残差模块,MnasNet在瓶颈模块中引入轻量级注意力模块,MobileOne在推理时在倒置瓶颈中重参数化线性分支。
高效混合网络(Efficient Hybrid Networks): 这个方向整合了卷积和注意力机制,主要是transformer,
比如MobileViT通过全局注意力块将CNN与ViT组合,MobileFormer并行结合MobileNet和transformer的特征,FastViT 在最后一个阶段加入注意力,并使用大的卷积核作为早期阶段自注意力机制的替代。
高效注意力: 最近的研究者集中提升MHSA(Multi Head Self-Attention)的高效实现。EfficientViT和MobileViTv2提出了自注意力近似方法,在保证准确率的条件下,使得注意力头达到线性复杂度。EfficientFormer-V2为了提高效率而对Q、K、V进行下采样,而CMT和NextViT仅对K和V进行下采样。
硬件感知神经架构搜索(NAS): 另一种常见的技术是使用硬件感知神经架构搜索(NAS)来自动化模型设计过程。NetAdapt 使用经验延迟表来在目标延迟约束下优化模型的准确性。MnasNet同样使用延迟表,但它应用强化学习来进行硬件感知的NAS。FBNet 通过可微分的NAS加速了多任务硬件感知搜索。MobileNetV3 通过结合硬件感知NAS、NetAdapt算法和架构改进,针对手机CPU进行调优。MobileNetMultiHardware 为多个硬件目标优化单一模型。Once-for-all 为提高效率,将训练和搜索分离。

下面简要介绍两个主要的创新点UIB和Mobile MQA:
Universal Inverted Bottlenecks
UIB的结构如下图所示,这是一个适用于高效网络设计的可变构建块,它具有灵活适应各种优化目标的能力,不会使得搜索复杂度爆炸性增长。
在这里插入图片描述
UIB中两个可选深度卷积有4种组合方式,这能导致不同的精度与速度之间的权衡;
倒置瓶颈(IB),在扩展的特征激活上进行空间混合,以增加成本为代价提供更大的模型容量。
ConvNext通过在扩展之前执行空间混合,实现了使用更大核尺寸进行更廉价的空间混合。
ExtraDW是本文提出的一种新变体,它允许廉价地增加网络的深度和感受野。
FFN是由两个1x1的点卷积(PW)堆叠而成,并在它们之间加入激活和标准化层。PW是最受加速器友好的操作之一,但最好与其他模块一起使用。
由上面可知,在网络的每个阶段,UIB提供了以下优势:达成一个即时的空间和通道混合的权衡;按需扩大感受野;最大化计算利用率。

Mobile MQA
在近期视觉模型的研究中,他们大多致力于减少算术运算(MACs)以提高效率。然而,在移动加速器上性能的真正瓶颈往往不是计算而是内存访问。这是因为加速器提供的计算能力远大于内存带宽。因此,仅仅最小化MACs可能并不会导致更好的性能。这里作者考虑操作强度,即算术运算与内存访问的比率。作者通过使用Multi-Query Attention (MQA) 通过在所有头之间使用共享的键和值简化了内存访问次数,从而实现提速39%的显著效果。MQA主要用于混合结构网络的加速。

MobileNetv4在ImageNet数据集上的表现如下:
在这里插入图片描述

<think>好的,我现在需要回答用户关于YOLOv11的改进,特别是C3K2模块和ExtraDW融合的实现细节。首先,我需要确认YOLOv11是否真的存在,因为根据我之前的知识,YOLO系列的最新版本可能是YOLOv8或者YOLOv9,而YOLOv11可能是一个误解或者是某个社区改进的版本。不过,用户提到了C3K2和ExtraDW融合,这两个术语我之前没有接触过,可能需要结合现有YOLO版本的改进来推测。 首先,查阅用户提供的引用资料。引用[3]提到了YOLOv5的发展历程,引用[5]讨论了分类和回归损失的改进,比如VariFocal Loss和SIoU Loss。这可能意味着YOLOv11可能是在YOLOv5或后续版本的基础上进行优化的。例如,C3模块在YOLOv5中已经存在,是CSPNet与3个卷积层的结合,用于减少计算量并保持准确性。C3K2可能是在此基础上的变体,比如使用更大的卷积核(kernel size 2?不过通常卷积核是奇数,可能是指其他参数调整)。 接下来,ExtraDW融合可能涉及深度可分离卷积(Depthwise Convolution,DW)。YOLOv5中已经使用了深度可分离卷积来减少参数量,ExtraDW可能是在此基础上增加额外的DW层或与其他模块融合,以提升特征提取能力而不显著增加计算量。例如,RepVGG(引用[4])通过结构重参数化优化模型,可能类似的思路被应用到YOLOv11中,通过训练时的复杂结构和推理时的简化结构来平衡速度和精度。 此外,用户提到的C3K2可能与Kernel size相关,比如将原来的3x3卷积改为其他尺寸,或者引入更高效的模块设计。例如,YOLOv6和YOLOv7中使用了不同的模块设计,如E-ELAN等,可能C3K2是类似的改进。 实现细节方面,可能需要参考现有的YOLO代码库,比如YOLOv5的github仓库,查看是否有相关的模块更新。例如,C3模块在YOLOv5中的实现通常包括多个卷积层和残差连接,C3K2可能调整了卷积层的数量或类型,比如替换部分标准卷积为深度可分离卷积,或者调整通道数。 关于ExtraDW融合,可能的实现方式是在某些层中插入额外的深度可分离卷积,然后与主分支的特征图进行融合,比如通过加法或拼接。例如,在Backbone的某些阶段添加DW卷积来增强局部特征的提取,同时通过融合操作保持计算效率。 不过,由于YOLOv11并非官方版本,这些改进可能是社区或某些研究者的自定义修改,需要具体查看相关论文或代码提交。用户可能混淆了版本号,但根据引用[2],YOLOv3的改进通过细微修改提升性能,可能类似的策略被延续到后续版本中。 总结来说,我需要将已知的YOLO改进与用户提到的术语结合,推测可能的实现方式,并引用相关的技术点,如C3模块、深度可分离卷积、损失函数优化等,同时指出需要查阅具体源码或论文以获得准确信息。</think>### YOLOv11改进及C3K2与ExtraDW融合实现细节 目前**YOLOv11并非官方发布的版本**,可能是社区或研究者基于YOLO系列的改进版本。结合现有YOLO系列改进方向(如YOLOv5、YOLOv7等)和用户提到的关键词,以下是可能的改进点及实现细节推测: --- #### 1. **C3K2模块** - **改进目标**:提升特征提取效率,减少计算量。 - **实现推测**: - **C3模块基础**:YOLOv5中的C3模块结合了CSPNet(Cross Stage Partial Network)和3个卷积层,通过拆分特征图并行处理来降低计算成本[^3]。 - **C3K2的可能改进**: - **Kernel调整**:将部分卷积核从3×3改为更小的2×2(需注意奇数核更常见),或引入**空洞卷积**扩大感受野。 - **结构优化**:在C3模块中增加深度可分离卷积(Depthwise Conv)或分组卷积,进一步压缩参数量。 - **代码片段示例(基于YOLOv5风格)**: ```python class C3K2(nn.Module): def __init__(self, c1, c2, n=1, shortcut=True): super().__init__() self.cv1 = Conv(c1, c2//2, k=2) # 假设k=2的卷积 self.cv2 = Conv(c1, c2//2, k=1) self.m = nn.Sequential(*(Bottleneck(c2//2, c2//2, shortcut) for _ in range(n))) def forward(self, x): return torch.cat((self.m(self.cv1(x)), self.cv2(x)), 1) ``` --- #### 2. **ExtraDW融合(Extra Depthwise Fusion)** - **改进目标**:增强多尺度特征融合能力,同时保持轻量化。 - **实现推测**: - **深度可分离卷积(DWConv)**:将标准卷积拆分为逐通道卷积(Depthwise Conv)和1×1卷积(Pointwise Conv),减少计算量[^4]。 - **ExtraDW融合设计**: - 在特征金字塔网络(FPN)或路径聚合网络(PAN)中插入额外的DWConv层,提取更丰富的局部特征。 - 通过**加法或拼接操作**将DW分支的输出与主分支融合。 - **代码片段示例**: ```python class ExtraDWFusion(nn.Module): def __init__(self, c1, c2): super().__init__() self.dw = nn.Conv2d(c1, c1, kernel_size=3, stride=1, padding=1, groups=c1) # DW卷积 self.pw = nn.Conv2d(c1, c2, kernel_size=1) # 1×1卷积调整通道数 def forward(self, x_main, x_extra): x_dw = self.pw(self.dw(x_extra)) return x_main + x_dw # 特征融合 ``` --- #### 3. **其他可能的改进方向** - **损失函数优化**:采用VariFocal Loss(分类)和SIoU Loss(回归),平衡正负样本并提升定位精度[^5]。 - **结构重参数化**:类似RepVGG,在训练时使用多分支结构,推理时合并为单一分支以提升速度。 - **轻量化设计**:引入更高效的激活函数(如SiLU)或注意力机制(如SE模块)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值