1、总代码
import os, shutil
from sklearn.model_selection import train_test_split
#需修改,划分比例
val_size = 0.2
test_size = 0.1
#需修改,确保图片后缀一致
postfix = 'jpg'
#需修改,划分的图片路径
imgpath = r'F:\xuedi\New_img\images\resized_fods_2000_imgs_near'
#需修改,划分的标签路径
txtpath = r'F:\xuedi\New_img\images\resized_fods_2000_labels_near'
os.makedirs('images/train', exist_ok=True)
os.makedirs('images/val', exist_ok=True)
os.makedirs('images/test', exist_ok=True)
os.makedirs('labels/train', exist_ok=True)
os.makedirs('labels/val', exist_ok=True)
os.makedirs('labels/test', exist_ok=True)
listdir = [i for i in os.listdir(txtpath) if 'txt' in i]
train, test = train_test_split(listdir, test_size=test_size, shuffle=True, random_state=0)
train, val = train_test_split(train, test_size=val_size, shuffle=True, random_state=0)
for i in train:
shutil.copy('{}/{}.{}'.format(imgpath, i[:-4], postfix), 'images/train/{}.{}'.format(i[:-4], postfix))
shutil.copy('{}/{}'.format(txtpath, i), 'labels/train/{}'.format(i))
for i in val:
shutil.copy('{}/{}.{}'.format(imgpath, i[:-4], postfix), 'images/val/{}.{}'.format(i[:-4], postfix))
shutil.copy('{}/{}'.format(txtpath, i), 'labels/val/{}'.format(i))
for i in test:
shutil.copy('{}/{}.{}'.format(imgpath, i[:-4], postfix), 'images/test/{}.{}'.format(i[:-4], postfix))
shutil.copy('{}/{}'.format(txtpath, i), 'labels/test/{}'.format(i))
2、需要修改部分讲解
仅修改四处即可完成对数据集的划分
(1)确定划分比例,根据自己的要求划分数据集,常见的划分比例为
在第4行
Train:Val:Test=7:2:1
Train:Val:Test=8:1:1
#需修改,划分比例
val_size = 0.2
test_size = 0.1
(2)确定图片的后缀一致,根据自己的图片后缀进行替换
在第8行
#需修改,确保图片后缀一致
postfix = 'jpg'
(3)图片路径和标签路径修改
在第10行
#需修改,划分的图片路径
imgpath = r'F:\xuedi\New_img\images\resized_fods_2000_imgs_near'
#需修改,划分的标签路径
txtpath = r'F:\xuedi\New_img\images\resized_fods_2000_labels_near'
实验结果
最后生成的文件在运行代码目录下的文件夹里,具体目录结构为:
split_data.py
————images
——————train
——————val
——————test
————labels
——————train
——————val
——————test
代码仅供自己学习