- ADD
参考 Model Based Training, Detection and Pose Estimation of Texture-Less 3D Objects in Heavily Cluttered Scenes - hinterstoisser2012accv
-
针对非对称物体: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】 -
直接计算平移差与欧式角度误差
此方法出现于最近看的部分中文论文。相比之下更加直观。