|
|
|
import numpy as np |
|
import torch |
|
|
|
from mmdet3d.evaluation import instance_seg_eval |
|
|
|
|
|
def test_instance_seg_eval(): |
|
valid_class_ids = (3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 24, 28, 33, 34, |
|
36, 39) |
|
class_labels = ('cabinet', 'bed', 'chair', 'sofa', 'table', 'door', |
|
'window', 'bookshelf', 'picture', 'counter', 'desk', |
|
'curtain', 'refrigerator', 'showercurtrain', 'toilet', |
|
'sink', 'bathtub', 'garbagebin') |
|
n_points_list = [3300, 3000] |
|
gt_labels_list = [[0, 0, 0, 0, 0, 0, 14, 14, 2, 1], |
|
[13, 13, 2, 1, 3, 3, 0, 0, 0]] |
|
gt_instance_masks = [] |
|
gt_semantic_masks = [] |
|
pred_instance_masks = [] |
|
pred_instance_labels = [] |
|
pred_instance_scores = [] |
|
for n_points, gt_labels in zip(n_points_list, gt_labels_list): |
|
gt_instance_mask = np.ones(n_points, dtype=np.int64) * -1 |
|
gt_semantic_mask = np.ones(n_points, dtype=np.int64) * -1 |
|
pred_instance_mask = np.ones(n_points, dtype=np.int64) * -1 |
|
labels = [] |
|
scores = [] |
|
for i, gt_label in enumerate(gt_labels): |
|
begin = i * 300 |
|
end = begin + 300 |
|
gt_instance_mask[begin:end] = i |
|
gt_semantic_mask[begin:end] = gt_label |
|
pred_instance_mask[begin:end] = i |
|
labels.append(gt_label) |
|
scores.append(.99) |
|
gt_instance_masks.append(torch.tensor(gt_instance_mask)) |
|
gt_semantic_masks.append(torch.tensor(gt_semantic_mask)) |
|
pred_instance_masks.append(torch.tensor(pred_instance_mask)) |
|
pred_instance_labels.append(torch.tensor(labels)) |
|
pred_instance_scores.append(torch.tensor(scores)) |
|
|
|
ret_value = instance_seg_eval( |
|
gt_semantic_masks=gt_semantic_masks, |
|
gt_instance_masks=gt_instance_masks, |
|
pred_instance_masks=pred_instance_masks, |
|
pred_instance_labels=pred_instance_labels, |
|
pred_instance_scores=pred_instance_scores, |
|
valid_class_ids=valid_class_ids, |
|
class_labels=class_labels) |
|
for label in [ |
|
'cabinet', 'bed', 'chair', 'sofa', 'showercurtrain', 'toilet' |
|
]: |
|
metrics = ret_value['classes'][label] |
|
assert metrics['ap'] == 1.0 |
|
assert metrics['ap50%'] == 1.0 |
|
assert metrics['ap25%'] == 1.0 |
|
|
|
pred_instance_masks[1][2240:2700] = -1 |
|
pred_instance_masks[0][2700:3000] = 8 |
|
pred_instance_labels[0][9] = 2 |
|
ret_value = instance_seg_eval( |
|
gt_semantic_masks=gt_semantic_masks, |
|
gt_instance_masks=gt_instance_masks, |
|
pred_instance_masks=pred_instance_masks, |
|
pred_instance_labels=pred_instance_labels, |
|
pred_instance_scores=pred_instance_scores, |
|
valid_class_ids=valid_class_ids, |
|
class_labels=class_labels) |
|
assert abs(ret_value['classes']['cabinet']['ap50%'] - 0.72916) < 0.01 |
|
assert abs(ret_value['classes']['cabinet']['ap25%'] - 0.88888) < 0.01 |
|
assert abs(ret_value['classes']['bed']['ap50%'] - 0.5) < 0.01 |
|
assert abs(ret_value['classes']['bed']['ap25%'] - 0.5) < 0.01 |
|
assert abs(ret_value['classes']['chair']['ap50%'] - 0.375) < 0.01 |
|
assert abs(ret_value['classes']['chair']['ap25%'] - 1.0) < 0.01 |
|
|