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
相关产品推荐
相关产品推荐

