VOC数据集格式:
- Annotations: .xml 标注文件
- ImageSets: .txt 文件(存放训练测试的 图片名,对应JPEGImage的图片和.xml标注文件)
- JPEGImages: .jpg 图片
- SegmentationClass: .png 图片
- SegmentationObject: .png 图片
"""
数据集处理 xml转txt (trans_voc2yolo.py)
1.将voc数据集标注信息(.xml)转为yolo标注格式(.txt),并将图像文件复制到相应文件夹
2.根据json标签文件,生成对应names标签(my_data_label.names)
"""
import os
from tqdm import tqdm
from lxml import etree
import json
import shutil
# voc数据集根目录以及版本
voc_root = "/kaggle/input/pascal-voc-2012"
voc_version = "VOC2012"
# 转换的训练集以及验证集对应txt文件
train_txt = "train.txt" # 记录着用于训练的图片名
val_txt = "val.txt"
# 转换后的文件保存目录
save_file_root = "./my_yolo_dataset"
# label标签对应json文件
label_json_path = "/kaggle/input/voc-classes/pascal_voc_classes.json"
# 拼接出voc的images目录,xml目录,txt目录
voc_images_path = os.path.join(voc_root, voc_version, "JPEGImages")
voc_xml_path = os.path.join(voc_root, voc_version, "Annotations") # 所有的图像标注信息
train_txt_path = os.path.join(voc_root, voc_version, "ImageSets", "Main", train_txt)
val_txt_path = os.path.join(voc_root, voc_version, "ImageSets", "Main", val_txt)
# 检查文件是否都存在
assert os.path.exists(voc_images_path),"voc_images_path not exist..."
assert os.path.exists(voc_xml_path), "voc_xml_path not exist..."
assert os.path.exists(train_txt_path), "train_txt_path not exist..."
assert os.path.exists(val_txt_path), "val_txt_path not exist..."
assert os.path.exists(label_json_path), "label_json_path not exist..."
if not os.path.exists(save_file_root):
os.makedirs(save_file_root)
def parse_xml_to_dict(xml):
"""
xml文件标注这该张图片的信息:来源source,名称,大