美文网首页
python生成图像样本的训练集、验证集和测试集

python生成图像样本的训练集、验证集和测试集

作者: 逍遥_yjz | 来源:发表于2022-04-26 20:01 被阅读0次

    准备好图像样本和标注文件后,需对样本集进行划分,生成训练集、验证集和测试集

    我的目录结构:

    1、原数据所在目录
    --data        # 图片数据
        ——0.jpg
        ——1.jpg
    --data_label  # 图片数据对应的标签
        ——0.txt
        ——1.txt
    
    2、分割后的目标数据
    ——floatRData
       ——images
         ——train
         ——val
         ——test
    
       ——labels
         ——train
         ——val
         ——test
    
    

    将样本按 training : validation : testing = 8:1:1,实现在images和labels同级目录下创建文件夹train,val,test,将按比例生成的数据存放到相应的位置。

    # conding:utf-8
    import sys,os
    import math
    import random
    import shutil
    root_path = sys.path[0]
    values_path = root_path+"/data"
    values_list = os.listdir(values_path)
    
    # 生成训练集、测试集、验证集,放文件的位置
    target_path = 'floatRData/images'
    target_label_path = 'floatRData/labels'
    target_path_list = [target_path,target_label_path]
    print(len(values_list))
    print(values_list)
    train_and_val = random.sample(values_list,int(math.floor(len(values_list)*0.9)))
    print(f'训练集和验证集:{train_and_val}')
    #train_and_val.sort()
    train_list = random.sample(train_and_val,int(math.floor(len(train_and_val)*8/9)))
    print(len(train_list))
    print(f'训练集:{train_list}')
    
    val_list = list(set(train_and_val).difference(set(train_list)))
    print(len(val_list))
    print(f'验证集:{val_list}')
    
    test_list = list(set(values_list).difference(set(train_and_val)))
    print(len(test_list))
    print(f'测试集:{test_list}')
    
    
    def create_set(input_list_name, folder_name):
        # 创建相应的文件夹
        for target_g_path in target_path_list:
            folder_name_path = target_g_path + "/" + folder_name
            if not os.path.exists(folder_name_path):
                os.mkdir(folder_name_path)
        # 将数据和标签数复制到指定的位置
        for file in eval(input_list_name):
            # 1.数据写入
            # 数据源所在文件夹
            source_path = root_path + "/data"
            full_target_file_name = os.path.join(source_path, file)  # 把文件的完整路径得到
            # 写入到指定的文件
            target_folder_path = os.path.join(target_path,folder_name)
            shutil.copy(full_target_file_name, target_folder_path)
    
            # 2.数据标签写入
            source_path = root_path + "/data_label"
            file = file.strip().split('.')[0] + '.txt'
            full_target_file_name = os.path.join(source_path, file)  # 把文件的完整路径得到
            target_folder_path = os.path.join(target_label_path, folder_name)
            shutil.copy(full_target_file_name, target_folder_path)
    
    
    
    key_name = ['train', 'val', 'test']
    for folder_name in key_name:
        list_name = folder_name + "_list"
        ##txt_name = folder_name + ".txt"
        create_set(list_name, folder_name)
    
    
    • random.sample(list,n): 从list中随机截取n个元素,以list形式返回,不改变原有list;
    • math.floor(x):返回x的向下取整值;
    • set():创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等;
    • set().difference(set):求差集;
    • eval():执行一个字符串表达式,并返回表达式的值.

    相关文章

      网友评论

          本文标题:python生成图像样本的训练集、验证集和测试集

          本文链接:https://www.haomeiwen.com/subject/oiehyrtx.html