YOLO学习记录-读取xml文件并对其修改类名 判断ground truth区分大中小目标 s m l
实现功能:我使用的是VOC数据 ,将现有的数据集进行条件判定重新定义类别名—根据MS coco中 small medium large 目标大小的定义进行分类
代码部分
'''
判断大小进行修改标签
标准: small (0,32*32]
medium: (32*32,96*96]
large : (96*96,∞)
'''
import os, sys
import glob
from xml.etree import ElementTree as ET
# 批量读取Annotations下的xml文件
# per=ET.parse(r'')
xml_dir = r''#原路径
xml_list = glob.glob(xml_dir + '/*.xml')
for xml in xml_list:
print(xml)
root = ET.parse(xml)
p = root.findall('/object')
for object in p: # 找出类别节点
child = object.getchildren()[0] # 找出类别节点的子节点
bndbox=object.getchildren()[4]
xmin = bndbox.getchildren()[0].text
ymin = bndbox.getchildren()[1].text
xmax = bndbox.getchildren()[2].text
ymax = bndbox.getchildren()[3].text
# print(xmin+' '+ymin+' '+xmax+' '+ymax )
square = (int(ymax) - int(ymin)) * (int(xmax) - int(xmin))
# print(square)
if square<= 1024:
child.text = 'small'
elif 1024 < square <= 9216:
child.text = 'medium'
else:
child.text = 'large'
root.write(xml)
print('修改完毕!')
网上看到很多类似代码 但没有实现这个功能的 自己也是小白,记录一下有需要的搬走吧