在目标检测任务中,常见的数据集格式有三种,分别为voc(xml)、coco(json)、yolo(txt)。

一、Pascal VOC

Pascal VOC数据集是目标检测的常用的大规模数据集之一,从05年到12年都会举办比赛,比赛任务task:

  • 分类Classification
  • 目标检测Object Detection
  • 语义分割Class Segmentation
  • 实例分割Object Segmentation
  • Action Classification(专注于人体动作的一种分类)
  • Person Layout(专注于人体各部位的一种目标检测)

Pascal VOC数据集由五个部分构成:JPEGImages,Annotations,ImageSets,SegmentationClass以及SegmentationObject。

.
└── VOCdevkit             #根目录└── VOC2012           #不同年份的数据集,这里只下载了2012的,还有2007等其它年份的├── Annotations   #存放xml文件,与JPEGImages中的图片一一对应,解释图片的内容等等├── ImageSets     #该目录下存放的都是txt文件,txt文件中每一行包含一个图片的名称,末尾会加上±1表示正负样本│   ├── Action│   ├── Layout│   ├── Main│   └── Segmentation├── JPEGImages         #存放源图片├── SegmentationClass  #存放的是图片,语义分割相关└── SegmentationObject #存放的是图片,实例分割相关
  • JPEGImages:存放的是训练与测试的所有图片。
  • Annotations(注释):数据集标签的存储路径,通过XML文件格式,为图像数据存储各类任务的标签。其中部分标签为目标检测的标签。里面存放的是每张图片打完标签所对应的XML文件。
  • ImageSets:ImageSets文件夹下本次讨论的只有Main文件夹,此文件夹中存放的主要又有四个文本文件test.txt、train.txt、trainval.txt、val.txt, 其中分别存放的是测试集图片的文件名、训练集图片的文件名、训练验证集图片的文件名、验证集图片的文件名。
  • SegmentationClass与SegmentationObject:存放的都是图片,且都是图像分割结果图,对目标检测任务来说没有用。class segmentation 标注出每一个像素的类别
  • object segmentation 标注出每一个像素属于哪一个物体。目录如下所示
VOC
├─Annotations
│      ├─img0001.xml
│      ├─img0002.xml
│      ├─img0003.xml
│      ├─img0004.xml
│      ├─img0005.xml
│      └─img0006.xml
│
├─ImageSets
│  └─Main
│      ├─test.txt
│      ├─train.txt
│      ├─trainval.txt
│      └─val.txt
│
└─JPEGImages├─img0001.jpg├─img0002.jpg├─img0003.jpg├─img0004.jpg├─img0005.jpg└─img0006.jpg

voc数据集的标签主要以xml文件形式进行存放。

xml文件的标注格式如下:

<annotation><folder>17</folder> # 图片所处文件夹<filename>77258.bmp</filename> # 图片名<path>~/frcnn-image/61/ADAS/image/frcnn-image/17/77258.bmp</path><source>  #图片来源相关信息<database>Unknown</database>  </source><size> #图片尺寸<width>640</width><height>480</height><depth>3</depth></size><segmented>0</segmented>  #是否有分割label<object> 包含的物体<name>car</name>  #物体类别<pose>Unspecified</pose>  #物体的姿态<truncated>0</truncated>  #物体是否被部分遮挡(>15%)<difficult>0</difficult>  #是否为难以辨识的物体, 主要指要结体背景才能判断出类别的物体。虽有标注, 但一般忽略这类物体<bndbox>  #物体的bound box<xmin>2</xmin>     #左<ymin>156</ymin>   #上<xmax>111</xmax>   #右<ymax>259</ymax>   #下</bndbox></object>
</annotation>

此外,根据特定任务可以通过加入相应属性标签来构建所需要的数据格式。

二、COCO

COCO数据集是目标检测的另一种常用的大规模数据集。和VOC相比,COCO数据集有着小目标多、单幅图片目标多、物体大多非中心分布、更符合日常环境的特点,因而COCO数据集的目标检测难度更大。COCO从2015到2020每年均举办比赛,比赛任务task:

  • 目标检测Object Detection,
  • 关键点检测KeyPoint Detection
  • 图片加标题Image Captioning
  • Stuff Segmentation(一种针对stuff(草地、墙、天空等内容)的实例分割)
  • Panoptic Segmentation(stuff+object的分割任务)等)

COCO数据集现在有3种标注类型,分别是:

这3种类型共享这些基本类型:info、image、license,使用JSON文件存储。

json文件的标注格式如下,以Object Instance为例,这种格式的文件从头至尾按照顺序分为以下段落:

{"info": info,               # dict"licenses": [license],      # list,内部是dict"images": [image],          # list,内部是dict"annotations": [annotation],# list,内部是dict"categories": [category]    # list,内部是dict
}info{                           # 数据集信息描述"year": int,                # 数据集年份"version": str,             # 数据集版本"description": str,         # 数据集描述"contributor": str,         # 数据集提供者"url": str,                 # 数据集下载链接"date_created": datetime,   # 数据集创建日期
}
license{"id": int,"name": str,"url": str,
}
image{      # images是一个list,存放所有图片(dict)信息。image是一个dict,存放单张图片信息 "id": int,                  # 图片的ID编号(每张图片ID唯一)"width": int,               # 图片宽"height": int,              # 图片高"file_name": str,           # 图片名字"license": int,             # 协议"flickr_url": str,          # flickr链接地址"coco_url": str,            # 网络连接地址"date_captured": datetime,  # 数据集获取日期
}
annotation{ # annotations是一个list,存放所有标注(dict)信息。annotation是一个dict,存放单个目标标注信息。"id": int,                  # 目标对象ID(每个对象ID唯一),每张图片可能有多个目标"image_id": int,            # 对应图片ID"category_id": int,         # 对应类别ID,与categories中的ID对应"segmentation": RLE or [polygon],   # 实例分割,对象的边界点坐标[x1,y1,x2,y2,....,xn,yn]"area": float,              # 对象区域面积"bbox": [xmin,ymin,width,height], # 目标检测,对象定位边框[x,y,w,h]"iscrowd": 0 or 1,          # 表示是否是人群
}
categories{                     # 类别描述"id": int,                  # 类别对应的ID(0默认为背景)"name": str,                # 子类别名字"supercategory": str,       # 主类别名字
}

COCO格式数据集的目录结构如下: train2017和val2017成为set_name,annotations文件夹中的json格式的标准文件名要与之对应并以instances_开头。

COCO_ROOT #根目录├── annotations # 存放json格式的标注│ ├── instances_train2017.json│ └── instances_val2017.json└── train2017 # 存放图片文件│ ├── 000000000001.jpg│ ├── 000000000002.jpg│ └── 000000000003.jpg└── val2017├── 000000000004.jpg└── 000000000005.jpg

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

{"info": info,"images": [image],"annotations": [annotation],"categories": [categories],"licenses": [license]}

制作自己的数据集的时候info和licenses是不需要的。只需要中间的images和annotations字段。

images是个字段的列表,每个图片的格式如下:

json['images'][0]{'license': 4,'file_name': '000000397133.jpg','coco_url': 'http://images.cocodataset.org/val2017/000000397133.jpg','height': 427,'width': 640,'date_captured': '2013-11-14 17:02:52','flickr_url': 'http://farm7.staticflickr.com/6116/6255196340_da26cf2c9e_z.jpg','id': 397133}

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

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

[{'supercategory': 'person', 'id': 1, 'name': 'person'},{'supercategory': 'vehicle', 'id': 2, 'name': 'bicycle'},{'supercategory': 'vehicle', 'id': 3, 'name': 'car'},{'supercategory': 'vehicle', 'id': 4, 'name': 'motorcycle'},{'supercategory': 'vehicle', 'id': 5, 'name': 'airplane'},{'supercategory': 'vehicle', 'id': 6, 'name': 'bus'},{'supercategory': 'vehicle', 'id': 7, 'name': 'train'},{'supercategory': 'vehicle', 'id': 8, 'name': 'truck'},{'supercategory': 'vehicle', 'id': 9, 'name': 'boat'}# ....]

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

{'segmentation': [[0, 0, 60, 0, 60, 40, 0, 40]],'area': 240.000,'iscrowd': 0,'image_id': 289343,'bbox': [0., 0., 60., 40.],'category_id': 18,'id': 1768}

其中segmentation是分割的多边形,如果不知道直接填写[[x1, y1, x2, y1, x2, y2, x1, y2]]就可以了,area是分割的面积,

目标检测任务中可以随便填,bbox是检测框的[x, y, w, h]坐标,category_id是类别id,与categories中对应,

image_id图像的id,id是bbox的id,每个检测框是唯一的。

三、YOLO

yolo数据集标注格式主要是 yolov5 项目需要用到。

标签使用txt文本进行保存。yolo的目录如下所示:

dataset
├─images
│  ├─train
│  │    ├─ flip_mirror_himg0026393.jpg
│  │    ├─ flip_mirror_himg0026394.jpg
│  │    ├─ flip_mirror_himg0026395.jpg
│  │    ├─ flip_mirror_himg0027314.jpg
│  │    ├─ flip_mirror_himg0027315.jpg
│  │    └─flip_mirror_himg0027316.jpg
│  │
│  └─val
│     ├─ flip_mirror_himg0027317.jpg
│     └─flip_mirror_himg0027318.jpg
│
└─labels├─train│    ├─ flip_mirror_aimg0025023.txt│    ├─ flip_mirror_aimg0025024.txt│    ├─ flip_mirror_aimg0025025.txt│    ├─ flip_mirror_aimg0025026.txt│    ├─ flip_mirror_aimg0025027.txt│    └─ flip_mirror_aimg0025028.txt│└─val ├─ flip_mirror_aimg0025029.txt└─flip_mirror_aimg0025030.txt

标签使用txt文本进行保存。

yolo标注格式如下所示:

<object-class> <x> <y> <width> <height>

例如:

0 0.412500 0.318981 0.358333 0.636111
  • :对象的标签索引
  • x,y:目标的中心坐标,相对于图片的H和W做归一化。即x/W,y/H。
  • width,height:目标(bbox)的宽和高,相对于图像的H和W做归一化。

四、DOTA格式

DOTA数据集是一个比较著名的遥感类高分辨率数据集,包括v1.0,v1.5,v2.0三个版本的数据,一共30G左右。

采用旋转框的标记方式,标记四个顶点八个坐标得到不规则四边形。具体实现是,首先标注出一个初始点,为(x1,y1),然后顺时针方向依次标注2、3、4共4个点。label格式如下所示:

x1,y1,x2,y2,x3,y3,x4,y4,category,difficult
  • 其中(x1,y1)用于表示OBB的顶点起始位置,四个顶点按照顺时针进行排列
  • category表示目标种类
  • difficult表示实例的检测难度

DOTA_devkit是官方给的配套的数据处理的配套文件,包括绘制目标边框的示例,剪裁数据集、合并检测结果、评估模型性能等。

一张4096x4096能够裁剪出100多张图片,这种策略会导致数据集扩充比较大,但是该种方式会使得模型性能提高很多。

目标检测任务中常用的数据集格式(voc、coco、yolo)相关推荐

  1. 基于mmdetection 旋转目标检测(OBB detection)+DOTA数据集自定义数据集+配docker

    这两周得益于组里的任务需求,肝了一个遥感类的飞机旋转框目标检测,在给定的4096*4096的大尺度分辨率图片上去识别检测飞机. 经过模型检测后输出结果图如下图所示: 可以看到最终的结果还是不错的,通过 ...

  2. 目标检测Faster RCNN 批量标记数据集,生成xml,csv以及record文件

    目标检测Faster RCNN 批量标记数据集,生成xml,csv以及record文件 0.将png图片转换为jpg import os from PIL import Image# dirname_ ...

  3. 算法的trick_目标检测算法中的常见trick

    目标检测算法中的常见trick 最近忙着打比赛,感觉看论文也很难静下心来了.基本上看得相当匆忙,主要还是以应用为主.上周压力比较大,没有来得及更新,感觉再不更就说不过去了. 因为比赛比较追求perfo ...

  4. [数据集][VOC][目标检测]河道垃圾水面漂浮物数据集目标检测可用yolo训练-1304张介绍

    数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1304 标注数量(xml文件个数):130 ...

  5. 目标检测扩(六)一篇文章彻底搞懂目标检测算法中的评估指标计算方法(IoU(交并比)、Precision(精确度)、Recall(召回率)、AP(平均正确率)、mAP(平均类别AP) )

    ​ 基本在目标检测算法中会碰到一些评估指标.常见的指标参数有:IoU(交并比).Precision(精确度).Recall(召回率).AP(平均正确率).mAP(平均类别AP)等.这些评估指标是在评估 ...

  6. 『论文阅读笔记』目标检测模型中的性能评价方式-IOU、precision/recall、mAP、PR、Fps!

    目标检测模型中的性能评估标准-IOU.precision/recall.mAP.PR.Fps! 文章目录 一.交并比IOU 二.精确率(precision)和召回率(recall) 三.P-R(pre ...

  7. retinanet 部署_RetinaNet: Focal loss在目标检测网络中的应用

    介绍 RetinaNet是2018年Facebook AI团队在目标检测领域新的贡献.它的重要作者名单中Ross Girshick与Kaiming He赫然在列.来自Microsoft的Sun Jia ...

  8. 目标检测模型中NMS、soft-NMS、softer-NMS的原理、LNMS文本检测系列(python代码实现)

    非极大值抑制NMS的作用: 是目标检测框架中的后处理模块,主要用于删除高度冗余的bbox. ?一.NMS[参考] 非极大值抑制NMS的过程: 根据置信度得分进行排序: 选择置信度最高的边界框添加到最终 ...

  9. 目标检测算法中ROI提取方法比较+源码分析

    本文主要介绍ROI提取结构在目标检测框架中的作用,并结合源码,理解它的实现方式.包含的算法有:ROI-pooling,ROI-align,Deformable-psroi-pooling. 目前,主流 ...

最新文章

  1. c语言中struct和c++中class实例对比
  2. PAT A1098 堆排序
  3. 蓄力十年,做一个成就
  4. sqlserver2000 中文排序问题
  5. .NET平台开源项目速览(4).NET文档生成工具ADB及使用
  6. 第一个通过HCIEv3.0的咱的学员
  7. 《漫画算法》源码整理-6
  8. fossid安装教程_如何在一个 U 盘上安装多个 Linux 发行版
  9. Web前端:11个让你代码整洁的原则
  10. sql中“delete from 表名”表示_SQL查询语句知识点总结
  11. MySQl中文1001无标题_Mysql中字段类型不一致导致索引无效的处理办法
  12. MySQL快速上手[学习笔记](二)
  13. 解决谷歌网站Your connection is not private问题
  14. 【题解】Luogu P2992 [USACO10OPEN]三角形计数Triangle Counting
  15. 面试题:return和finally执行
  16. 利用python炒股talib_TaLib在股票技术分析中的应用
  17. java cmyk和rgb的转换_如何在ColdFusion(Java)中在CMYK和RGB之间转换图像?
  18. AN APPROACH OF VECTOR FIELD TEXTURE VISUALIZATION BASED ON FIELD DRIVEN STRENGTH算法实现
  19. 九校联考-长沙市一中NOIP模拟Day1T2 跳房子(jump)
  20. C#毕业设计——基于C#+asp.net+sqlserver的计算机等级考试系统设计与实现(毕业论文+程序源码)——计算机等级考试系统

热门文章

  1. USB开发—STM32 USB Audio 开发板介绍(Feedback)
  2. JRebelXRebel的配置和使用(进阶篇)
  3. Laravel实现简单的API认证
  4. 网关kong及konga的API认证
  5. GP TEE中的几种存储方式介绍
  6. “sample“, “batch“, “epoch“ 分别是什么?
  7. CART回归树模型树 生成 剪枝 in Python
  8. 中国大量程序员都是孔乙己,悲催可笑的心态
  9. python刷网易云_利用Python获取网易云音乐数据,python
  10. 零基础考二级python大概需要拿出多长时间?