新手必看:YOLOv9训练与推理保姆级教程
你是不是也经历过这样的时刻:看到目标检测效果惊艳的视频,想自己跑通YOLOv9却卡在环境配置上?下载完代码发现缺这少那,conda环境激活失败、CUDA版本不匹配、数据路径改来改去就是报错……别急,这篇教程专为“第一次接触YOLOv9”的你而写。我们不讲论文公式,不堆技术参数,只聚焦一件事:让你在30分钟内,从零跑通训练和推理全流程,看到真实检测框跳出来。
本教程基于CSDN星图提供的「YOLOv9 官方版训练与推理镜像」——它不是半成品,而是真正开箱即用的完整环境:PyTorch 1.10 + CUDA 12.1 + 预装全部依赖 + 官方代码 + 预下载权重,所有坑都已提前填平。你只需要按步骤敲命令,剩下的交给镜像。
下面的内容,我会用“你正在操作”的视角带你走一遍:从启动镜像开始,到成功检测一张马群照片;从准备自己的数据集,到完成一轮轻量训练。每一步都标注了为什么这么做、常见卡点在哪、怎么一眼看出是否成功。没有“理论上应该”,只有“你此刻该敲什么”。
1. 镜像启动与环境准备:三步进入工作状态
很多新手第一步就停住了:镜像拉下来,打开终端,面对黑底白字的命令行,不知道从哪下手。其实核心就三件事:启动、激活、确认。我们一步步来。
1.1 启动镜像并进入终端
如果你使用的是CSDN星图平台,找到「YOLOv9 官方版训练与推理镜像」,点击“一键启动”。镜像启动后,会自动打开一个Web终端(类似浏览器里的Linux窗口)。
此时你看到的默认是base环境——这是conda的初始环境,但YOLOv9需要专用环境。别担心,切换只要一条命令。
1.2 激活YOLOv9专属环境
在终端中输入:
conda activate yolov9按回车执行。如果看到终端提示符前多了(yolov9)字样,比如:(yolov9) root@xxx:~#
恭喜,环境激活成功!
如果提示Command 'conda' not found或Could not find conda environment: yolov9,说明镜像未完全加载,请稍等10秒后重试;若仍失败,可刷新页面重启镜像。
1.3 确认代码与权重位置
YOLOv9官方代码已预装在固定路径,无需git clone,直接进入即可:
cd /root/yolov9然后检查关键文件是否存在:
ls -l yolov9-s.pt models/detect/ data.yaml你应该看到:
yolov9-s.pt:预下载的轻量级模型权重(s代表small,适合新手快速验证)models/detect/yolov9-s.yaml:对应模型的结构定义文件data.yaml:数据集配置模板(后面训练时会修改它)
这三样齐了,说明镜像环境完整无损,可以放心往下走。
2. 第一次推理:5分钟看到检测框跳出来
推理是验证环境是否正常的最快方式。我们不用自己找图,镜像里已自带测试图片;也不用调参,用默认设置就能出效果。目标很明确:让YOLOv9在一张马群照片上画出边界框,并保存结果图。
2.1 执行单张图片检测命令
在已进入/root/yolov9目录且激活yolov9环境的前提下,运行以下命令:
python detect_dual.py --source './data/images/horses.jpg' --img 640 --device 0 --weights './yolov9-s.pt' --name yolov9_s_640_detect逐个解释参数含义(你不需要死记,但要知道它们在做什么):
--source:指定要检测的图片路径,这里用镜像自带的horses.jpg--img 640:把图片缩放到640×640像素再送入模型(YOLOv9输入必须是正方形)--device 0:使用第0号GPU(单卡机器默认就是0)--weights:加载预训练权重yolov9-s.pt--name:给这次检测结果起个名字,方便后续查找
2.2 查看并验证检测结果
命令执行完成后(通常3–8秒),终端会输出类似这样的日志:
Results saved to runs/detect/yolov9_s_640_detect这意味着结果已生成。现在,我们去查看它:
ls runs/detect/yolov9_s_640_detect/你应该看到一个horses.jpg文件——这就是原图叠加检测框后的结果图。
如何查看?CSDN星图Web终端支持文件预览:在左侧文件树中,依次展开runs→detect→yolov9_s_640_detect,点击horses.jpg,右侧将直接显示图片。
你将看到:几匹马身上被画上了带标签(horse)和置信度(如0.87)的彩色矩形框。
小贴士:如果没看到框,或框特别小/模糊,大概率是--img尺寸太小(试试--img 1280);如果报错CUDA out of memory,说明显存不足,加--device cpu强制用CPU(速度慢但能跑通)。
2.3 快速体验多图/视频检测
想试试别的?YOLOv9支持多种输入源:
- 检测整个文件夹:把你的图片放进
/root/yolov9/data/images/,然后把--source改成该文件夹路径 - 检测视频:把视频放在同目录下,
--source ./data/videos/test.mp4 - 实时摄像头:
--source 0(需镜像支持USB摄像头,云环境通常不可用)
记住核心逻辑:--source后面跟的,永远是你想“看”的东西的路径。
3. 准备自己的数据集:YOLO格式不是玄学
训练自己的模型,第一步不是写代码,而是整理数据。YOLO系列对数据格式有严格要求,但其实非常简单,只有两个要素:图片 + 对应的txt标签文件。我们用最直白的方式说清楚。
3.1 YOLO格式的本质:一张图,一个txt,一行一个物体
假设你要训练识别“苹果”和“香蕉”,那么你的数据集目录结构应该是:
my_dataset/ ├── images/ │ ├── apple_001.jpg │ ├── apple_002.jpg │ └── banana_001.jpg └── labels/ ├── apple_001.txt ├── apple_002.txt └── banana_001.txt每个.txt文件内容长这样(以apple_001.txt为例):
0 0.45 0.32 0.21 0.18 0 0.78 0.65 0.15 0.22这五行数字代表什么?
第一个数字0:类别ID(0=苹果,1=香蕉,ID从0开始连续编号)
后四个数字:归一化后的坐标(中心x, 中心y, 宽度, 高度),全部是0–1之间的小数
❌ 不是像素值!不是左上角坐标!这是新手最容易错的地方。
3.2 如何快速生成YOLO格式标签?
手动算坐标?太慢。推荐两个零门槛工具:
- LabelImg(桌面软件):开源免费,画框后自动导出YOLO格式txt
- CVAT(在线平台):浏览器打开即用,支持多人协作标注
无论用哪个,导出时选择“YOLO Darknet”格式即可。生成后,把images/和labels/文件夹一起上传到镜像的/root/yolov9/my_dataset/目录下。
3.3 编写data.yaml:告诉模型“你在教它认什么”
在/root/yolov9/目录下,复制一份data.yaml作为你的数据集配置:
cp data.yaml my_dataset.yaml用编辑器打开my_dataset.yaml(星图终端支持nano my_dataset.yaml),修改以下三处:
train: ../my_dataset/images # 训练图片路径(相对yolov9目录) val: ../my_dataset/images # 验证图片路径(可先和train一样) nc: 2 # 类别总数(苹果+香蕉=2) names: ['apple', 'banana'] # 类别名称列表,顺序必须和txt中ID一致改完保存。这个文件就是模型的“课程表”,它明确了数据在哪、有多少类、叫什么名。
4. 开始你的第一次训练:从命令到模型文件
训练不是“点一下就完事”,而是让模型通过大量图片学习“苹果长什么样”。YOLOv9训练命令看起来长,但每个参数都有明确目的。我们拆解一个最简可行的单卡训练命令。
4.1 执行轻量训练命令
确保你在/root/yolov9目录,且环境已激活,运行:
python train_dual.py \ --workers 4 \ --device 0 \ --batch 16 \ --data my_dataset.yaml \ --img 640 \ --cfg models/detect/yolov9-s.yaml \ --weights '' \ --name my_apple_banana_train \ --epochs 10关键参数说明(去掉所有冗余,只留必要项):
--workers 4:用4个子进程读取数据(数值=CPU核心数的一半,避免卡顿)--batch 16:每次送16张图进GPU(显存小就调成8或4)--data:指向你刚写的my_dataset.yaml--weights '':空字符串表示从头训练(不加载预训练权重)--epochs 10:只训练10轮(新手验证流程够用,后续可加)
4.2 实时监控训练过程
命令运行后,终端会持续滚动输出日志,重点关注三行:
Epoch gpu_mem box obj cls total targets img_size 0/9 2.1G 0.0423 0.0211 0.0156 0.0790 128 640 ...box/obj/cls:三项损失值,训练中应缓慢下降(初期波动正常)targets:本轮实际检测到的目标数(非0说明数据加载成功)- 最后一列
img_size:确认输入尺寸是640
如果看到损失值在下降,且没有FileNotFoundError或CUDA error,说明训练已在健康进行。
4.3 找到并验证训练好的模型
训练结束后,模型文件会自动保存在:/root/yolov9/runs/train/my_apple_banana_train/weights/best.pt
验证它是否可用,只需换一个--weights路径,再次运行检测:
python detect_dual.py \ --source './data/images/horses.jpg' \ --img 640 \ --device 0 \ --weights './runs/train/my_apple_banana_train/weights/best.pt' \ --name my_test_inference注意:这次检测的图片仍是horses.jpg(无关类别),目的是验证模型文件能否被正确加载。如果成功生成结果图(哪怕全是背景),说明模型已保存且可调用。
5. 推理进阶技巧:让结果更准、更快、更实用
当你能跑通基础流程后,下一步是让YOLOv9真正为你所用。这里分享3个高频实用技巧,不涉及复杂调参,全是“改一个参数就见效”的干货。
5.1 提升检测精度:换更大输入尺寸
YOLOv9-s默认用640×640输入,对小目标(如远处的苹果)容易漏检。试试1280:
python detect_dual.py --source './my_dataset/images/apple_001.jpg' --img 1280 --weights './best.pt' --name high_res效果:小目标框更准,但速度略降(GPU显存占用翻倍)。
建议:开发调试用1280,部署上线用640,平衡精度与速度。
5.2 加快推理速度:启用FP16半精度
现代GPU支持半精度计算,能提速30%以上且几乎不掉点:
python detect_dual.py --source './data/images/' --img 640 --weights './best.pt' --name fp16 --half效果:终端日志中会出现Using FP16 half-precision inference,速度提升明显。
注意:--half仅对GPU有效,CPU模式下会自动忽略。
5.3 批量处理与结果解析:不只是画框
检测结果图很直观,但业务中常需结构化数据(如:这张图里有几个苹果?坐标在哪?)。YOLOv9默认会生成results.txt:
# 运行检测时添加 --save-txt python detect_dual.py --source './my_dataset/images/' --weights './best.pt' --save-txt结果保存在runs/detect/xxx/labels/下,每个txt文件内容示例:
0 0.452 0.321 0.210 0.180 0.92 0 0.785 0.652 0.150 0.220 0.87最后一列是置信度(0.92=92%把握是苹果)。你可以用Python轻松读取:
import numpy as np with open('runs/detect/xxx/labels/apple_001.txt') as f: for line in f: cls, x, y, w, h, conf = map(float, line.strip().split()) print(f"检测到{['apple','banana'][int(cls)]},置信度{conf:.2f}")6. 常见问题速查:这些报错,90%的新手都遇到过
训练和推理过程中,总会遇到几个“经典报错”。与其百度半天,不如直接对照这里,30秒定位原因。
6.1 “ModuleNotFoundError: No module named 'torch'”
❌ 错误原因:没激活yolov9环境,还在base下运行
解决方案:立即执行conda activate yolov9,再重试命令
6.2 “AssertionError: Image Not Found”
❌ 错误原因:--source路径写错,或图片不在指定位置
解决方案:用ls命令确认路径存在,例如ls ./my_dataset/images/,确保文件名大小写完全一致(Linux区分大小写)
6.3 “CUDA out of memory”
❌ 错误原因:GPU显存不足(尤其用大图或大batch时)
解决方案(按优先级):
- 减小
--batch(如从64→16) - 减小
--img(如从1280→640) - 加
--device cpu强制CPU运行(慢但稳)
6.4 “KeyError: 'nc' in data.yaml”
❌ 错误原因:my_dataset.yaml里漏写了nc:或names:
解决方案:用cat my_dataset.yaml检查,确保包含且格式正确:
nc: 2 names: ['apple', 'banana']6.5 训练loss不下降,始终在高位震荡
❌ 错误原因:数据集太小(<100张图)或标注质量差(框不准、漏标)
解决方案:
- 先用YOLOv9-s预训练权重微调:把
--weights ''换成--weights './yolov9-s.pt' - 检查几张
labels/下的txt,确认坐标是0–1之间的小数,不是像素值
7. 总结:你已经掌握了YOLOv9落地的核心能力
回顾这趟旅程,你完成了:
- 在5分钟内,用预置镜像跑通首次推理,亲眼看到检测框;
- 理解了YOLO数据格式的本质,知道如何准备自己的图片和标签;
- 编写了一个可工作的
data.yaml,让模型认识你的新类别; - 成功执行了一次端到端训练,生成了属于你的
best.pt; - 掌握了3个即插即用的进阶技巧:调尺寸、开半精度、取结构化结果;
- 遇到5类高频报错,能快速判断原因并解决。
这已经远超“入门”——你拥有了将YOLOv9应用到真实场景的完整能力链。下一步,你可以:
- 把手机拍的水果照片标注后训练,做一个简易识别APP;
- 用
--save-txt导出结果,接入Excel做统计分析; - 尝试更大的
yolov9-m.pt权重,挑战更高精度。
技术从来不是目的,解决问题才是。你现在手里握着的,不是一个模型,而是一个能帮你看见、识别、理解图像的工具。它不神秘,也不遥远,就在你刚刚敲下的每一行命令里。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。