Open zuoligang1997 opened 4 years ago
Hi,
1). The reason why points
are added to the pred_t
is that our prediction of the object centroid is an offset translation. Since we are performing a per-point wise pose estimation, the translation estimation from each input point is an offset translation starting from the original 3D location of that point. This is how we add difference to the results from each input point and the network is trained unsupervisedly to choose which one should be the best prediction.
2). The main idea of how we achieve the iterative refinement is that: in each iteration, after acquired the predicted 6D pose, we inverse the pose result and directly apply it to the input pointcloud, which will later be used as the input for the next iteration. These lines of code are doing this inverse transformation.
3). This process is implemented as a for-loop in our code. Please refer to either DenseFusion/tools/eval_ycb.py
or DenseFusion/tools/eval_linemod.py
, where my_pred
are iteratively updated in each refinement step.
First question: Don't understand why points are added below:
pred = torch.add(torch.bmm(model_points, base), points + pred_t)
The second question is about iterative optimization. Why is the following code written like this? ` ori_base = ori_base[which_max[0]].view(1, 3, 3).contiguous() ori_t = t.repeat(bs num_p, 1).contiguous().view(1, bs num_p, 3) new_points = torch.bmm((points - ori_t), ori_base).contiguous()Thirdly, the thesis mentioned that pose is iterative and precise step by step, but I don't see this implementation in the code. Ok?