in detic/evaluation/oideval.py [0:0]
def _evaluate_predictions_on_oid(
oid_gt, oid_results_path, eval_seg=False,
class_names=None):
logger = logging.getLogger(__name__)
metrics = ["AP50", "AP50_expand"]
results = {}
oid_eval = OIDEval(oid_gt, oid_results_path, 'bbox', expand_pred_label=False)
oid_eval.run()
oid_eval.print_results()
results["AP50"] = oid_eval.get_results()["AP50"]
if eval_seg:
oid_eval = OIDEval(oid_gt, oid_results_path, 'segm', expand_pred_label=False)
oid_eval.run()
oid_eval.print_results()
results["AP50_segm"] = oid_eval.get_results()["AP50"]
else:
oid_eval = OIDEval(oid_gt, oid_results_path, 'bbox', expand_pred_label=True)
oid_eval.run()
oid_eval.print_results()
results["AP50_expand"] = oid_eval.get_results()["AP50"]
mAP = np.zeros(len(class_names)) - 1
precisions = oid_eval.eval['precision']
assert len(class_names) == precisions.shape[2]
results_per_category = []
id2apiid = sorted(oid_gt.get_cat_ids())
inst_aware_ap, inst_count = 0, 0
for idx, name in enumerate(class_names):
precision = precisions[:, :, idx, 0]
precision = precision[precision > -1]
ap = np.mean(precision) if precision.size else float("nan")
inst_num = len(oid_gt.get_ann_ids(cat_ids=[id2apiid[idx]]))
if inst_num > 0:
results_per_category.append(("{} {}".format(
name.replace(' ', '_'),
inst_num if inst_num < 1000 else '{:.1f}k'.format(inst_num / 1000)),
float(ap * 100)))
inst_aware_ap += inst_num * ap
inst_count += inst_num
mAP[idx] = ap
# logger.info("{} {} {:.2f}".format(name, inst_num, ap * 100))
inst_aware_ap = inst_aware_ap * 100 / inst_count
N_COLS = min(6, len(results_per_category) * 2)
results_flatten = list(itertools.chain(*results_per_category))
results_2d = itertools.zip_longest(*[results_flatten[i::N_COLS] for i in range(N_COLS)])
table = tabulate(
results_2d,
tablefmt="pipe",
floatfmt=".3f",
headers=["category", "AP"] * (N_COLS // 2),
numalign="left",
)
logger.info("Per-category {} AP: \n".format('bbox') + table)
logger.info("Instance-aware {} AP: {:.4f}".format('bbox', inst_aware_ap))
logger.info("Evaluation results for bbox: \n" + \
create_small_table(results))
return results, mAP