YOLO11项目目录结构说明,快速上手
你刚拉取了YOLO11镜像,打开终端却面对一堆文件夹不知从哪下手?别急——这不是一份枯燥的目录清单,而是一张为你量身定制的「YOLO11工程导航图」。本文不讲抽象概念,不堆参数配置,只聚焦一个问题:打开镜像后,每个文件夹是干什么的?我该往哪放数据、改哪写代码、跑哪条命令?通读一遍,5分钟内你就能独立完成一次完整的目标检测训练流程。
1. 整体目录概览:一眼看清项目骨架
YOLO11镜像以ultralytics-8.3.9/为根目录,结构清晰、职责分明。它不是简单复制官方Ultralytics仓库,而是针对目标检测实战做了深度组织优化。整个项目采用「功能分区+路径即逻辑」的设计思路,所有关键路径都带有明确语义,无需记忆,看名知意。
进入容器后,执行以下命令即可查看主干结构:
cd ultralytics-8.3.9/ tree -L 2 -d输出结果精简后如下(已过滤无关隐藏文件):
. ├── resources # 所有用户自定义内容的“家”:数据、配置、模型权重全放这里 ├── tool # 专用工具脚本集:标注转换、数据划分、格式校验等 ├── detect # 训练与推理成果的“产出区”:训练日志、权重文件、预测结果自动落在此处 ├── train.py # 默认训练入口脚本(轻量级,适合快速验证) ├── predict.py # 默认推理入口脚本(开箱即用,支持图片/视频/文件夹) └── requirements.txt # 环境依赖声明(已预装,仅作参考)这个结构背后有一条黄金原则:你动的永远是resources/,你看到的结果永远在detect/,中间过程由tool/和脚本自动衔接。下面逐个拆解,告诉你每个目录的真实用途和操作边界。
2.resources/:你的数据与配置专属空间
这是你唯一需要主动编辑和填充的目录,所有个性化内容都应存放于此。它被设计成完全隔离于框架代码,确保升级YOLO版本时你的数据和配置零丢失。
2.1resources/images/:图像数据的物理仓库
该目录下按任务类型分层,目前预置了det/(目标检测)子目录,结构如下:
resources/images/det/ ├── json/ # Labelme原始标注文件(.json)存放处 ├── datasets/ # 转换后的标准YOLO格式数据集(images/ + labels/) │ ├── images/ │ │ ├── train/ # 训练图片(jpg/png) │ │ ├── val/ # 验证图片(jpg/png) │ │ └── test/ # 测试图片(可选) │ └── labels/ │ ├── train/ # 对应训练图片的txt标签(每行:cls x_center y_center w h) │ └── val/ # 对应验证图片的txt标签 └── demo/ # 示例图片(供快速测试用,非必需)实操提示:你只需把拍摄或收集的原始图片放入
json/,后续所有转换、划分均由tool/脚本自动完成。datasets/目录完全由工具生成,切勿手动修改其内部结构。
2.2resources/config/:模型与数据的“说明书”
配置文件集中管理,避免散落在各处导致混乱。包含两大核心子目录:
resources/config/data/:数据集定义文件
例如yolo11-det.yaml,其内容本质是三句话:
- “我的图片在哪?” →
path: ../ultralytics-yolo11/resources/images/det/datasets/images - “训练集叫什么?” →
train: train - “有哪些类别?” →
names: {0: person, 1: car}
关键注意:
path字段使用的是相对路径,且以../ultralytics-yolo11/为基准。这意味着你必须在ultralytics-8.3.9/目录下运行训练脚本,否则路径会失效。
resources/config/model/:模型架构蓝图
例如yolo11-det.yaml,它定义了网络的“骨架”:多少层、每层什么类型、通道数如何变化。你不需要读懂全部YAML语法,只需知道:
- 修改
nc: 2可适配你的类别数(如只有person/car,则填2) scales:区块中取消注释某一行(如n: [0.50, 0.25, 1024]),即选择对应尺寸的模型(n=nano, s=small...)
2.3resources/weights/:模型能力的“保险柜”
预置了det/yolo11n.pt——这是YOLO11 nano版的官方预训练权重,已针对COCO数据集优化。它作为你训练的起点,能极大加速收敛并提升小样本效果。
为什么不用随机初始化?
直接从头训练一个YOLO模型需数万张图片和数十小时GPU时间。而加载预训练权重后,在你自己的5张标注图上微调,也能获得可用的检测效果——这正是迁移学习的价值。
3.tool/:自动化流水线的“扳手与齿轮”
这里存放的不是玩具脚本,而是解决实际工程痛点的生产力工具。它们将繁琐的手动步骤压缩为单条命令,且全部经过真实数据验证。
3.1tool_json2label_det.py:Labelme到YOLO的翻译器
当你用Labelme在json/中标注完5张图,得到5个.json文件。此时执行:
python tool/tool_json2label_det.py --json_dir resources/images/det/json --save_dir resources/images/det/datasets/labels脚本会:
- 自动读取每个JSON中的
shapes字段 - 将矩形框坐标归一化为YOLO要求的
x_center, y_center, width, height(百分比形式) - 按类别名映射为数字索引(person→0, car→1)
- 生成同名
.txt文件,存入labels/目录
验证方法:打开生成的
xxx.txt,若首行为0 0.452 0.631 0.210 0.385,说明第一目标是person,中心在图像45.2%宽度、63.1%高度处,框占宽21.0%、高38.5%。
3.2tool_det2datasets.py:数据集的智能分拣员
有了原始图片和标签,下一步是划分训练集/验证集。执行:
python tool/tool_det2datasets.py --img_dir resources/images/det/json --label_dir resources/images/det/datasets/labels --output_dir resources/images/det/datasets --train_ratio 0.8脚本会:
- 扫描
json/中所有图片(自动忽略无对应JSON的图) - 随机打乱顺序,按比例(如0.8)分配至
train/和val/ - 同时将图片和标签同步复制到
datasets/images/train/与datasets/labels/train/等对应位置
优势对比:手动划分易出错(图片漏复制、标签名不一致)、耗时长。此工具10秒完成,且保证图片-标签严格一一对应。
4.detect/:训练与推理的“成果展厅”
所有运行结果默认输出至此,结构清晰,便于追踪。无需配置,开箱即用。
4.1 训练过程:detect/train/
当你运行python train_det.py,结果自动落在此处:
detect/train/ ├── weights/ # 模型权重文件 │ ├── best.pt # 验证指标最优的模型(推荐用于推理) │ ├── last.pt # 最后一次迭代的模型(可用于断点续训) │ └── ... ├── results.csv # 训练全过程指标(epoch, box_loss, cls_loss...) ├── results.png # 自动生成的训练曲线图(loss/mAP等) └── args.yaml # 本次训练的所有参数快照(含data/model路径)如何判断是否成功?
打开results.png,若metrics/mAP50-95(B)曲线在100轮后稳定上升至0.6以上,且train/box_loss持续下降,则训练健康。若loss震荡剧烈或mAP停滞,需检查数据质量或调整lr0学习率。
4.2 推理结果:detect/predict/
运行python predict_det.py后,结果存于:
detect/predict/exp/ ├── image0.jpg # 带检测框的原图(绿色框为person,蓝色框为car) ├── image1.jpg # 其他预测图片... └── labels/ # 对应的预测结果txt(格式同训练标签,含置信度)快速验证技巧:直接用
ls detect/predict/exp/*.jpg | head -5 | xargs -I{} eog {}在图形界面批量查看前5张预测图,肉眼评估效果。
5. 核心脚本解析:train_det.py与predict_det.py的底层逻辑
这两个Python文件是你与YOLO11交互的“控制台”,理解其关键行,胜过死记硬背100条命令。
5.1train_det.py:四步构建训练闭环
from ultralytics import YOLO, settings # Step 1: 定义成果存放地(覆盖默认路径) settings.update({"runs_dir": "./", "weights_dir": "./weights/det"}) def main(): # Step 2: 加载模型架构 + 预训练权重(两步合一) model = YOLO("resources/config/model/yolo11-det.yaml").load("weights/det/yolo11n.pt") # Step 3: 执行训练(所有参数直白命名,无黑盒) results = model.train( data="resources/config/data/yolo11-det.yaml", # 数据在哪? epochs=1000, # 最多训多少轮 patience=100, # 验证指标100轮不涨则停 batch=1, # 每批1张图(适合小显存) imgsz=640, # 输入图像缩放至640x640 workers=4, # 用4个进程加载数据 optimizer='AdamW', # 优化器选型 lr0=1e-3, # 初始学习率 cos_lr=True, # 余弦退火学习率 resume=True # 自动从last.pt续训 )为什么
resume=True如此重要?
训练中断(如容器重启)后,无需从头开始。脚本会自动检测./weights/det/last.pt并从中恢复,节省90%以上时间。
5.2predict_det.py:三行代码完成端到端推理
from ultralytics import YOLO # Step 1: 加载训练好的最佳模型 model = YOLO("detect/train/weights/best.pt") # Step 2: 一键推理(source支持:单图/文件夹/视频/摄像头) results = model.predict( source='resources/images/det/datasets/images/val', # 推理源 imgsz=480, # 推理分辨率(可低于训练尺寸) project='detect/predict', # 输出根目录 name='exp', # 输出子目录名 save=True, # 保存带框图 conf=0.4, # 置信度过滤阈值(0.4=只显示>40%信心的框) iou=0.7, # NMS交并比阈值(抑制重叠框) device='cpu' # 强制CPU推理(无GPU时必加) )调试技巧:若预测无结果,先将
conf调低至0.1,确认模型是否真没检测到;若有大量重叠框,适当提高iou至0.8。
6. 快速启动全流程:从零到预测的60秒实操
现在,把所有知识串起来,执行一次端到端验证。假设你已有5张含person/car的图片,存于resources/images/det/json/。
# 1. 进入项目根目录 cd ultralytics-8.3.9/ # 2. 将JSON标注转为YOLO标签 python tool/tool_json2label_det.py --json_dir resources/images/det/json --save_dir resources/images/det/datasets/labels # 3. 划分训练/验证集(8:2) python tool/tool_det2datasets.py --img_dir resources/images/det/json --label_dir resources/images/det/datasets/labels --output_dir resources/images/det/datasets --train_ratio 0.8 # 4. 启动训练(后台运行,不阻塞终端) nohup python train_det.py > train.log 2>&1 & # 5. 查看训练进度(实时刷新) tail -f train.log # 6. 训练完成后,立即推理验证集 python predict_det.py5分钟后,打开detect/predict/exp/,你将看到带检测框的图片——这就是YOLO11在你数据上的第一次“看见”。
7. 常见问题与避坑指南
实际操作中,90%的问题源于路径、权限或配置细节。以下是高频踩坑点及解决方案:
7.1 “No module named 'ultralytics'”错误
原因:未在ultralytics-8.3.9/目录下执行脚本,导致Python无法定位本地包。
解决:务必先cd ultralytics-8.3.9/,再运行python train_det.py。
7.2 训练时提示“File not found: xxx.jpg”
原因:yolo11-det.yaml中path字段路径错误,或datasets/images/下缺少对应图片。
排查:执行ls -l resources/images/det/datasets/images/train/ | head,确认图片真实存在且命名与labels/train/下txt文件名一致(仅扩展名不同)。
7.3 预测结果全是空框或框错位
原因:imgsz参数在训练与推理中不一致,导致坐标映射失准。
解决:确保train_det.py中imgsz=640与predict_det.py中imgsz=640相同(或推理时用imgsz=640)。
7.4 Jupyter Lab中无法显示图片
原因:镜像内置Jupyter服务,但需正确访问。
解决:
- 启动镜像时,确保端口映射
-p 8888:8888 - 浏览器访问
http://localhost:8888,输入密码(镜像文档中提供) - 在Jupyter中新建Notebook,执行
from IPython.display import Image; Image('detect/predict/exp/image0.jpg')
8. 总结:掌握目录结构,就是掌握YOLO11的主动权
YOLO11的目录结构不是随意堆砌,而是一套经过实战检验的工程范式:
resources/是你的创作区——数据、配置、权重,一切可控内容在此沉淀;tool/是你的加速器——标注转换、数据划分,重复劳动交给脚本;detect/是你的成果区——训练日志、预测图片,所有输出一目了然;- 核心脚本是你的控制台——
train_det.py和predict_det.py封装了全部复杂性,你只需关注业务逻辑。
当你不再纠结“文件该放哪”,而是自然说出“我把新数据放resources/images/det/json/,跑tool_json2label_det.py,然后train_det.py启动训练”,你就真正上手了YOLO11。下一步,可以尝试替换resources/config/model/yolo11-det.yaml中的scales,用更大的模型提升精度;或修改resources/config/data/yolo11-det.yaml的names,加入dog、bicycle等新类别——目录结构已为你铺好路,剩下的,就是让YOLO11去看见更广阔的世界。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。