/root/yolov9目录结构说明,代码位置一目了然
你刚启动 YOLOv9 官方版训练与推理镜像,终端里敲下ls -l /root/,看到一个醒目的yolov9文件夹——但点进去后,面对几十个 Python 文件、嵌套的models/和data/子目录,是否有点无从下手?别急,这不是代码太乱,而是你还没掌握它的“地图”。
本文不讲原理、不跑训练、不调参数,只做一件事:带你把/root/yolov9这个目录彻底看懂。每一级子目录是干什么的?关键脚本(detect_dual.py、train_dual.py)藏在哪?权重文件、配置文件、数据定义怎么找?哪些文件你该改、哪些绝对别碰?读完这篇,你再进这个目录,就像回到自己家——门在哪、厨房在哪、工具箱在哪个抽屉,清清楚楚。
1. 整体定位:为什么是/root/yolov9?
先明确一个前提:这个路径不是随意指定的,而是镜像构建时就固化下来的工作主干目录。它等价于你在本地 clone 官方仓库后的项目根目录,即 WongKinYiu/yolov9 的完整副本。
它不是临时缓存,也不是安装路径,而是你所有操作的起点和落点:
- 推理命令
python detect_dual.py ...必须在这个目录下执行; - 训练日志、检测结果默认输出到
runs/子目录,而runs/就在/root/yolov9/下; - 所有
.yaml配置文件(模型结构、超参、数据集)都集中存放于此或其子目录中; - 预置的
yolov9-s.pt权重文件,就躺在这个目录的最外层。
换句话说:你不需要cd到其他地方,也不用到处找代码——/root/yolov9就是你的全部战场。
2. 根目录全景:一眼看清核心文件与作用
进入/root/yolov9后,运行ls -F(加-F可直观区分文件/目录),你会看到如下主要项:
data/ models/ utils/ detect_dual.py train_dual.py val_dual.py data.yaml hyp.scratch-high.yaml yolov9-s.pt README.md requirements.txt我们按功能分组梳理,不堆术语,只说“这东西你拿来干啥”:
2.1 必用脚本:三个核心入口,各司其职
| 文件名 | 类型 | 一句话用途 | 你什么时候会用它? |
|---|---|---|---|
detect_dual.py | Python 脚本 | 做推理:把图片/视频喂给模型,让它框出目标 | 想快速测试一张图有没有检出马、人、车?就用它 |
train_dual.py | Python 脚本 | 做训练:用你的数据集,从头或微调训练一个新模型 | 你有自己的标注数据,想训一个专用于产线缺陷检测的模型?就用它 |
val_dual.py | Python 脚本 | 做验证:在验证集上跑一遍,看模型当前效果如何(精度、召回率等) | 训完模型后,想知道 mAP 是多少?就用它 |
小提示:这三个脚本名字里的
_dual并非指“双卡”,而是 YOLOv9 官方为支持其核心创新机制(PGI、GELAN)所设计的双分支前向逻辑,属于模型内部实现细节。你只需知道它们是官方推荐的、开箱即用的标准入口即可,无需修改。
2.2 配置文件:告诉模型“你要学什么、怎么学”
| 文件名 | 类型 | 关键作用 | 你通常要改它吗? |
|---|---|---|---|
data.yaml | YAML 配置 | 定义你的数据集:类别名(names:)、训练集/验证集/测试集路径(train:/val:/test:) | 必须改!否则模型不知道你的图片在哪、有多少类 |
hyp.scratch-high.yaml | YAML 配置 | 定义训练超参数:学习率、动量、数据增强强度、标签平滑系数等 | 建议初学者先用默认值;熟悉后再调优 |
models/detect/yolov9-s.yaml | YAML 配置 | 定义模型结构:主干网(backbone)、颈部(neck)、头部(head)各层怎么搭 | ❌ 不建议新手改;换模型大小(s/m/l/e)时才需切换 |
举个实际例子:假设你要训一个“螺丝+垫片”二分类检测模型。你只需打开
data.yaml,把names: [ 'person', 'car' ]改成names: [ 'screw', 'washer' ],再把train:后面的路径指向你放标注图片的文件夹(如../my_dataset/images/train),就完成了最关键的一步。
2.3 权重与资源:开箱即用的“弹药包”
| 文件名 | 类型 | 说明 | 你能直接用它吗? |
|---|---|---|---|
yolov9-s.pt | PyTorch 模型文件 | 官方预训练好的轻量版权重,已下载好,就在根目录 | 能!detect_dual.py默认就加载它,无需额外下载 |
README.md | 文档 | 官方仓库说明,含最新用法、引用方式、许可证 | 建议扫一眼,尤其看 “Quick Start” 部分 |
requirements.txt | 文本 | 项目依赖列表(虽然镜像已装好,但可查版本) | ❌ 日常不用管;升级环境时可参考 |
3. 关键子目录深度解析:层层剥开,直抵核心
根目录只是表层,真正干活的代码和配置,藏在几个关键子目录里。我们一层层拆解,不罗列所有文件,只聚焦你每天都会打交道的部分。
3.1models/目录:模型结构的“图纸库”
路径:/root/yolov9/models/
这是整个项目的“心脏设计图”所在。YOLOv9 提供了多个预设模型变体,对应不同精度与速度权衡:
models/ ├── detect/ # 目标检测专用模型定义 │ ├── yolov9-s.yaml # 小型模型(适合边缘设备) │ ├── yolov9-m.yaml # 中型模型(平衡之选) │ ├── yolov9-l.yaml # 大型模型(高精度场景) │ └── yolov9-e.yaml # 特大型模型(研究/服务器端) └── segment/ # 实例分割模型(本镜像暂未启用,可忽略)重点提醒:
yolov9-s.yaml是镜像中train_dual.py示例命令里--cfg models/detect/yolov9-s.yaml明确指定的配置;- 如果你想换用
yolov9-m,只需把命令中的路径改成models/detect/yolov9-m.yaml,无需重装任何东西;- 这些
.yaml文件本质是文本,用cat或任意编辑器打开,就能看到类似backbone: [ [-1, 1, Conv, [64, 3, 2]] ]的结构描述——它定义了网络每一层的输入、类型、参数,是模型可复现性的基石。
3.2utils/目录:工具函数的“百宝箱”
路径:/root/yolov9/utils/
这里没有主流程,全是支撑性代码,但你几乎每次调试、分析、定制都会用到:
| 子目录/文件 | 作用 | 你可能怎么用它? |
|---|---|---|
general.py | 通用工具:路径处理、文件检查、日志打印、NMS(非极大值抑制)实现 | 查看non_max_suppression()函数源码,理解框合并逻辑 |
plots.py | 绘图工具:画 PR 曲线、混淆矩阵、特征图热力图 | 训练完想看 mAP 曲线?它负责生成results.png |
torch_utils.py | PyTorch 专用工具:模型初始化、梯度裁剪、混合精度开关 | 想手动开启 FP16?找amp_autocast相关逻辑 |
autoanchor.py | 自动锚框计算(虽 YOLOv9 主推 Anchor-free,但部分模块仍兼容) | 一般不用动;了解即可 |
实用技巧:当你遇到报错如
AttributeError: module 'utils.general' has no attribute 'check_img_size',直接cd /root/yolov9/utils && ls看文件是否存在,比百度更快。
3.3data/目录:数据组织的“标准样板间”
路径:/root/yolov9/data/
镜像自带了一个最小可用示例数据集(images/+labels/),位于data/images/和data/labels/。但它不是你该放自己数据的地方——那是给官方 demo 用的。
真正的数据组织规范,由data.yaml文件定义。你自己的数据集,应按如下结构放在镜像外部或挂载卷内(例如/workspace/my_dataset/):
my_dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ # 可选 └── labels/ ├── train/ └── val/然后,在data.yaml中写明路径:
train: ../my_dataset/images/train val: ../my_dataset/images/val test: ../my_dataset/images/test # 可选 nc: 2 # 类别数 names: ['screw', 'washer'] # 类别名,顺序必须与 labels/ 中 txt 文件的 class_id 一致关键原则:YOLOv9不关心你的数据在哪台机器上,只认
data.yaml里写的相对或绝对路径。只要路径对、格式对(jpg + 对应 txt),它就能找到。
3.4runs/目录:所有输出的“自动归档站”
路径:/root/yolov9/runs/
这是你唯一需要定期查看、也最该关注的输出目录。所有命令的产物,都按类型自动归类存放:
runs/ ├── detect/ # detect_dual.py 的输出 │ └── yolov9_s_640_detect/ # 你指定的 --name 名称 │ ├── crops/ # 检出的目标裁剪图(按类别分文件夹) │ ├── labels/ # 检测结果的 txt 标注文件(YOLO 格式) │ ├── yolov9_s_640_detect.jpg # 带框的可视化结果图 │ └── ... ├── train/ # train_dual.py 的输出 │ └── yolov9-s/ # 你指定的 --name │ ├── weights/ # 训练过程保存的 best.pt、last.pt │ ├── results.csv # 每 epoch 的 metrics(mAP, loss 等) │ ├── results.png # 自动生成的训练曲线图 │ ├── train_batch0.jpg # 训练初期的 batch 可视化(检查数据增强是否正常) │ └── ... └── val/ # val_dual.py 的输出(评估报告)真实经验:
runs/detect/xxx/下的xxx.jpg是你第一眼验证效果的地方;runs/train/xxx/weights/best.pt是你训完后要拿去部署的最终模型;runs/train/xxx/results.csv用 Excel 打开,看最后一行的metrics/mAP50-95(B),就是你的核心指标。
4. 常见操作路径速查表:告别find和grep
新手最常卡壳的,不是不会写代码,而是“那个文件到底在哪儿?”下面这张表,按高频任务整理,复制粘贴就能用:
| 你想做的事 | 命令 | 说明 |
|---|---|---|
| 看当前有哪些预训练权重 | ls -lh /root/yolov9/*.pt | 确认yolov9-s.pt是否存在且大小正常(约 220MB) |
| 快速查看数据集配置 | cat /root/yolov9/data.yaml | head -n 20 | 重点看train:、val:、names:三行 |
| 检查模型结构定义 | cat /root/yolov9/models/detect/yolov9-s.yaml | head -n 15 | 看nc:(类别数)、depth_multiple:(网络深度缩放因子) |
| 查看训练日志摘要 | tail -n 10 /root/yolov9/runs/train/yolov9-s/results.csv | 最后一行即最终 epoch 结果 |
| 删除某次失败训练的全部输出 | rm -rf /root/yolov9/runs/train/yolov9-s | 彻底清理,腾出空间,避免干扰下次训练 |
| 确认当前 Python 环境 | conda info --envs && conda activate yolov9 && python --version | 确保已激活yolov9环境,Python 为 3.8.5 |
进阶提示:所有
*.py脚本顶部都有清晰的argparse参数说明。直接python detect_dual.py -h,就能看到所有可选项(--source,--weights,--img,--device等),比查文档还快。
5. 安全边界提醒:哪些地方千万别乱改
目录结构清晰了,但自由不等于随意。以下几处是新手易踩的“深坑”,务必避开:
不要修改
detect_dual.py/train_dual.py的主干逻辑
它们是官方维护的稳定入口。想加功能?在utils/里写新函数,然后在脚本里import调用。不要手动编辑
yolov9-s.pt或其他.pt文件
这是二进制模型权重,用文本编辑器打开只会损坏。想导出 ONNX?用export.py(如有)或官方提供的转换脚本。不要把自定义数据集直接塞进
/root/yolov9/data/
镜像内的data/是只读示例。你的数据请放在/workspace/(若已挂载)或/root/datasets/等独立路径,并通过data.yaml指向它。不要在
models/下新建.yaml文件并随意修改层定义
网络结构高度耦合,少改一个通道数(c1,c2)就可能导致RuntimeError: shape mismatch。如需定制模型,请先读懂models/common.py中的模块定义。不要删除
utils/下的任何.py文件
即使看起来没用(如loss.py),它们也是训练流程的隐式依赖。缺失会导致ImportError。
正确姿势:所有定制化,都应遵循“配置驱动、脚本调用、外部数据”三原则——改
data.yaml、调train_dual.py、数据放外面。这是最安全、最可持续的工作流。
6. 总结:你现在已经拥有了 YOLOv9 的“导航仪”
读到这里,你不再是一个面对/root/yolov9目录手足无措的新手,而是一个手握精准地图的实践者:
- 你知道
detect_dual.py是推理的开关,train_dual.py是训练的引擎,它们就在根目录,随时待命; - 你知道
data.yaml是数据集的总开关,models/detect/yolov9-s.yaml是模型的蓝图,改它们比改代码更安全高效; - 你知道
yolov9-s.pt就在眼皮底下,runs/目录会自动记录一切成果,无需你手动管理路径; - 你知道
utils/是工具箱,models/是图纸库,它们分工明确,各司其职; - 你也清楚哪些红线不能碰,哪些操作可以大胆尝试。
技术落地的第一步,从来不是写多炫酷的代码,而是建立对工程环境的确定性认知。现在,这份确定性,你已经拿到了。
下一步,就是选一张图,敲下那行python detect_dual.py --source ...,亲眼看看 YOLOv9 在你眼前画出第一个检测框——那一刻,目录结构就不再是文字,而是你掌控模型的起点。
--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。