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

本文介绍了目标检测领域的三个常见数据集格式:PascalVOC的XML标注,COCO的JSON格式以及YOLO的TXT标签。PascalVOC包含JPEGImages、Annotations等部分,适合多种任务。COCO数据集具有更复杂的标注,包括目标实例、关键点和图像标题,其标注信息存储在JSON文件中。YOLO的数据集标签则以TXT文本形式保存,包含对象类、中心坐标和宽高。DOTA数据集是一个遥感图像数据集,采用旋转框标注方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在目标检测任务中,常见的数据集格式有三种,分别为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种标注类型,分别是:

  • object instances(目标实例)
  • object keypoints(目标上的关键点)
  • image captions(看图说话)

这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,                  # 类别对应的ID0默认为背景)
    "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数据集的标注格式是有一些差异的。 VOC数据集的标注格式是使用XML文件来描述每个物体的位置和类别。每个XML文件对应一张图像,其中包含了图像的宽度、高度和深度信息,以及物体的类别、边界框的坐标等。VOC数据集的标注格式相对简单,适合较小规模的目标检测任务COCO数据集的标注格式是使用JSON文件来描述每个物体的位置和类别。每个JSON文件对应一张图像,其中包含了图像的信息、物体的类别和边界框的坐标等。COCO数据集的标注格式相对复杂,支持多种类型的目标检测任务,并且可以标注更详细的物体属性。 而YOLO数据集的标注格式是使用TXT文件来描述每个物体的位置和类别。每个TXT文件对应一张图像,其中每一行表示一个物体的类别和边界框的坐标。YOLO数据集的标注格式相对简洁,适合实时目标检测任务。 因此,对于不同的目标检测算法,需要根据其要求选择相应的数据集标注格式,以保证算法的正常运行。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [objectDetectionDatasets目标检测数据集制作:VOC,COCO,YOLO常用数据集格式的制作和互相转换](https://download.csdn.net/download/weixin_42614745/85278721)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [YOLO目标检测+扑克牌数据集已标注可以直接使用(3400张图像+对应已标注VOCCOCOYOLO格式文件).rar](https://download.csdn.net/download/m0_62143653/87774669)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [目标检测数据集VOC格式工程车辆数据集系列17渣土车数据集-3449张](https://download.csdn.net/download/FL1623863129/87454796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

githubcurry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值