问题描述
我正在尝试计算对象关键点相似度以评估算法的关键点检测。下面是我根据我从 here
中发现和理解的内容编写的代码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 (将#修改为@)