python - 如何计算对象关键点相似度
问题描述
我正在尝试计算对象关键点相似度来评估算法的关键点检测。下面是我根据从这里找到和理解的内容编写的代码
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 应该为每个关键点产生一个值,但上面的代码导致所有关键点组合的单个值。我在这里做错了吗?
解决方案
推荐阅读
- java - 我不断遇到一条错误消息,指出字符串索引超出范围。怎么修?
- kubernetes - AKS - 启用节点本地 dns
- rust - 当我不关心某些参数时,Rust 可以在函数类型之间进行转换吗?
- java - Android:从不同的布局到达按钮对象
- javascript - 画布触控支持,定位触控事件
- python - 熊猫找到价格变化一定量所需的最短时间
- jenkins - 为什么我的 Jenkins 管道失败并显示错误代码 24
- mysql - MySQL:使用来自另一个表列的随机值触发更新
- reactjs - how to use spyOn on a class less component
- java - 使用 Intent 从 WebView 拨打电话不起作用