目标检测 | 常用数据集标注格式及生成脚本
目标检测是计算机视觉任务中的一个重要研究方向,其用于解决对数码图像中特定种类的可视目标实例的检测问题。目标检测作为计算机视觉的根本性问题之一,是其他诸多计算机视觉任务,例如图像描述生成,实例分割和目标跟踪的基础以及前提。而在解决此类问题时,我们常常需要使用自己的脚本或者利用标注工具生成数据集,数据集格式往往会多种多样,因此对于目标检测任务而言,为了更好地兼容训练,大多数目标检测模型框架会默认支持几种常用的数据集标注格式,常见的分别是COCO,Pascal VOC,YOLO等等。本文主要介绍上述几种数据集格式以及我写的Python脚本(一般需要根据实际情况再改改)。
1. COCO
1.1 COCO数据集格式
COCO(Common Objects in COtext)数据集,是一个大规模的,适用于目标检测,图像分割,Image Captioning任务的数据集,其标注格式是最常用的几种格式之一。目前使用较多的是COCO2017数据集。其官网为COCO - Common Objects in Context (cocodataset.org)。
COCO数据集主要包含图像(jpg或者png等等)和标注文件(json),其数据集格式如下(/
代表文件夹):
1 | -coco/ |
train2017
以及val2017
这两个文件夹中存储的是训练集和验证集的图像,而test2017
文件夹中存储的是测试集的信息,可以只是图像,也可以包含标注,一般是单独使用的。
annotations
文件夹中的文件就是标注文件,如果你有xml
文件,通常需要转换成json
格式,其格式如下(更详细的可以参考官网):
1 | { |
其中info
为整个数据集的信息,包括年份,版本,描述等等信息,如果只是完成训练任务,其实不太重要,如下所示:
1 | //对于训练,不是那么的重要 |
其中的image
为图像的基本信息,包括序号,宽高,文件名等等信息,其中的序号(id
)需要和后面的annotations
中的标注所属图片序号对应如下所示:
1 | image{ |
其中的annotation
是最重要的标注信息,包括序号,所属图像序号,类别序号等等信息,如下所示:
1 | annotation{ |
其中的category
代表类别信息,包括父类别,类别序号以及类别名称,如下所示:
1 | category{ |
其中的license
代表数据集的协议许可信息,包括序号,协议名称以及链接信息,如下所示:
1 | //对于训练,不重要 |
接下来,我们来看一个简单的示例:
1 | { |
1.2 COCO转换脚本
Python转换脚本
如下所示,需要准备图像
和xml
标注文件:
1 | # -*- coding: utf-8 -*- |
2. VOC
2.1 VOC数据集格式
VOC(Visual Object Classes)数据集来源于PASCAL VOC挑战赛,其主要任务有Object Classification
、Object Detection
、Object Segmentation
、Human Layout
、Action Classification
。其官网为The PASCAL Visual Object Classes Homepage (ox.ac.uk)。其主要数据集有VOC2007以及VOC2012。
VOC数据集主要包含图像(jpg或者png等等)和标注文件(xml),其数据集格式如下(/
代表文件夹):
1 | -VOC/ |
其中对于目标检测任务而言,最常用的以及必须的文件夹包括:JPEGImages
,Annotations
,ImageSets/Main
。
JPEGImages
里存放的是图像,而Annotations
里存放的是xml
标注文件,文件内容如下:
1 | <annotation> |
2.2 VOC转换脚本
下面这个脚本,只适用于有图像和xml文件的情况下,coco转voc格式以后有需要再写:
1 | # -*- coding: utf-8 -*- |
3. YOLO
3.1 YOLO数据集格式
YOLO
数据集格式的出现主要是为了训练YOLO
模型,其文件格式没有固定的要求,因为可以通过修改模型的配置文件进行数据加载,唯一需要注意的是YOLO
数据集的标注格式是将目标框的位置信息进行归一化处理(此处归一化指的是除以图片宽和高),如下所示:
1 | {目标类别} {归一化后的目标中心点x坐标} {归一化后的目标中心点y坐标} {归一化后的目标框宽度w} {归一化后的目标框高度h} |
3.2 YOLO转换脚本
Python
转换脚本如下所示:
1 | # -*- coding: utf-8 -*- |
按照此脚本,将会在输出文件夹中生成以下内容:
1 | -yolo/ |