Windows 下 Mamba Yolo 的运行环境配置(最全)

Mamba-Yolo (AAAI 2025)是《Mamba YOLO: SSMs-Based YOLO For Object Detection》一文中提出的,在Yolo v8中加入VMamba模块的Yolo算法。GitHub项目代码为:https://github.com/HZAI-ZJNU/Mamba-YOLO。很多同学通过博客《Windows环境下Mamba-Yolo的运行环境搭建》找到笔者询问安装包等相关事宜,由于原文作者的环境是本人配置,原文博客未解释清楚原理,特此叙述。

- 环境配置

1. 环境安装原理

从其论文和项目代码可知,Mamba YOLO 的核心是Vmamba (VMamba: Visual State Space Model),本人给那位同学的也是用自己编译的 Windows下的 VMamba (含selective_scan_cuda_core模块)。因此,基本的安装只需要参考本人之前的系列博客:

整个过程已经开源,大家可以按照教程自己编译即可,成功编译后会在虚拟环境里(xxx\conda\envs\xxx\Lib\site-packages\)生成:
selective-scan-cuda-core.cp310-win-amd64.pydselective-scan-cuda-oflex.cp310-win-amd64.pyd

如果嫌麻烦,本人编译好的 whl 安装包也有(python,torch及cuda版本需要和博客里保持一致):

即使是终极版没有绕过triton,在Windows上运行目测还是和Linux上区别,如果有条件,最好还是换成Linux平台。

2. 关于 selective_scan_cuda

注意,selective_scan_cuda.cp310-win_amd64.pyd 是selective_scan_cuda模块对应的文件,它是成功安装 Mamba 后生成的文件。在 Vmamba 里面,selective_scan_cuda (其代码里简称为“cuda”)是可选的,不是必须,Mamba YOLO 里面的readme同样也未曾说这是必须要安装的。如果个人有研究的需要,想要安装 Mamba,可以参考本人之前的系列教程:

配置过程依旧是开源的,大家可以按照教程自己编译即可,成功编译后会在虚拟环境里(xxx\conda\envs\xxx\Lib\site-packages\)生成:selective_scan_cuda.cp310-win_amd64.pyd。如果嫌麻烦,本人编译好的 whl 安装包链接在博客里也有(python,torch及cuda版本需要和博客里保持一致)。

selective_scan_cuda 只在 Mamba-YOLO/ultralytics/nn/modules/common_utils_mbyolo.py 下开头出现:

try:
    "sscore acts the same as mamba_ssm"
    import selective_scan_cuda_core
except Exception as e:
    print(e, flush=True)
    "you should install mamba_ssm to use this"
    SSMODE = "mamba_ssm"
    import selective_scan_cuda
    # from mamba_ssm.ops.selective_scan_interface import selective_scan_fn, selective_scan_ref

即 selective_scan_cuda_core 导入失败才会导入 selective_scan_cuda,如个人无这种特殊需求,可以不安装 Mamba 。

3. 环境验证

尝试运行 import selective_scan_cuda_core,一般无报错即可。

- 报错及解决

大部分报错可以参考本人之前的系列博客。

4. DLl load failed

使用whl 安装的同学需要跟对应博客的环境(python 3.10,torch 及 cuda 版本)相同,否则会由于版本不匹配出现 DLl load failed 错误:

ImportError: DLL load failed while importing selective_scan_cuda_core: 找不到指定的程序。

在这里插入图片描述
检查识别到的CUDA版本是否和博客里的一致:

nvcc -V
python -c "import torch.utils.cpp_extension; print(torch.utils.cpp_extension.CUDA_HOME)"

5. FutureWarning

出现

FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers

这不是报错,只是警告,可以观察程序正常运行完成。

- 模型训练

由于平台的不同,对 Mamba-YOLO/mbyolo_train.py 文件里面包含文件路径的部分略作修改:

from ultralytics import YOLO
import argparse
import os
 
ROOT = os.path.abspath('.')
 
 
def parse_opt():
    parser = argparse.ArgumentParser()
    parser.add_argument('--data', type=str, default=os.path.normpath(os.path.join(ROOT,
                        'ultralytics/cfg/datasets/coco8.yaml')), help='dataset.yaml path')
    parser.add_argument(
        '--config', type=str, default=os.path.normpath(os.path.join(ROOT, 'ultralytics/cfg/models/mamba-yolo/Mamba-YOLO-T.yaml')), help='model path(s)')
    parser.add_argument('--batch_size', type=int,
                        default=5, help='batch size')
    parser.add_argument('--imgsz', '--img', '--img-size',
                        type=int, default=640, help='inference size (pixels)')
    parser.add_argument('--task', default='train',
                        help='train, val, test, speed or study')
    parser.add_argument('--device', default='0',
                        help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--workers', type=int, default=64,
                        help='max dataloader workers (per RANK in DDP mode)')
    parser.add_argument('--epochs', type=int, default=300)
    parser.add_argument('--optimizer', default='SGD', help='SGD, Adam, AdamW')
    parser.add_argument('--amp', action='store_true', help='open amp')
    parser.add_argument('--project', default=os.path.normpath(
        os.path.join(ROOT, 'output_dir/mscoco')), help='save to project/name')
    parser.add_argument('--name', default='mambayolo',
                        help='save to project/name')
    parser.add_argument('--half', action='store_true',
                        help='use FP16 half-precision inference')
    parser.add_argument('--dnn', action='store_true',
                        help='use OpenCV DNN for ONNX inference')
    opt = parser.parse_args()
    return opt
 
 
if __name__ == '__main__':
    print(ROOT)
 
    opt = parse_opt()
    task = opt.task
 
    print(opt.data)
 
    args = {
        "data": opt.data,
        "epochs": opt.epochs,
        "workers": opt.workers,
        "batch": opt.batch_size,
        "optimizer": opt.optimizer,
        "device": opt.device,
        "amp": opt.amp,
        "project": opt.project,
        "name": opt.name,
    }
    # 遍历打印字典args
    for key, value in args.items():
        print(key, value)
 
    model_conf = opt.config
    task_type = {
        "train": YOLO(model_conf).train(**args),
        "val": YOLO(model_conf).val(**args),
        "test": YOLO(model_conf).test(**args),
    }
    task_type.get(task)
### 关于Mamba-YOLO训练教程 #### 官方PyTorch实现说明 官方提供了完整的 PyTorch 实现,名为"Mamba-YOLO:SSMs-based for Object Detection"[^2]。此项目位于指定的 GitCode 地址上。 #### ODSS Block的重要性 ODSS Block作为核心组件,在输入数据处理方面起到了至关重要的作用,使得网络可以捕捉更加复杂和深层次的特征表达,并借助批量标准化技术维持高效的训练与推断流程[^1]。 #### 准备工作环境 对于Windows系统的用户来说,设置过程中可能会遇到CUDA版本兼容性的挑战。当尝试安装`conv1d`时如果遭遇错误提示,则可能是因为所使用的CUDA工具包(例如11.8版)同其他依赖项之间存在冲突;另外需要注意的是PyTorch版本的选择也要考虑到这一点[^3]。 为了确保顺利运行Mamba-YOLO模型: - **确认硬件支持**:验证GPU是否被正确识别并能正常使用。 - **软件环境搭建**: - 使用Anaconda创建独立的工作空间来管理不同项目的库文件; - 根据个人需求挑选合适的Python解释器版本; - 参考官方文档中的建议选择相匹配的CUDA/CuDNN以及PyTorch版本组合。 #### 训练指南概览 具体到如何启动训练过程,通常涉及以下几个要素: - 数据集准备:下载所需的数据集,并按特定格式整理好用于后续加载。 - 参数调整:依据实际应用场景微调超参数设定,比如批次大小(batch size),初始学习率(initial learning rate)等。 - 执行脚本编写:利用提供的模板或者自行设计适合自己的训练逻辑控制结构体。 下面给出一段简单的命令行指令样例用来展示怎样开始一次基本的训练任务(假设已经完成了前期准备工作): ```bash python train.py --batch-size 16 --imgsz 640 --epochs 50 ``` 这段代码片段展示了如何通过命令行传递必要的选项给训练程序,其中包含了指向数据集的位置、配置文件路径以及其他重要参数的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yyywxk

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

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

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

打赏作者

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

抵扣说明:

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

余额充值