yoloV5半自动化标注

您所在的位置:网站首页 yolo数据集标注技巧 yoloV5半自动化标注

yoloV5半自动化标注

2023-08-28 09:05| 来源: 网络整理| 查看: 265

目录

前言:

修改:

反推XML信息:

结语:

前言:

        之前自己傻不愣登写了一个半自动的标注,后来发现V5自带一个,现在来看看具体操作。

修改:

在detect.py中有两个参数 --save-txt 和 --nosave

 --save-txt  default=True 表述预测时保存label的 txt文件,会在runs/exp下生成一个labels

--nosave    default=Fause表述对预测的图片进行保存 True则是不保存

 lables里的内容为标签以及信息内容

 

反推XML信息:

  创建一个returnxml.py我们根据txt信息反推xml信息

# 将 txt 标签 文件转换为 xml 标签文件, 修改dict中的类,以及xml txt 和jpg 路径。 from xml.dom.minidom import Document import os import cv2 # 'person','head','helmet','lifejacket' def makexml(txtPath,xmlPath,picPath): #读取txt路径,xml保存路径,数据集图片所在路径 dict = {'0': "worter", #字典对类型进行转换,自己的标签的类。 '1': "open", } files = os.listdir(txtPath) for i, name in enumerate(files): xmlBuilder = Document() annotation = xmlBuilder.createElement("annotation") # 创建annotation标签 xmlBuilder.appendChild(annotation) txtFile=open(txtPath+name) txtList = txtFile.readlines() img = cv2.imread(picPath+name[0:-4]+".jpg") Pheight,Pwidth,Pdepth=img.shape for i in txtList: oneline = i.strip().split(" ") folder = xmlBuilder.createElement("folder")#folder标签 folderContent = xmlBuilder.createTextNode("VOC2007") folder.appendChild(folderContent) annotation.appendChild(folder) filename = xmlBuilder.createElement("filename")#filename标签 filenameContent = xmlBuilder.createTextNode(name[0:-4]+".jpg") # 图片后缀 filename.appendChild(filenameContent) annotation.appendChild(filename) size = xmlBuilder.createElement("size") # size标签 width = xmlBuilder.createElement("width") # size子标签width widthContent = xmlBuilder.createTextNode(str(Pwidth)) width.appendChild(widthContent) size.appendChild(width) height = xmlBuilder.createElement("height") # size子标签height heightContent = xmlBuilder.createTextNode(str(Pheight)) height.appendChild(heightContent) size.appendChild(height) depth = xmlBuilder.createElement("depth") # size子标签depth depthContent = xmlBuilder.createTextNode(str(Pdepth)) depth.appendChild(depthContent) size.appendChild(depth) annotation.appendChild(size) object = xmlBuilder.createElement("object") picname = xmlBuilder.createElement("name") nameContent = xmlBuilder.createTextNode(dict[oneline[0]]) picname.appendChild(nameContent) object.appendChild(picname) pose = xmlBuilder.createElement("pose") poseContent = xmlBuilder.createTextNode("Unspecified") pose.appendChild(poseContent) object.appendChild(pose) truncated = xmlBuilder.createElement("truncated") truncatedContent = xmlBuilder.createTextNode("0") truncated.appendChild(truncatedContent) object.appendChild(truncated) difficult = xmlBuilder.createElement("difficult") difficultContent = xmlBuilder.createTextNode("0") difficult.appendChild(difficultContent) object.appendChild(difficult) bndbox = xmlBuilder.createElement("bndbox") xmin = xmlBuilder.createElement("xmin") mathData=int(((float(oneline[1]))*Pwidth+1)-(float(oneline[3]))*0.5*Pwidth) xminContent = xmlBuilder.createTextNode(str(mathData)) xmin.appendChild(xminContent) bndbox.appendChild(xmin) ymin = xmlBuilder.createElement("ymin") mathData = int(((float(oneline[2]))*Pheight+1)-(float(oneline[4]))*0.5*Pheight) yminContent = xmlBuilder.createTextNode(str(mathData)) ymin.appendChild(yminContent) bndbox.appendChild(ymin) xmax = xmlBuilder.createElement("xmax") mathData = int(((float(oneline[1]))*Pwidth+1)+(float(oneline[3]))*0.5*Pwidth) xmaxContent = xmlBuilder.createTextNode(str(mathData)) xmax.appendChild(xmaxContent) bndbox.appendChild(xmax) ymax = xmlBuilder.createElement("ymax") mathData = int(((float(oneline[2]))*Pheight+1)+(float(oneline[4]))*0.5*Pheight) ymaxContent = xmlBuilder.createTextNode(str(mathData)) ymax.appendChild(ymaxContent) bndbox.appendChild(ymax) object.appendChild(bndbox) annotation.appendChild(object) f = open(xmlPath+name[0:-4]+".xml", 'w') xmlBuilder.writexml(f, indent='\t', newl='\n', addindent='\t', encoding='utf-8') f.close() makexml("./detect/exp3\labels/", # txt文件夹 "./output_xml/", # xml文件夹 r"./aa/") # 图片数据文件夹

最后打开lebelimage去查看和调整框的位置,最后的流程就正常加入数据集训练调整

结语:

        半自动化标注是基于模型有一定效果后进行,对我们的人工标注节省了很多时间,是一个十分友好的工具,希望大家不再被标注困扰。 

感谢作者:yolov5实现半自动化标注/预标注 & txt to xml_yolo txtto_国服最强貂蝉的博客-CSDN博客

 (如有侵权请联系作者进行删除)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3