in detic/evaluation/oideval.py [0:0]
def __init__(
self, lvis_gt, lvis_dt, iou_type="bbox", expand_pred_label=False,
oid_hierarchy_path='./datasets/oid/annotations/challenge-2019-label500-hierarchy.json'):
"""Constructor for OIDEval.
Args:
lvis_gt (LVIS class instance, or str containing path of annotation file)
lvis_dt (LVISResult class instance, or str containing path of result file,
or list of dict)
iou_type (str): segm or bbox evaluation
"""
self.logger = logging.getLogger(__name__)
if iou_type not in ["bbox", "segm"]:
raise ValueError("iou_type: {} is not supported.".format(iou_type))
if isinstance(lvis_gt, LVIS):
self.lvis_gt = lvis_gt
elif isinstance(lvis_gt, str):
self.lvis_gt = LVIS(lvis_gt)
else:
raise TypeError("Unsupported type {} of lvis_gt.".format(lvis_gt))
if isinstance(lvis_dt, LVISResults):
self.lvis_dt = lvis_dt
elif isinstance(lvis_dt, (str, list)):
# self.lvis_dt = LVISResults(self.lvis_gt, lvis_dt, max_dets=-1)
self.lvis_dt = LVISResults(self.lvis_gt, lvis_dt)
else:
raise TypeError("Unsupported type {} of lvis_dt.".format(lvis_dt))
if expand_pred_label:
oid_hierarchy = json.load(open(oid_hierarchy_path, 'r'))
cat_info = self.lvis_gt.dataset['categories']
freebase2id = {x['freebase_id']: x['id'] for x in cat_info}
id2freebase = {x['id']: x['freebase_id'] for x in cat_info}
id2name = {x['id']: x['name'] for x in cat_info}
fas = defaultdict(set)
def dfs(hierarchy, cur_id):
all_childs = set()
all_keyed_child = {}
if 'Subcategory' in hierarchy:
for x in hierarchy['Subcategory']:
childs = dfs(x, freebase2id[x['LabelName']])
all_childs.update(childs)
if cur_id != -1:
for c in all_childs:
fas[c].add(cur_id)
all_childs.add(cur_id)
return all_childs
dfs(oid_hierarchy, -1)
expanded_pred = []
id_count = 0
for d in self.lvis_dt.dataset['annotations']:
cur_id = d['category_id']
ids = [cur_id] + [x for x in fas[cur_id]]
for cat_id in ids:
new_box = copy.deepcopy(d)
id_count = id_count + 1
new_box['id'] = id_count
new_box['category_id'] = cat_id
expanded_pred.append(new_box)
print('Expanding original {} preds to {} preds'.format(
len(self.lvis_dt.dataset['annotations']),
len(expanded_pred)
))
self.lvis_dt.dataset['annotations'] = expanded_pred
self.lvis_dt._create_index()
# per-image per-category evaluation results
self.eval_imgs = defaultdict(list)
self.eval = {} # accumulated evaluation results
self._gts = defaultdict(list) # gt for evaluation
self._dts = defaultdict(list) # dt for evaluation
self.params = Params(iou_type=iou_type) # parameters
self.results = OrderedDict()
self.ious = {} # ious between all gts and dts
self.params.img_ids = sorted(self.lvis_gt.get_img_ids())
self.params.cat_ids = sorted(self.lvis_gt.get_cat_ids())