def summarize()

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()