COCO API评估类的子集

时间:2019-05-21 23:01:04

标签: python subset mscoco pycocotools

我正在使用python coco api进行评估以进行对象检测。我有两个文件,一个基本事实json和一个结果json。 coco notebook demo仅显示所有类的运行评估。如何仅对一个特定类或一类类运行它?目前,我正在这样做:

from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval

annType = 'bbox'

cocoGt=COCO(gt_json)
cocoDt=cocoGt.loadRes(results_json)

imgIds=sorted(cocoGt.getImgIds())

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

2 个答案:

答案 0 :(得分:1)

我引用此页面(http://www.programmersought.com/article/3065285708/

cocoEval = COCOeval(cocoGt,cocoDt,annType)
coco_eval.params.catIds = [1] #person id : 1
cocoEval.params.imgIds = imgIds   
cocoEval.evaluate()  
cocoEval.accumulate()  
cocoEval.summarize() 

此外,我修改了cocoapi / PythonAPI / pycocotools / cocoeval.py以计算每个类别的AP。
https://github.com/kimyoon-young/centerNet-deep-sort/blob/master/tools/cocoeval.py

中的第458-464行

结果如下。

类别:0:0.410733757610904 #person AP
类别:1:0.20226150054237374 #bird AP
            ....
类别:79:0.04993736566987926
(所有类别)mAP:0.27999824034118914#我的结果
平均精度(AP)@ [IoU = 0.50:0.95 |面积=全部| maxDets = 100] = 0.280#原始

答案 1 :(得分:0)

https://github.com/kimyoon-young/centerNet-deep-sort/blob/master/tools/cocoeval.py的第458-464行中,为了支持多种类别,您可以将458行(num_classes = 80)替换为

num_classes = len(p.catIds)