人体关键点评价指标---OKS计算

主要内容转载自知乎,有加入一些额外的信息补充。

OKS, object keypoint similarity, 即关键点相似度. 在人体关键点评价任务中,对于网络得到的关键点好坏,并不是仅仅通过简单的欧氏距离来计算的,而是有一定的尺度加入,来计算两点之间的相似度. 公式:

O K S p = ∑ i e x p { − d p 2 2 / 2 S p 2 σ i 2 } δ ( v p i = 1 ) ∑ i δ ( v p i = 1 ) OKS_{p} = \frac{\sum_{i}exp\{-d^{2}_{p^{2}}/2S^{2}_{p}\sigma^{2}_{i}\}\delta(v_{p^{i}}=1)}{\sum_{i}\delta(v_{p^{i}}=1)} OKSp=iδ(vpi=1)iexp{dp22/2Sp2σi2}δ(vpi=1)

其中:

  • p p p 表示在groundtruth中某个人的id
  • p i p^{i} pi 表示某个人的关键点id
  • v p i = 1 v_{p^{i}}=1 vpi=1 表示这个关键点的可见性为1(即在图片上可见)
  • S p 2 S^{2}_{p} Sp2 表示这个人所占的面积大小平方根, 根据groundtruth里人的box计算得到
  • σ i \sigma_{i} σi 表示第i个骨骼点的归一化因子,这个因子是通过对已有的数据集中所有groundtruth计算的标准差而得到的,反映出当前骨骼点对与整体的影响程度。值越大,说明在整个数据集中对这个点的标注效果越差; 值越小,说明整个数据集中对这个点的标注效果越好

我想额外提的一点是,有的文章中,会把 σ i 2 \sigma^{2}_{i} σi2记作 k i 2 k^{2}_{i} ki2,两者只是符号上的不同,意义一样。OKS公式中的分子相当于一个以关键点真值为中心的高斯分布, S p 2 S^{2}_{p} Sp2是用来做尺度归一化, σ i 2 \sigma^{2}_{i} σi2是数据集标注的标准差,我们调整 σ i 2 \sigma^{2}_{i} σi2使得OKS是一个感知上有意义且易于解释的相似性度量。这个标准差在MSCOCO中就是通过5000张不同人标注的信息统计得到,表示的是human针对同一个关键点标注时产生的标准差。 σ i 2 \sigma^{2}_{i} σi2对于不同的关键点有很大的不同:人的关键点(肩膀,膝盖,臀部等shoulders, knees, hips)往往比人的头部(眼睛,鼻子,耳朵eyes, nose, ears)对应的 σ i 2 \sigma^{2}_{i} σi2大得多。公式中取 2 σ i 2 2\sigma^{2}_{i} 2σi2作为最终的标准差。

OKS是对两个人的之间的关节点相似度计算,如果有多人的时候,假设一张要预测的图片上有M个人,我预测出来了N个人,那么M个人中的每个人都会和预测的N个人的关节点进行相似度计算,所以最后我们会得到一个M x N 的矩阵,对于其中的一个人来讲,会选择和他oks最大的那个作为预测的label来计算.

AP(Average Precision)

根据前面的OKS矩阵,已经知道了某一张图像的所有人(groundtruth中出现的)的OKS分数,现在测试集中有很多图像,每张图像又有一些人,此时该如何衡量整个算法的好坏的。这个时候就用到了AP的概念,AP就是给定一个t,如果当前的OKS大于t,那就说明当前这个人的骨骼点成功检测出来了,并且检测对了,如果小于t,则说明检测失败或者误检漏检等,因此对于所有的OKS,统计其中大于t的个数,并计算其占所有OKS的比值。即假设OKS一共有100个,其中大于阈值t的共有30个,那么AP值就是30/100=0.3.

mAP(mean Average Precision)

顾名思义,AP的均值,具体计算方法就是给定不同的阈值t,计算不同阈值情况下对应的AP,然后求个均值就ok了。

你可能感兴趣的:(人体关键点评价指标---OKS计算)