VOC数据集标注文件是 .xml格式, COCO数据集标注文件是 .json格式,yolo训练 是 .txt格式。
.xml 转 .txt代码:
"""
数据集处理 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(labe