新手必看:YOLOv9训练推理镜像保姆级入门教程
你是不是也经历过这些时刻?
下载完YOLOv9代码,配环境配到怀疑人生——CUDA版本对不上、PyTorch和torchvision版本冲突、OpenCV编译报错、detect.py跑不起来还找不到报错在哪……更别说训练时显存爆满、loss飞天、mAP卡在0.1不动了。
别急,这篇教程就是为你写的。
我们不讲论文里的“可编程梯度信息”,也不堆砌“动态标签分配”“GELAN结构”这类术语。我们就干一件事:用预装好的镜像,5分钟启动,15分钟跑通推理,30分钟训完你的第一个数据集。全程不用装任何依赖,不改一行配置,不查一个报错日志——所有坑,我们都替你踩过了。
下面开始,咱们像搭积木一样,把YOLOv9真正用起来。
1. 镜像到底是什么?为什么它能救你?
先说清楚:这个“YOLOv9 官方版训练与推理镜像”,不是一段代码,也不是一个压缩包,而是一个已经调好所有软硬件关系的完整操作系统环境——就像一台刚出厂、预装好Office、Photoshop、Chrome,连打印机驱动都配好了的笔记本电脑。
它里面已经装好了:
- PyTorch 1.10.0(专为CUDA 12.1优化,不和cudatoolkit 11.3打架)
- torchvision 0.11.0 + torchaudio 0.10.0(版本严丝合缝,不会出现“找不到 _C module”)
- OpenCV-Python + NumPy + Pandas + Matplotlib(画图、读图、处理数据全齐)
- 所有YOLOv9官方训练/推理脚本(
train_dual.py、detect_dual.py、val_dual.py) - 已下载好的
yolov9-s.pt权重文件(不用再等20分钟从GitHub下载,也不用担心被墙) - 代码路径固定在
/root/yolov9(不用到处找cd进哪个文件夹)
换句话说:你拿到的不是“原料”,是“半成品餐包”——撕开包装,放进烤箱,定时,出炉就能吃。
划重点:镜像默认启动后,你处在
baseconda 环境里。但YOLOv9所有依赖都在yolov9环境中。这一步漏掉,后面所有命令都会报ModuleNotFoundError。别跳过!
2. 第一步:激活环境,进入代码目录(2分钟)
打开终端(或Jupyter Lab终端),依次执行这两条命令:
conda activate yolov9cd /root/yolov9成功标志:终端提示符变成(yolov9) root@xxx:/root/yolov9#,且ls能看到detect_dual.py、train_dual.py、models/、data/等文件夹。
常见错误提醒:
- 如果提示
Command 'conda' not found→ 镜像未正确加载,请重启容器并确认镜像名称无误; - 如果提示
Could not find conda environment: yolov9→ 说明镜像构建异常,请重新拉取; - 如果
cd /root/yolov9报错No such file or directory→ 检查路径是否多打了空格或大小写错误(Linux严格区分大小写)。
3. 第二步:用一张图,5秒跑通推理(实测最快记录:4.7秒)
我们不用自己找图。镜像里自带测试图:/root/yolov9/data/images/horses.jpg。
执行这条命令:
python detect_dual.py --source './data/images/horses.jpg' --img 640 --device 0 --weights './yolov9-s.pt' --name yolov9_s_640_detect成功标志:
- 终端最后几行显示类似
Results saved to runs/detect/yolov9_s_640_detect; - 进入该目录:
ls runs/detect/yolov9_s_640_detect/,能看到horses.jpg(带检测框的输出图); - 用
display(Linux)或直接下载到本地双击打开,你会看到马群上清晰的绿色矩形框+类别标签+置信度。
小贴士:
--img 640是输入分辨率,数值越大越清晰但越慢,新手建议保持640;--device 0表示使用第0号GPU(单卡机器默认就是0);如果你没有GPU,改成--device cpu,速度会慢3–5倍,但一定能跑通;--name是输出文件夹名,可任意修改,比如改成--name my_first_detect,结果就会存在runs/detect/my_first_detect/下。
为什么叫
detect_dual.py?
YOLOv9官方提供了两套推理逻辑:单阶段(detect.py)和双阶段(detect_dual.py)。后者加入了额外的后处理模块,对小目标、遮挡目标检出率更高,且默认启用NMS(非极大值抑制),结果更干净。新手直接用detect_dual.py,省心。
4. 第三步:准备你自己的数据集(10分钟,比你整理微信聊天记录还快)
YOLOv9只认一种格式:YOLO格式。它不挑你用手机拍还是单反扫,只关心两件事:
① 图片放在哪;② 每张图对应的.txt标注文件长什么样。
4.1 数据集结构(照着抄就行)
在/root/yolov9/下新建文件夹,按这个结构组织:
my_dataset/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── data.yamlimages/train/放训练用的图片(如dog_001.jpg,cat_002.jpg);labels/train/放对应标注文件(同名,如dog_001.txt,cat_002.txt);images/val/和labels/val/同理,放验证集(数量建议为训练集的10%–20%);data.yaml是总配置文件,内容如下(请复制粘贴,仅修改类名和路径):
train: ../my_dataset/images/train val: ../my_dataset/images/val nc: 2 # 类别数,比如猫+狗 = 2 names: ['cat', 'dog'] # 类别名,顺序必须和txt里数字一一对应4.2 标注文件怎么写?(30秒学会)
打开dog_001.txt,它长这样:
0 0.45 0.62 0.31 0.48 1 0.78 0.33 0.22 0.39每行代表一个目标,格式是:类别ID 中心点x 中心点y 宽度 高度(全部归一化到0–1之间)
怎么生成?别手写!推荐两个免费工具:
- LabelImg(桌面软件,支持YOLO导出,Windows/macOS/Linux全平台);
- CVAT(网页版,团队协作友好,https://cvat.org 免费注册即用)。
实操验证:把你的
my_dataset/放好后,在终端运行:python -c "import yaml; print(yaml.safe_load(open('my_dataset/data.yaml')))"如果输出字典内容(含train,val,nc,names),说明路径和格式完全正确。
5. 第四步:训练你的第一个模型(20分钟,含等待时间)
确保你已完成:
✔ 激活yolov9环境;
✔cd /root/yolov9;
✔my_dataset/结构正确且data.yaml路径无误。
执行训练命令(单卡,batch=64,20轮):
python train_dual.py \ --workers 8 \ --device 0 \ --batch 64 \ --data my_dataset/data.yaml \ --img 640 \ --cfg models/detect/yolov9-s.yaml \ --weights '' \ --name yolov9_my_catdog \ --hyp hyp.scratch-high.yaml \ --min-items 0 \ --epochs 20 \ --close-mosaic 15参数逐个解释(全是人话):
--workers 8:用8个CPU线程同时读图,加快数据加载(根据你CPU核心数调整,一般设为CPU核心数-1);--batch 64:一次喂给GPU 64张图,显存够就尽量大(RTX 3090可跑64,2080Ti建议32);--data:指向你的data.yaml;--cfg:指定模型结构,yolov9-s.yaml是轻量版,适合新手快速验证;--weights '':空字符串 = 从头训练(不加载预训练权重);--name:训练结果保存在runs/train/yolov9_my_catdog/;--hyp:超参配置文件,“high”表示高数据增强强度,提升泛化能力;--close-mosaic 15:前15轮用Mosaic增强(拼4图),之后关闭,让模型后期更稳定。
训练中你会看到:
- 每轮结束打印
Epoch 1/20 ... mAP50-95: 0.1234; runs/train/yolov9_my_catdog/下实时生成weights/best.pt(当前最优)、weights/last.pt(最后一轮);results.csv可用Excel打开,看mAP、precision、recall曲线。
新手避坑指南:
- 如果报
CUDA out of memory→ 减小--batch(试32→16→8); - 如果
mAP一直为0 → 检查data.yaml中nc和names是否匹配,检查labels/下.txt文件是否为空; - 如果训练中途断了 → 直接用
--weights runs/train/yolov9_my_catdog/weights/last.pt接着训,加--resume参数。
6. 第五步:用你训好的模型,再做一次推理(3分钟)
训练完成后,best.pt就是你专属的检测器。现在用它检测新图:
python detect_dual.py \ --source './data/images/bus.jpg' \ --img 640 \ --device 0 \ --weights 'runs/train/yolov9_my_catdog/weights/best.pt' \ --name yolov9_my_catdog_test打开runs/detect/yolov9_my_catdog_test/bus.jpg——
如果图里有猫狗,框就出来了;没有,就干干净净。这才是属于你自己的AI眼睛。
7. 进阶技巧:3个让效果翻倍的实操建议
上面流程已足够跑通,但想让模型真正好用,这3个技巧值得你花2分钟记住:
7.1 推理时加--conf 0.4,过滤低质量框
默认置信度过滤是0.25,很多虚警框会混进来。加一句:
--conf 0.4就能只保留“把握较大”的检测结果,肉眼看起来干净得多。
7.2 训练时加--cache,提速30%(内存够就开)
YOLOv9支持把图片缓存到内存,避免反复IO读取:
--cache ram # 内存充足时用 # 或 --cache disk # 内存紧张时用SSD缓存首次训练稍慢(要缓存),后续每轮快很多。
7.3 评估模型效果,用val_dual.py
训练完别只看控制台mAP,用验证脚本看细节:
python val_dual.py \ --data my_dataset/data.yaml \ --weights runs/train/yolov9_my_catdog/weights/best.pt \ --batch 32 \ --img 640 \ --task val \ --name yolov9_my_catdog_val结果会生成runs/val/yolov9_my_catdog_val/confusion_matrix.png(混淆矩阵)和PR_curve.png(精确率-召回率曲线),一眼看出:猫识别准不准?狗容易漏检吗?
8. 常见问题速查表(看完省下2小时调试)
| 问题现象 | 最可能原因 | 一句话解决 |
|---|---|---|
ModuleNotFoundError: No module named 'torch' | 没激活yolov9环境 | 执行conda activate yolov9 |
OSError: [Errno 12] Cannot allocate memory | batch size太大 | 改--batch 32或16 |
AssertionError: Image Not Found | data.yaml里路径写错 | 检查train:和val:路径是否以../开头,是否真实存在 |
KeyError: 'names' | data.yaml缺少names:字段 | 补上names: ['class1', 'class2'] |
detect_dual.py: error: unrecognized arguments: --conf | 用错了脚本 | 确认是detect_dual.py,不是detect.py |
| 训练loss为nan | 学习率太高或数据标注错误 | 先用--lr0 0.001降低学习率,再检查.txt文件是否有负数/超1数值 |
终极口诀:路径用相对、环境必激活、batch看显存、yaml查字段、报错先读第一行。
9. 总结:你已经掌握了YOLOv9落地的核心能力
回看一下,你刚刚完成了什么:
- 在5分钟内绕过所有环境配置雷区,直奔核心任务;
- 用一行命令完成端到端推理,亲眼看到AI“看见”世界;
- 把手机拍的几十张猫狗照片,变成标准YOLO数据集;
- 用20分钟训练出专属检测模型,并用它识别新图;
- 掌握了3个立竿见影的提效技巧和一份问题速查表。
这不是“学完YOLOv9”,而是“用YOLOv9做成了一件事”。工程的价值,永远在于“做出来”,而不在于“懂原理”。
下一步你可以:
→ 换成自己的工业质检图,试试缺陷检测;
→ 加100张新图微调,让模型适应你产线的光照条件;
→ 把best.pt导出为ONNX,部署到Jetson Nano上跑实时检测。
路已经铺平。现在,轮到你出发了。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。