目标检测 – 解析VOC和COCO格式并制作自己的数据集

  相对其他计算机视觉任务,目标检测算法的数据格式更为复杂。为了对数据进行统一的处理,目标检测数据一般都会做成VOC或者COCO的格式。
  VOCCOCO都是既支持检测也支持分割的数据格式,本文主要分析PASCAL VOCCOCO数据集中物体识别相关的内容,并学习如何制作自己的数据集。

VOC格式

目录结构

  VOC格式数据集一般有着如下的目录结构:

  其中JPEGImages目录中存放的是源图片的数据,(当然图片并不一定要是.jpg格式的,只是规定文件夹名字叫JPEGImages);
  Annotations目录中存放的是标注数据,VOC的标注是xml格式的,文件名与JPEGImages中的图片一一对应;
  ImageSets/Main目录中存放的是训练和验证时的文件列表,每行一个文件名(不包含扩展名),例如train.txt是下面这种格式的:

XML标注格式

  xml格式的标注格式如下:

制作自己的VOC数据集

  制作自己数据集的步骤为:

  ① 新建一个JPEGImages的文件夹,把所有图片放到这个目录。(或者使用ln -s把图片文件夹软链接到JPEGImages);

  ② 由原来的数据格式生成xml,其中posetruncateddifficult没有指定时使用默认的即可。bounding box的格式是[x1,y1,x2,y2],即[左上角的坐标, 右下角的坐标]x是宽方向上的,y是高方向上的。

  ③ 随机划分训练集和验证集,训练集的文件名列表存放在ImageSets/Main/train.txt,验证集的文件名列表存放在ImageSets/Main/val.txt

参考代码

  附一个由csvvoc格式的脚本:

COCO格式

目录结构

  COCO格式数据集的目录结构如下:

  这里的train2017val2017称为set_nameannnotations文件夹中的json格式的标注文件名要与之对应并以instances_开头,也就是instances_{setname}.json

json标注格式

  与VOC一个文件一个xml标注不同,COCO所有的目标框标注都是放在一个json文件中的。
这个json文件解析出来是一个字典,格式如下:

  制作自己的数据集的时候infolicenses是不需要的。只需要中间的三个字段即可。

  其中images是一个字典的列表,每个图片的格式如下:

  自己的数据集只需要写file_name,height,widthid即可。id是图片的编号,在annotations中也要用到,每张图是唯一的。

  categories表示所有的类别,格式如下:

  annotations是检测框的标注,一个bounding box的格式如下:

  其中segmentation是分割的多边形,如果不知道直接填写[[x1, y1, x2, y1, x2, y2, x1, y2]]就可以了,area是分割的面积,bbox是检测框的[x, y, w, h]坐标,category_id是类别id,与categories中对应,image_id图像的id,idbboxid,每个检测框是唯一的。

参考代码

  附一个VOC转COCO格式的参考代码

参考链接

https://cocodataset.org/#format-data

张贴在CV