Shortcuts

Source code for mmocr.core.evaluation.hmean_iou

# Copyright (c) OpenMMLab. All rights reserved.
import numpy as np

import mmocr.utils as utils
from . import utils as eval_utils


[docs]def eval_hmean_iou(pred_boxes, gt_boxes, gt_ignored_boxes, iou_thr=0.5, precision_thr=0.5): """Evaluate hmean of text detection using IOU standard. Args: pred_boxes (list[list[list[float]]]): Text boxes for an img list. Each box has 2k (>=8) values. gt_boxes (list[list[list[float]]]): Ground truth text boxes for an img list. Each box has 2k (>=8) values. gt_ignored_boxes (list[list[list[float]]]): Ignored ground truth text boxes for an img list. Each box has 2k (>=8) values. iou_thr (float): Iou threshold when one (gt_box, det_box) pair is matched. precision_thr (float): Precision threshold when one (gt_box, det_box) pair is matched. Returns: hmean (tuple[dict]): Tuple of dicts indicates the hmean for the dataset and all images. """ assert utils.is_3dlist(pred_boxes) assert utils.is_3dlist(gt_boxes) assert utils.is_3dlist(gt_ignored_boxes) assert 0 <= iou_thr <= 1 assert 0 <= precision_thr <= 1 img_num = len(pred_boxes) assert img_num == len(gt_boxes) assert img_num == len(gt_ignored_boxes) dataset_gt_num = 0 dataset_pred_num = 0 dataset_hit_num = 0 img_results = [] for i in range(img_num): gt = gt_boxes[i] gt_ignored = gt_ignored_boxes[i] pred = pred_boxes[i] gt_num = len(gt) gt_ignored_num = len(gt_ignored) pred_num = len(pred) hit_num = 0 # get gt polygons. gt_all = gt + gt_ignored gt_polys = [eval_utils.points2polygon(p) for p in gt_all] gt_ignored_index = [gt_num + i for i in range(len(gt_ignored))] gt_num = len(gt_polys) pred_polys, _, pred_ignored_index = eval_utils.ignore_pred( pred, gt_ignored_index, gt_polys, precision_thr) # match. if gt_num > 0 and pred_num > 0: sz = [gt_num, pred_num] iou_mat = np.zeros(sz) gt_hit = np.zeros(gt_num, np.int8) pred_hit = np.zeros(pred_num, np.int8) for gt_id in range(gt_num): for pred_id in range(pred_num): gt_pol = gt_polys[gt_id] det_pol = pred_polys[pred_id] iou_mat[gt_id, pred_id] = eval_utils.poly_iou(det_pol, gt_pol) for gt_id in range(gt_num): for pred_id in range(pred_num): if (gt_hit[gt_id] != 0 or pred_hit[pred_id] != 0 or gt_id in gt_ignored_index or pred_id in pred_ignored_index): continue if iou_mat[gt_id, pred_id] > iou_thr: gt_hit[gt_id] = 1 pred_hit[pred_id] = 1 hit_num += 1 gt_care_number = gt_num - gt_ignored_num pred_care_number = pred_num - len(pred_ignored_index) r, p, h = eval_utils.compute_hmean(hit_num, hit_num, gt_care_number, pred_care_number) img_results.append({'recall': r, 'precision': p, 'hmean': h}) dataset_hit_num += hit_num dataset_gt_num += gt_care_number dataset_pred_num += pred_care_number dataset_r, dataset_p, dataset_h = eval_utils.compute_hmean( dataset_hit_num, dataset_hit_num, dataset_gt_num, dataset_pred_num) dataset_results = { 'num_gts': dataset_gt_num, 'num_dets': dataset_pred_num, 'num_match': dataset_hit_num, 'recall': dataset_r, 'precision': dataset_p, 'hmean': dataset_h } return dataset_results, img_results
Read the Docs v: v0.4.0
Versions
latest
stable
v0.4.0
v0.3.0
v0.2.1
v0.2.0
v0.1.0
Downloads
On Read the Docs
Project Home
Builds

Free document hosting provided by Read the Docs.