我现在有图片文件夹和txt格式的yolo标注文件,我想划分一下数据集用于训练,python代码演示一下
时间: 2024-02-01 21:16:51 浏览: 68
好的,这里提供一个简单的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`。
阅读全文