yolo数据集格式
YOLO数据集的格式是txt文件,每个txt文件对应一个图像,文件名与图像名相同(例如:image1.jpg对应的txt文件为image1.txt)。
每个txt文件包含了该图像中所有目标的标注信息,每一行代表一个目标。每个目标行包含了以下信息:
<object-class> <x> <y> <width> <height>
其中,<object-class>
是目标类别的整数标识,<x>
和<y>
是目标边界框的中心点在图像中的坐标(范围为0到1),<width>
和<height>
是目标边界框的宽度和高度(同样是相对于图像尺寸的比例,范围也是0到1)。
下面是一个示例txt文件的内容:
0 0.35 0.50 0.20 0.30
1 0.60 0.70 0.25 0.40
以上内容表示该图像中包含两个目标,第一个目标的类别是0,边界框中心点的x坐标为0.35,y坐标为0.50,宽度为0.20,高度为0.30;第二个目标的类别是1,边界框中心点的x坐标为0.60,y坐标为0.70,宽度为0.25,高度为0.40。
coco数据集格式
COCO数据集最初是在2014年由微软研究院提出的。
COCO(Common Objects in Context)是一个广泛使用的图像识别、目标检测和分割数据集,它包含了超过33万张图像和超过200万个物体的标注信息,涵盖了80个常见的目标类别。COCO数据集的目标是提供一个大规模、丰富多样、高质量的图像标注数据集,以推动计算机视觉领域的研究和发展。
COCO数据集的标注信息包括物体的类别、边界框、关键点、实例分割等,其中边界框是最基本的标注信息,用于目标检测任务。
VOC数据集格式
VOC(Visual Object Classes)数据集是由英国牛津大学计算机视觉组(Oxford University Computer Vision Group)提出的。2005年,该组织发布了VOC2005数据集,这是一个包含了多个物体类别的图像数据集,并提供了物体检测、分类、定位等多种任务的标注信息。自此之后,每年该组织都会发布一版新的VOC数据集,如VOC2006、VOC2007、VOC2008等,直到2012年停止更新。VOC数据集成为了计算机视觉领域中目标检测和分割任务的经典数据集之一,被广泛应用于算法的研究和评估。
VOC(Visual Object Classes)数据集格式是一种常用的数据集格式,用于目标检测和图像分割任务的标注。VOC数据集格式包括了三个主要部分:图像文件、标注文件和类别文件。
-
图像文件:VOC数据集的图像文件可以是JPEG、PNG等格式,文件名必须唯一,并以.jpg或.png为后缀。
-
标注文件:VOC数据集的标注文件是一个XML文件,包含了对应图像中所有目标的位置、类别、难度等信息。
-
类别文件:VOC数据集的类别文件定义了所有物体类别的名称和编号
yolo2voc代码
import os
import xml.etree.ElementTree as ET
import cv2
# 读取YOLO格式标注文件
path = "./data/"
files = os.listdir(path)
files.sort(key=lambda x:int(x.split('.')[0]))
files = [f for f in files if f.endswith(".txt")]
# 遍历每个目标,将其转换为VOC格式
for file in files:
# 解析YOLO格式的目标信息
with open(path+file,'r') as f:
line=f.readline().strip()
line = line.strip().split()
cls_name = line[0]
x_center = float(line[1])
y_center = float(line[2])
w = float(line[3])
h = float(line[4])
image=cv2.imread('./JPEGImages/'+file.strip(".")[0]+'.jpg')
img_height,img_width,img_channel=image.shape
# 计算出左上角坐标和右下角坐标
x_min = int((x_center - w / 2) * img_width)
y_min = int((y_center - h / 2) * img_height)
x_max = int((x_center + w / 2) * img_width)
y_max = int((y_center + h / 2) * img_height)
cv2.rectangle(image,(x_min,y_min),(x_max,y_max),(0,0,255))
cv2.imshow('image',image)
cv2.waitKey()
voc2yolo代码
import os
import xml.etree.ElementTree as ET
def convert(size, box):
"""将边界框坐标从VOC格式转换为YOLO格式"""
dw = 1. / size[0]
dh = 1. / size[1]
x = (box[0] + box[1]) / 2.0
y = (box[2] + box[3]) / 2.0
w = box[1] - box[0]
h = box[3] - box[2]
x = x * dw
w = w * dw
y = y * dh
h = h * dh
return (x, y, w, h)
# 读取文件夹下所有xml文件
xml_path = "./Annotations/"
files = os.listdir(xml_path)
files.sort(key=lambda x:int(x.split('.')[0]))
files = [f for f in files if f.endswith(".xml")]
for file in files:
# 解析XML文件
tree = ET.parse(xml_path + file)
root = tree.getroot()
# 获取图像宽度和高度
size = root.find("size")
w = int(size.find("width").text)
h = int(size.find("height").text)
c=int(size.find("depth").text)
# 遍历XML文件中的每个目标
for obj in root.iter("object"):
cls = obj.find("name").text
xmlbox = obj.find("bndbox")
b = (
float(xmlbox.find("xmin").text),
float(xmlbox.find("xmax").text),
float(xmlbox.find("ymin").text),
float(xmlbox.find("ymax").text),
)
# 转换坐标
bb = convert((w, h), b)
# 写入YOLO格式标注文件
hh=file[:-4]
with open('./data/' + file[:-4] + ".txt", "a") as f:
f.write(f"{cls} {bb[0]} {bb[1]} {bb[2]} {bb[3]}\n")