YOLO 11n数据集结构异常引发训练报错,求排查与解决
YOLO单类别数据集训练报错:ValueError分析与修复
错误含义
ValueError: not enough values to unpack (expected 3, got 0) 表示YOLO在解析标注文件时,未读取到预期的字段内容。正常YOLO检测格式的标注每行需包含类别ID + 4个归一化坐标(共5个值),报错说明程序读取到的标注内容为空,或格式完全不符合要求。
问题定位
从你的项目目录和报错信息来看,核心问题集中在两点:
- 标注文件路径混乱:训练集标注文件(
000000000009.txt等)被错误放在labels/根目录,而非对应labels/train/子目录;同时labels/下存在无关的train.cache缓存文件,会干扰数据集加载逻辑。 - 标注文件格式异常:部分标注文件为空,或每行字段数不足(比如仅含类别ID,缺少坐标值)。
修复步骤
1. 修正数据集目录结构
- 将
labels/根目录下的000000000009.txt、000000000025.txt、000000000034.txt全部移至labels/train/目录下 - 确保
labels/val/内的标注文件仅对应images/val/中的图片,无错位情况 - 删除
labels/目录下的train.cache文件(这是自动生成的缓存,重新训练时会自动生成新的有效缓存)
2. 检查标注文件格式
- 标注文件必须与对应图片同名,例如
images/train/000000000009.jpg对应labels/train/000000000009.txt - 每行标注严格遵循YOLO格式:
类别ID x_center y_center width height,所有坐标需为归一化后的值(范围0-1,比如目标中心x坐标除以图片宽度) - 若图片无目标,保留空标注文件即可(YOLO支持空标注场景)
3. 验证gate.yaml配置
打开gate.yaml,确保配置内容符合单类别检测要求(示例如下):
train: ./datasets/images/train/ val: ./datasets/images/val/ nc: 1 # 单类别数量 names: ['gate'] # 你的目标类别名称
注意路径是相对于yaml文件的位置,需确保能正确指向图片目录。
内容的提问来源于stack exchange,提问作者4-4
相关产品推荐
相关产品推荐

