1、VOC标签格式说明
VOC数据格式,会直接把每张图片标注的标签信息保存到一个xml文件中。
例如我在做仓储托盘检测的时候,需要对图片中的托盘进行标注,标注的标签信息会保存到一个跟图片对应的xml文件中(每张图片与每个xml文件一一对应),xml中的信息如下:
<annotation>
<folder>Images</folder>
<filename>1.jpg</filename>
<path>/home/wangmj/pallet_data/Images/1.jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>1920</width>
<height>1080</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>forklift_pallet</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>437</xmin>
<ymin>557</ymin>
<xmax>1230</xmax>
<ymax>660</ymax>
</bndbox>
</object>
</annotation>
xml文件中的关键信息说明:
- 1.jpg,这是图片名称,则xml文件名为1.xml;
- /home/wangmj/pallet_data/Images/1.jpg,这是存放该图片的绝对路径;
- 1920 * 1080,这是图片分辨率,3代表三通道图片;
- forklift_pallet,这是类别名;
- xmin,ymin,xmax,ymax,定义了每个目标的标定框坐标:即左上角的坐标和右下角的坐标;
2、YOLO标签格式说明
YOLO标签格式,会直接把每张图片标注的标签信息保存到一个txt文件中。
我的图片名称为1.jpg,则对应的txt文件名称为1.txt。
同样例如我在做仓储托盘检测的时候,需要对图片中的托盘进行标注,标注的标签信息会保存到一个跟图片对应的txt文件中,txt中的信息如下:
0 0.433594 0.562037 0.409896 0.092593
txt文件中的关键信息说明:
- 每一行代表标注的一个目标,我这张图中只标注了一个目标,所以只有一行;
- 第一个数字0代表标注目标的类别;
- 后面四个数字代表标注框的中心坐标和标注框的相对宽和高(进行了归一化处理);
- 五个数据从左到右依次为:class x_center y_center width height
同时还会生成一个classes.txt,里面内容如下:
forklift_pallet
我只有forklift_pallet这一种类型。
3、voc格式转化为yolo格式
标注好的voc格式的标签xml文件,主要信息为:
- 1.jpg,这是图片名称;
- /home/wangmj/pallet_data/Images/1.jpg,这是存放该图片的绝对路径;
- 1920 * 1080,这是图片分辨率,3代表三通道图片;
- forklift_pallet,这是类别名;
- xmin,ymin,xmax,ymax,定义了每个目标的标定框坐标:即左上角的坐标和右下角的坐标;
例如下面一张图:

- 原图大小为1920 * 1080
- 紫色框代表标注物体的框,紫色框的左上角的坐标为(xmin,ymin)=(372,518),右下角的坐标为(xmax,ymax)=(1344,674)
voc_to_yolo.py的目的就是把voc数据格式转换为yolo格式:
- voc格式标签:图片的实际宽高,标注框的左上角和右下角坐标;
- yolo格式标签:标注框的中心坐标(归一化),标注框的宽和高(归一化)。
voc格式转换为yolo格式计算公式:
-
框中心的实际坐标(x,y),一般可能还会在后面减1

-
归一化以后的中心坐标(x,y)

-
框的高和宽(归一化后)

voc格式的xml标签文件转化yolo格式的txt标签文件代码:voc_to_yolo.py
import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
def convert(size, box):
# size=(width, height) b=(xmin, xmax, ymin, ymax)
# x_center = (xmax+xmin)/2 y_center = (ymax+ymin)/2
# x = x_center / width y = y_center / height
# w = (xmax-xmin) / width h = (ymax-ymin) / height
x_center = (box[0]+box[1])/2.0
y_center = (box[2]+box[3])/2.0
x = x_center / size[0]
y = y_center / size[1]
w = (box[1] - box[0]) / size[0]
h = (box[3] -<

本文介绍VOC与YOLO两种常用的目标检测数据格式,包括它们的特点、标签信息及相互转换的方法。提供了详细的Python代码实现,帮助读者理解并实际操作格式转换。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



