赞
踩
针对非对称物体:Average Distance
已知Ground turth
[
R
∣
T
]
\rm [R|T]
[R∣T] 以及预测结
[
R
p
∣
T
p
]
\rm [R_p| T_p]
[Rp∣Tp],用这两个数据对模型点云进行变换,然后求出每个对应点距离的平均值。
A
D
D
=
1
m
∑
x
∈
m
o
d
e
l
∣
∣
(
R
x
+
T
)
−
(
R
p
x
+
T
p
)
∣
∣
\rm ADD=\frac{1}{m}\sum_{x\in{model}}||(Rx+T) - (R_px+T_p) ||
ADD=m1x∈model∑∣∣(Rx+T)−(Rpx+Tp)∣∣
如果计算出来的ADD小于某一个设定的阈值(PoseCNN等工作中,阈值为10%*model_diameter),则预测位姿被认为是正确的。
ADD-S 针对“对称物体”
对于对称物体,预测出来的和标注的值在旋转轴上可能会相差较大,然而并不一定代表实际的效果不好。
A
D
D
−
S
\rm ADD-S
ADD−S使用最近点计算距离,最近距离可由快速搜索算法knn等计算。
A
D
D
−
S
=
1
m
∑
x
1
∈
m
o
d
e
l
min
x
2
∈
m
o
d
e
l
∣
∣
(
R
x
1
+
T
)
−
(
R
p
x
2
+
T
p
)
∣
∣
\rm ADD-S=\frac{1}{m} \sum_{x_1\in{model}} \min \limits_{x_2\in{model}} ||(Rx_1+T) - (R_px_2+T_p) ||
ADD−S=m1x1∈model∑x2∈modelmin∣∣(Rx1+T)−(Rpx2+Tp)∣∣
计算代码(用到了knn,参考DenseFusion的评测代码)
# 对称物体
if idx[0].item() in sym_list:
target = target[0].transpose(1, 0).contiguous().view(3, -1)
pred = pred.permute(2, 0, 1).contiguous().view(3, -1)
inds = knn(target.unsqueeze(0), pred.unsqueeze(0)) # 找到最近邻
target = torch.index_select(target, 1, inds.view(-1).detach() - 1)
target = target.view(3, bs * num_p, num_point_mesh).permute(1, 2, 0).contiguous()
pred = pred.view(3, bs * num_p, num_point_mesh).permute(1, 2, 0).contiguous()
# 非对称物体
dis = torch.mean(torch.norm((pred - target), dim=2), dim=1) # 对应点求L2范数
重投影误差
将估计后的三维点,重投影到二维图像,计算原图像与重投影图像的差别。
【参考DeepIM】
5度旋转,5cm平移的容忍,小于这个范围就是估计正确,从而转换成01分类问题的度量
【参考DeepIM】
直接计算平移差与欧式角度误差
此方法出现于最近看的部分中文论文。相比之下更加直观。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。