coco2017是当前最主流的多人姿态估计benchmark,官网的Evaluate已对coco的评价标准做了详细的解释,本文只对其二次整理。
Overview
首先coco的姿态估计要求对目标进行检测和定位他们的keypoint,测试过程中目标的定位结果是不提供的,这非常符合常理。
其次coco对姿态估计的评价主要参考了coco的目标检测评价,在目标检测评价中,IOU是预测结果与GT之间的相似度度量标准,有了这个值之后,我们就可以设定阈值,计算出AP(average precision)AR(average recall)这些指标。
那么同理,对于姿态估计来说,如果也能找到一个衡量预测和GT之间的相似性的标准的话,那就可以套用目标检测的评价了。这个相似性度量标准就是OKS。
无论是目标检测还是姿态估计,coco评价都是以object为单位进行的,而不是图的数量。
OKS
那么什么是OKS?
OKS的全称为Object Keypoint Similarity,它的计算公式如下:
O K S = ∑ i e x p [ − d i 2 2 s 2 k i 2 δ ( v i > 0 ) ] ∑ i δ ( v i > 0 ) OKS=frac{sum _{i}expleft [frac{-d_{i}^{2}}{2s^{2}k_{i}^{2}}delta (v_{i}>0) right ]}{sum _{i}delta (v_{i}>0)} OKS=∑iδ(vi>0)∑iexp[2s2ki2−di2δ(vi>0)]
OKS定义为一个目标与它的GT的keypoint相似度,其中 i i i为关键点的个数
d i 2 d_{i}^{2} di2表示关键点 i i i预测值与GT之间的欧氏距离
s s s表示GT行人的尺度因子,其值为行人检测框面积的平方根,这里的 s s s与关键点无关
k i k_{i} ki表示为第 i i i个关键点的归一化因子的2倍,这个因子是通过对所有的样本集中的groundtruth关键点由人工标注与真实值存在的标准差,越大表示此类型的关键点越难标注,而 k i k_{i} ki越大,对应的OKS的值就会越大。
对coco数据集中的5000个样本统计出17类关键点的归一化因子, k k k的取值可以为:{鼻子:0.026,眼睛:0.025,耳朵:0.035,肩膀:0.079,手肘:0.072,手腕:0.062,臀部:0.107,膝盖:0.087,脚踝:0.089},因此此值可以当作常数看待,但是使用的类型仅限这个里面。
v i v_{i} vi表示第 i i i个关键点的可见性,0表示关键点未标记,1表示无遮挡并且已经标记,2表示有遮挡但是已经标记.
最终,计算得到的OKS是一个最大值为1的度量,也就是欧氏距离为0的时候。
Metrics
OKS是一个以object为单位的度量值,计算得到OKS之后,它起到的作用就和目标检测里面的IOU一样,于是我们就可以设定阈值过滤,就有了coco下面10个metrics:
Average Precision (AP):
A P AP AP
A P O K S = . 50 AP^{OKS=.50} APOKS=.50
A P O K S = . 75 AP_{OKS=.75} APOKS=.75
AP Across Scales:
A P m e d i u m AP^{medium} APmedium
A P l a r g e AP^{large} APlarge
Average Recall (AR):
A R AR AR
A R O K S = . 50 AR^{OKS=.50} AROKS=.50
A R O K S = . 75 AR^{OKS=.75} AROKS=.75
AR Across Scales:
A R m e d i u m AR^{medium} ARmedium
A R l a r g e AR^{large} ARlarge
多人姿态估计,假设一张图片中共有M个人,预测出N个人,由于不知道预测出的N个人与groundtruth中的M个人的一一对应关系,因此需要计算groundtruth中每一个人与预测的N个人的oks,那么可以获得一个大小为M × N的矩阵,矩阵的每一行为groundtruth中的一个人与预测结果的N个人的oks,然后找出每一行中oks最大的值作为当前GT的oks。最后每一个GT行人都有一个标量oks,然后人为的给定一个阈值T,然后可以通过所有图片中的所有行人计算AP。