【YOLOv8/v9/v10/v11、RT-DETR改进合集】详解Mamba-YOLO,替换骨干网络Mamba-YOLO-B!!! 最新的发文热点

一、本文介绍

本文记录的是利用Mamba-YOLO优化YOLOv8YOLOv10YOLOv11RT-DETR的目标检测网络模型Mamba-YOLO模型是一种基于状态空间模型(SSM)的目标检测模型,旨在解决传统目标检测模型在处理复杂场景和长距离依赖关系时的局限性,是目前最新的发文热点。本文分成三个章节分别介绍Mamba-YOLO模型结构中各个模块的设计结构和优势,本章讲解ODSSBlock模块,并在YOLOv8YOLOv10YOLOv11RT-DETR配置了Mamba-YOLO-B网络结构。

Mamba YOLO:SSMs-Based YOLO For Object Detection

在这里插入图片描述


二、ODSSBlock 模块介绍

ODSSBlock(Object Detection State Space Block)是Mamba - YOLO模型中的核心模块,对于提升模型的目标检测能力起着关键作用。它主要负责对输入特征进行深度处理,以学习更丰富和有效的特征表示,从而提高模型对目标物体的检测精度。

2.1 设计结构

  1. 输入预处理:输入特征首先经过 1 × 1 1×1 1×1卷积批归一化激活函数进行预处理。这一步骤有助于调整特征的维度、分布,并引入非线性激活,使网络能够学习到更复杂的特征关系。公式表示为: Z l − 2 = Φ ^ ( B N ( C o n v 1 × 1 ( Z l − 3 ) ) ) Z^{l - 2}=\hat{\Phi}(BN(Conv_{1×1}(Z^{l - 3}))) Zl2=Φ^(BN(Conv1×1(Zl3)))其中 Φ ^ \hat{\Phi} Φ^表示SiLU激活函数

  2. Layer Normalization与Residual Linking:借鉴Transformer Blocks的风格架构,采用Layer Normalization对特征进行归一化处理,以加速模型的训练和收敛。同时,引入残差连接(Residual Linking),使得模型在深度堆叠时能够保持信息的有效流动,避免梯度消失或爆炸问题,确保网络能够高效地学习深层次的特征表示。计算过程为: Z l − 1 = S S 2 D ( L N ( L S ( Z l − 2 ) ) ) + Z l − 2 Z^{l - 1}=SS2D(LN(LS(Z^{l - 2})))+Z^{l - 2} Zl1=SS2D(LN(LS(Zl2)))+Zl2

  3. SS2D操作SS2D(2D - Selective - Scan)是ODSSBlock中的重要操作,它主要包括扫描扩展(Scan Expansion)、S6块处理(S6 Block)和扫描合并(Scan Merge)三个步骤(如图所示)。

    • 扫描扩展:将输入图像扩展为一系列子图像,从对角线视角看,沿着四个对称方向(自上而下、自下而上、从左到右、从右到左)进行扫描,每个方向的扫描结果形成一个序列。这样的布局全面覆盖输入图像的所有区域,为后续特征提取提供丰富的多维信息基础,增强了图像特征多维捕获的效率和全面性。
    • S6块处理:对扫描扩展得到的子图像进行特征提取操作,是SS2D算法中对图像子块进行特征提取的关键步骤。
    • 扫描合并:将来自不同方向的经过S6块处理后的序列作为输入,将这些子图像序列合并在一起,形成与输入图像大小相同的输出图像,从而将不同方向提取的特征融合起来,实现从局部特征到全局特征的提取。

在这里插入图片描述

  1. LocalSpatial Block(LS Block)LS Block主要用于增强对局部特征的捕获能力。它对输入特征先进行深度可分离卷积,以提取局部空间信息,降低计算成本和参数数量。接着通过 1 × 1 1×1 1×1卷积混合通道信息,使用非线性GELU激活函数改变特征的通道数量而不改变空间维度,增强特征表示。最后将原始输入与处理后的特征通过残差连接融合。公式为: F l = C o n v 1 × 1 ( Φ ( C o n v 1 × 1 ( F l − 1 ) ) ) ⊕ F l − 2 F^{l}=Conv_{1×1}(\Phi(Conv_{1×1}(F^{l - 1})))\oplus F^{l - 2} Fl=Conv1×1(Φ(Conv1×1(Fl1)))Fl2其中 F l F^{l} Fl是输出特征, Φ \Phi Φ表示激活函数(GELU)。

在这里插入图片描述

  1. ResGated Block(RG Block)RG Block旨在以较低的计算成本提高模型性能,通过引入门控机制和深度卷积残差连接,能够有效地捕捉像素级别的局部依赖关系,同时将全局依赖关系和特征传递到每个像素,使模型对图像中的细粒度特征更加敏感,增强模型的表达能力。

    它从输入创建两个分支,在每个分支上以 1 × 1 1×1 1×1卷积实现全连接层操作。一个分支使用深度可分离卷积(DW - Conv)作为位置编码模块,并通过残差连接回流梯度。采用非线性GeLU作为激活函数,两个分支通过元素乘法合并,然后通过 1 × 1 1×1 1×1卷积融合通道信息,最后与原始输入通过残差连接相加。输出特征 X l X^{l} Xl的计算公式为: X l = C o n v 1 × 1 ( X 1 l − 1 ⊙ Φ ( D W C o n v 3 × 3 ( X 2 l − 1 ) ⊕ X 2 l − 1 ) ) ⊕ X l − 2 X^{l}=Conv_{1×1}(X_{1}^{l - 1}\odot\Phi(DWConv_{3×3}(X_{2}^{l - 1})\oplus X_{2}^{l - 1}))\oplus X^{l - 2} Xl=Conv1×1(X1l1Φ(DWConv3×3(X2l1)X2l1))Xl2其中 ⊙ \odot 表示元素乘法, Φ \Phi Φ表示激活函数(GeLU)。

在这里插入图片描述

  1. 最终输出:经过上述一系列处理后,ODSSBlock通过残差连接将处理后的特征与原始输入相加,得到最终的输出特征,公式为: Z l = R G ( L N ( Z l − 1 ) ) + Z l − 1 Z^{l}=RG(LN(Z^{l - 1})) + Z^{l - 1} Zl=RG(LN(Zl1))+Zl1

在这里插入图片描述

2.2 优势

  1. 高效的特征处理ODSSBlock通过一系列精心设计的操作,包括输入预处理Layer Normalization残差连接SS2D操作以及LS BlockRG Block的协同工作,能够高效地处理输入特征。在保持深度堆叠的情况下,确保网络能够稳定训练,同时有效提取图像的局部和全局特征,为目标检测提供丰富的特征信息。
  2. 增强的局部特征捕获LS Block通过深度可分离卷积和残差连接,在降低计算成本的同时增强了对局部空间信息的提取能力,提高了模型对不同尺度目标的检测能力,增强了模型对尺度变化的鲁棒性
  3. 全局特征整合与表达RG Block在捕获像素级别的局部依赖关系的同时,有效地整合了全局特征信息,增强了模型的表达能力,有助于提高模型对目标物体的定位和识别准确性
  4. 多方向特征融合SS2D操作这种多方向的特征融合方式使得模型能够更全面地理解图像中的目标物体及其上下文关系,提高了模型在复杂场景下的检测性能。

论文:https://arxiv.org/pdf/2406.05835

三、Mamba-YOLO相关模块的实现代码

四、添加步骤

模块完整介绍个人总结实现代码模块改进yaml配置、以及详细添加步骤请参考对应链接:

YOLOv8:
详细步骤:YOLOv8改进策略【YOLO和Mamba】| 替换骨干 Mamba-YOLOv8-B !!! 最新的发文热点

改进合集:YOLOv8全方位改进目录一览


YOLOv9:

改进合集:YOLOv9全方位改进目录一览


YOLOv10:
详细步骤:YOLOv10改进策略【YOLO和Mamba】| 替换骨干 Mamba-YOLOv10-B !!! 最新的发文热点

改进合集:YOLOv10全方位改进目录一览


YOLOv11:
详细步骤:YOLOv11改进策略【YOLO和Mamba】| 替换骨干 Mamba-YOLOv11-B !!! 最新的发文热点

改进合集:YOLOv11全方位改进目录一览


RT-DETR:
详细步骤:RT-DETR改进策略【RT-DETR和Mamba】| 替换骨干 Mamba-RT-DETR-B !!! 最新的发文热点

改进合集:RT-DETR全方位改进目录一览

### YOLOv8 架构详解 #### 1. 总体架构概述 YOLOv8继承并优化了先前版本的设计理念,旨在提供更快的速度和更高的准确性。该模型基于改进后的卷积神经网络(CNN),能够高效处理各种规模的目标检测任务[^3]。 #### 2. 主干网络 Backbone 主干部分负责从输入图片中抽取丰富的特征表示。YOLOv8采用了类似于CSPDarknet53的结构作为基础骨干网,这种设计不仅提高了计算资源利用率还增强了特征表达能力。此外,为了适应不同的应用场景需求,YOLOv8支持灵活调整backbone层数量以及宽度比例等超参数设置[^4]。 ```python # 定义Backbone模块 class CSPDarknet(nn.Module): def __init__(self, depth_multiple=0.33, width_multiple=0.5): super().__init__() self.backbone = nn.Sequential( Conv(3, int(64 * width_multiple), k=3), ... ) ``` #### 3. 颈部 Neck - PAFPN (Path Aggregation FPN) 颈部组件用于加强多尺度特征之间的联系。相较于传统的FPN(Feature Pyramid Network),PAFPN引入了一个额外的自下而上的路径来促进低层次细粒度信息向高层次传播,使得最终得到的特征金字塔更加鲁棒且具有更强的表现力。 ```python # 实现PAFPN中的PANet部分 def forward(self, x): p3, p4, p5 = self.backbone(x) # Top-down pathway n5 = self.reduce_conv_c5(p5) upsampled_p5 = F.interpolate(n5, scale_factor=2) concat_1 = torch.cat([upsampled_p5, p4], dim=1) n4 = self.conv3_for_upsample1(concat_1) upsampled_n4 = F.interpolate(n4, scale_factor=2) concat_2 = torch.cat([upsampled_n4, p3], dim=1) # Bottom-up pathway final_outs = [ self.out_head[i](concat_2 if i==0 else outs[-1]) for i in range(len(self.out_head)) ] return tuple(final_outs[::-1]) ``` #### 4. 头部 Head - Decoupled Head 头部由多个分支构成,各自专注于特定的任务如分类、定位框回归等。不同于以往版本中耦合在一起的方式,YOLOv8采取了解耦策略——即每个子任务都拥有独立的学习机制,这有助于减少相互干扰进而提高整体效果。 ```python # 创建Decoupled Head类 class Detect(nn.Module): def __init__(...): super(Detect, self).__init__() # Classification head self.cls_convs = nn.ModuleList([ Conv(in_channels=out_ch, out_channels=num_classes*anchor_per_scale, kernel_size=(1,)) for _ in range(num_layers)]) # Regression head self.reg_convs = nn.ModuleList([ Conv(in_channels=out_ch, out_channels=4*anchor_per_scale, kernel_size=(1,)) for _ in range(num_layers)]) def forward(...):... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Limiiiing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值