YOLO11数据集制作全流程,简单易懂
你是不是也遇到过这样的问题:想用YOLO11做目标检测,却卡在第一步——数据集怎么准备?标注工具不会用、文件结构理不清、标签格式总出错、训练前还要手动划分训练集验证集……一堆步骤让人望而却步。
别担心。这篇文章不讲理论、不堆参数,只带你从零开始,亲手做出一个能直接喂给YOLO11训练的可用数据集。全程用最直白的语言、最贴近实际的操作顺序,连Labelme怎么画框、json怎么转txt、文件夹怎么建都手把手说明白。哪怕你没碰过标注工具,也能照着做完。
我们用的是真实可用的YOLO11镜像环境(ultralytics-8.3.9),所有路径、脚本、配置都来自镜像内预置结构,无需额外安装或修改路径。文末还会告诉你怎么把做好的数据集立刻跑起来训练——真正实现“做完就能用”。
1. 先搞清楚:YOLO11要什么样的数据
YOLO系列模型对数据格式有明确要求,不是随便放几张图+几个标签就行。它需要三样东西:
- 图片文件:JPG或PNG格式,放在统一目录下
- 标签文件:与图片同名的
.txt文件,每行代表一个目标,格式为:类别序号 中心x坐标(归一化) 中心y坐标(归一化) 宽度(归一化) 高度(归一化) - 数据配置文件:一个YAML文件,告诉模型“图在哪”“标签在哪”“有几个类别”
这三者缺一不可,但别怕——我们接下来就一步步把它们全配齐。
小贴士:所谓“归一化”,就是把像素值除以图片宽高。比如一张640×480的图,目标框左上角是(100, 80),宽高是200×150,那么中心点就是(100+100, 80+75) = (200, 155),归一化后就是(200/640, 155/480) ≈ (0.3125, 0.3229),宽高归一化为(200/640, 150/480) ≈ (0.3125, 0.3125)。这些计算不用你手算,后面脚本自动完成。
2. 建立清晰的数据文件夹结构
先在项目里搭好“家”。YOLO11镜像中已预置了标准路径,我们只需按约定把文件放对位置。
进入项目根目录:
cd ultralytics-8.3.9/然后创建以下层级(用mkdir -p一次性建好):
mkdir -p resources/images/det/json mkdir -p resources/images/det/datasets/images mkdir -p resources/images/det/datasets/labels mkdir -p resources/config/data这个结构的意思是:
json/:存放你用Labelme标注生成的原始.json文件(含图片路径和框坐标)datasets/images/:存放所有原始图片(训练+验证用的图都放这里)datasets/labels/:存放转换后的.txt标签文件(YOLO11真正读的格式)config/data/:存放数据集配置文件(告诉模型去哪里找图和标签)
关键提醒:所有原始图片必须同时放在
json/和datasets/images/两个文件夹里。因为Labelme需要读图来标注,而YOLO11训练时只认datasets/images/下的图。这是新手最容易漏的一步。
3. 用Labelme标出你的第一个目标框
Labelme是开源、免费、界面清爽的标注工具,YOLO11镜像里已预装,直接启动即可。
3.1 启动Labelme并加载图片
在终端中进入标注目录:
cd resources/images/det/json labelme软件启动后,点击左上角Open Dir→ 选择resources/images/det/json文件夹 → 点击任意一张图开始标注。
3.2 画框 + 命名类别
- 左键按住拖动,画一个矩形框圈住目标(比如一个人、一辆车)
- 松开鼠标后,弹出对话框,在Label输入框里填类别名:
person或car(注意大小写和拼写,必须和后续配置文件完全一致) - 点击OK,框就标好了
- 继续标下一个目标,直到这张图上所有目标都框完
3.3 保存为JSON
标完一张图,点击顶部菜单Save→ 保存为同名.json文件(如img001.jpg对应img001.json)。
Labelme会自动把框的坐标、类别、图片路径等信息存进JSON里,我们不需要看内容,只要确保它存在就行。
实操建议:先拿5张图练手(人+车各几例),确保你会画框、会命名、会保存。不要一上来就标100张——先跑通流程更重要。
4. 把JSON转成YOLO11能读的TXT标签
Labelme生成的JSON包含丰富信息,但YOLO11只认简单的TXT格式。镜像里已提供转换脚本,一行命令搞定。
回到项目根目录,运行转换命令:
python tool/tool_json2label_det.py \ --json_dir resources/images/det/json \ --img_dir resources/images/det/datasets/images \ --save_dir resources/images/det/datasets/labels执行后,你会看到:
resources/images/det/datasets/labels/下多出和图片同名的.txt文件(如img001.txt)- 每个TXT里是若干行数字,格式正是YOLO要求的:
类别序号 x_center y_center width height(全部归一化)
打开一个txt看看,内容类似这样:
0 0.423 0.615 0.210 0.382 1 0.785 0.521 0.320 0.215表示:第1行是person(序号0),在图中居中位置偏右下;第2行是car(序号1),在右上区域。
验证是否成功:检查
labels/里的txt数量是否和images/里的jpg数量一致;打开一个txt,确认行数是否等于这张图中标出的目标数。
5. 划分训练集和验证集(自动打乱+分比例)
YOLO11训练必须分开train/和val/两组数据。镜像自带分配脚本,支持按比例随机划分,还能自动创建对应子文件夹。
运行命令:
python tool/tool_det2datasets.py \ --img_dir resources/images/det/datasets/images \ --label_dir resources/images/det/datasets/labels \ --save_dir resources/images/det/datasets \ --train_ratio 0.8参数说明:
--train_ratio 0.8表示80%的图片进训练集,20%进验证集(你也可以改成0.7或0.9)- 脚本会自动在
datasets/下新建train/和val/两个文件夹,并把图片和对应标签分别复制进去
执行完成后,你的datasets/目录结构变成这样:
datasets/ ├── images/ │ ├── img001.jpg │ └── ... ├── labels/ │ ├── img001.txt │ └── ... ├── train/ │ ├── images/ ← 训练用图 │ └── labels/ ← 训练用标签 └── val/ ├── images/ ← 验证用图 └── labels/ ← 验证用标签小技巧:脚本会跳过没有对应标签的图片(比如你标了一半就停了),所以不用担心误操作污染数据集。
6. 写好数据配置文件(YAML)
现在图片有了、标签有了、分组也有了,最后一步:写一个YAML文件,告诉YOLO11“我的数据长什么样”。
在resources/config/data/下新建文件yolo11-det.yaml,内容如下:
# 数据集根路径(相对于该yaml文件的位置) path: ../ultralytics-8.3.9/resources/images/det/datasets # 训练集、验证集、测试集的子目录名(注意:这里填文件夹名,不是完整路径) train: train/images val: val/images test: val/images # 测试集可选,暂用验证集代替 # 类别名称,序号从0开始,顺序必须和标签中的序号严格对应 names: 0: person 1: car特别注意两点:
path是相对路径,指向datasets/这一级,不是datasets/images/train/val的值是train/images,不是train/—— 因为YOLO11默认在子目录下找images/和labels/
保存后,这个文件就是你整个数据集的“身份证”,训练时会靠它定位所有资源。
7. 验证数据集是否真的可用
在你急着训练之前,先快速验证一下:数据集有没有路径错误?标签格式对不对?类别名拼错没?
YOLO11自带数据检查功能。运行这条命令:
python -c "from ultralytics.data.utils import check_det_dataset; check_det_dataset('resources/config/data/yolo11-det.yaml')"如果一切正常,你会看到类似输出:
Found 40 images and 40 labels in train... Found 10 images and 10 labels in val... All labels checked successfully.如果报错,常见原因有:
path路径写错 → 检查yolo11-det.yaml中的path是否能从该文件位置正确抵达datasets/train:后面少了/images→ 必须是train/images,不是train- 类别名大小写不一致(如写了
Person)→ 必须小写person
改完再运行一次,直到提示“successfully”。
8. 附:下一步——怎么立刻开始训练?
数据集做好了,训练就只剩一步。YOLO11镜像里已预置训练脚本,你只需确认两点:
- 模型配置文件存在:
resources/config/model/yolo11-det.yaml(镜像自带) - 预训练权重存在:
weights/det/yolo11n.pt(镜像自带)
然后运行训练命令:
python train.py \ --data resources/config/data/yolo11-det.yaml \ --cfg resources/config/model/yolo11-det.yaml \ --weights weights/det/yolo11n.pt \ --epochs 100 \ --batch-size 4 \ --imgsz 640训练日志会实时打印在终端,loss下降、mAP上升,说明你的数据集正在被模型“吃下去”。
提示:首次训练建议设
--epochs 100,快速验证流程;效果满意后再调高到1000。--batch-size根据显存调整,镜像默认支持CPU训练,填4足够。
9. 总结:你刚刚完成了什么
回顾一下,你已经亲手走完了YOLO11数据集制作的全部核心环节:
- 搭建了符合规范的文件夹结构(
json/、images/、labels/、train/val/) - 用Labelme完成了真实目标标注(画框+命名+保存)
- 用一键脚本把JSON转成了YOLO标准TXT标签(自动归一化)
- 用分配脚本自动打乱并划分训练/验证集(避免人为偏差)
- 编写了准确的数据配置YAML(路径、目录、类别三者严丝合缝)
- 用官方检查工具验证了数据集完整性(杜绝路径/格式错误)
- 准备好了即刻训练的命令(数据→模型→启动,无缝衔接)
这不是纸上谈兵的教程,而是你在YOLO11镜像里真实可执行、可复现、可交付的工作流。以后换新数据,照着这个流程再来一遍,10分钟就能准备好一套新数据集。
真正的工程能力,不在于懂多少模型原理,而在于能把想法快速落地成可用的数据和结果。你现在,已经跨过了那道最难的门槛。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。