目标检测任务中常用的数据集格式(voc、coco、yolo)
在目标检测任务中,常见的数据集格式有三种,分别为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字段。
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中也要用到,每张图都是唯一的。
[{'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)相关推荐
- 基于mmdetection 旋转目标检测(OBB detection)+DOTA数据集自定义数据集+配docker
这两周得益于组里的任务需求,肝了一个遥感类的飞机旋转框目标检测,在给定的4096*4096的大尺度分辨率图片上去识别检测飞机. 经过模型检测后输出结果图如下图所示: 可以看到最终的结果还是不错的,通过 ...
- 目标检测Faster RCNN 批量标记数据集,生成xml,csv以及record文件
目标检测Faster RCNN 批量标记数据集,生成xml,csv以及record文件 0.将png图片转换为jpg import os from PIL import Image# dirname_ ...
- 算法的trick_目标检测算法中的常见trick
目标检测算法中的常见trick 最近忙着打比赛,感觉看论文也很难静下心来了.基本上看得相当匆忙,主要还是以应用为主.上周压力比较大,没有来得及更新,感觉再不更就说不过去了. 因为比赛比较追求perfo ...
- [数据集][VOC][目标检测]河道垃圾水面漂浮物数据集目标检测可用yolo训练-1304张介绍
数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1304 标注数量(xml文件个数):130 ...
- 目标检测扩(六)一篇文章彻底搞懂目标检测算法中的评估指标计算方法(IoU(交并比)、Precision(精确度)、Recall(召回率)、AP(平均正确率)、mAP(平均类别AP) )
基本在目标检测算法中会碰到一些评估指标.常见的指标参数有:IoU(交并比).Precision(精确度).Recall(召回率).AP(平均正确率).mAP(平均类别AP)等.这些评估指标是在评估 ...
- 『论文阅读笔记』目标检测模型中的性能评价方式-IOU、precision/recall、mAP、PR、Fps!
目标检测模型中的性能评估标准-IOU.precision/recall.mAP.PR.Fps! 文章目录 一.交并比IOU 二.精确率(precision)和召回率(recall) 三.P-R(pre ...
- retinanet 部署_RetinaNet: Focal loss在目标检测网络中的应用
介绍 RetinaNet是2018年Facebook AI团队在目标检测领域新的贡献.它的重要作者名单中Ross Girshick与Kaiming He赫然在列.来自Microsoft的Sun Jia ...
- 目标检测模型中NMS、soft-NMS、softer-NMS的原理、LNMS文本检测系列(python代码实现)
非极大值抑制NMS的作用: 是目标检测框架中的后处理模块,主要用于删除高度冗余的bbox. ?一.NMS[参考] 非极大值抑制NMS的过程: 根据置信度得分进行排序: 选择置信度最高的边界框添加到最终 ...
- 目标检测算法中ROI提取方法比较+源码分析
本文主要介绍ROI提取结构在目标检测框架中的作用,并结合源码,理解它的实现方式.包含的算法有:ROI-pooling,ROI-align,Deformable-psroi-pooling. 目前,主流 ...
最新文章
- c语言中struct和c++中class实例对比
- PAT A1098 堆排序
- 蓄力十年,做一个成就
- sqlserver2000 中文排序问题
- .NET平台开源项目速览(4).NET文档生成工具ADB及使用
- 第一个通过HCIEv3.0的咱的学员
- 《漫画算法》源码整理-6
- fossid安装教程_如何在一个 U 盘上安装多个 Linux 发行版
- Web前端:11个让你代码整洁的原则
- sql中“delete from 表名”表示_SQL查询语句知识点总结
- MySQl中文1001无标题_Mysql中字段类型不一致导致索引无效的处理办法
- MySQL快速上手[学习笔记](二)
- 解决谷歌网站Your connection is not private问题
- 【题解】Luogu P2992 [USACO10OPEN]三角形计数Triangle Counting
- 面试题:return和finally执行
- 利用python炒股talib_TaLib在股票技术分析中的应用
- java cmyk和rgb的转换_如何在ColdFusion(Java)中在CMYK和RGB之间转换图像?
- AN APPROACH OF VECTOR FIELD TEXTURE VISUALIZATION BASED ON FIELD DRIVEN STRENGTH算法实现
- 九校联考-长沙市一中NOIP模拟Day1T2 跳房子(jump)
- C#毕业设计——基于C#+asp.net+sqlserver的计算机等级考试系统设计与实现(毕业论文+程序源码)——计算机等级考试系统
热门文章
- USB开发—STM32 USB Audio 开发板介绍(Feedback)
- JRebelXRebel的配置和使用(进阶篇)
- Laravel实现简单的API认证
- 网关kong及konga的API认证
- GP TEE中的几种存储方式介绍
- “sample“, “batch“, “epoch“ 分别是什么?
- CART回归树模型树 生成 剪枝 in Python
- 中国大量程序员都是孔乙己,悲催可笑的心态
- python刷网易云_利用Python获取网易云音乐数据,python
- 零基础考二级python大概需要拿出多长时间?