2023年7月9日发(作者:)
分类任务1——将原始图像集分成训练,验证以及测试三个部分在做分类任务的时候,常常要准备数据集。在准备好之后⼜要将它分成训练验证和测试三个部分。但是如果⼿动分的话,反复的复制粘贴属实有点烦⼈。参考借鉴了 并作出了适合我⾃⼰的修改,把它在这⾥贴出来,希望可以帮助其他⼩⽩成长。注释什么的可以看我上⾯给出的链接代码⾥我加了tqdm来看进度,这个玩意属实是个好东西。"""# 把原始数据集按照 7:2:1 的⽐例分成训练,验证以及测试三个部分"""import osimport randomfrom shutil import copy2from tqdm import tqdm# r会将⽂件夹下的⽂件名集合成⼀个列表并返回def getDir(filepath): pathlist = r(filepath) return pathlist#
制作五类图像总的训练集,验证集和测试集所需要的⽂件夹,#
例如训练集的⽂件夹中装有五个⽂件夹,这些⽂件夹分别装有⼀定⽐例的五类图像def mkTotalDir(data_path): rs(data_path) dic = ['train', 'validation', 'test'] for i in range(0, 3): current_path = data_path + dic[i] + '/' #
这个函数⽤来判断当前路径是否存在,如果存在则创建失败,如果不存在则可以成功创建 isExists = (current_path) if not isExists: rs(current_path) print('successful ' + dic[i]) else: print('is existed, remove and rebuild') return#
传⼊的参数是五类图像原本的路径,返回的是这个路径下各类图像的名称列表和图像的类别数def getClassesMes(source_path): classes_name_list = getDir(source_path) classes_num = len(classes_name_list) return classes_name_list, classes_num# change_path其实就是制作好的五类图像总的训练集,验证集和测试集的路径,sourcepath和上⾯⼀个函数相同#
这个函数是⽤来建训练集,测试集,验证集下五类图像的⽂件夹,就是建15个⽂件夹,当然也可以建很多类def mkClassDir(source_path, change_path): classes_name_list, classes_num = getClassesMes(source_path) for i in range(0, classes_num): current_class_path = (change_path, classes_name_list[i]) isExists = (current_class_path) if not isExists: rs(current_class_path) print('successful ' + classes_name_list[i]) else: print('is existed') print('n')# source_path:原始多类图像的存放路径# train_path:训练集图像的存放路径# validation_path:验证集图像的存放路径# test_path:测试集图像的存放路径def divideTrainValidationTest(source_path, train_path, validation_path, test_path): """先获取五类图像的名称列表和类别数⽬""" classes_name_list, classes_num = getClassesMes(source_path) """调⽤上⾯的函数,在训练集验证集和测试集⽂件夹下建⽴五类图像的⽂件夹""" mkClassDir(source_path, train_path) mkClassDir(source_path, validation_path) mkClassDir(source_path, test_path) """ 先将⼀类图像的路径拿出来,将这个路径下所有这类的图⽚的⽂件名做成⼀个列表,使⽤r函数, 然后再将列表⾥⾯的所有图像名进⾏shuffle就是随机打乱, 最后从打乱后的图像按照7:2:1分别放⼊训练集,验证集和测试集的图像名称列表 """ for i in range(classes_num): source_image_dir = r(source_path + classes_name_list[i] + '/') e(source_image_dir) train_image_list = source_image_dir[0:int(0.7 * len(source_image_dir))] validation_image_list = source_image_dir[int(0.7 * len(source_image_dir)):int(0.9 * len(source_image_dir))] test_image_list = source_image_dir[int(0.9 * len(source_image_dir)):] """ 找到每⼀个集合列表中每⼀张图像的原始图像位置,然后将这张图像复制到⽬标的路径下,⼀共是五类图像 每类图像随机被分成三个去向,使⽤shutil库中的copy2函数进⾏复制,当然也可以使⽤move函数,但是move 相当于移动图像,当操作结束后,原始⽂件夹中的图像会都跑到⽬标⽂件夹中,如果划分不正确你想重新划分 就需要备份,不然的话很⿇烦 """ print('开始制作第 %d 类图像:' % (i + 1)) #
使⽤tqdm函数展⽰进度 for train_image in tqdm(train_image_list): origins_train_image_path = source_path + classes_name_list[i] + '/' + train_image new_train_image_path = train_path + classes_name_list[i] + '/' copy2(origins_train_image_path, new_train_image_path) for validation_image in tqdm(validation_image_list): origins_validation_image_path = source_path + classes_name_list[i] + '/' + validation_image new_validation_image_path = validation_path + classes_name_list[i] + '/' copy2(origins_validation_image_path, new_validation_image_path) for test_image in tqdm(test_image_list): origins_test_image_path = source_path + classes_name_list[i] + '/' + test_image new_test_image_path = test_path + classes_name_list[i] + '/' copy2(origins_test_image_path, new_test_image_path) print('第 %d 类图像制作完成n' % (i + 1))if __name__ == '__main__': source_path = 'H:/coding/000yuantu/' # source_path = 'H:/000/' data_path = 'E:/111project/ship image/' train_path = data_path + 'train' + '/' validation_path = data_path + 'validation' + '/' test_path = data_path + 'test' + '/' mkTotalDir(data_path) divideTrainValidationTest(source_path, train_path, validation_path, test_path)
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688906893a182262.html
评论列表(0条)