制作自己的voc数据集,训练的时候不是要划分训练集和验证集吗,我打算自己制作验证集,不要80%20%的自动划分,有同志知道怎么做吗,多谢!
我打算自己制作验证集,不要80%20%的自动划分:那你打算怎么制作,怎么划分呢?
不知道你这个问题是否已经解决, 如果还没有解决的话:可以通过以下步骤手动划分验证集:
首先,将所有的图片和对应的标注文件放入一个文件夹(假定为 /data/images
)中,并且按照相同的命名规则命名(例如图片名字为 0001.jpg
,对应的标注文件名为 0001.xml
)。
使用 Python 中的 os 模块读取文件夹中的所有文件列表:
import os
image_dir = "/data/images"
files = os.listdir(image_dir)
import random
random.shuffle(files)
val_ratio = 0.2
n_val = int(len(files) * val_ratio)
n_train = len(files) - n_val
val_files = files[:n_val]
train_files = files[n_val:]
import shutil
train_dir = "/data/train"
val_dir = "/data/val"
os.makedirs(train_dir, exist_ok=True)
os.makedirs(val_dir, exist_ok=True)
train_list_file = "/data/train_list.txt"
val_list_file = "/data/val_list.txt"
with open(train_list_file, "w") as f:
for file in train_files:
img_path = os.path.join(image_dir, file)
anno_path = os.path.join(image_dir, file.replace(".jpg", ".xml"))
shutil.copy(img_path, train_dir)
shutil.copy(anno_path, train_dir)
f.write(os.path.join(train_dir, file) + "\n")
with open(val_list_file, "w") as f:
for file in val_files:
img_path = os.path.join(image_dir, file)
anno_path = os.path.join(image_dir, file.replace(".jpg", ".xml"))
shutil.copy(img_path, val_dir)
shutil.copy(anno_path, val_dir)
f.write(os.path.join(val_dir, file) + "\n")
这样就成功手动划分了训练集和验证集,并且保存了他们的文件路径列表。在训练时,可以直接使用列表文件指定数据集。