
本文详解 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/ 两个同级子文件夹。你当前的配置:
path: -CENCORED-/Masaüstü/CustomObjectDetection/data train: img val: img
意味着 YOLOv8 会去 data/img/ 目录下寻找 images/ 和 labels/,但实际你的图片和标签很可能混放在 img/ 下,或 labels/ 根本不在该路径内,因此触发 WARNING ⚠️ no labels found in detect set。
✅ 正确做法是遵循 YOLOv8 官方推荐结构(支持自动划分与验证):
dataset/ ├── train/ │ ├── images/ # 所有训练图像(.jpg/.png) │ └── labels/ # 对应的YOLO格式txt标注文件(同名,如 fire_001.jpg → fire_001.txt) ├── val/ │ ├── images/ │ └── labels/ └── dataset.yaml # 指向此根目录
然后将 trainer.yaml(建议重命名为 dataset.yaml 以符合惯例)修正为:
# dataset.yaml path: ./dataset # 相对于运行脚本的相对路径,或使用绝对路径(如 /home/user/dataset) train: train val: val names: 0: fire 1: smoke
⚠️ 关键注意事项:
- 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 内置工具快速划分:
from 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
完成上述结构调整与配置后,YOLOv8 即可成功加载标签、执行 mAP 计算,并在验证阶段输出精确的评估指标。










