背景
到现在,我的vitpose在full coco dataset已经跑了1天07个小时了,eta还有12个小时,要是每次我造一个新模型就得跑2天,那我估计要被我导师一脚踹飞了。因此我准备子集切一个COCO姿态估计数据集的子集出来,要切分就肯定要先了解数据格式,所以我就先去探索了一下coco姿态估计的json标注,然后就有了这篇文章。
Person_keypoints_train2017.json 结构解读
用Dadroit JSON阅读器打开 person_keypoints_train_2017.json文件,最顶层有5个key:
info
包含了COCO数据集的元信息,如网址,版本,年份等等:
licneses
包含了如何合法使用和分发数据集中的内容,对训练没啥用所以跳过
images
包含所有训练图片,一共有118287个元素,这里面的每一个元素都对应着一个img的元信息,对训练重要的有三个:
- 文件名
- 图片尺寸
- 唯一的索引id
annotations:
现在重头戏来了,annotations表示在这个Pose-Estimation标注文件中提供的所有标注信息,在这个train的标注文件中一共有262465条标注,每一条标注的结构如下所示:
- segmentation: 这个是语义分割的标注,用一堆坐标点把一个实例抠出来,和姿态估计不怎么相关,先不管
接下来就是和keypoints相关的annotation部分
-
num_keypoints: 图片中可见的coco关键点有几个
-
area:标注对象所占的像素面积
-
iscrowd: 这个人和其他人有没有重合,有1否0
-
keypoints: 一共有51个元素,对应着17个coco关键点的一维序列展开(每个点有(x, y visible)三个属性, 3 * 17 = 51)
-
image_id: 这个标注对应的图片id
-
bbox:该物体的检测框[xywh] (x, y)是左上角坐标,w代表宽度,h代表高度
-
category_id: 物体的所属类别,在姿态估计任务中只有1个,就是人,id为1
-
id:标注的唯一id
categories
对应着每个categories的关键点配置,这里目前只有人一类,所以catgories的元素就只有一个
-
supercategory: 所属超类,先不管
-
id:category的id
-
keypoints:定义了这个类有多少个keypoints,以及每个keypoints的名字
-
skeleton:定义了每个关键点之间的连接,每一个元素就是一个连接线,第一个连接线就是16和14关键点的连接。coco完整的人体标注会有19条连接线。
后记
这里只是简单的过了一遍json中的大概结构和重要字段,充当一个速查表的作用了。