Skip to content

Instantly share code, notes, and snippets.

@zubair-irshad
Last active August 10, 2022 03:41
Show Gist options
  • Save zubair-irshad/584e1b743b587848cb1c667f51b16697 to your computer and use it in GitHub Desktop.
Save zubair-irshad/584e1b743b587848cb1c667f51b16697 to your computer and use it in GitHub Desktop.
def get_aligned_ids_nocs(masks, output_indices, class_ids, class_ids_predicted, scores, scores_predicted, depth):
mask_out = []
for p in range(masks.shape[-1]):
mask = np.logical_and(masks[:, :, p], depth > 0)
mask_out.append(mask)
mask_out = np.array(mask_out)
index_centers = []
for m in range(mask_out.shape[0]):
pos = np.where(mask_out[m,:,:])
center_x = np.average(pos[0])
center_y = np.average(pos[1])
index_centers.append([center_x, center_y])
new_masks = []
new_ids = []
new_scores = []
index_centers = np.array(index_centers)
if np.any(np.isnan(index_centers)):
index_centers = index_centers[~np.any(np.isnan(index_centers), axis=1)]
mask_out = np.array(mask_out)
for l in range(len(output_indices)):
point = output_indices[l]
if len(output_indices) == 0:
continue
distances = np.linalg.norm(index_centers-point, axis=1)
min_index = np.argmin(distances)
if distances[min_index]<28:
new_masks.append(mask_out[min_index, :,:])
new_ids.append(class_ids[min_index])
new_scores.append(scores[min_index])
else:
new_masks.append(None)
new_ids.append(class_ids_predicted[l])
new_scores.append(scores_predicted[l])
masks = np.array(new_masks)
class_ids = np.array(new_ids)
scores = np.array(new_scores)
return masks, class_ids, scores
def get_ids_from_seg(seg_output, output_indices):
category_seg_output = np.ascontiguousarray(seg_output.seg_pred.cpu().numpy())
category_seg_output = np.argmax(category_seg_output[0], axis=0)
class_ids_predicted = []
for k in range(len(output_indices)):
center = output_indices[k]
class_ids_predicted.append(category_seg_output[center[0], center[1]])
return class_ids_predicted
#Usage:
class_ids = np.array(mrcnn_result['class_ids'])
#We use this incase our model predicts an erroneous center and mask rcnn has no class id for it so our model is penalized for a wrong detection here.
class_ids_predicted = get_ids_from_seg(seg_output, output_indices)
scores = np.array(mrcnn_result['scores'])
# scores_out is scores from compute_pointclouds_and_poses
depth = np.array(depth, dtype=np.float32)*255.0
masks, class_ids, scores = get_aligned_masks_nocs(mrcnn_result['masks'], output_indices, class_ids, class_ids_predicted, scores, scores_out, depth)
result['pred_class_ids'] = class_ids
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment