COCO 标记格式
原文 https://cocodataset.org/#format-data
数据格式
COCO有几种标注类型:用于目标检测、关键点检测、物体分割、全景分割、密集姿态和图像描述。这些标注使用JSON格式存储。请注意,下载页面上描述的COCO API可以用于访问和操作所有标注。所有标注共享以下基本数据结构:
{
"info": info,
"images": [image],
"annotations": [annotation],
"licenses": [license],
}
info{
"year": int,
"version": str,
"description": str,
"contributor": str,
"url": str,
"date_created": datetime,
}
image{
"id": int,
"width": int,
"height": int,
"file_name": str,
"license": int,
"flickr_url": str,
"coco_url": str,
"date_captured": datetime,
}
license{
"id": int,
"name": str,
"url": str,
}
以下是各种标注类型特定的数据结构描述。
1. 目标检测
每个对象实例标注包含一系列字段,包括对象的类别ID和分割掩码。分割格式取决于实例是否表示单个对象(iscrowd=0,此时使用多边形)或对象集合(iscrowd=1,此时使用RLE)。请注意,单个对象(iscrowd=0)可能需要多个多边形,例如在被遮挡的情况下。人群标注(iscrowd=1)用于标记大量对象(例如一群人)。此外,每个对象都提供一个包围边界框(边界框坐标从图像左上角测量,使用0索引)。最后,标注结构的类别字段存储类别ID到类别和超类别名称的映射。另请参见检测任务。
annotation{
"id": int,
"image_id": int,
"category_id": int,
"segmentation": RLE or [polygon],
"area": float,
"bbox": [x,y,width,height],
"iscrowd": 0 or 1,
}
categories[{
"id": int,
"name": str,
"supercategory": str,
}]
2. 关键点检测
关键点标注包含对象标注的所有数据(包括id、bbox等)和两个附加字段。首先,“keypoints”是一个长度为3k的数组,其中k是为类别定义的关键点总数。每个关键点都有一个0索引的位置x,y和一个可见性标志v,定义为v=0:未标注(此时x=y=0),v=1:已标注但不可见,v=2:已标注且可见。如果关键点落在对象分割内,则认为它是可见的。“num_keypoints”表示给定对象的标注关键点数量(v>0)(许多对象,例如人群和小物体,将有num_keypoints=0)。最后,对于每个类别,类别结构有两个附加字段:“keypoints”,这是一个长度为k的关键点名称数组,以及“skeleton”,通过关键点边缘对列表定义连接性,用于可视化。目前,关键点仅标注在person类别(大多数中/大型非人群实例)上。另请参见关键点任务。
annotation{
"keypoints": [x1,y1,v1,...],
"num_keypoints": int,
"[cloned]": ...,
}
categories[{
"keypoints": [str],
"skeleton": [edge],
"[cloned]": ...,
}]
"[cloned]": denotes fields copied from object detection annotations defined above.
3. 物体分割
物体标注格式与上述目标检测格式相同且完全兼容(除了iscrowd不必要且默认设置为0)。我们提供JSON和png格式的标注以便于访问,并提供两种格式之间的转换脚本。在JSON格式中,图像中存在的每个类别都用单个RLE标注编码(有关更多详细信息,请参见Mask API)。category_id表示当前物体类别的ID。有关物体类别和超类别的更多详细信息,请参见物体评估页面。另请参见物体任务。
4. 全景分割
对于全景任务,每个标注结构是每图像标注而不是每对象标注。每个每图像标注有两个部分:(1)一个PNG存储类无关的图像分割,(2)一个JSON结构存储每个图像段的语义信息。更详细地:
- 要将标注与图像匹配,请使用image_id字段(即annotation.image_id==image.id)。
- 对于每个标注,每像素段ID存储为annotation.file_name中的单个PNG。PNG位于与JSON同名的文件夹中,即annotations/name/对应annotations/name.json。每个段(无论是物体还是东西段)都分配一个唯一ID。未标注的像素(void)分配值为0。请注意,当您将PNG加载为RGB图像时,您需要通过ids=R+G256+B256^2 计算ID。
- 对于每个标注,每段信息存储在annotation.segments_info中。segment_info.id存储段的唯一ID,并用于从PNG中检索相应的掩码(ids==segment_info.id)。category_id给出语义类别,iscrowd表示该段包含一组对象(仅适用于物体类别)。bbox和area字段提供有关该段的附加信息。
- COCO全景任务与检测任务具有相同的物体类别,而物体类别与物体任务中的类别不同(有关详细信息,请参见全景评估页面)。最后,每个类别结构有两个附加字段:isthing区分物体和东西类别,color用于一致的可视化。
annotation{
"image_id": int,
"file_name": str,
"segments_info": [segment_info],
}
segment_info{
"id": int,
"category_id": int,
"area": int,
"bbox": [x,y,width,height],
"iscrowd": 0 or 1,
}
categories[{
"id": int,
"name": str,
"supercategory": str,
"isthing": 0 or 1,
"color": [R,G,B],
}]
5. 图像描述
这些标注用于存储图像描述。每个描述描述指定的图像,每个图像至少有5个描述(某些图像有更多)。另请参见描述任务。
annotation{
"id": int,
"image_id": int,
"caption": str,
}
6. 姿态估计
对于姿态估计(DensePose)任务,每个标注包含一系列字段,包括类别ID、边界框、身体部位掩码和选定点的参数化数据,详细如下。
人群标注(iscrowd=1)用于标记大量对象(例如一群人)。
每个人都提供一个包围边界框(边界框坐标从图像左上角测量,使用0索引)。
标注结构的类别字段存储类别ID到类别和超类别名称的映射。
DensePose 标注存储在dp_*字段中:
标注掩码:
- dp_masks:RLE编码的密集掩码。所有部位掩码的大小为256x256。它们对应于身体的14个语义部分:躯干、右手、左手、左脚、右脚、右上腿、左上腿、右下腿、左下腿、左上臂、右上臂、左下臂、右下臂、头部;
标注点:
- dp_x, dp_y:图像上收集点的空间坐标。坐标按边界框大小缩放为256x256;
- dp_I:补丁索引,指示点所在的24个表面补丁中的哪个。补丁对应于上述身体部位。某些身体部位分为2个补丁:1, 2 = 躯干,3 = 右手,4 = 左手,5 = 左脚,6 = 右脚,7, 9 = 右上腿,8, 10 = 左上腿,11, 13 = 右下腿,12, 14 = 左下腿,15, 17 = 左上臂,16, 18 = 右上臂,19, 21 = 左下臂,20, 22 = 右下臂,23, 24 = 头部;
- dp_U, dp_V:UV空间中的坐标。每个表面补丁都有一个单独的2D参数化。
annotation{
"id": int,
"image_id": int,
"category_id": int,
"is_crowd": 0 or 1,
"area": int,
"bbox": [x,y,width,height],
"dp_I": [float],
"dp_U": [float],
"dp_V": [float],
"dp_x": [float],
"dp_y": [float],
"dp_masks": [RLE],
}
欢迎关注作者公众号,获取更多技术分享