-
Notifications
You must be signed in to change notification settings - Fork 64
test code #58
Copy link
Copy link
Open
Description
@limhoyeon Thank you very much for the author's open source, which has been cited. However, I have some doubts about the testing code.
for ins_label_name in ins_label_names:
Only the average accuracy of the detected teeth was calculated. Isn't it strange that missed teeth are not included in the calculation.
def cal_metric(gt_labels, pred_sem_labels, pred_ins_labels, is_half=None, vertices=None):
ins_label_names = np.unique(pred_ins_labels)
ins_label_names = ins_label_names[ins_label_names != 0]
IOU = 0
F1 = 0
ACC = 0
SEM_ACC = 0
IOU_arr = []
for ins_label_name in ins_label_names:
#instance iou
ins_label_name = int(ins_label_name)
ins_mask = pred_ins_labels==ins_label_name
gt_label_uniqs, gt_label_counts = np.unique(gt_labels[ins_mask], return_counts=True)
gt_label_name = gt_label_uniqs[np.argmax(gt_label_counts)]
gt_mask = gt_labels == gt_label_name
TP = np.count_nonzero(gt_mask * ins_mask)
FN = np.count_nonzero(gt_mask * np.invert(ins_mask))
FP = np.count_nonzero(np.invert(gt_mask) * ins_mask)
TN = np.count_nonzero(np.invert(gt_mask) * np.invert(ins_mask))
ACC += (TP + TN) / (FP + TP + FN + TN)
precision = TP / (TP+FP)
recall = TP / (TP+FN)
F1 += 2*(precision*recall) / (precision + recall)
IOU += TP / (FP+TP+FN)
IOU_arr.append(TP / (FP+TP+FN))
#segmentation accuracy
pred_sem_label_uniqs, pred_sem_label_counts = np.unique(pred_sem_labels[ins_mask], return_counts=True)
sem_label_name = pred_sem_label_uniqs[np.argmax(pred_sem_label_counts)]
if is_half:
if sem_label_name == gt_label_name or sem_label_name + 8 == gt_label_name:
SEM_ACC +=1
else:
if sem_label_name == gt_label_name:
SEM_ACC +=1
#print("gt is", gt_label_name, "pred is", sem_label_name, sem_label_name == gt_label_name)
return IOU/len(ins_label_names), F1/len(ins_label_names), ACC/len(ins_label_names), SEM_ACC/len(ins_label_names), IOU_arr
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels