zoukankan      html  css  js  c++  java
  • COCOeval接口使用

    COCOeval类简介

    class COCOeval:
        # Interface for evaluating detection on the Microsoft COCO dataset.
        #
        # The usage for CocoEval is as follows:
        #  cocoGt=..., cocoDt=...       # load dataset and results
        #  E = CocoEval(cocoGt,cocoDt); # initialize CocoEval object
        #  E.params.recThrs = ...;      # set parameters as desired
        #  E.evaluate();                # run per image evaluation
        #  E.accumulate();              # accumulate per image results
        #  E.summarize();               # display summary metrics of results
        # For example usage see evalDemo.m and http://mscoco.org/.
        #
        # The evaluation parameters are as follows (defaults in brackets):
        #  imgIds     - [all] N img ids to use for evaluation
        #  catIds     - [all] K cat ids to use for evaluation
        #  iouThrs    - [.5:.05:.95] T=10 IoU thresholds for evaluation
        #  recThrs    - [0:.01:1] R=101 recall thresholds for evaluation
        #  areaRng    - [...] A=4 object area ranges for evaluation
        #  maxDets    - [1 10 100] M=3 thresholds on max detections per image
        #  iouType    - ['segm'] set iouType to 'segm', 'bbox' or 'keypoints'
        #  iouType replaced the now DEPRECATED useSegm parameter.
        #  useCats    - [1] if true use category labels for evaluation
        # Note: if useCats=0 category labels are ignored as in proposal scoring.
        # Note: multiple areaRngs [Ax2] and maxDets [Mx1] can be specified.
        #
        # evaluate(): evaluates detections on every image and every category and
        # concats the results into the "evalImgs" with fields:
        #  dtIds      - [1xD] id for each of the D detections (dt)
        #  gtIds      - [1xG] id for each of the G ground truths (gt)
        #  dtMatches  - [TxD] matching gt id at each IoU or 0
        #  gtMatches  - [TxG] matching dt id at each IoU or 0
        #  dtScores   - [1xD] confidence of each dt
        #  gtIgnore   - [1xG] ignore flag for each gt
        #  dtIgnore   - [TxD] ignore flag for each dt at each IoU
        #
        # accumulate(): accumulates the per-image, per-category evaluation
        # results in "evalImgs" into the dictionary "eval" with fields:
        #  params     - parameters used for evaluation
        #  date       - date evaluation was performed
        #  counts     - [T,R,K,A,M] parameter dimensions (see above)
        #  precision  - [TxRxKxAxM] precision for every evaluation setting
        #  recall     - [TxKxAxM] max recall for every evaluation setting
        # Note: precision and recall==-1 for settings with no gt objects.
        #
        # See also coco, mask, pycocoDemo, pycocoEvalDemo
        #
        # Microsoft COCO Toolbox.      version 2.0
        # Data, paper, and tutorials available at:  http://mscoco.org/
        # Code written by Piotr Dollar and Tsung-Yi Lin, 2015.
        # Licensed under the Simplified BSD License [see coco/license.txt]
        def __init__(self, cocoGt=None, cocoDt=None, iouType='segm'):
            '''
            Initialize CocoEval using coco APIs for gt and dt
            :param cocoGt: coco object with ground truth annotations
            :param cocoDt: coco object with detection results
            :return: None
            '''
            if not iouType:
                print('iouType not specified. use default iouType segm')
            self.cocoGt   = cocoGt              # ground truth COCO API
            self.cocoDt   = cocoDt              # detections COCO API
            self.evalImgs = defaultdict(list)   # per-image per-category evaluation results [KxAxI] elements
            self.eval     = {}                  # accumulated evaluation results
            self._gts = defaultdict(list)       # gt for evaluation
            self._dts = defaultdict(list)       # dt for evaluation
            self.params = Params(iouType=iouType) # parameters
            self._paramsEval = {}               # parameters for evaluation
            self.stats = []                     # result summarization
            self.ious = {}                      # ious between all gts and dts
            if not cocoGt is None:
                self.params.imgIds = sorted(cocoGt.getImgIds())
                self.params.catIds = sorted(cocoGt.getCatIds())

    调用方法如下

    # running evaluation
    cocoEval = COCOeval(cocoGt,cocoDt,annType)
    cocoEval.evaluate()
    cocoEval.accumulate()
    cocoEval.summarize()

    cocoGt和cocoDt为COCO对象,初始化函数参数为标注json文件

    class COCO:
        def __init__(self, annotation_file=None):
            """
            Constructor of Microsoft COCO helper class for reading and visualizing annotations.
            :param annotation_file (str): location of annotation file
            :param image_folder (str): location to the folder that hosts images.
            :return:
            """
            # load dataset
            self.dataset,self.anns,self.cats,self.imgs = dict(),dict(),dict(),dict()
            self.imgToAnns, self.catToImgs = defaultdict(list), defaultdict(list)
            if not annotation_file == None:
                print('loading annotations into memory...')
                tic = time.time()
                dataset = json.load(open(annotation_file, 'r'))
                assert type(dataset)==dict, 'annotation file format {} not supported'.format(type(dataset))
                print('Done (t={:0.2f}s)'.format(time.time()- tic))
                self.dataset = dataset
                self.createIndex()
  • 相关阅读:
    深入浅出 Java Concurrency (7): 锁机制 part 2 AQS[转]
    深入浅出 Java Concurrency (6): 锁机制 part 1[转]
    深入浅出 Java Concurrency (5): 原子操作 part 4[转]
    深入浅出 Java Concurrency (4): 原子操作 part 3 指令重排序与happens-before法则[转]
    深入浅出 Java Concurrency (3): 原子操作 part 2[转]
    深入浅出 Java Concurrency (2): 原子操作 part 1[转]
    深入浅出 Java Concurrency (1) : J.U.C的整体认识[转]
    深入浅出 Java Concurrency
    读书笔记--模式与重构 目录
    SpringMVC,3种不同的URL路由配置方法 [转]
  • 原文地址:https://www.cnblogs.com/guo-xiang/p/11194697.html
Copyright © 2011-2022 走看看