【目标检测】随机划分数据集中的图像及其对应标签

数据集格式:

data---|---Images

           |----Labels

划分结果:

data---|---train---|---Images

                           |---Labels

            |---val---|---Images

                         |---Labels

            |---test---|---Images

                          |---Labels

#将数据集中的图片与标签按照预设比例划分为训练集、验证集、测试集
import os
import random
import shutil

image_path = r'C:\Users\Administrator\Desktop\ght\Yolov7\data\Images\\'  # 源图片文件夹路径
label_path = r'C:\Users\Administrator\Desktop\ght\Yolov7\data\Labels\\'  # 标签文件夹路径

train_images = r'C:\Users\Administrator\Desktop\ght\Yolov7\data\train\Images'
train_labels = r'C:\Users\Administrator\Desktop\ght\Yolov7\data\train\Labels'
val_images = r'C:\Users\Administrator\Desktop\ght\Yolov7\data\val\Images'
val_labels = r'C:\Users\Administrator\Desktop\ght\Yolov7\data\val\Labels'
test_images = r'C:\Users\Administrator\Desktop\ght\Yolov7\data\test\Images'
test_labels = r'C:\Users\Administrator\Desktop\ght\Yolov7\data\test\Labels'
# 如存储路径不存在则创建
if not os.path.exists(train_images):
    os.makedirs(train_images)
if not os.path.exists(train_labels):
    os.makedirs(train_labels)
if not os.path.exists(val_images):
    os.makedirs(val_images)
if not os.path.exists(val_labels):
    os.makedirs(val_labels)
if not os.path.exists(test_images):
    os.makedirs(test_images)
if not os.path.exists(test_labels):
    os.makedirs(test_labels)
# 自定义三种集合的比例
train_rate = 0.6  
val_rate = 0.2
test_rate = 0.2
# 求训练集
pathDir = os.listdir(image_path)# 取图片的原始路径
print(pathDir)
print('数据集总共有图片:', len(pathDir))
print(
    '划分比例如下:训练集:{},验证集:{},测试集:{}'.format(int(len(pathDir) * train_rate), int(len(pathDir) * val_rate),
                                                        int(len(pathDir) * test_rate)))
picknumber = int(len(pathDir) * train_rate) # 按照预设比例算得所取训练集图片数picknumber
train_sample = random.sample(pathDir, picknumber) # 创建所取图片对应列表
train_sample_labels = list(train_sample)
for i in range(len(train_sample_labels)):
    train_sample_labels[i] = train_sample_labels[i].replace('jpg','txt') # 创建所取图片对应标签的列表(标注为xml格式的可把txt改为xml)
# 复制训练集图片及标签
for name in train_sample:
    shutil.copy(image_path + name, train_images + "\\" + name)
for name in train_sample_labels:
    shutil.copy(label_path + name, train_labels + "\\" + name)
# 求出排除训练集的剩余数据集
all_images = os.listdir(image_path)
remaining_image = []
for file in all_images:
    if file not in train_sample:
        remaining_image.append(file)
all_labels = os.listdir(label_path)
remaining_label = []
for file in all_labels:
    if file not in train_sample_labels:
        remaining_label.append(file)
# 求验证集
picknumber2 = int(len(remaining_image) * val_rate / (val_rate + test_rate))
val_sample = random.sample(remaining_image, picknumber2)
val_sample_labels = list(val_sample)
for i in range(len(val_sample_labels)):
    val_sample_labels[i] = val_sample_labels[i].replace('jpg','txt')
# 复制验证集图片及标签
for name in val_sample:
    shutil.copy(image_path + name, val_images + "\\" + name)
for name in val_sample_labels:
    shutil.copy(label_path + name, val_labels + "\\" + name)
#排除验证集以得到测试集
rest_image = []
for file in remaining_image:
    if file not in val_sample:
        rest_image.append(file)
rest_label = []
for file in remaining_label:
    if file not in val_sample_labels:
        rest_label.append(file)
# 复制测试集图片及标签
for name in rest_image:
    shutil.copy(image_path + name, test_images + "\\" + name)
for name in rest_label:
    shutil.copy(label_path + name, test_labels + "\\" + name)

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
变化检测数据集随机划分代码可以采用以下步骤来实现: 1. 导入所需的库和模块,例如numpy和random。 2. 定义变量,如数据集大小(图像对的数量)和划分比例(train、val和test的比例)。 3. 创建一个列表,用于存储图像对的索引。 4. 使用循环,将所有图像对的索引添加到列表。 5. 使用random.shuffle函数对索引列表进行随机化,以实现随机划分。 6. 根据划分比例,计算各部分的图像对数量,并使用列表的切片功能将索引列表分割为train、val和test三部分。 7. 根据train、val和test的索引列表,将对应图像对从原始数据集提取出来,并分别保存到train、val和test文件夹。 以下是一个示例代码: ```python import numpy as np import random dataset_size = 1000 # 数据集大小(图像对的数量) split_ratio = [0.6, 0.2, 0.2] # 划分比例(train、val和test的比例) # 创建索引列表 indices = [] for i in range(dataset_size): indices.append(i) # 随机化索引列表 random.shuffle(indices) # 计算各部分的图像对数量 train_size = int(dataset_size * split_ratio[0]) val_size = int(dataset_size * split_ratio[1]) test_size = dataset_size - train_size - val_size # 划分索引列表 train_indices = indices[:train_size] val_indices = indices[train_size:(train_size + val_size)] test_indices = indices[(train_size + val_size):] # 从原始数据集提取图像对并保存到相应文件夹 for index in train_indices: # 从原始数据集提取训练集图像对并保存到train文件夹 pass for index in val_indices: # 从原始数据集提取验证集图像对并保存到val文件夹 pass for index in test_indices: # 从原始数据集提取测试集图像对并保存到test文件夹 pass ``` 在实际使用,你需要根据自己的数据集和文件路径进行适当的修改。这个示例代码仅为了演示随机划分的过程,具体的图像对提取和保存操作需要根据数据集的具体形式进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值