项目场景:
当我们在进行图像处理的学习的时候,往往会去网上去下载一些数据集,比如CIFAR10数据集,或者是一些花的分类等等。
问题描述及解决方案:
那么问题就来了,很多数据集下载下来之后,是没有分类好的,如果人工进行分类的话,就会耗费很多的时间和精力。所以在这里介绍一种使用python程序进行自动分类为训练集和测试集的方法。下面以一些花的分类举例:
1、将如下代码在pycharm等python编辑器中保存为.py文件,文件名为’sep_data’。90%的训练集,10%的测试集,如果想修改比例,可以在代码中找到相应位置改变数值即可。
import os
from shutil import copy, rmtree
import random
def mk_file(file_path: str):
if os.path.exists(file_path):
# 如果文件夹存在,则先删除原文件夹在重新创建
rmtree(file_path)
os.makedirs(file_path)
def main():
# 保证随机可复现
random.seed(0)
# 将数据集中10%的数据划分到验证集中
split_rate = 0.1
# 指向你解压后的flower_photos文件夹
cwd = os.getcwd()
data_root = os.path.join(cwd, "flower_data")
origin_flower_path = os.path.join(data_root, "flower_photos")
assert os.path.exists(origin_flower_path), "path '{}' does not exist.".format(origin_flower_path)
flower_class = [cla for cla in os.listdir(origin_flower_path)
if os.path.isdir(os.path.join(origin_flower_path, cla))]
# 建立保存训练集的文件夹
train_root = os.path.join(data_root, "train")
mk_file(train_root)
for cla in flower_class:
# 建立每个类别对应的文件夹
mk_file(os.path.join(train_root, cla))
# 建立保存验证集的文件夹
val_root = os.path.join(data_root, "test")
mk_file(val_root)
for cla in flower_class:
# 建立每个类别对应的文件夹
mk_file(os.path.join(val_root, cla))
for cla in flower_class:
cla_path = os.path.join(origin_flower_path, cla)
images = os.listdir(cla_path)
num = len(images)
# 随机采样验证集的索引
eval_index = random.sample(images, k=int(num*split_rate))
for index, image in enumerate(images):
if image in eval_index:
# 将分配至验证集中的文件复制到相应目录
image_path = os.path.join(cla_path, image)
new_path = os.path.join(val_root, cla)
copy(image_path, new_path)
else:
# 将分配至训练集中的文件复制到相应目录
image_path = os.path.join(cla_path, image)
new_path = os.path.join(train_root, cla)
copy(image_path, new_path)
print("\r[{}] processing [{}/{}]".format(cla, index+1, num), end="") # processing bar
print()
print("processing done!")
if __name__ == '__main__':
main()
}
2、在同个文件夹中新建文件夹,命名为flower_data,在flower_data文件夹中新建文件夹,命名为flower_photos。将下载下来的数据集解压到此文件夹中。此时你会发现文件夹中有五种花的类别。
3、返回到sep_data 所在文件夹,在空白处右键鼠标,点击“在windows终端中打开”,打开之后输入“python .\sep_data.py”,回车,便可以自动分好类。此时再回到flower_data文件夹中会发现,多了两个文件夹,一个是train文件夹,一个是test文件夹。