原始图片数据集和标签数据集要同时划分,训练模型时候都要用到,且互相要一一对应。也就是说某张原始图片作为验证集了,那么它对应的标签数据也要作为验证集。
通过以下代码即可轻松实现
import os, random, shutil
def moveimg(fileDir, tarDir):
pathDir = os.listdir(fileDir) # 取图片的原始路径
filenumber = len(pathDir)
rate = 0.1 # 自定义抽取图片的比例,比方说100张抽10张,那就是0.1
picknumber = int(filenumber * rate) # 按照rate比例从文件夹中取一定数量图片
sample = random.sample(pathDir, picknumber) # 随机选取picknumber数量的样本图片
print(sample)
for name in sample:
shutil.move(fileDir + name, tarDir + "\\" + name)
return
def movelabel(file_list, file_label_train, file_label_val):
for i in file_list:
if i.endswith('.jpg'):
# filename = file_label_train + "\\" + i[:-4] + '.xml' # 划分xml标签的数据集使用这句,将下面一句注释掉
filename = file_label_train + "\\" + i[:-4] + '.txt' # 划分txt标签的数据集使用这句,将上面一句注释掉
if os.path.exists(filename):
shutil.move(filename, file_label_val)
print(i + "处理成功!")
if __name__ == '__main__':
fileDir = r"D:\code\mydata\image\JPEGImages" + "\\" # 源图片文件夹路径
tarDir = r'D:\code\mydata\image\JPEGImages_val' # 图片移动到新的文件夹路径
moveimg(fileDir, tarDir)
file_list = os.listdir(tarDir)
file_label_train = r"D:\code\mydata\labels" # 源图片txt或者xml标签路径
file_label_val = r"D:\code\mydata\labels_val" # txt或者xml标签存入路径
# 移动到新的文件路径
movelabel(file_list, file_label_train, file_label_val)
注意
rate:从所有数据集中随机抽出rate比例的数据集作为验证集,剩下的作为验证集
filename:划分txt标签或者xml标签,对应的代码语句不同
fileDir:原始图片文件夹路径,抽取验证集走了之后,剩下的就作为训练集
tarDir:原始图片作为验证集的移动到的文件夹路径
file_label_train:txt或者xml标签文件夹路径,抽取验证集走了之后,剩下的就作为训练集
file_label_val:txt或者xml标签作为验证集的文件夹路径