yolov8 训练报错“no labels found”通常源于数据集目录结构或 yaml 配置不匹配;本文详解符合 ultralytics 规范的标准目录组织方式、yaml 配置要点及常见陷阱,助你快速修复标签加载失败问题。
yolov8 训练报错“no labels found”通常源于数据集目录结构或 yaml 配置不匹配;本文详解符合 ultralytics 规范的标准目录组织方式、yaml 配置要点及常见陷阱,助你快速修复标签加载失败问题。
YOLOv8(由 Ultralytics 官方维护)对数据集的目录结构有明确约定:它不会自动搜索子目录中的 labels 文件夹,而是严格依据 dataset.yaml 中 train 和 val 字段所指定的相对路径,在对应目录下固定查找 images/ 和 labels/ 两个同级子文件夹。这意味着,若你的 YAML 中写的是 train: img,YOLOv8 就会在 path/img/ 下寻找 images/ 和 labels/ —— 而不是在 path/img/ 下直接找 .txt 标签文件。
✅ 正确的数据集结构(推荐标准格式)
请将你的数据组织为如下层级(以 dataset/ 为根):
dataset/
├── train/
│ ├── images/ # 存放训练图像(.jpg, .png 等)
│ │ ├── fire_001.jpg
│ │ └── smoke_023.jpg
│ └── labels/ # 存放对应训练标签(.txt,每图一文件,格式为 YOLO 坐标)
│ ├── fire_001.txt
│ └── smoke_023.txt
└── val/
├── images/
└── labels/? 关键点:images/ 和 labels/ 必须是 train/ 和 val/ 的直接子目录,且名称必须为小写 images 和 labels(大小写敏感)。
✅ 正确的 trainer.yaml 配置
基于上述结构,你的 trainer.yaml 应改为:
# trainer.yaml path: ./dataset # 相对于运行脚本的相对路径(推荐)或绝对路径(需确保可读) train: train # 指向 dataset/train/(YOLOv8 自动在此下找 images/ 和 labels/) val: val # 指向 dataset/val/ names: 0: fire 1: smoke
⚠️ 常见错误修正:
- ❌ 错误:train: img → YOLOv8 会去 ./dataset/img/ 下找 images/ 和 labels/,但你实际把图片放在了 ./dataset/img/ 根目录;
- ❌ 错误:path 使用 Windows 绝对路径含空格或中文(如 C:\Users\用户名\Desktop\...)→ 易引发路径解析失败,建议使用 ./ 相对路径或标准化的英文路径(如 D:/yolo_data/);
- ❌ 错误:labels/ 内 .txt 文件名与 images/ 中图片名不完全一致(含扩展名差异,如 img1.jpg 对应 img1.txt ✅,但 img1.jpeg 对应 img1.txt ❌)→ YOLOv8 严格按文件名(不含扩展名)匹配。
✅ 验证与调试建议
-
手动检查路径有效性:在 Python 中运行以下代码确认路径可访问:
import os from pathlib import Path yaml_path = "trainer.yaml" with open(yaml_path) as f: import yaml data = yaml.safe_load(f) train_img_dir = Path(data["path"]) / data["train"] / "images" train_lbl_dir = Path(data["path"]) / data["train"] / "labels" print("Train images:", train_img_dir.exists(), list(train_img_dir.glob("*.jpg"))[:3]) print("Train labels:", train_lbl_dir.exists(), list(train_lbl_dir.glob("*.txt"))[:3]) -
标签文件格式校验:每个 .txt 文件应为 UTF-8 编码,每行一个目标,格式为:
class_id center_x center_y width height(归一化到 0~1)。例如火灾检测:0 0.452 0.613 0.210 0.345
-
首次训练前启用验证日志:添加 verbose=True 查看数据加载详情:
results = model.train(data="trainer.yaml", epochs=1, verbose=True)
日志中若出现 Found XXX images and XXX labels in train set 即表示加载成功。
遵循此结构与配置,你的 Wildfire Detector 项目即可顺利启动 YOLOv8 训练流程。记住:结构即契约,路径即逻辑——Ultralytics 的设计哲学正是通过强约束换取训练稳定性与跨平台兼容性。

















