YOLO11项目目录结构说明,一看就懂
你刚拉起YOLO11镜像,打开终端,输入ls却看到满屏文件夹——ultralytics/、datasets/、runs/、weights/、train.py……它们各自负责什么?哪个该放图片、哪个该改参数、哪个动了会训练失败?别急,这篇文章不讲原理、不堆代码,只用一张清晰的“项目地图”,带你3分钟理清YOLO11镜像里每个关键目录的真实作用。无论你是第一次跑通模型的新手,还是想快速上手自定义训练的开发者,读完就能准确找到该去哪改、该往哪放、该看哪份日志。
1. 整体结构概览:四个核心区域
YOLO11镜像不是杂乱无章的文件堆砌,而是围绕“开发—数据—训练—产出”四条主线组织的。整个项目根目录(即你执行cd ultralytics-8.3.9/后进入的位置)可划分为四大功能区:
- 代码核心区:
ultralytics/—— 模型骨架与所有算法逻辑所在,不建议直接修改 - 数据准备区:
datasets/—— 你自己的图片、标签、配置文件的“家”,唯一需要你动手填充的地方 - 运行产出区:
runs/—— 训练过程中的日志、图表、权重自动保存地,只读不写 - 资源管理区:
weights/+train.py/infer.py—— 预训练模型存放点 + 你写的启动脚本,是连接数据与代码的“开关”
这四个区域各司其职,互不越界。理解它们的边界,你就掌握了YOLO11项目的底层秩序。
2. 代码核心区:ultralytics/—— 模型的“心脏”,保持原样就好
2.1 它是什么?
ultralytics/是 Ultralytics 官方维护的 Python 包源码目录,完整包含了 YOLO11 的所有模型定义、训练循环、推理引擎、数据加载器和评估模块。它不是你写的脚本,而是你调用的“工具箱”。
2.2 里面有什么?(精简版,只列关键)
ultralytics/ ├── __init__.py # 包入口,让你能 from ultralytics import YOLO ├── engine/ # 核心训练/验证/推理逻辑(train.py, val.py, predict.py) ├── models/ # 模型结构定义(含 yolo11-seg.yaml 等配置模板) │ └── v8/ # (注意:YOLO11 实际沿用 v8 目录结构,兼容性设计) │ └── cfg/ # 所有 .yaml 配置文件的集中地(重点!) │ ├── models/ # 模型结构配置(如 yolo11m-seg.yaml) │ └── datasets/ # 数据集配置模板(如 coco128.yaml) ├── utils/ # 工具函数(日志、绘图、指标计算等) └── cfg/ # 全局默认配置(如 default.yaml,一般无需改动)2.3 你该怎么做?
- 可以查看:比如想确认某个参数默认值,直接打开
ultralytics/cfg/default.yaml - 可以引用:在
train.py中from ultralytics import YOLO就是调用这里 - ❌不要修改:除非你是在做深度二次开发(如重写 backbone),否则不要碰
engine/或models/下的.py文件 - 重点留意
cfg/子目录:models/11/下的yolo11-seg.yaml是你定制模型结构的唯一入口;datasets/下的.yaml是你定义自己数据路径的必改项——它们是“配置”,不是“代码”,安全可改
一句话记住:
ultralytics/是你信赖的“黑盒引擎”,你只负责给它喂数据、设参数、按开关,不用拆开修理。
3. 数据准备区:datasets/—— 你掌控的“唯一战场”
3.1 它为什么重要?
YOLO11 不认识你的图片,也不懂你的业务类别。datasets/就是你向模型“自我介绍”的地方:告诉它“我的图在哪”、“我的类叫什么”、“我的标签长啥样”。这里填错,后面全白忙。
3.2 标准目录结构(以实例分割为例)
假设你要训练一个“点餐场景中的人与餐盘”分割模型,推荐这样组织:
datasets/ └── seg_point_offer_20240930/ # 你的数据集根目录(名字自定,但要和 yaml 里一致) ├── train/ # 训练集 │ ├── images/ # 所有训练图片(.jpg/.png) │ └── labels/ # 对应的 YOLO 分割标签(.txt,每张图一个) ├── val/ # 验证集(结构同 train) │ ├── images/ │ └── labels/ └── test/ # (可选)测试集 ├── images/ └── labels/3.3 关键配套文件:point-offer-seg.yaml
这个 YAML 文件必须放在ultralytics/cfg/datasets/下(或你train.py同级目录),内容示例:
# Ultralytics YOLO path: ./datasets/seg_point_offer_20240930 # ← 必须指向上面创建的根目录!路径错误是新手最高频报错 train: train/images # ← 相对于 path 的子路径 val: val/images test: test/images # ← 可选,用于最终评估 # 类别名称(顺序必须和 labelme json 转 txt 时的映射完全一致!) names: 0: person 1: tray 2: food3.4 你该怎么做?
- 严格按结构放图和标签:图片进
images/,生成的.txt进labels/,文件名必须一一对应(abc.jpg↔abc.txt) - YAML 中
path写相对路径:从train.py所在位置出发算,./datasets/xxx最安全 names顺序=类别ID顺序:label_to_class_id = {"person": 0, "tray": 1}必须和 YAML 里0: person, 1: tray完全一致- ❌不要把图片直接丢进
datasets/根目录:必须套一层your_dataset_name/,否则 YAML 无法定位
避坑提示:训练时报错
No images found或No labels found,90% 是因为path写错,或images/和labels/没放在train/val/下。
4. 运行产出区:runs/—— 模型的“成长日记本”
4.1 它自动产生什么?
每次你运行python train.py,YOLO11 就会在runs/下自动生成全新子目录,记录一切:
runs/ └── segment/ # 任务类型(detect/segment/pose/obb) └── train2/ # 自动编号,第2次训练(train1, train2...) ├── weights/ # 训练出的模型文件 │ ├── last.pt # 最后一轮权重(含优化器状态,可 resume) │ └── best.pt # 验证指标最优的权重(推理用这个!) ├── results.csv # 每轮 loss/mAP 等数值,可用 Excel 打开 ├── results.png # 自动生成的训练曲线图(loss、P、R、mAP) ├── train_batch0.jpg # 第0批训练数据增强效果预览 ├── val_batch0_pred.jpg # 验证集首张图预测效果(带框+掩膜) └── args.yaml # 本次训练所有参数快照(复现实验的依据)4.2 你该怎么做?
- 定期检查
results.png:一眼看出训练是否收敛、有无过拟合(val loss 上升) - 用
best.pt做推理:model = YOLO("runs/segment/train2/weights/best.pt") - 保留
args.yaml:它记录了你实际用了哪些参数,比train.py里的字典更真实 - ❌不要手动删除
runs/下的旧目录:除非磁盘告急,否则留着它是你实验的完整证据链 last.pt≠best.pt:last.pt是训练终点,best.pt是验证集表现顶峰——后者才是部署首选
效率技巧:想快速对比两次训练?直接打开两个
results.png并排看曲线,比读日志快十倍。
5. 资源管理区:weights/与train.py—— 你的“控制台”
5.1weights/:预训练模型的保险柜
这个目录专放.pt权重文件,YOLO11 官方提供多种尺寸和任务的预训练模型:
yolo11n-seg.pt:轻量级,适合边缘设备yolo11m-seg.pt:平衡型,本文示例默认使用yolo11x-seg.pt:高精度,需大显存
你只需做两件事:
- 把下载好的
.pt文件放进weights/ - 在
train.py中写明路径:model = YOLO("yolo11m-seg.yaml").load("weights/yolo11m-seg.pt")
注意:
.yaml(结构)和.pt(权重)必须匹配!yolo11m-seg.yaml+yolo11m-seg.pt是黄金组合。
5.2train.py:你写的“一键启动脚本”
这是你和 YOLO11 交互的唯一接口文件,位于项目根目录(与ultralytics/同级)。它的核心就三行:
from ultralytics import YOLO # 1. 加载结构 + 权重 model = YOLO("yolo11m-seg.yaml").load("weights/yolo11m-seg.pt") # 2. 定义所有参数(数据路径、轮数、图像大小等) train_params = { 'data': "point-offer-seg.yaml", # ← 指向你放在 cfg/datasets/ 下的 yaml 'epochs': 30, 'imgsz': 640, 'batch': 8, # ... 其他100+参数(按需开启) } # 3. 开始训练 results = model.train(**train_params)你该关注的只有三个变量:
'data':必须是你自己写的 YAML 文件名(不含路径,因它默认在ultralytics/cfg/datasets/下找)'epochs'/'imgsz'/'batch':最常调整的三大参数,直接影响训练速度和效果model.train():这一行执行后,所有日志、图表、权重自动出现在runs/下
新手第一课:先不改任何参数,确保
train.py能跑通,再逐步调整'epochs'和'batch'。稳定压倒一切。
6. 其他辅助目录:docker/、examples/、tests/—— 可忽略,但要知道它们存在
docker/:镜像构建用的 Dockerfile 和配置,你用现成镜像就不用管examples/:官方提供的 Jupyter Notebook 示例(如detect.ipynb),适合快速试效果tests/:单元测试代码,验证框架功能,开发者调试用,你无需触碰docs/:API 文档源码,生成后的文档在 docs.ultralytics.comruns/detect/、runs/pose/:其他任务类型的产出目录,和runs/segment/平级,互不干扰
这些目录的存在,说明这个镜像是一个完整的、可扩展的开发环境,而不仅是一个“能跑的 demo”。你用不到它们,但知道它们在哪,会让你面对新需求时更有底气。
7. 总结:一张表,锁定所有关键路径
| 功能 | 目录路径 | 你能做什么 | 绝对不能做什么 |
|---|---|---|---|
| 模型结构 | ultralytics/cfg/models/11/yolo11-seg.yaml | 修改 backbone/head 参数、调整层数 | 修改ultralytics/models/下的.py文件 |
| 数据配置 | ultralytics/cfg/datasets/point-offer-seg.yaml | 改path、train、val、names | 把图片直接放datasets/根目录 |
| 你的数据 | datasets/seg_point_offer_20240930/ | 放train/images/、train/labels/ | 在labels/里放.json或.xml |
| 预训练模型 | weights/yolo11m-seg.pt | 下载后复制进来 | 用yolo11n.yaml+yolo11m.pt混搭 |
| 训练脚本 | train.py(根目录) | 修改data、epochs、batch等参数 | 删除from ultralytics import YOLO行 |
| 训练结果 | runs/segment/train2/ | 查results.png、取best.pt、看args.yaml | 手动修改weights/last.pt的内容 |
这张表就是你在YOLO11镜像里的“导航仪”。下次遇到问题,先问自己:这个问题属于哪一类?然后直奔对应目录,90% 的困惑都能迎刃而解。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。