人体骨骼关键点检测
挑战复杂生活场景中的人体检测,并预测多种复杂动作下的人体骨骼关键点位置
https://challenger.ai/competition/keypoint/subject
人体骨骼关键点对于描述人体姿态,预测人体行为至关重要。因此人体骨骼关键点检测是诸多计算机视觉任务的基础,例如动作分类,异常行为检测,以及自动驾驶等等。本次比赛邀请参赛者设计算法与模型,对自然图像中可见的人体骨骼关键点进行检测。组委会将通过计算参赛者提交的检测结果与真实标注之间的相似性来评估参赛者的算法模型。
数据集分为训练(70%)、验证(10%)、测试A(10%)与测试B(10%)四部分。数据集图片中的每一个重要人物(占图像面积较大的清晰人物),我们均对其进行了人体骨骼关键点标注。其中每个人物的全部人体骨骼关键点共有14个,编号顺序如表所示,依次为:
1/右肩 | 2/右肘 | 3/右腕 | 4/左肩 | 5/左肘 |
6/左腕 | 7/右髋 | 8/右膝 | 9/右踝 | 10/左髋 |
11/左膝 | 12/左踝 | 13/头顶 | 14/脖子 | |
每个人体骨骼关键点有三种状态:可见、不可见、以及不在图内或不可推测。
一个标注的可视化例子如下图所示。其中红色为可见点,灰色为不可见点,关键点旁的数字为关键点对应编号:

人体骨骼关键点的标注信息以JSON格式存储。每个JSON文件分别对应一个分割数据集,一个JSON文件中的每个item存储该数据集中一张图片的人体框位置与人体骨骼关键点位置。其中JSON文件格式如下所示:
-
-
[
-
{
-
"image_id"
:
"a0f6bdc065a602b7b84a67fb8d14ce403d902e0d"
,
-
"human_annotations"
:
-
{
-
"human1"
: [
178
,
250
,
290
,
522],
-
"human2": [
293,
274,
352,
473],
-
"human3": [
315,
236,
389,
495],
-
...},
-
"keypoint_annotations":
-
{
-
"human1": [
261,
294,
1,
281,
328,
1,
259,
314,
2,
-
213,
295,
1,
208,
346,
1,
192,
335,
1,
-
245,
375,
1,
255,
432,
1,
244,
494,
1,
-
221,
379,
1,
219,
442,
1,
226,
491,
1,
-
226,
256,
1,
231,
284,
1],
-
"human2": [
313,
301,
1,
305,
337,
1,
321,
345,
1,
-
331,
316,
2,
331,
335,
2,
344,
343,
2,
-
313,
359,
1,
320,
409,
1,
311,
454,
1,
-
327,
356,
2,
330,
409,
1,
324,
446,
1,
-
337,
284,
1,
327,
302,
1],
-
"human3": [
373,
304,
1,
346,
286,
1,
332,
263,
1,
-
363,
308,
2,
342,
327,
2,
345,
313,
1,
-
370,
385,
2,
368,
423,
2,
370,
466,
2,
-
363,
386,
1,
361,
424,
1,
361,
475,
1,
-
365,
273,
1,
369,
297,
1],
-
...}
-
},
-
...
-
]
-
其中,各字段存储信息如下:
“image_id”:字符串,存储图像的文件名。
“human_annotations”:若干长度为4的整数型数列,存储人体框的位置。其中前两个参数为人体框左上角点的坐标值,后两个参数为人体框右下角点的坐标值。
“keypoint_annotations”:若干长度为42的整数型数列,存储人体骨骼关节点位置。数列形式为:[x1,y1,v1,x2,y2,v2,⋅⋅⋅,x14,y14,v14][x1,y1,v1,x2,y2,v2,⋅⋅⋅,x14,y14,v14],其中(xi,yi)(xi,yi)为编号ii的人体骨骼关节点的坐标位置,vivi为其状态(vi=1vi=1可见,vi=2vi=2不可见,vi=3vi=3不在图内或不可推测)。 人体骨骼关键点的编号顺序如表格所示,依次为:1/右肩,2/右肘,3/右腕,4/左肩,5/左肘,6/左腕,7/右髋,8/右膝,9/右踝,10/左髋,11/左膝,12/左踝,13/头顶,14/脖子。
选手返回的结果应存为JSON文件,格式如下:
-
-
[
-
{
-
"image_id"
:
"a0f6bdc065a602b7b84a67fb8d14ce403d902e0d"
,
-
"keypoint_annotations"
: {
-
"human1"
: [
261
,
294
,
1
,
281
,
328
,
1
,
0
,
0
,
0
,
213
,
295
,
1
,
208
,
346
,
1
,
192
,
335
,
1
,
245
,
375
,
1
,
255
,
432
,
1
,
244
,
494
,
1
,
221
,
379
,
1
,
219
,
442
,
1
,
226
,
491
,
1
,
226
,
256
,
1
,
231
,
284
,
1],
-
"human2": [
313,
301,
1,
305,
337,
1,
321,
345,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
313,
359,
1,
320,
409,
1,
311,
454,
1,
0,
0,
0,
330,
409,
1,
324,
446,
1,
337,
284,
1,
327,
302,
1],
-
"human3": [
373,
304,
1,
346,
286,
1,
332,
263,
1,
0,
0,
0,
0,
0,
0,
345,
313,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
363,
386,
1,
361,
424,
1,
361,
475,
1,
365,
273,
1,
369,
297,
1],
-
...
-
}
-
}
-
...
-
]
-
其中“keypoint_annotations”字段为若干长度为42的整数型数列,人体骨骼关键点的编号顺序依次为:1/右肩,2/右肘,3/右腕,4/左肩,5/左肘,6/左腕,7/右髋,8/右膝,9/右踝,10/左髋,11/左膝,12/左踝,13/头顶,14/脖子。本次比赛只要求返回检测结果为可见(v = 1)的人体骨骼关键点,未检测出的人体骨骼关键点可用(0,0,0)代替。
人体骨骼关键点比赛的评价指标类比通用的物体检测评价方式,将最终的mAP(mean Average Precision)值作为参赛选手排名的依据。物体检测任务中使用IoU(Intersection over Union)来评价预测与真实标注之间的差异,在人体骨骼关键点检测任务中,我们使用OKS(Object Keypoint Similarity)代替IoU,对选手预测的人体骨骼关键点位置与真实标注之间的相似性进行打分。[1]
最终指标mAP的计算方式如下所示:
其中s为OKS阈值,最终评价指标mAP为在不同阈值下得到的平均准确率(AP)的均值。
平均准确率(AP)用一般物体检测相同的方式得到,但度量性指标由IoU更改为OKS。给定OKS阈值s,选手预测的结果在整个测试集上的平均准确率(AP@s)可由测试集中所有图片的OKS指标计算得到:
OKS分数类比一般物体检测的IoU值,为选手预测的人体骨骼关键点位置与真实标注之间的相似性打分。OKS的主体思想为关键点位置的加权欧氏距离,对人物p,OKS分数定义如下:
其中,pp为人体编号;ii为人体骨骼关键点编号;dpidpi为选手预测关键点位置与标注位置的欧式距离;spsp为人体p的尺度因子,定义为人体框面积的平方根;σiσi是人体骨骼关键点归一化因子,由人工标注位置偏移的标准差计算得到;vpivpi为第p人的第i个关键点的状态,δ(⋅)δ(⋅)为克罗内克函数,即只有被标为可见的人体骨骼关键点(v=1v=1)计入评价指标。
我们将提供验证脚本,帮助选手在线下测试模型效果。测试脚本、以及详细使用方法,将与验证数据集同时发布。