本人目前在做一个深度学习的项目,首先必须将图片数据集进行处理,本博客介绍了将一个文件夹下的子文件夹中的所有图片拆分成任意比例的train和val
本想在网上白嫖一个代码的,奈何不是代码太啰嗦就是不能实现我想达到的效果,于是乎只能自己写。话不多说先上效果:
在本代码中,默认将数据集处理为80%训练集和20%验证集,想要改变比例可以在代码中修改;运行时可将代码文件放在和要处理的图片集同一目录下,文件夹地址输入如:data,即可完成处理。原数据集中把每一个类别的图片单独放在一个子文件夹下
代码如下(没来得及写注释,随后补上):
# coding=utf-8
import os, random, shutil
# 将图片拆分成训练集train(0.8)和验证集val(0.2)
def moveFile(Dir,train_ratio=0.8,val_ratio=0.2):
if not os.path.exists(os.path.join(Dir, 'train')):
os.makedirs(os.path.join(Dir, 'train'))
if not os.path.exists(os.path.join(Dir, 'val')):
os.makedirs(os.path.join(Dir, 'val'))
filenames = []
for root,dirs,files in os.walk(Dir):
for name in files:
filenames.append(name)
break
filenum = len(filenames)
num_train = int(filenum * train_ratio)
sample_train = random.sample(filenames, num_train)
for name in sample_train:
shutil.move(os.path.join(Dir, name), os.path.join(Dir, 'train'))
sample_val = list(set(filenames).difference(set(sample_train)))
for name in sample_val:
shutil.move(os.path.join(Dir, name), os.path.join(Dir, 'val'))
if __name__ == '__main__':
Dir = input('请输入想处理的文件夹:')
for root,dirs,files in os.walk(Dir):
for name in dirs:
folder = os.path.join(root, name)
print("正在处理:" + folder)
moveFile(folder)
print("处理完成")
break