将VOC数据格式转换为YOLO数据格式(附源码)
Posted AI吃大瓜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将VOC数据格式转换为YOLO数据格式(附源码)相关的知识,希望对你有一定的参考价值。
将VOC数据格式转换为YOLO数据格式(附源码)
目录
【尊重原则,转载请注明出处】https://panjinquan.blog.csdn.net/article/details/127879904
1.VOC数据集格式
Pascal VOC数据集下载地址:The PASCAL Visual Object Classes Homepage
数据集下载后解压得到一个名为VOCdevkit的文件夹,该文件夹结构如下:
对于目前检测任务,主要用到JPEGImages和Annotations;其中JPEGImages文件夹存放图片,而Annotations下放的是标注框的信息,格式为xml; Annotations文件夹中存放的是xml格式的标签文件,每一个xml文件都对应于JPEGImages文件夹中的一张图片,包含了图片的标注信息,如图片的名称,图片中object的类别及其bounding box坐标。
xml样例如下:
<?xml version="1.0" ?>
<annotation>
<folder>widerface</folder>
<filename>000001.jpg</filename>
<source>
<database>wider face Database</database>
<annotation>PASCAL VOC2007</annotation>
<flikerid>-1</flikerid>
</source>
<size>
<width>353</width>
<height>500</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>dog</name>
<pose>Unspecified</pose>
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>48.0</xmin>
<ymin>240.0</ymin>
<xmax>195.0</xmax>
<ymax>371.0</ymax>
</bndbox>
</object>
<object>
<name>person</name>
<pose>Unspecified</pose>
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>8.0</xmin>
<ymin>12.0</ymin>
<xmax>352.0</xmax>
<ymax>498.0</ymax>
</bndbox>
</object>
<object>
<name>face</name>
<pose>Unspecified</pose>
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>147.76751708984375</xmin>
<ymin>51.60520935058594</ymin>
<xmax>265.4585266113281</xmax>
<ymax>213.4471435546875</ymax>
</bndbox>
<lm>
<x1>170.7704620361328</x1>
<y1>127.99724578857422</y1>
<x2>220.77003479003906</x2>
<y2>117.16474151611328</y2>
<x3>191.6404266357422</x3>
<y3>153.10772705078125</y3>
<x4>177.97305297851562</x4>
<y4>184.284912109375</y4>
<x5>226.77618408203125</x5>
<y5>172.9976348876953</y5>
<visible>1</visible>
<blur>0.28</blur>
</lm>
</object>
</annotation>
xm文件中,字段object是物体位置信息,包含了物体名称name,拍摄角度pose,是否截断truncated,难以识别difficult,object对应的bounding box信息 bndbox,格式为[xmin,ymin,xmax,ymax]
2.YOLO数据格式
YOLO系列数据格式都一样的,一张图片对应一个txt文本,内容格式为:[id x_center y_center w h],且都是标准化(0~1之间)后的值。
3.将VOC数据格式转换为YOLO数据格式
为了方便大家使用,现在已经打包发布了,请使用pip安装即可使用
- pybaseutils工具源码: https://github.com/PanJinquan/base-utils
- 安装:pip install pybaseutils
使用方法特别特别简单,填写好数据data_root和输出路径out_text_dir即可,
特别注意:数据路径只需要保证有JPEGImages和Annotations即可,其余ImageSets和SegmentationClass这些都可以不需要
if __name__ == "__main__":
from pybaseutils.maker import convert_voc2yolo
# 定义类别数
class_name = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat",
"chair", "cow", "diningtable", "dog", "horse", "motorbike", "person",
"pottedplant", "sheep", "sofa", "train", "tvmonitor"]
# VOC数据目录
data_root = "/path/to/VOC2007"
# 保存输出yolo格式数据目录
out_text_dir = os.path.join(data_root, "labels")
# 开始转换,vis=True进行可视化
convert_voc2yolo.convert_voc2yolo(data_root, out_text_dir, class_name=class_name, vis=True)
可视化效果如下:
如果你想挑选其中几个类别进行训练,比如筛选含有["car", "dog"]的数据,其余的类别数据不需要,则修改class_name即可,如
if __name__ == "__main__":
from pybaseutils.maker import convert_voc2yolo
# 定义类别数
class_name = ["car", "dog"]
# VOC数据目录
data_root = "/path/to/VOC2007"
# 保存输出yolo格式数据目录
out_text_dir = os.path.join(data_root, "labels")
# 开始转换,vis=True进行可视化
convert_voc2yolo.convert_voc2yolo(data_root, out_text_dir, class_name=class_name, vis=True)
以上是关于将VOC数据格式转换为YOLO数据格式(附源码)的主要内容,如果未能解决你的问题,请参考以下文章
labelimg标注的VOC格式标签xml文件和yolo格式标签txt文件相互转换
深度学习必备知识——模型数据集Yolo与Voc格式文件相互转化
YOLO-Darknet实战:VOC2007标签格式转换成Darknet标签格式