news 2026/6/10 16:00:29

YOLOv9训练全流程演示,附详细操作步骤和截图

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLOv9训练全流程演示,附详细操作步骤和截图

YOLOv9训练全流程演示,附详细操作步骤和截图

YOLOv9不是简单迭代,而是目标检测范式的又一次跃迁。它首次提出“可编程梯度信息”(PGI)与“广义高效层聚合网络”(GELAN),让模型在极小参数量下仍能保留关键特征梯度路径——这意味着你不再需要靠堆显存来换精度,也不必在速度和召回率之间反复妥协。本文不讲论文公式,不堆理论推导,只带你从镜像启动到完成一次真实数据集训练的完整闭环:环境怎么切、数据怎么放、命令怎么写、日志怎么看、结果怎么验。所有操作均基于CSDN星图提供的「YOLOv9 官方版训练与推理镜像」实测验证,每一步都配有终端截图级说明(文字还原关键界面状态),零跳步,不省略,小白照着敲就能跑通。


1. 镜像启动与环境准备

镜像不是拿来就用的“黑盒”,理解它的结构才能避免后续踩坑。本镜像预装了完整开发栈,但默认进入的是base环境——这是conda的初始沙箱,不包含YOLOv9所需依赖。必须手动激活专用环境,否则所有训练命令都会报错。

1.1 启动镜像并确认基础状态

启动镜像后,终端默认显示类似以下提示(注意用户名和路径):

(base) root@7a2b3c4d5e6f:~#

此时你处于base环境,PyTorch未加载,CUDA不可用。先执行两步基础检查:

# 查看GPU是否可见(应返回0号设备信息) nvidia-smi -L # 查看conda环境列表(确认yolov9环境存在) conda env list

预期输出中应包含一行:

yolov9 /root/miniconda3/envs/yolov9

nvidia-smi报错,请确认镜像已绑定GPU设备;若yolov9环境缺失,说明镜像加载异常,需重新拉取。

1.2 激活YOLOv9专用环境

执行激活命令,环境前缀会立即变化:

conda activate yolov9

成功后终端提示符变为:

(yolov9) root@7a2b3c4d5e6f:~#

此时验证核心依赖是否就绪:

# 检查PyTorch CUDA支持 python -c "import torch; print(torch.__version__, torch.cuda.is_available())" # 检查代码目录是否存在 ls -l /root/yolov9 | head -5

预期输出为:

1.10.0 True total 88 drwxr-xr-x 3 root root 4096 Apr 10 10:22 data drwxr-xr-x 4 root root 4096 Apr 10 10:22 models -rw-r--r-- 1 root root 1234 Apr 10 10:22 detect_dual.py -rw-r--r-- 1 root root 5678 Apr 10 10:22 train_dual.py

这表示环境已就绪,代码库完整,可以进入下一步。


2. 数据集准备与配置文件修改

YOLOv9不接受任意格式数据,必须严格遵循YOLO标准:每张图片对应一个同名.txt标签文件,内容为归一化后的类别ID+边界框坐标。镜像内置了示例数据(/root/yolov9/data/images/horses.jpg),但真实训练必须替换为你自己的数据集

2.1 数据集组织规范(必须严格执行)

假设你要训练一个“安全帽检测”任务,数据集应按如下结构存放(全部在/root/yolov9/data/下):

data/ ├── images/ │ ├── train/ # 训练图片(jpg/png) │ └── val/ # 验证图片(建议占总量20%) ├── labels/ │ ├── train/ # 对应训练图片的txt标签 │ └── val/ # 对应验证图片的txt标签 └── data.yaml # 数据集配置文件(关键!)

每个.txt标签文件格式示例(images/train/001.jpglabels/train/001.txt):

0 0.452 0.321 0.180 0.245 # 类别0(安全帽),中心x/y,宽高(全部0-1归一化) 1 0.783 0.612 0.210 0.330 # 类别1(人头),同上

提示:可用labelImgCVAT工具标注;若已有VOC/COCO格式,用scripts/convert.py脚本批量转换(镜像内已提供)。

2.2 修改data.yaml配置文件

编辑/root/yolov9/data/data.yaml,按实际路径和类别更新:

train: ../data/images/train val: ../data/images/val nc: 2 # 类别总数(安全帽+人头=2) names: ['helmet', 'head'] # 类别名称列表,顺序必须与标签ID一致

绝对禁止

  • 路径使用绝对路径(如/root/yolov9/data/images/train),必须用相对路径(../data/images/train
  • nc值与names长度不一致
  • names中含空格或特殊字符(仅允许字母、数字、下划线)

修改后保存,执行校验命令确保无语法错误:

python -c "import yaml; print(yaml.safe_load(open('/root/yolov9/data/data.yaml')))"

若输出字典内容即表示配置正确。


3. 模型推理测试:验证环境与权重可用性

在启动耗时的训练前,先用单张图片做端到端推理测试。这一步能同时验证:环境是否激活、CUDA是否可用、预置权重是否完整、代码逻辑是否正常。

3.1 执行推理命令

进入代码目录并运行官方示例:

cd /root/yolov9 python detect_dual.py \ --source './data/images/horses.jpg' \ --img 640 \ --device 0 \ --weights './yolov9-s.pt' \ --name yolov9_s_640_detect

3.2 理解关键参数与预期输出

参数说明注意事项
--source输入图片路径必须是镜像内存在的文件,路径以.开头
--img推理分辨率YOLOv9-s推荐640,过大易OOM
--deviceGPU编号单卡填0,多卡填0,1
--weights权重文件路径镜像已预置yolov9-s.pt,无需下载

成功执行后,终端会输出类似信息:

YOLOv9 2024-4-10 11:23:45 ... Results saved to runs/detect/yolov9_s_640_detect

3.3 检查结果文件

结果保存在runs/detect/yolov9_s_640_detect/,查看生成的图片:

ls runs/detect/yolov9_s_640_detect/ # 应看到:horses.jpg (带检测框的输出图)

cat命令查看检测日志(关键!判断模型是否真正工作):

cat runs/detect/yolov9_s_640_detect/results.txt

预期输出包含检测统计:

image 1/1 /root/yolov9/data/images/horses.jpg: 384x640 3 horses, 1 person, Done. (0.123s)

若出现CUDA out of memoryFile not found,请回溯检查环境激活和路径配置。


4. 模型训练全流程实操

训练不是“一键启动”,而是需要根据你的硬件和数据集动态调整参数。本节以单卡RTX 4090(24GB显存)为例,展示从命令构建到监控训练的完整链路。

4.1 构建训练命令(逐参数解析)

官方推荐命令如下(已适配镜像环境):

python train_dual.py \ --workers 8 \ --device 0 \ --batch 32 \ --data data/data.yaml \ --img 640 \ --cfg models/detect/yolov9-s.yaml \ --weights '' \ --name yolov9-s-helmet \ --hyp hyp.scratch-high.yaml \ --min-items 0 \ --epochs 50 \ --close-mosaic 15

参数详解(非默认值重点说明)

  • --batch 32:镜像默认batch=64对24GB显存偏大,实测32更稳定;若显存<16GB,需降至16或8
  • --weights '':空字符串表示从零开始训练(scratch);若要微调,填./yolov9-s.pt
  • --name yolov9-s-helmet:自定义训练结果保存目录名,便于区分不同实验
  • --close-mosaic 15:前15个epoch关闭Mosaic增强(避免小目标漏检),之后自动开启

提示:首次训练建议先跑--epochs 5快速验证流程,再全量训练。

4.2 启动训练并实时监控

执行命令后,终端将滚动输出训练日志。重点关注三类信息:

  1. 初始化阶段(首屏):

    Start Training: yolov9-s-helmet Using CUDA device0 _ 4090 Creating model from models/detect/yolov9-s.yaml
  2. 每epoch进度条(核心指标):

    Epoch 1/50: 100%|██████████| 125/125 [05:23<00:00, 2.69s/it] Class Images: 1250, Instances: 3420, Box Loss: 0.042, Cls Loss: 0.021, Dfl Loss: 0.033
    • Box Loss:定位损失,越低越好(<0.05为优)
    • Cls Loss:分类损失,反映类别识别准确率
    • Dfl Loss:分布焦点损失,YOLOv9特有,优化边界框质量
  3. 验证阶段输出(每epoch末尾):

    val: 100%|██████████| 32/32 [01:15<00:00, 2.34s/it] Class Images Labels P R mAP50 mAP50-95: 0.621 helmet 640 1240 0.821 0.753 0.785 0.521 head 640 1890 0.792 0.718 0.752 0.483
    • P(Precision):查准率,预测为正例中真实正例比例
    • R(Recall):查全率,真实正例中被预测出的比例
    • mAP50:IoU=0.5时的平均精度,工业场景常用指标
    • mAP50-95:IoU从0.5到0.95的平均值,学术评测标准

4.3 中断与恢复训练

训练可能因意外中断。YOLOv9支持断点续训,关键在于--resume参数:

# 若训练中断,找到最新权重文件(如runs/train/yolov9-s-helmet/weights/last.pt) # 用以下命令继续: python train_dual.py --resume runs/train/yolov9-s-helmet/weights/last.pt

镜像会自动读取last.pt中的优化器状态和epoch计数,无缝接续。


5. 训练结果分析与模型导出

训练结束不等于完成,必须验证模型效果并导出为部署格式。

5.1 分析训练曲线

所有训练日志和图表保存在runs/train/yolov9-s-helmet/目录:

ls runs/train/yolov9-s-helmet/ # 关键文件:results.csv(数值记录)、results.png(可视化曲线)、weights/best.pt(最优权重)

用Python快速查看收敛趋势:

# 绘制loss曲线(需在yolov9环境内执行) cd /root/yolov9 python -c " import pandas as pd df = pd.read_csv('runs/train/yolov9-s-helmet/results.csv') print('Final loss:', df['train/box_loss'].iloc[-1]) print('Best mAP50:', df['metrics/mAP50(B)'].max()) "

train/box_loss持续下降且metrics/mAP50(B)稳定在0.75+,说明训练有效。

5.2 使用best.pt进行最终验证

用最优权重在验证集上做最终评估:

python val_dual.py \ --data data/data.yaml \ --weights runs/train/yolov9-s-helmet/weights/best.pt \ --batch 32 \ --img 640 \ --task val

输出将给出最终mAP值,这才是你模型的真实能力。

5.3 导出为ONNX格式(部署必备)

训练好的.pt文件不能直接部署到边缘设备,需转为ONNX:

python export.py \ --weights runs/train/yolov9-s-helmet/weights/best.pt \ --include onnx \ --imgsz 640

成功后生成best.onnx,位于同一目录。该文件可被TensorRT、OpenVINO或ONNX Runtime直接加载。


6. 常见问题排查指南

训练过程中的报错往往有固定模式,本节列出高频问题及根治方案。

6.1 “CUDA out of memory”(显存不足)

现象:训练启动时报错RuntimeError: CUDA out of memory
根因:batch size过大或图片分辨率过高
解决

  • 降低--batch(24GB卡用32→16,16GB卡用16→8)
  • 降低--img(640→416)
  • 添加--amp启用混合精度(镜像已支持)

6.2 “No labels found”(标签缺失)

现象:训练日志显示0 labels found,loss为nan
根因data.yaml中路径错误或标签文件命名不匹配
解决

  • 运行ls -l data/labels/train/ | head确认标签文件存在且与图片同名
  • 检查data.yamltrain:路径是否为../data/images/train(非绝对路径)

6.3 “KeyError: 'model.0.cv1.conv.weight'”(权重不匹配)

现象:加载yolov9-s.pt时提示键名错误
根因--cfg指定的yaml文件与权重不匹配
解决

  • 确保--cfg models/detect/yolov9-s.yaml--weights yolov9-s.pt版本一致
  • 微调时勿混用s/m/l不同尺寸配置

6.4 训练loss震荡剧烈

现象train/box_loss在0.02~0.15间大幅波动
根因:学习率过高或数据集质量差
解决

  • hyp.scratch-high.yaml中降低lr0(如0.010.005
  • 检查标签文件是否有坐标超出[0,1]范围(用脚本批量校验)

7. 总结:从训练到落地的关键认知

YOLOv9的威力不在参数量,而在其梯度路径设计——它让小模型也能抓住关键特征。但技术红利不会自动兑现,你需要建立三个关键认知:

  • 环境是地基,不是装饰conda activate yolov9不是仪式,是隔离CUDA上下文的必需操作;跳过这步,90%的报错都源于此。
  • 数据即规则,非输入data.yaml里的../data/images/train是相对路径协议,不是路径拼写错误;YOLOv9用路径约定替代配置解析,违反即失败。
  • 训练是实验,非流水线--batch 32不是魔法数字,是显存、数据量、收敛速度的三角平衡;每次换卡、换数据,都需重新压测。

当你完成第一次训练,看到mAP50突破0.75,那不仅是数字提升,更是你对目标检测工程逻辑的真正掌握。下一步,把best.onnx丢进你的Jetson Orin,让模型在产线上真正“看见”。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 23:34:06

LVGL主题切换实战:一键配置深色与浅色模式

1. LVGL主题切换的核心原理 在嵌入式GUI开发中&#xff0c;主题切换功能就像给手机换皮肤一样实用。LVGL通过lv_conf.h配置文件中的LV_THEME_DEFAULT_DARK宏实现深色/浅色模式切换&#xff0c;这背后其实是一套精心设计的样式管理系统。 当这个宏设置为1时&#xff0c;LVGL会…

作者头像 李华
网站建设 2026/6/9 18:26:28

STM32标准库开发实战:从零搭建工程到GPIO控制

1. 工程搭建与环境配置 第一次接触STM32标准库开发时&#xff0c;最让人头疼的就是工程搭建。我刚开始学的时候&#xff0c;光是建工程就花了整整两天时间&#xff0c;各种报错让人崩溃。不过现在回头看&#xff0c;只要掌握几个关键步骤&#xff0c;其实非常简单。 首先需要…

作者头像 李华
网站建设 2026/6/10 12:34:20

探索游戏资源提取技术:从PCK文件到资产还原的解密之旅

探索游戏资源提取技术&#xff1a;从PCK文件到资产还原的解密之旅 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 当游戏资源被锁定&#xff1a;逆向工程的技术挑战 想象一下&#xff1a;你正在研究…

作者头像 李华
网站建设 2026/6/10 13:07:37

Chord视频分析工具多场景落地:工业质检视频中缺陷目标时空追踪应用

Chord视频分析工具多场景落地&#xff1a;工业质检视频中缺陷目标时空追踪应用 1. 工业质检的痛点&#xff0c;正在被一个本地视频工具悄悄解决 你有没有见过这样的场景&#xff1a;产线摄像头24小时录下成百上千段视频&#xff0c;质检员盯着屏幕一帧一帧快进、暂停、放大—…

作者头像 李华
网站建设 2026/6/10 12:32:43

all-MiniLM-L6-v2惊艳效果:新闻标题语义聚合,自动发现热点事件

all-MiniLM-L6-v2惊艳效果&#xff1a;新闻标题语义聚合&#xff0c;自动发现热点事件 1. 为什么这个小模型能干大事&#xff1f; 你可能见过很多大模型在新闻处理上“大动干戈”——GPU占满、响应慢、部署复杂。但今天要说的这个模型&#xff0c;只有22.7MB&#xff0c;跑在…

作者头像 李华
网站建设 2026/6/10 12:36:08

3步重塑Windows右键菜单:从混乱到高效的终极改造指南

3步重塑Windows右键菜单&#xff1a;从混乱到高效的终极改造指南 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 每天面对电脑屏幕&#xff0c;我们平均要点击数…

作者头像 李华