python 分离YOLO格式图片数据标注文件为训练集、验证集,并复制到对应文件夹

用的时候看注释即可

以下代码作用

  1. 同级目录下创建datasets 包含 训练集、验证集
  2. 随机将 train_rate80%数据分为训练集、100%-train_rate20%分为验证集 并复制到对应文件夹
import numpy as np
import os
from shutil import copy2
import random

# ---------配置文件 需要确定
orgin_path='..\\'
orgin_image_path = orgin_path+'images'
orgin_label_path = orgin_path+'YOLO'
train_rate = 0.8
support_suffix = ['.tiff', '.png', '.jpg']

# ---------配置文件
path = r'datasets'  # dataset root dir
train = r'images/train'  # train images (relative to 'path')
val = r'images/val'  # val images (relative to 'path')
train_label = r'labels/train'  # train images (relative to 'path')
val_label = r'labels/val'  # val images (relative to 'path')

# 以下代码作用 
# 1. 同级目录下创建datasets 包含 训练集、验证集
# 2. 随机将 train_rate*80%数据分为训练集、100%-train_rate*20%分为验证集 并复制到对应文件夹


train_path = f'{path}/{train}'
val_path = f'{path}/{val}'
train_label_path = f'{path}/{train_label}'
val_label_path = f'{path}/{val_label}'


def check_file(path_data):
    if not os.path.exists(path_data):
        os.makedirs(path_data)


check_file(train_path)
check_file(val_path)
check_file(train_label_path)
check_file(val_label_path)

all_data = os.listdir(orgin_image_path)  # (图片文件夹)
all_data_img = []
for i in all_data:
    suffix_str = '.' + i.split('.')[-1:][0]
    if suffix_str in support_suffix:
        all_data_img.append(i)
num_all_data = len(all_data_img)
print("分离图片总数: " + str(num_all_data))
# 随机下标
index_list = list(range(num_all_data))
print(index_list)
random.shuffle(index_list)
print(index_list)
num = 0
for i in index_list:
    fileName = os.path.join(orgin_image_path, all_data_img[i])
    # 获取后缀名称 包括 .
    suffix_str = '.' + all_data_img[i].split('.')[-1:][0]
    yolo_label = all_data_img[i][:-len(suffix_str)] + ".txt"
    yolo_label_file = os.path.join(orgin_label_path, yolo_label)
    if num < num_all_data * train_rate:
        copy2(fileName, train_path)
        copy2(yolo_label_file, train_label_path)
    else:
        copy2(fileName, val_path)
        copy2(yolo_label_file, val_label_path)
    num += 1
print("finished!")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里提供一个简单的Python脚本,可以将图片对应标注文件划分为训练集和验证集,并生成对应的txt文件。 假设你的图片文件夹为 `image_folder/`,标注文件夹为 `annotation_folder/`,想要将数据集划分为训练集和验证集,其中训练集占比为 0.8,验证集占比为 0.2,划分后的数据集保存在 `train/` 和 `val/` 文件夹中。 ```python import os import random # 设置随机数种子,保证每次划分的结果一致 random.seed(1234) # 图片文件夹标注文件夹路径 image_folder = "image_folder/" annotation_folder = "annotation_folder/" # 训练集和验证集的文件夹路径 train_folder = "train/" val_folder = "val/" # 划分比例 train_ratio = 0.8 # 获取图片文件夹中所有的图片文件名 image_files = os.listdir(image_folder) # 随机打乱图片文件名顺序 random.shuffle(image_files) # 计算训练集和验证集的大小 num_train = int(len(image_files) * train_ratio) num_val = len(image_files) - num_train # 创建训练集和验证集的文件夹 if not os.path.exists(train_folder): os.makedirs(train_folder) if not os.path.exists(val_folder): os.makedirs(val_folder) # 遍历图片文件名列表,将图片对应标注文件划分到训练集或验证集中 for i, image_file in enumerate(image_files): if i < num_train: # 划分到训练集 os.rename(os.path.join(image_folder, image_file), os.path.join(train_folder, image_file)) os.rename(os.path.join(annotation_folder, image_file.replace(".jpg", ".txt")), os.path.join(train_folder, image_file.replace(".jpg", ".txt"))) with open("train.txt", "a") as f: f.write(os.path.join(train_folder, image_file) + "\n") else: # 划分到验证集 os.rename(os.path.join(image_folder, image_file), os.path.join(val_folder, image_file)) os.rename(os.path.join(annotation_folder, image_file.replace(".jpg", ".txt")), os.path.join(val_folder, image_file.replace(".jpg", ".txt"))) with open("val.txt", "a") as f: f.write(os.path.join(val_folder, image_file) + "\n") ``` 执行完毕后,你会得到训练图片对应标注文件夹 `train/`,验证图片对应标注文件夹 `val/`,以及训练图片路径列表 `train.txt` 和验证图片路径列表 `val.txt`。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值