ethnhe / PVN3D

Code for "PVN3D: A Deep Point-wise 3D Keypoints Hough Voting Network for 6DoF Pose Estimation", CVPR 2020
MIT License
482 stars 105 forks source link

Question about the test result on Linemod #89

Open Jasper-Y opened 2 years ago

Jasper-Y commented 2 years ago

Hi,

I used the pre-trained models and the ADD AUC for the object ape is only 84.14. The only changes are these codes below where I replaced the PCL with Open3d.

def get_normal(self, cld):
    # import pcl
    # cloud = pcl.PointCloud()
    # cld = cld.astype(np.float32)
    # cloud.from_array(cld)
    # ne = cloud.make_NormalEstimation()
    # kdtree = cloud.make_kdtree()
    # ne.set_SearchMethod(kdtree)
    # ne.set_KSearch(50)
    # n = ne.compute()
    # n = n.to_array()
    pcd = o3d.geometry.PointCloud()
    cld = cld.astype(np.float32)
    pcd.points = o3d.utility.Vector3dVector(cld)
    pcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamKNN(knn=50))
    return np.asarray(pcd.normals)[:, :3]

Has anyone tested on the Linemod dataset? Am I making any mistakes on these codes? Thank you for your help!

ethnhe commented 2 years ago

I don't suggest an Open3D version of normal estimation as the normal direction from it points differently on different points, with some "inward" the object surface and some "outward", which may be confusing. Apart from the PCL version, I suggest the Normal_Speed version as used in our FFB6D project. Normal from them point out the object surface according to the camera view point.