官方只有英文文档,在网上搜中文教程全是文档里最表层的示例,在被领导骂了两周后,算是捣鼓出了一丢丢东西,防止其他哥们的领导莫名其妙也非要搞个什么数据集可视化,我把我这套东西放这,我是使用yolov5进行训练的数据集也是v5格式的
先把官方文档连接放这
从磁盘加载数据集 — FiftyOne 0.24.1 文档 (voxel51.com)
注意数据文件夹格式必须采用下面这个格式
<dataset_dir>/
dataset.yaml
images/
train/
<uuid1>.<ext>
<uuid2>.<ext>
...
val/
<uuid3>.<ext>
<uuid4>.<ext>
...
labels/
train/
<uuid1>.txt
<uuid2>.txt
...
val/
<uuid3>.txt
<uuid4>.txt
...
假设你有多个文件夹(像我一样按日期分的),那么每个文件夹都需要像这个格式一样,内部都得有个yaml的文件
然后开始编辑加载数据集的代码
import fiftyone as fo
import fiftyone.zoo as foz
import os
import shutil
import re
from datetime import datetime
import fiftyone as fo
dataset_dir = "放你自己的最表层文件夹"
dataset = fo.Dataset("给你的数据集取个名字")
#是否要永久保存,测试的时候建议不要保存,等测好了再保存
dataset.persistent = True
for foldername in os.listdir(dataset_dir):
date_folder_path = os.path.join(dataset_dir, foldername)
if foldername == 'labels':
continue
elif foldername == 'images':
continue
elif foldername == 'uavbird.yaml':
continue
print(f"==================当前操作文件夹: {foldername}===============================")
# 遍历train和val子目录
for subdir in ['images', 'labels']:
subdir_path = os.path.join(date_folder_path, subdir)
if subdir == 'labels':
continue
# 遍历images和labels文件夹
for folder in ['train', 'val']:
folder_path = os.path.join(subdir_path, folder)
dataset.add_dir(
dataset_dir = date_folder_path,
dataset_type = fo.types.YOLOv5Dataset,
split = folder,
#这里我将不同种类的内容放入不同文件夹,因此可以直接使用文件夹名作为一个tag
tags = foldername,
)
print(dataset)
print(dataset.head())
session = fo.launch_app(dataset)
session.wait()
如果选择永久保存后如何查看
使用 FiftyOne 数据集 — FiftyOne 0.24.1 文档 (voxel51.com)
import fiftyone as fo
//可以显示当前环境下全部数据集的名字
print(fo.list_datasets())
dataset = fo.load_dataset("你数据集的名字")
session = fo.launch_app(dataset)
session.wait()