Hi, @WangYueFt Thanks for sharing your code! In your paper, you claim the method to handle partial-to-partial point set registration. But under your setting, especially I checked your dataloader, it seems you only sample one point, and get the nearest 768 points for both the source and target shape. In my opinion, this will generate two point sets with large overlap, especially you pick the point from a very large distance from the shape (random_p1 = np.random.random(size=(1, 3)) + np.array([[500, 500, 500]]) * np.random.choice([1, -1, 1, -1])). I visualized some pairs and found the source point sets and target points have a large part of overlaps.
When I generate source and target point sets with two different samplings, i.e., random_p2 is picked instead of 'random_p2 = random_p1', I got the following performance, which falls a lot behind the one you report in the paper.
exp1: identical sampling for source and target:
A->B:: Stage: best_test, Epoch: 58, Loss: 0.018334, Feature_alignment_loss: 0.001463, Cycle_consistency_loss: 0.002618, Scale_consensus_loss: 0.000000, Rot_MSE: 9.122054, Rot_RMSE: 3.020274, Rot_MAE: 1.405421, Rot_R2: 0.945782, Trans_MSE: 0.000274, Trans_RMSE: 0.016538, Trans_MAE: 0.010954, Trans_R2: 0.996694
exp2: independent point sampling for each shape
A->B:: Stage: best_test, Epoch: 94, Loss: 0.036311, Feature_alignment_loss: 0.003807, Cycle_consistency_loss: 0.002531, Scale_consensus_loss: 0.000000, Rot_MSE: 32.466419, Rot_RMSE: 5.697931, Rot_MAE: 3.089283, Rot_R2: 0.807019, Trans_MSE: 0.001563, Trans_RMSE: 0.039535, Trans_MAE: 0.026601, Trans_R2: 0.981015