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

您所在的位置:网站首页 coco和coconut区别 目标检测任务中常用的数据集格式(voc、coco、yolo)

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

2024-04-09 08:57| 来源: 网络整理| 查看: 265

一、Pascal VOC

VOC数据集(Annotation的格式是xmI)

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

分类Classification目标检测Object Detection语义分割Class Segmentation实例分割Object SegmentationAction Classification(专注于人体动作的一种分类)Person Layout(专注于人体各部位的一种目标检 A.  数据集包含种类

一共包含了20类。一共包含了20类。

Person: personAnimal: bird, cat, cow, dog, horse, sheepVehicle: aeroplane, bicycle, boat, bus, car, motorbike, trainIndoor: bottle, chair, dining table, potted plant, sofa, tv/monitor

B.  V0C2007和V0C2012的区别

VOC2007中包含9963张标注过的图片, 由train/val/test三部分组成, 共标注出24,640个物体。

对于检测任务,VOC2012的trainval/test包含08-11年的所有对应图片。 trainval有11540张图片共27450个物体

C.  VOC数据集文件结构

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

. └── VOCdevkit             #根目录     └── VOC2012           #不同年份的数据集,这里只下载了2012的,还有2007等其它年份的         ├── Annotations   #存放xml文件,与JPEGImages中的图片一一对应,每个xml对应JPEGImage中的一张图片描述了图片信息         ├── ImageSets     #该目录下存放的都是txt文件,txt文件中每一行包含一个图片的名称,末尾会加上±1表示正负样本         │   ├── Action    #【Action下存放的是人的动作(例如running、jumping等等)】         │   ├── Layout   # 【Layout下存放的是具有人体部位的数据】         │   ├── Main      # 【Main下存放的是图像物体识别的数据,总共分为20类。】         │   └── Segmentation  # 【Segmentation下存放的是可用于分割的数据】         ├── JPEGImages            #存放源图片         ├── SegmentationClass   #【存放按照 class 分割的图片,语义分割相关;目标检测不需要】         └── SegmentationObject  #【存放按照 object 分割的图片,实例分割相关;目标检测不需要】

JPEGImages:目录中存放的是源图片的数据,包括训练与测试的所有图片。(当然图片并不一定要是 .jpg 格式的,只是规定文件夹名字叫 JPEGImages );Annotations(注释):存放的是标注数据,通过XML文件格式,为图像数据存储各类任务的标签。其中部分标签为目标检测的标签。里面存放的是每张图片打完标签所对应的XML文件。每一张图片文件都对应一个xml文件。ImageSets/Main:ImageSets文件夹下本次讨论的只有Main文件夹,---存放的是训练和验证时的文件列表,此文件夹中存放的主要又有四个文本文件test.txt、train.txt、trainval.txt、val.txt, 其中分别存放的是测试集图片的文件名、训练集图片的文件名、训练验证集图片的文件名、验证集图片的文件名。每行一个文件名(不包含扩展名),例如 train.txt 是下面这种格式的:

# train.txt aaaa bbbb cccc

SegmentationClass与SegmentationObject:存放的都是图片,且都是图像分割结果图,对目标检测任务来说没有用。class segmentation 标注出每一个像素的类别object segmentation 标注出每一个像素属于哪一个物体。

目录如下所示

VOC_ROOT

│ └─JPEGImages         # 存放源图片 │      ├─img0001.jpg │      ├─img0002.jpg │      ├─img0003.jpg │      └─img0004.jpg

│ ├─Annotations     # 存放xml文件,与JPEGImages中的图片一一对应,解释图片的内容等等 │      ├─img0001.xml │      ├─img0002.xml │      ├─img0003.xml │      └─img0004.xml │ ├─ImageSets      └─Main              ├─test.txt              ├─train.txt              ├─trainval.txt              └─val.txt

D.  标注信息是用xmI文件组织

xml文件的标注格式如下:

VOC2007 # 图片所处文件夹 000001.jpg # 图片文件名 pathto/000001.jpg The VOC2007 Database PASCAL VOC2007 flickr 341012865 Fried Camels Jinky the Fruit Bat # 图像尺寸,深度 353 500 3 0 # 是否用于分割(在图像物体识别中无所谓) # 标注目标 1 dog # 物体类别 Left # 拍摄角度:front, rear, left, right, unspecified,如果是自己的数据集就Unspecified 1 # 目标是否被截断,(比如在图片之外),或者被遮挡(超过15%), 0表示完整 0 # 检测难易程度,0表示容易识别),这个主要是根据目标的大小,光照变化,图片质量来判断,虽有标注, 但一般忽略这类物体 # 物体的bound box, 包含左下角和右上角xy坐标 48 240 195 371 # 标注目标 2 person Left 1 0 8 12 352 498 二、COCO数据集

参考文章: COCO数据集解析

COCO数据集有91类,虽然比ImageNet和SUN类别少,但是每一类的图像多,这有利于获得更多的每类中位于某种特定场景的能力,对比PASCAL VOC,其有更多类和图像。

和VOC相比,coco数据集上小目标多,单幅图片目标多,物体大多非中心分布,更符合日常环境,所以coco检测难度更大.

COCO难度更大,因为coco数据集每张图片中的物体数目很多,所以导致相对别的数据集,该数据集检测的准确率很低

为了更好的介绍这个数据集,微软在ECCV Workshops里发表这篇文章:Microsoft COCO: Common Objects in Context。从这篇文章中,我们了解了这个数据集以scene understanding为目标,主要从复杂的日常场景中截取,图像中的目标通过精确的segmentation进行位置的标定。图像包括91类目标,328,000影像和2,500,000个label。

A.  coco数据集包含类别:

80类分别为

[‘person’, ‘bicycle’, ‘car’, ‘motorcycle’, ‘airplane’, ‘bus’, ‘train’, ‘truck’, ‘boat’, ‘traffic light’, ‘fire hydrant’, ‘stop sign’, ‘parking meter’, ‘bench’, ‘bird’, ‘cat’, ‘dog’, ‘horse’, ‘sheep’, ‘cow’, ‘elephant’, ‘bear’, ‘zebra’, ‘giraffe’, ‘backpack’, ‘umbrella’, ‘handbag’, ‘tie’, ‘suitcase’, ‘frisbee’, ‘skis’, ‘snowboard’, ‘sports ball’, ‘kite’, ‘baseball bat’, ‘baseball glove’, ‘skateboard’, ‘surfboard’, ‘tennis racket’, ‘bottle’, ‘wine glass’, ‘cup’, ‘fork’, ‘knife’, ‘spoon’, ‘bowl’, ‘banana’, ‘apple’, ‘sandwich’, ‘orange’, ‘broccoli’, ‘carrot’, ‘hot dog’, ‘pizza’, ‘donut’, ‘cake’, ‘chair’, ‘couch’, ‘potted plant’, ‘bed’, ‘dining table’, ‘toilet’, ‘tv’, ‘laptop’, ‘mouse’, ‘remote’, ‘keyboard’, ‘cell phone’, ‘microwave’, ‘oven’, ‘toaster’, ‘sink’, ‘refrigerator’, ‘book’, ‘clock’, ‘vase’, ‘scissors’, ‘teddy bear’, ‘hair drier’, ‘toothbrush’]

B.  COCO 数据集文件结构

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里(instances_train2017.json 或者 instances_val2017.json)。json解析出来是字典格式

coco共有3种标注类型,这3种类型共享这些基本类型:info、image、license,使用JSON文件存储。每种类型包含了训练和验证

object instances(目标实例): 也就是目标检测object detection 标注;object keypoints(目标上的关键点);image captions(看图说话)

annotations: 对应标注文件夹 ├── instances_train2017.json : 对应目标检测、分割任务的训练集标注文件 ├── instances_val2017.json : 对应目标检测、分割任务的验证集标注文件 ├── captions_train2017.json : 对应图像描述的训练集标注文件 ├── captions_val2017.json : 对应图像描述的验证集标注文件 ├── person_keypoints_train2017.json : 对应人体关键点检测的训练集标注文件 └── person_keypoints_val2017.json : 对应人体关键点检测的验证集标注文件夹 Object segmentation : 目标级分割 Recognition in context : 图像情景识别 Superpixel stuff segmentation : 超像素分割 330K images (>200K labeled) : 超过33万张图像,标注过的图像超过20万张 1.5 million object instances : 150万个对象实例 80 object categories : 80个目标类别 91 stuff categories : 91个材料类别 5 captions per image : 每张图像有5段情景描述 250,000 people with keypoints : 对25万个人进行了关键点标注 """ 注意 """ COCO数据集格式中,bbox 的保存格式为 [x, y, w, h] 如果需要转换为[x1,y1,x2,y2],可以通过如下进行转换 bbox = [x1, y1, x1 + w - 1, y1 + h - 1]

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

注意: 虽然每个json文件都有"info", “images” , “annotations”, "licenses","categories"关键字,但不同的任务对应的json文件中annotation的形式不同。

(1)images字段列表元素的长度等同于划入训练集(或者测试集)的图片的数量; (2)annotations字段列表元素的数量等同于训练集(或者测试集)中bounding box的数量; (3)categories字段列表元素的数量等同于类别的数量

# 整个 json 文件格式 { "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, # int 协议id号 在images中遵循的license即1 "name": str, # str 协议名 "url": str, # str 协议链接 } # images是一个list,存放所有图片(dict)信息。image是一个dict,存放单张图片信息 image{ "id": int, # 图片的ID编号(每张图片ID唯一) "width": int, # 图片宽 "height": int, # 图片高 "file_name": str, # 图片名字 "license": int, # 协议 "flickr_url": str, # flick图片链接url "coco_url": str, # coco图片链接url "date_captured": datetime, # 数据集获取日期 } # annotations是一个list,存放所有标注(dict)信息。annotation是一个dict,存放单个目标标注信息。 annotation{ "id": int, # 图片中每个被标记物体的id编号,目标对象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, # 表示是否是人群/ 0 or 1 目标是否被遮盖,默认为0 } # 类别描述 categories{ "id": int, # 类别对应的ID编号(0默认为背景) "name": str, # 子类别名字 "supercategory": str, # 主类别名字, 类别所属的大类,如卡车和轿车都属于机动车这个class } 三、YOLO数据集格式

标签使用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标注格式如下所示:

例如:

0 0.412500 0.318981 0.358333 0.636111

每一行代表标注的一个目标

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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3