File size: 2,120 Bytes
46c9d1c 8b3b3ef 999037c fa09d11 999037c 46c9d1c 999037c 8b3b3ef 999037c 0efc848 999037c 0efc848 999037c fa09d11 999037c 8b3b3ef fa09d11 999037c fa09d11 999037c fa09d11 999037c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import contextlib
import io
from typing import Dict
import numpy as np
from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval
from rich.table import Table
def calculate_ap(coco_gt: COCO, pd_path):
with contextlib.redirect_stdout(io.StringIO()):
coco_dt = coco_gt.loadRes(pd_path)
coco_eval = COCOeval(coco_gt, coco_dt, "bbox")
coco_eval.evaluate()
coco_eval.accumulate()
coco_eval.summarize()
return coco_eval.stats
def make_ap_table(score: Dict[str, float], past_result=[], max_result=None, epoch=-1):
ap_table = Table()
ap_table.add_column("Epoch", justify="center", style="white", width=5)
ap_table.add_column("Avg. Precision", justify="left", style="cyan")
ap_table.add_column("%", justify="right", style="green", width=5)
ap_table.add_column("Avg. Recall", justify="left", style="cyan")
ap_table.add_column("%", justify="right", style="green", width=5)
for eps, (ap_name1, ap_color1, ap_value1, ap_name2, ap_color2, ap_value2) in past_result:
ap_table.add_row(f"{eps: 3d}", ap_name1, f"{ap_color1}{ap_value1:.2f}", ap_name2, f"{ap_color2}{ap_value2:.2f}")
if past_result:
ap_table.add_row()
color = np.where(max_result <= score, "[green]", "[red]")
this_ap = ("AP @ .5:.95", color[0], score[0], "AP @ .5", color[1], score[1])
metrics = [
("AP @ .5:.95", color[0], score[0], "AR maxDets 1", color[6], score[6]),
("AP @ .5", color[1], score[1], "AR maxDets 10", color[7], score[7]),
("AP @ .75", color[2], score[2], "AR maxDets 100", color[8], score[8]),
("AP (small)", color[3], score[3], "AR (small)", color[9], score[9]),
("AP (medium)", color[4], score[4], "AR (medium)", color[10], score[10]),
("AP (large)", color[5], score[5], "AR (large)", color[11], score[11]),
]
for ap_name, ap_color, ap_value, ar_name, ar_color, ar_value in metrics:
ap_table.add_row(f"{epoch: 3d}", ap_name, f"{ap_color}{ap_value:.2f}", ar_name, f"{ar_color}{ar_value:.2f}")
return ap_table, this_ap
|