Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

About FGR results #8

Closed
lombardm opened this issue Jul 28, 2020 · 1 comment
Closed

About FGR results #8

lombardm opened this issue Jul 28, 2020 · 1 comment

Comments

@lombardm
Copy link

Hi, I would like to ask you about the tests you presented within the paper. In particular, I was trying to reproduce the results you obtained on 3DMatch using FGR. I am currently using the open3d library and I have inserted into deep_global_registration.py the following code:

if self.safeguard_method == 'feat_fast':
distance_threshold = voxel_size * 2.0
T = registration_fast_based_on_fcgf_feature_matching(pcd0, pcd1,
feats0.cpu().numpy(),
feats1.cpu().numpy(),
distance_threshold)

where

def registration_fast_based_on_fcgf_feature_matching(pcd0, pcd1, feats0, feats1,
distance_threshold):
assert feats0.shape[1] == feats1.shape[1]

source_feat = o3d.registration.Feature()
source_feat.resize(feats0.shape[1], len(feats0))
source_feat.data = feats0.astype('d').transpose()

target_feat = o3d.registration.Feature()
target_feat.resize(feats1.shape[1], len(feats1))
target_feat.data = feats1.astype('d').transpose()

result = o3d.registration.registration_fast_based_on_feature_matching(
pcd0, pcd1, source_feat, target_feat,
o3d.registration.FastGlobalRegistrationOption(maximum_correspondence_distance=distance_threshold))

return result.transformation

Which, as you can see, is very similar to the code you already provided (except for Fast instead of RANSAC).

Then, inside the register function of deep_global_registration I call:
pcd0 = make_open3d_point_cloud(xyz0)
pcd1 = make_open3d_point_cloud(xyz1)
T = self.safeguard_registration(pcd0,
pcd1,
corres_idx0,
corres_idx1,
feats0,
feats1,
self.voxel_size,
num_iterations=self.config.safeguard_num_iterations)

Everything else is untouched with respect with your code.
Unfortunately I am having very poor results: the overall accuracy for instance is around 5%.
The version of 3DMatch should be ok, in fact I see the same results as yours with DGR and even greater results when runnin RANSAC based on correspondences instead of features matching.
Do you have any idea about what could be the issue? Can you tell me which implementation of FAST did you use or which parameters?

Thank you very much for your time,
Marco

@lombardm
Copy link
Author

Nevermind, I think I discovered the error. In core/deep_global_registration when is called the method self.safeguard_registration, they are currently passed feats0 and feats1 as features, instead of fcgf_feats0 and fcgf_feats1. I close this issue ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant