news 2026/4/16 10:06:55

/root/yolov9目录结构说明,代码位置一目了然

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
/root/yolov9目录结构说明,代码位置一目了然

/root/yolov9目录结构说明,代码位置一目了然

你刚启动 YOLOv9 官方版训练与推理镜像,终端里敲下ls -l /root/,看到一个醒目的yolov9文件夹——但点进去后,面对几十个 Python 文件、嵌套的models/data/子目录,是否有点无从下手?别急,这不是代码太乱,而是你还没掌握它的“地图”。

本文不讲原理、不跑训练、不调参数,只做一件事:带你把/root/yolov9这个目录彻底看懂。每一级子目录是干什么的?关键脚本(detect_dual.pytrain_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.pyPython 脚本做推理:把图片/视频喂给模型,让它框出目标想快速测试一张图有没有检出马、人、车?就用它
train_dual.pyPython 脚本做训练:用你的数据集,从头或微调训练一个新模型你有自己的标注数据,想训一个专用于产线缺陷检测的模型?就用它
val_dual.pyPython 脚本做验证:在验证集上跑一遍,看模型当前效果如何(精度、召回率等)训完模型后,想知道 mAP 是多少?就用它

小提示:这三个脚本名字里的_dual并非指“双卡”,而是 YOLOv9 官方为支持其核心创新机制(PGI、GELAN)所设计的双分支前向逻辑,属于模型内部实现细节。你只需知道它们是官方推荐的、开箱即用的标准入口即可,无需修改。

2.2 配置文件:告诉模型“你要学什么、怎么学”

文件名类型关键作用你通常要改它吗?
data.yamlYAML 配置定义你的数据集:类别名(names:)、训练集/验证集/测试集路径(train:/val:/test:必须改!否则模型不知道你的图片在哪、有多少类
hyp.scratch-high.yamlYAML 配置定义训练超参数:学习率、动量、数据增强强度、标签平滑系数等建议初学者先用默认值;熟悉后再调优
models/detect/yolov9-s.yamlYAML 配置定义模型结构:主干网(backbone)、颈部(neck)、头部(head)各层怎么搭❌ 不建议新手改;换模型大小(s/m/l/e)时才需切换

举个实际例子:假设你要训一个“螺丝+垫片”二分类检测模型。你只需打开data.yaml,把names: [ 'person', 'car' ]改成names: [ 'screw', 'washer' ],再把train:后面的路径指向你放标注图片的文件夹(如../my_dataset/images/train),就完成了最关键的一步。

2.3 权重与资源:开箱即用的“弹药包”

文件名类型说明你能直接用它吗?
yolov9-s.ptPyTorch 模型文件官方预训练好的轻量版权重,已下载好,就在根目录能!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.pyPyTorch 专用工具:模型初始化、梯度裁剪、混合精度开关想手动开启 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. 常见操作路径速查表:告别findgrep

新手最常卡壳的,不是不会写代码,而是“那个文件到底在哪儿?”下面这张表,按高频任务整理,复制粘贴就能用

你想做的事命令说明
看当前有哪些预训练权重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 15nc:(类别数)、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),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 23:06:53

Qwen3-32B Web网关扩展:Clawdbot支持插件化提示词工程实战手册

Qwen3-32B Web网关扩展:Clawdbot支持插件化提示词工程实战手册 1. 为什么需要这个扩展:从“能用”到“好用”的关键一跃 你有没有遇到过这样的情况:模型本身能力很强,但每次想让它干点具体的事,都要反复调试提示词、…

作者头像 李华
网站建设 2026/4/15 16:26:05

AI智能文档扫描仪操作手册:保存扫描图片的三种方式

AI智能文档扫描仪操作手册:保存扫描图片的三种方式 1. 这不是“拍照”,而是真正的文档扫描 你有没有遇到过这样的情况:拍一张合同照片发给同事,结果对方说“字看不清”“边是歪的”“背景太亮反光”?其实问题不在手机…

作者头像 李华
网站建设 2026/4/8 10:02:55

ClawdBot模型微调接入:LoRA适配器加载路径配置+增量训练结果热部署

ClawdBot模型微调接入:LoRA适配器加载路径配置增量训练结果热部署 ClawdBot 是一个面向个人用户的本地化 AI 助手,它不依赖云端 API,所有推理能力均在你自己的设备上完成。它的核心设计哲学是“可控、可查、可定制”——你可以随时查看模型运…

作者头像 李华
网站建设 2026/4/2 9:06:54

Qwen2.5-7B-InstructQuantization教程:GGUF/GGML量化部署全流程

Qwen2.5-7B-Instruct量化部署教程:GGUF/GGML全本地化运行实战 1. 为什么你需要量化版Qwen2.5-7B-Instruct? 你可能已经试过Qwen2.5-7B-Instruct——那个在逻辑推理、长文写作和代码生成上明显“开窍了”的7B旗舰模型。它不像1.5B或3B版本那样偶尔卡壳、…

作者头像 李华
网站建设 2026/4/16 2:06:25

5个步骤打造高效精简Windows 11系统:Win11Debloat深度使用指南

5个步骤打造高效精简Windows 11系统:Win11Debloat深度使用指南 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以…

作者头像 李华
网站建设 2026/4/3 4:28:42

MT5 Zero-Shot中文改写效果实测:语义保真度与多样性平衡方案分享

MT5 Zero-Shot中文改写效果实测:语义保真度与多样性平衡方案分享 1. 这不是微调,是真正“开箱即用”的中文改写能力 你有没有遇到过这些场景? 写完一段产品描述,想换几种说法发在不同平台,又怕意思跑偏;…

作者头像 李华