图像领域数据集相互转换之VOC格式数据集转COCO&yolo样例代码

文章介绍了如何将VOC数据集按照8:2的比例划分为训练集和验证集,以及如何将VOC格式转换为COCO格式,包括处理XML文件、图片文件和类别映射的处理过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按8:2切分数据集将数据集分成0.8训练集和0.2的测试集

# voc类型的数据集按8:2切分数据集样例代码
import os
import random
import shutil

# 定义原始数据集文件夹路径
annotations_dir = '/home/dataset/VOC2007/Annotations'  # XML文件夹路径
images_dir = '/home/dataset/VOC2007/JPEGImages'  # JPEG文件夹路径

# 定义分割后的训练集和验证集文件夹路径
train_annotations_dir = '/home/dataset/VOC2007_new/train/Annotations'
train_images_dir = '/home/dataset/VOC2007_new/train/JPEGImages'
val_annotations_dir = '/home/dataset/VOC2007_new/val/Annotations'
val_images_dir = '/home/dataset/VOC2007_new/val/JPEGImages'

# 创建训练集和验证集文件夹
os.makedirs(train_annotations_dir, exist_ok=True)
os.makedirs(train_images_dir, exist_ok=True)
os.makedirs(val_annotations_dir, exist_ok=True)
os.makedirs(val_images_dir, exist_ok=True)

# 获取文件列表
xml_files = os.listdir(annotations_dir)
jpg_files = os.listdir(images_dir)
# 随机打乱文件列表
random.shuffle(xml_files)

# 计算训练集和验证集数量
num_train = int(0.8 * len(xml_files))
num_val = len(xml_files) - num_train

# 将文件移动到训练集文件夹
for xml_file in xml_files[:num_train]:
    img_file = xml_file.replace('.xml', '.jpg').lower()  # 转换为小写
    xml_file = xml_file.lower()  # 转换为小写
    if img_file in jpg_files:
        shutil.move(os.path.join(annotations_dir, xml_file), os.path.join(train_annotations_dir, xml_file))
        shutil.move(os.path.join(images_dir, img_file), os.path.join(train_images_dir, img_file))
        jpg_files.remove(img_file)  # 移除已经移动的文件名,避免重复移动

# 将文件移动到验证集文件夹
for xml_file in xml_files[num_train:]:
    img_file = xml_file.replace('.xml', '.jpg').lower()  # 转换为小写
    xml_file = xml_file.lower()  # 转换为小写
    if img_file in jpg_files:
        shutil.move(os.path.join(annotations_dir, xml_file), os.path.join(val_annotations_dir, xml_file))
        shutil.move(os.path.join(images_dir, img_file), os.path.join(val_images_dir, img_file))
        jpg_files.remove(img_file)  # 移除已经移动的文件名,避免重复移动

print("数据集分割完成!")

VOC转COCO格式数据集样例代码

import os
import json
import xml.etree.ElementTree as ET
import glob

#START_BOUNDING_BOX_ID = 1
PRE_DEFINE_CATEGORIES = None

START_BOUNDING_BOX_ID = 2
# PRE_DEFINE_CATEGORIES = {"fire":0,"smoke":1}
# If necessary, pre-define category and its id
#  PRE_DEFINE_CATEGORIES = {"aeroplane": 1, "bicycle": 2, "bird": 3, "boat": 4,
#  "bottle":5, "bus": 6, "car": 7, "cat": 8, "chair": 9,
#  "cow": 10, "diningtable": 11, "dog": 12, "horse": 13,
#  "motorbike": 14, "person": 15, "pottedplant": 16,
#  "sheep": 17, "sofa": 18, "train": 19, "tvmonitor": 20}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值