目标检测的数据集标注一般通过labelimg插件进行标注,有很多样本类型很容易进行标注对于这些很容易进行标注的数据集我们在进行模型迭代的时候经常也要进行标注这样导致很废时间,我们假设是在你已经有一个训练好基于某个任务的模型,这时你又有了新的训练样本那么如果不想费力再一个一个进行标注,可以通过当前已经训练好的模型线对这些未标记的样本进行推理再将每个样本的结果保存到xml文件中。
优势:虽然不能百分百全部标记正确,但是可以帮助你标记很多东西,这时候如果有错误你只需要进行调整即可,不需要在进行大面积的标注,labelimg这个插件是自适应的匹配图片和XML文件的,只需要你名字一致即可。
话不多说分享提前设计好的xml文件存储格式:
import os
from xml.etree import ElementTree as ET
def create_xml(bbox_data,img_info, save_path='./newxml/'):
'''
bbox_data:检测模型推理出来的bbox预测框位置信息
img_info:这样应该是字典里面存储图片名,图片路径,图片宽高,图片通道数
save_path:xml保存路径
'''
root = ET.Element("annotation")
folder = ET.SubElement(root, "folder")
folder.text = 'data'
filename = ET.SubElement(root, "filename")
filename.text =img_info["file_name"]
path=ET.SubElement(root,"path")
path.text=img_info["url"]
source=ET.SubElement(root,"source")
database=ET.SubElement(source,"database")
database.text='Unknown'
size=ET.SubElement(root,"size")
width=ET.SubElement(size,"width")
height=ET.SubElement(size,"height")
depth=ET.SubElement(size,"depth")
width.text=str(img_info["width1"])
height.text=str(img_info["height1"])
depth.text=str(img_info["cn"])
segmented=ET.SubElement(root,"segmented")
segmented.text='0'
# Create object elements
for bbox in bbox_data:
object_ = ET.SubElement(root, "object")
# Create name element
name = ET.SubElement(object_, "name")
name.text = "crack"
# Create bbox elements
pose=ET.SubElement(object_, "pose")
pose.text='Unspecified'
truncated=ET.SubElement(object_, "truncated")
truncated.text='0'
difficult=ET.SubElement(object_, "difficult")
difficult.text='0'
bndbox = ET.SubElement(object_, "bndbox")
xmin = ET.SubElement(bndbox, "xmin")
xmin.text = str(int(bbox[0]))
ymin = ET.SubElement(bndbox, "ymin")
ymin.text = str(int(bbox[1]))
xmax = ET.SubElement(bndbox, "xmax")
xmax.text = str(int(bbox[2]))
ymax = ET.SubElement(bndbox, "ymax")
ymax.text = str(int(bbox[3]))
tree = ET.ElementTree(root)
# Save xml tree
info=img_info["file_name"].split('.')[0]
savepath=save_path+f"{info}.xml"
tree.write(savepath, encoding="utf-8", xml_declaration=True)
xml展示:
将保存下来的xml文件使用labelimg插件就可以自动进行匹配