Compute and display summary metrics for evaluation results given a custom value for max_dets_per_image
(self)
| 638 | """ |
| 639 | |
| 640 | def summarize(self): |
| 641 | """ |
| 642 | Compute and display summary metrics for evaluation results given |
| 643 | a custom value for max_dets_per_image |
| 644 | """ |
| 645 | |
| 646 | def _summarize(ap=1, iouThr=None, areaRng="all", maxDets=100): |
| 647 | p = self.params |
| 648 | iStr = " {:<18} {} @[ IoU={:<9} | area={:>6s} | maxDets={:>3d} ] = {:0.3f}" |
| 649 | titleStr = "Average Precision" if ap == 1 else "Average Recall" |
| 650 | typeStr = "(AP)" if ap == 1 else "(AR)" |
| 651 | iouStr = ( |
| 652 | "{:0.2f}:{:0.2f}".format(p.iouThrs[0], p.iouThrs[-1]) |
| 653 | if iouThr is None |
| 654 | else "{:0.2f}".format(iouThr) |
| 655 | ) |
| 656 | |
| 657 | aind = [i for i, aRng in enumerate(p.areaRngLbl) if aRng == areaRng] |
| 658 | mind = [i for i, mDet in enumerate(p.maxDets) if mDet == maxDets] |
| 659 | if ap == 1: |
| 660 | # dimension of precision: [TxRxKxAxM] |
| 661 | s = self.eval["precision"] |
| 662 | # IoU |
| 663 | if iouThr is not None: |
| 664 | t = np.where(iouThr == p.iouThrs)[0] |
| 665 | s = s[t] |
| 666 | s = s[:, :, :, aind, mind] |
| 667 | else: |
| 668 | # dimension of recall: [TxKxAxM] |
| 669 | s = self.eval["recall"] |
| 670 | if iouThr is not None: |
| 671 | t = np.where(iouThr == p.iouThrs)[0] |
| 672 | s = s[t] |
| 673 | s = s[:, :, aind, mind] |
| 674 | if len(s[s > -1]) == 0: |
| 675 | mean_s = -1 |
| 676 | else: |
| 677 | mean_s = np.mean(s[s > -1]) |
| 678 | print(iStr.format(titleStr, typeStr, iouStr, areaRng, maxDets, mean_s)) |
| 679 | return mean_s |
| 680 | |
| 681 | def _summarizeDets(): |
| 682 | stats = np.zeros((12,)) |
| 683 | # Evaluate AP using the custom limit on maximum detections per image |
| 684 | stats[0] = _summarize(1, maxDets=self.params.maxDets[2]) |
| 685 | stats[1] = _summarize(1, iouThr=0.5, maxDets=self.params.maxDets[2]) |
| 686 | stats[2] = _summarize(1, iouThr=0.75, maxDets=self.params.maxDets[2]) |
| 687 | stats[3] = _summarize(1, areaRng="small", maxDets=self.params.maxDets[2]) |
| 688 | stats[4] = _summarize(1, areaRng="medium", maxDets=self.params.maxDets[2]) |
| 689 | stats[5] = _summarize(1, areaRng="large", maxDets=self.params.maxDets[2]) |
| 690 | stats[6] = _summarize(0, maxDets=self.params.maxDets[0]) |
| 691 | stats[7] = _summarize(0, maxDets=self.params.maxDets[1]) |
| 692 | stats[8] = _summarize(0, maxDets=self.params.maxDets[2]) |
| 693 | stats[9] = _summarize(0, areaRng="small", maxDets=self.params.maxDets[2]) |
| 694 | stats[10] = _summarize(0, areaRng="medium", maxDets=self.params.maxDets[2]) |
| 695 | stats[11] = _summarize(0, areaRng="large", maxDets=self.params.maxDets[2]) |
| 696 | return stats |
| 697 |
no outgoing calls