我们可能会遇到这样的问题:
下载下来的数据集图片数量太大,例如几万张,并且没有为我们切分好训练集和测试集,同时尤其是对于目标检测任务还有label的数据同样没有切分,如果想用手动转移图片或者label的txt文件,一个是麻烦,另一个是可能找不到图片、txt文件对应位置。基于此,有以下代码可以利用:
首先,你应该在具有大量图片/txt的文件夹下新建train、test文件
import os
import shutil
loss_file_name = []
path_main = r"D:\paper_code\dataset\Ship_Dataset\images" # 待处理文件夹路径
filelist_main = os.listdir(path_main) # 将“待处理文件夹“下的文件名以列表的形式列出来
path_receive_train = r"D:\paper_code\dataset\Ship_Dataset\images\train" # 移动到这个位置
path_receive_test = r"D:\paper_code\dataset\Ship_Dataset\images\test"
LENGHT = len(filelist_main) # 定义一个变量存放filelist_main的长度,用len()方法计算列表长度返回的是列表中元素的个数
print(LENGHT) # 39731-2=39729 30000 9731
name = []
print(filelist_main[0])
count = 0
for files in filelist_main:
filename1 = os.path.splitext(files)[1] # 读取文件后缀名
filename0 = os.path.splitext(files)[0] # 读取文件名
# print(filename0)
# print(filename1)
if filename1 == '.jpg' and count < 30000: # 判断是否为jpg文件,根据自己的文件类型修改
full_path = os.path.join(path_main, files) # 文件待移动完整路径
despath = path_receive_train # 文件目标完整路径
shutil.move(full_path, despath)
elif filename1 == '.jpg' and count >= 30000:
full_path = os.path.join(path_main, files) # 文件待移动完整路径
despath = path_receive_test # 文件目标完整路径
shutil.move(full_path, despath)
count += 1
print(count)
print('完成!')
在这里,我将原数据集的39729张图片的前3w张放入了训练集,其余放入测试集。txt文件同理,合理更换位置和修改。