in vision/amazon-sagemaker-pytorch-detectron2/container_training/sku-110k/evaluation/coco.py [0:0]
def summarize(self):
"""Compute and display summary metrics for evaluation results"""
def _summarize(use_ap: bool, iou_thr=None, area_rng="all", max_dets=100):
params = self.params
out_str = (
" {:<18} {} @[ IoU={:<9} | area={:>6s} | maxDets={:>3d} ] = {:0.3f}"
)
title_str = "Average Precision" if use_ap else "Average Recall"
type_str = "(AP)" if use_ap else "(AR)"
iou_str = (
"{:0.2f}:{:0.2f}".format(params.iouThrs[0], params.iouThrs[-1])
if iou_thr is None
else "{:0.2f}".format(iou_thr)
)
aind = [i for i, aRng in enumerate(params.areaRngLbl) if aRng == area_rng]
mind = [i for i, mDet in enumerate(params.maxDets) if mDet == max_dets]
if use_ap:
# dimension of precision: [TxRxKxAxM]
metric_val = self.eval["precision"]
# IoU
if iou_thr is not None:
metric_id = np.where(iou_thr == params.iouThrs)[0]
metric_val = metric_val[metric_id]
metric_val = metric_val[:, :, :, aind, mind]
else:
# dimension of recall: [TxKxAxM]
metric_val = self.eval["recall"]
if iou_thr is not None:
metric_id = np.where(iou_thr == params.iouThrs)[0]
metric_val = metric_val[metric_id]
metric_val = metric_val[:, :, aind, mind]
if len(metric_val[metric_val > -1]) == 0:
mean_s = -1
else:
mean_s = np.mean(metric_val[metric_val > -1])
print(
out_str.format(title_str, type_str, iou_str, area_rng, max_dets, mean_s)
)
return mean_s
def _summarize_detections():
stats = np.zeros((12,))
stats[0] = _summarize(True, max_dets=self.params.maxDets[0])
stats[1] = _summarize(True, iou_thr=0.5, max_dets=self.params.maxDets[0])
stats[2] = _summarize(True, iou_thr=0.75, max_dets=self.params.maxDets[0])
stats[3] = _summarize(
True, area_rng="small", max_dets=self.params.maxDets[0]
)
stats[4] = _summarize(
True, area_rng="medium", max_dets=self.params.maxDets[0]
)
stats[5] = _summarize(
True, area_rng="large", max_dets=self.params.maxDets[0]
)
stats[6] = _summarize(False, max_dets=self.params.maxDets[0])
stats[9] = _summarize(
False, area_rng="small", max_dets=self.params.maxDets[0]
)
stats[10] = _summarize(
False, area_rng="medium", max_dets=self.params.maxDets[0]
)
stats[11] = _summarize(
False, area_rng="large", max_dets=self.params.maxDets[0]
)
return stats
if not self.eval:
raise Exception("Please run accumulate() first")
if self.params.iouType != "bbox":
raise ValueError(
f"{type(self).__name__} supports object detection evaluation only"
)
self.stats = _summarize_detections()