In the models/backbone_module.py, you select the first 1024 out of 2048 sa1_inds as fp2_inds. I can understand that the intention behind this is to obtain the indices of these 1024 seed points in the entire point cloud, in order to participate in the loss calculation in the function compute_points_obj_cls_loss_hard_topk.
However, directly selecting the first 1024 out of 2048 sa1_inds does not correspond one-to-one with fp2_xyz. This mismatch would cause euclidean_dist1 and object_assignment_one_hot variables in the function compute_points_obj_cls_loss_hard_topk to not be aligned one-to-one. Doesn't this introduce an error in the supervision signal for KPS?
models/backbone_module.py:
# --------- 2 FEATURE UPSAMPLING LAYERS --------
features = self.fp1(end_points['sa3_xyz'], end_points['sa4_xyz'], end_points['sa3_features'],
end_points['sa4_features'])
features = self.fp2(end_points['sa2_xyz'], end_points['sa3_xyz'], end_points['sa2_features'], features)
end_points['fp2_features'] = features
end_points['fp2_xyz'] = end_points['sa2_xyz']
num_seed = end_points['fp2_xyz'].shape[1]
end_points['fp2_inds'] = end_points['sa1_inds'][:, 0:num_seed] # indices among the entire input point clouds
return end_points
In the models/backbone_module.py, you select the first 1024 out of 2048
sa1_inds
asfp2_inds
. I can understand that the intention behind this is to obtain the indices of these 1024 seed points in the entire point cloud, in order to participate in the loss calculation in the functioncompute_points_obj_cls_loss_hard_topk
.However, directly selecting the first 1024 out of 2048
sa1_inds
does not correspond one-to-one withfp2_xyz
. This mismatch would causeeuclidean_dist1
andobject_assignment_one_hot variables
in the functioncompute_points_obj_cls_loss_hard_topk
to not be aligned one-to-one. Doesn't this introduce an error in the supervision signal for KPS?models/backbone_module.py:
models/loss_helper.py: