【免费下载链接】Mamba-YOLO
the official pytorch implementation of “Mamba-YOLO:SSMs-based for Object Detection”
Mamba-YOLO 是基于状态空间模型(State Space Model,SSM)的 PyTorch 官方实现,用于实时目标检测。它用 SSM 模块(VSSBlock、XSSBlock)替代传统 YOLO 中的卷积特征提取块,在保持检测精度的同时显著降低了计算量。本文将逐层解剖它的三大核心组件:SimpleStem 输入茎、VSSBlock 主干块和 PAFPN 检测头,帮你快速理解"状态空间模型如何取代卷积"这一热点话题。
上图展示了 Mamba-YOLO 的 T、B、L 三个规格与 YOLOv5/v6/v8、YOLOX、DAMO YOLO 等模型的对比:Mamba-YOLO 的曲线始终位于最上方——同样的精度需要更少的 FLOPs,同样的参数量能换来更高的 mAP。这正是 SSM 替换卷积带来的收益。
为什么状态空间模型能取代卷积?
传统卷积网络感受野受限:3×3 卷积只能看局部,要看全图就得堆叠很多层,深度增加后计算量呈平方级增长。SSM 的另一个代表 Mamba 证明了:把图像/序列看作一维序列,用递归的"状态更新"方式建模长程依赖,计算复杂度可以降到线性。
Mamba-YOLO 借鉴了 VMamba 的思路(selective scan 算子正是从 selective_scan/ 移植而来),把二维特征图沿行、列及其翻转方向共 4 条路径做交叉扫描(Cross Scan),在不损失方向信息的前提下让 SSM 覆盖全图。这就是整个网络的"发动机"——SS2D模块:
源码位置:ultralytics/nn/modules/mamba_yolo.py
第一站:SimpleStem——轻量输入茎
输入图像首先经过SimpleStem完成下采样和初步特征提取,取代了 YOLOv8 中两个 C2f 堆叠的 Stem。它的结构非常简洁:
- 两次 3×3 卷积(stride=2):分辨率从 640×640 一路压到 160×160(即 P2/4)
- 通道数从 3 → embed_dim/2 → embed_dim(默认 128)
- 每个卷积后接 BatchNorm + 激活(GELU / SiLU)
源码位置:ultralytics/nn/modules/mamba_yolo.py
📌 设计亮点:整个 Stem 只有 2 个卷积层,没有任何残差连接。因为后面紧跟 3 个 VSSBlock 负责深层特征学习,Stem 只需要"把图变小、通道拉起来"即可,非常轻量。
第二站:VSSBlock——主干的SSM核心
VSSBlock 是 Mamba-YOLO 主干中替代 C2f 的核心模块,一个完整数据流是这样的:
- proj_conv:1×1 卷积 + BN + SiLU,把输入通道对齐到 hidden_dim
- LSBlock:深度可分离卷积 + BatchNorm 的局部特征增强(Local Spatial Block)
- SS2D(交叉扫描 SSM):对特征图做 4 方向选择性扫描,通过
cross_selective_scan函数调用 CUDA 算子selective_scan_cuda_core,是"取代卷积"的关键一步 - RGBlock(FFN 分支):GELU 门控的前馈块,与 Transformer 的 MLP 分支类似
- 两条分支都带DropPath随机深度,训练时按概率丢弃残差路径,起到正则化作用
源码位置:ultralytics/nn/modules/mamba_yolo.py
主干共 4 段 VSSBlock,分辨率逐级减半:
| 阶段 | 模块 | 分辨率 | VSSBlock 层数 |
|---|---|---|---|
| P2/4 | SimpleStem + VSSBlock | 160×160 | 3 |
| P3/8 | VSSBlock + VisionClueMerge | 80×80 | 3 |
| P4/16 | VSSBlock + VisionClueMerge | 40×40 | 9 |
| P5/32 | VSSBlock + SPPF | 20×20 | 3 |
其中VisionClueMerge负责下采样:把特征图按 2×2 的四个相位切片拼接后,用一个 1×1 卷积把 4 倍通道压回目标维度——相当于"像素重排 + 逐点卷积"的轻量化下采样方案。
源码位置:ultralytics/nn/modules/mamba_yolo.py,完整结构可看 Mamba-YOLO-B.yaml
📌 注意中间层(P4/16)堆了9 个 VSSBlock,是全模型最深的部分:此处分辨率只有 40×40,SSM 计算代价低,是"深度换精度"的最佳位置。
第三站:PAFPN——用XSSBlock重构检测头
Mamba-YOLO 的检测头沿用了 PAFPN 的双向特征金字塔思想:
- 上行(Top-down):P5 上采样后与 P4、P3 逐级 Concat,恢复小目标的细节
- 下行(Bottom-up):再逐级下采样回传,把语义强的信息送给小目标层
- 最后 P3/P4/P5 三个尺度送入
Detect头输出 80 类检测框
与标准 PAFPN 的区别在于:所有融合节点上原本的路径聚合卷积被换成了XSSBlock——它是 VSSBlock 的轻量变体,内部同样是SS2D + LSBlock + RGBlock的组合,只是去掉了部分投影层,更适合放在计算敏感的检测头里。
源码位置:ultralytics/nn/modules/mamba_yolo.py
Detect ← P3(256ch) + P4(512ch) + P5(1024ch) ↑ XSSBlock ↑ XSSBlock ↑ XSSBlock 三级尺度特征,多尺度目标一网打尽三个规格怎么选?
Mamba-YOLO 提供 T(Tiny)、B(Base)、L(Large)三档,通过 mbyolo_train.py 的--config参数切换:
| 规格 | 参数量 | FLOPs | 适用场景 |
|---|---|---|---|
| T | 6.1M | 14.3G | 边缘设备、实时推理 |
| B | 21.8M | 49.7G | 精度/速度均衡,最常用 |
| L | 57.6M | 156.2G | 追求最高精度 |
配置文件分别在 Mamba-YOLO-T.yaml、Mamba-YOLO-B.yaml、Mamba-YOLO-L.yaml。
上手训练:最小配置示例
环境要求 Python 3.11 + PyTorch 2.3.0,需要先编译 selective_scan/ 中的 CUDA 算子。安装完成后,一条命令即可开始训练:
python mbyolo_train.py --task train \ --data ultralytics/cfg/datasets/coco.yaml \ --config ultralytics/cfg/models/mamba-yolo/Mamba-YOLO-T.yaml \ --amp --project ./output_dir/mscoco --name mambayolo_t📌 关键参数:--amp开启混合精度加速,--epochs默认 300 轮,数据集配置在 ultralytics/cfg/datasets/ 目录下,换数据集只需替换--data指向的 yaml。
小结
Mamba-YOLO 的架构精髓可以概括为三句话:
- ✅SimpleStem用最少的卷积完成输入压缩,把计算预算留给 SSM
- ✅VSSBlock + SS2D用 4 方向交叉选择性扫描实现线性复杂度的全局建模,取代了 C2f 卷积块
- ✅PAFPN + XSSBlock让双向特征金字塔也跑在 SSM 上,多尺度检测全面提速
从对比曲线看,Mamba-YOLO-L 以约 156 GFLOPs 拿到了 50+ mAP,超过了 YOLOv8 同等算力的表现。对于想入门 SSM 视觉模型、又熟悉 YOLO 体系的新手来说,这个项目是目前最易上手的状态空间目标检测实现之一:YAML 即配置、改一行参数就能对比不同规格,非常适合做 SSM 架构的实验与二次开发。
【免费下载链接】Mamba-YOLO
the official pytorch implementation of “Mamba-YOLO:SSMs-based for Object Detection”
相关推荐
Mamba-YOLO:基于状态空间模型的新一代目标检测框架
Mamba YOLO:基于状态空间模型的新一代目标检测框架 Mamba YOLO 是一个基于状态空间模型(SSMs)的先进目标检测框架,将传统的YOLO架构与现
Mamba-YOLO:基于状态空间模型的目标检测革命
Mamba YOLO:基于状态空间模型的目标检测革命 Mamba架构作为新一代的状态空间模型(SSMs),正在计算机视觉领域掀起技术革命。Mamba YOLO项
从Mamba到Mamba-2:状态空间模型如何颠覆序列建模范式
从Mamba到Mamba 2:状态空间模型如何颠覆序列建模范式 你是否还在为Transformer模型的计算复杂性而困扰?面对长文本处理时,注意力机制带来的O
人工智能深度学习基础模型
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考