- ADD 参考 Model Based Training, Detection and Pose Estimation of Texture-Less 3D Objects in Heavily Cluttered Scenes - hinterstoisser2012accv
针对非对称物体:Average Distance 已知Ground turth [ R ∣ T ]
m [R|T] [R∣T] 以及预测结 [ R p ∣ T p ]
m [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 ) ∣ ∣
m ADD=frac{1}{m}sum_{xin{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
m 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 ) ∣ ∣
m ADD-S=frac{1}{m} sum_{x_1in{model}} min limits_{x_2in{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】
- 直接计算平移差与欧式角度误差 此方法出现于最近看的部分中文论文。相比之下更加直观。