美文网首页
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