# Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals import os import sys import numpy as np from ..data.source.voc_loader import pascalvoc_label from .coco_eval import bbox2out import logging logger = logging.getLogger(__name__) __all__ = [ 'bbox2out', 'get_category_info' ] def get_category_info(anno_file=None, with_background=True, use_default_label=False): if use_default_label or anno_file is None \ or not os.path.exists(anno_file): logger.info("Not found annotation file {}, load " "voc2012 categories.".format(anno_file)) return vocall_category_info(with_background) else: logger.info("Load categories from {}".format(anno_file)) return get_category_info_from_anno(anno_file, with_background) def get_category_info_from_anno(anno_file, with_background=True): """ Get class id to category id map and category id to category name map from annotation file. Args: anno_file (str): annotation file path with_background (bool, default True): whether load background as class 0. """ cats = [] with open(anno_file) as f: for line in f.readlines(): cats.append(line.strip()) if cats[0] != 'background' and with_background: cats.insert(0, 'background') if cats[0] == 'background' and not with_background: cats = cats[1:] clsid2catid = {i: i for i in range(len(cats))} catid2name = {i: name for i, name in enumerate(cats)} return clsid2catid, catid2name def vocall_category_info(with_background=True): """ Get class id to category id map and category id to category name map of mixup voc dataset Args: with_background (bool, default True): whether load background as class 0. """ label_map = pascalvoc_label(with_background) label_map = sorted(label_map.items(), key=lambda x: x[1]) cats = [l[0] for l in label_map] if with_background: cats.insert(0, 'background') clsid2catid = {i: i for i in range(len(cats))} catid2name = {i: name for i, name in enumerate(cats)} return clsid2catid, catid2name