YOLOv5格式数据集导入Fiftyone返回样本数为0错误如何解决?
问题原因及解决方案
- 原因1:未指定split参数
Fiftyone加载YOLOv5格式数据集时,需要明确指定要加载的数据集拆分(train/val/test),未指定的情况下不会读取任何样本。
修改代码时在fo.Dataset.from_dir参数中补充split参数即可,示例:
import fiftyone as fo name = "my-dataset2" dataset_dir = "/content/drive/MyDrive/yolo/yolov5/training/data" # 创建数据集,指定加载训练集拆分 dataset = fo.Dataset.from_dir( dataset_dir=dataset_dir, dataset_type=fo.types.YOLOv5Dataset, split="train", # 可根据需要改为val/test name=name, )
如果需要同时加载多个拆分,可以多次调用add_dir方法:
# 追加加载验证集 dataset.add_dir( dataset_dir=dataset_dir, dataset_type=fo.types.YOLOv5Dataset, split="val" )
- 原因2:数据集目录结构不符合YOLOv5规范
Fiftyone严格识别YOLOv5的标准目录结构,你的dataset_dir需要满足如下结构:
dataset_dir/ ├── dataset.yaml # 数据集配置文件 ├── images/ │ ├── train/ # 训练集图片 │ ├── val/ # 验证集图片 │ └── test/ # 测试集图片 └── labels/ ├── train/ # 训练集标注,和images/train下的文件名一一对应 ├── val/ # 验证集标注,和images/val下的文件名一一对应 └── test/ # 测试集标注,和images/test下的文件名一一对应
请检查你的目录层级、文件夹命名是否完全匹配,标注文件和图片的文件名是否一一对应(如图片为a.jpg,标注必须为a.txt)。
原因3:dataset.yaml配置错误
请检查你的dataset.yaml文件内容是否符合要求:path字段需填写数据集根目录的相对路径(相对于yaml文件所在位置,直接填.即可)train、val、test字段需填写对应拆分图片目录的相对路径,如images/trainnames字段需按顺序填写所有类别名称,无遗漏
原因4:权限或路径拼写错误
云盘挂载场景下需确认挂载成功、路径没有拼写错误,同时检查运行代码的账号是否有dataset_dir目录及下属所有文件的读取权限。你可以运行如下代码快速验证路径有效性:
import os # 检查训练集图片数量,替换为你要验证的目录即可 img_dir = os.path.join(dataset_dir, "images/train") print(f"训练集图片数量:{len(os.listdir(img_dir))}")
内容的提问来源于stack exchange,提问作者Ryotaro Harada
相关产品推荐
相关产品推荐

