YOLO学习记录-读取xml文件并对其修改类名 判断ground truth区分大中小目标 s m l

该博客记录了一段Python代码,用于读取PASCAL VOC数据集的XML注释文件,并根据MS COCO中小、中、大型目标的定义,修改XML文件中对象的类别标签。代码遍历每个边界框,计算面积并依据面积大小将其分类为'small'、'medium'或'large',从而实现数据集的预处理。
摘要由CSDN通过智能技术生成

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('修改完毕!')

网上看到很多类似代码 但没有实现这个功能的 自己也是小白,记录一下有需要的搬走吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值