You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YOLO v8自定义数据集训练报错:ValueError: not enough values to unpack

问题描述

使用Ultralytics官方YOLOv8训练自定义姿态数据集,执行训练命令:

yolo pose train data=Jz.yaml model=yolov8s-pose.pt pretrained=True project=FileClip01 name=s_pretrain epochs=50 batch=4 device=0

数据集配置文件Jz.yaml内容:

# 数据集在 datasets 目录下的文件夹路径
path: FileClips
# 训练集、验证集、测试集相对于 path 的路径
train: images/train
val: images/val
test: images/val

kpt_shape: [2, 3]

names:
  0: jz_rect

训练触发报错,完整回溯信息:

Traceback (most recent call last):
  File "/homeb/tangwuguo/miniconda3/envs/cv/bin/yolo", line 8, in <module>
    sys.exit(entrypoint())
  File "/homeb/tangwuguo/miniconda3/envs/cv/lib/python3.8/site-packages/ultralytics/yolo/cfg/__init__.py", line 391, in entrypoint
    getattr(model, mode)(**overrides)  # default args from model
  File "/homeb/tangwuguo/miniconda3/envs/cv/lib/python3.8/site-packages/ultralytics/yolo/engine/model.py", line 370, in train
    self.trainer.train()
  File "/homeb/tangwuguo/miniconda3/envs/cv/lib/python3.8/site-packages/ultralytics/yolo/engine/trainer.py", line 191, in train
    self._do_train(world_size)
  File "/homeb/tangwuguo/miniconda3/envs/cv/lib/python3.8/site-packages/ultralytics/yolo/engine/trainer.py", line 268, in _do_train
    self._setup_train(world_size)
  File "/homeb/tangwuguo/miniconda3/envs/cv/lib/python3.8/site-packages/ultralytics/yolo/engine/trainer.py", line 250, in _setup_train
    self.train_loader = self.get_dataloader(self.trainset, batch_size=batch_size, rank=RANK, mode='train')
  File "/homeb/tangwuguo/miniconda3/envs/cv/lib/python3.8/site-packages/ultralytics/yolo/v8/detect/train.py", line 43, in get_dataloader
    build_dataloader(self.args, batch_size, img_path=dataset_path, stride=gs, rank=rank, mode=mode,
  File "/homeb/tangwuguo/miniconda3/envs/cv/lib/python3.8/site-packages/ultralytics/yolo/data/build.py", line 81, in build_dataloader
    dataset = YOLODataset(
  File "/homeb/tangwuguo/miniconda3/envs/cv/lib/python3.8/site-packages/ultralytics/yolo/data/dataset.py", line 66, in __init__
    super().__init__(img_path, imgsz, cache, augment, hyp, prefix, rect, batch_size, stride, pad, single_cls,
  File "/homeb/tangwuguo/miniconda3/envs/cv/lib/python3.8/site-packages/ultralytics/yolo/data/base.py", line 69, in __init__
    self.labels = self.get_labels()
  File "/homeb/tangwuguo/miniconda3/envs/cv/lib/python3.8/site-packages/ultralytics/yolo/data/dataset.py", line 160, in get_labels
    len_cls, len_boxes, len_segments = (sum(x) for x in zip(*lengths))
ValueError: not enough values to unpack (expected 3, got 0)
Sentry is attempting to send 2 pending error messages
Waiting up to 2 seconds
Press Ctrl-C to quit

已确认Jz.yaml可生成缓存文件,标签坐标已完成归一化,求该报错的解决方法。

解决方法

该报错本质是数据集加载时未读取到有效标签数据,导致lengths为空无法解包出3个值,按以下步骤排查修复:

  • 检查标签文件路径与完整性
    确保标签文件放在对应图片目录的同级labels文件夹下:即FileClips/labels/train对应FileClips/images/train,FileClips/labels/val对应FileClips/images/val;同时确认每个图片都有同名的.txt标签文件,无空标签文件,标签数量与图片数量匹配。

  • 验证姿态标签格式正确性
    YOLOv8姿态标签必须遵循固定格式:

    <class-id> <x-center> <y-center> <width> <height> <x1> <y1> <v1> <x2> <y2> <v2> ... <xn> <yn> <vn>
    

    针对你的数据集:

    • <class-id>固定为0(对应names中的jz_rect)
    • <x-center> <y-center> <width> <height>是目标框的归一化坐标
    • 需包含2个关键点的信息(对应kpt_shape[0]=2),每个关键点由<xi> <yi> <vi>组成(vi为0=不可见,1=可见,2=标注但遮挡)
    • 每行标签必须包含1(类别)+4(框)+3*2(关键点)=11个字段,缺少任何字段都会导致解析失败。
  • 修正数据集路径配置
    确认path字段的FileClips路径正确:如果用相对路径,需确保是相对于执行yolo命令的工作目录;也可以直接替换为绝对路径避免路径解析错误;同时检查train/val/test对应的图片文件夹确实存在且包含图片。

  • 清理缓存后重试
    删除项目目录(如FileClip01/s_pretrain)或数据集目录下的cache文件夹,强制训练程序重新加载并解析标签数据,避免旧缓存的干扰。

  • 自动校验数据集有效性
    执行Ultralytics提供的数据集校验命令:

    yolo check data=Jz.yaml
    

    该命令会自动检查数据集配置、标签格式、文件匹配性等问题,并输出详细的错误提示。

内容的提问来源于stack exchange,提问作者WuGuo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:43:15