首页 > 解决方案 > 如何计算对象关键点相似度

问题描述

我正在尝试计算对象关键点相似度来评估算法的关键点检测。下面是我根据从这里找到和理解的内容编写的代码

ok 公式

def oks(gt,preds,阈值,v,gt_area):

ious = np.zeros((len(preds), len(gt)))
sigmas = np.array([.26, .25, .25, .35, .35, .79, .79, .72, .72, .62,.62, 1.07, 1.07, .87, .87, .89, .89])/10.0
vars = (sigmas*2)**2
k = len(sigmas)

xg = gt[:, 0]; yg = gt[:, 1]
xp = preds[:, 0]; yp = preds[:, 1]
vg = v + 1 # add one to visibility tags
k1 = np.count_nonzero(vg > 0)
dx = np.subtract(xg, xp)
dy = np.subtract(yg, yp)

e = (dx**2+dy**2)/vars/(gt_area+np.spacing(1))/2
if threshold is not None:
    ind = list(vg > threshold)
    e = e[ind]
ious = np.sum(np.exp(-e))/(1.5*e.shape[0]) if len(e) != 0 else 0
return ious

在哪里,

gt, preds 是 17x2 NumPy 数组,包含 17 个 (x, y) 人体姿态坐标,分别用于地面实况和机器学习模型的预测。

阈值 = 0.5(coco 数据集使用 0.5 作为软阈值),

v = 地面实况关键点的可见性(17x1 NumPy 数组),值为 0 = 可见且 1 = 被遮挡(因此我们执行 vg=v+1 以符合 oks 公式)

gt_area = 真实人物边界框的面积。

我的印象是 oks 应该为每个关键点产生一个值,但上面的代码导致所有关键点组合的单个值。我在这里做错了吗?

标签: pythonmachine-learningdeep-learningcomputer-visionpose-estimation

解决方案


推荐阅读