人体骨骼关键点检测
人体骨骼关键点检测
挑战复杂生活场景中的人体检测,并预测多种复杂动作下的人体骨骼关键点位置
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/脖子 |
每个人体骨骼关键点有三种状态:可见、不可见、以及不在图内或不可推测。
一个标注的可视化例子如下图所示。其中红色为可见点,灰色为不可见点,关键点旁的数字为关键点对应编号:
图1: 人体骨骼关键点标注示例
人体骨骼关键点的标注信息以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的计算方式如下所示:
mAP=mean{[email protected](0.50:0.05:0.95)}mAP=mean{[email protected](0.50:0.05:0.95)}
其中s为OKS阈值,最终评价指标mAP为在不同阈值下得到的平均准确率(AP)的均值。
平均准确率(AP)用一般物体检测相同的方式得到,但度量性指标由IoU更改为OKS。给定OKS阈值s,选手预测的结果在整个测试集上的平均准确率([email protected])可由测试集中所有图片的OKS指标计算得到:
[email protected]=∑pδ(OKSp>s)∑[email protected]=∑pδ(OKSp>s)∑p1
OKS分数类比一般物体检测的IoU值,为选手预测的人体骨骼关键点位置与真实标注之间的相似性打分。OKS的主体思想为关键点位置的加权欧氏距离,对人物p,OKS分数定义如下:
OKSp=∑iexp{−d2pi/2s2pσ2i}δ(vpi=1)∑iδ(vpi=1)OKSp=∑iexp{−dpi2/2sp2σi2}δ(vpi=1)∑iδ(vpi=1)
其中,pp为人体编号;ii为人体骨骼关键点编号;dpidpi为选手预测关键点位置与标注位置的欧式距离;spsp为人体p的尺度因子,定义为人体框面积的平方根;σiσi是人体骨骼关键点归一化因子,由人工标注位置偏移的标准差计算得到;vpivpi为第p人的第i个关键点的状态,δ(⋅)δ(⋅)为克罗内克函数,即只有被标为可见的人体骨骼关键点(v=1v=1)计入评价指标。
我们将提供验证脚本,帮助选手在线下测试模型效果。测试脚本、以及详细使用方法,将与验证数据集同时发布。
[1] Lin, Tsung-Yi and Maire, Michael and Belongie, Serge and Hays, James and Perona, Pietro and Ramanan, Deva and Dollar, Piotr and Zitnick, C Lawrence, "Microsoft coco: Common objects in context", European conference on computer vision, pp.740--755, Springer, 2015.↩
AI Challenger 其中的人体骨骼关键点检测主要依赖的技术背景为Human pose estimation。该领域分为单人和多人两类,根据竞赛数据集来看,该任务为mult-person pose estimation。以下先介绍该竞赛的相技术背景
-- Background
专业术语:multi-person pose estimation
文章列表
1. open-Pose:<Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields >(CVPR 2017 Oral, CMU)
性能:COCO: 61% MPII:75%
2. G-RMI <Towards accurate multi-person pose estimation in the wild> (CVPR 2017 Google)
性能:COCO: 67%
3. Associative Embedding <Associative Embedding:End-to-End Learning for Joint Detection and Grouping> (rejected by ICCV2017 , UMICH Jia Deng)
性能: COCO :66% MPII: 77%
4. <Joint Multi-Person Pose Estimation and Semantic Part Segmentation> ( ICCV 2017, UCLA)
性能:PASCAL-Person-Part: 62.8%
5. <MASK RCNN> (ICCV 2017, Facebook,Kaiming He)
性能:COCO: 63%
6. <RMPE: Regional Multi-Person Pose Estimation> (ICCV 2017 , SJTU ,Tencent Youtu)
性能:COCO : 61.8% MPII: 76%
分类
1. Bottom-up approach:先检测joints 和 limbs,然后将他们group成一个人。 代表文章<1> <4> 。
优点:整个图像只需要处理一遍,速度不随人数增加而变化
2. Top-Down approach:先检测单个人,再针对单个人做single-person pose estimation。 代表文章 <2> <3> <5>
优点:思路直观,自然,被绝大部分人所青睐,且单人估计精度非常高
相关数据集/ 竞赛
1. MSCOCO Keypoint
http://cocodataset.org/
2. MPII
http://human-pose.mpi-inf.mpg.de/#results
3. Posetrack
https://posetrack.net/
- Baseline 尝试
1. 选定openpose作为baseline方法,先不训练,直接套用MPI的模型。由于MPI的关键点数量和AI Challenger完全一致,所以模型可以直接套用。第一个双周提交至竞赛网站,结果仅为26%。Baseline性能比较令人意外,毕竟这个模型在MPI这个最老牌的竞赛集上可是有75%的性能。
---------------------
作者:z5337209
来源:CSDN
原文:https://blog.csdn.net/Z5337209/article/details/77992419
版权声明:本文为博主原创文章,转载请附上博文链接!