如何计算对象关键点相似度

问题描述

我正在尝试计算对象关键点相似度以评估算法的关键点检测。下面是我根据我从 here

中发现和理解的内容编写的代码

oks formula

def oks(gt,preds,threshold,v,gt_area):

IoUs = np.zeros((len(preds),len(gt)))
sigmas = np.array([.26,.25,.35,.79,.72,.62,1.07,.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)人体姿势坐标,分别用于机器学习模型的地面实况和预测。

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

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

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

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)