本文详解 yolov8 训练时“no labels found”警告的根本原因与标准目录结构,指导用户按官方规范组织 train/val 下的 images 和 labels 子文件夹,并修正 dataset.yaml 配置,确保模型可正常读取标注文件并计算评估指标。
本文详解 yolov8 训练时“no labels found”警告的根本原因与标准目录结构,指导用户按官方规范组织 train/val 下的 images 和 labels 子文件夹,并修正 dataset.yaml 配置,确保模型可正常读取标注文件并计算评估指标。
YOLOv8 对数据集目录结构有严格约定——它
不会自动搜索 labels 文件夹
,而是依据 dataset.yaml 中 train 和 val 字段指定的子路径,
在对应目录下固定查找 images/ 和 labels/ 两个同级子文件夹
。你当前的配置:
意味着 YOLOv8 会去 data/img/ 目录下寻找 images/ 和 labels/,但实际你的图片和标签很可能混放在 img/ 下,或 labels/ 根本不在该路径内,因此触发 WARNING ⚠️ no labels found in detect set。
✅ 正确做法是遵循 YOLOv8 官方推荐结构(支持自动划分与验证):
然后将 trainer.yaml(建议重命名为 dataset.yaml 以符合惯例)修正为:
⚠️ 关键注意事项:
train 和 val 的值是
子目录名
,不是完整路径;YOLOv8 会自动拼接为 path/train/ 和 path/val/;
train/ 和 val/ 下必须
同时存在 images/ 和 labels/ 两个文件夹
,缺一不可;
标签文件需为 .txt 格式,每行形如 0 0.34 0.56 0.22 0.18(class_id + normalized xywh),且文件名须与对应图像
严格一致
(仅扩展名不同);
若原始数据未分区,可用 ultralytics 内置工具快速划分:
最后,确保训练脚本中路径引用正确:
完成上述结构调整与配置后,YOLOv8 即可成功加载标签、执行 mAP 计算,并在验证阶段输出精确的评估指标。
path: -CENCORED-/Masaüstü/CustomObjectDetection/data
train: img
val: imgdataset/
├── train/
│ ├── images/ # 所有训练图像(.jpg/.png)
│ └── labels/ # 对应的YOLO格式txt标注文件(同名,如 fire_001.jpg → fire_001.txt)
├── val/
│ ├── images/
│ └── labels/
└── dataset.yaml # 指向此根目录# dataset.yaml
path: ./dataset # 相对于运行脚本的相对路径,或使用绝对路径(如 /home/user/dataset)
train: train
val: val
names:
0: fire
1: smokefrom ultralytics.utils import split_train_val
split_train_val("path/to/all_images", "path/to/all_labels",
train_ratio=0.8, seed=42)from ultralytics import YOLO
model = YOLO("yolov8n.pt")
results = model.train(data="dataset.yaml", epochs=100, imgsz=640) # ✅ 使用修正后的 YAML