网上关于划分训练集,验证集,测试集的实现已经很多 随便搜索下就可以出来很多 但是自己亲自用过的才是最有保障的吧 特此记录下 以免哪天丢失 又得费一番功夫 也供大家参考下
Python代码实现
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: yehaizi time:2019/10/28:9:24
import os
import random
trainval_percent = 0.8 # trainval占总数的比例
# train_percent = 0.5 # train占trainval的比例
xmlfilepath = "/home/hq/Research/data/VOC/VOCtrainval-2012/VOCdevkit/VOC2012/Annotations/"
txtsavepath = "/home/hq/Research/data/VOC/VOCtrainval-2012/VOCdevkit/VOC2012/ImageSets/Main/"
total_xml = os.listdir(xmlfilepath) # 列举当前目录下所有的文件,返回的是列表类型
num = len(total_xml) # 获得总的文件个数 这里就是xml文件的个数
list = range(num) # 生成一个整数列表 如num=10,则为[1,2,3,4,...9]
tv = int(num * trainval_percent)
# tr = int(tv * train_percent) #我直接将trainval作为训练集 故这里注释掉 你们自己的就看情况
trainval = random.sample(list, tv) # 多个字符中生成指定数量的随机字符
# train = random.sample(trainval, tr) # 同理 注释掉
ftrainval = open(txtsavepath + 'trainval.txt', 'w')
ftest = open(txtsavepath + 'test.txt', 'w')
# ftrain = open(txtsavepath + r'\train.txt', 'w')
# fval = open(txtsavepath + r'\val.txt', 'w')
for i in list:
name = total_xml[i][:-4] + '\n'
if i in trainval:
ftrainval.write(name)
# 同理 注释掉
# if i in train:
# ftrain.write(name)
# else:
# fval.write(name)
else:
ftest.write(name)