COCO api evaluation for subset of classes
Asked Answered
A

2

10

I'm using the python coco api to run evaluation for object detection. I have two files, a ground truth json, and a results json. The coco notebook demo only shows running eval for all classes. How can I run it for only one specific class or a subset of classes? Currently I'm doing this:

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()
Acme answered 21/5, 2019 at 23:1 Comment(0)
M
17

I refer to this page (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() 

Additionaly, I modified cocoapi/PythonAPI/pycocotools/cocoeval.py to calculate AP for each category.
https://github.com/kimyoon-young/centerNet-deep-sort/blob/b694fc52f880dfbba481d43a7d5284a29f386ca7/tools/cocoeval.py#L458-L464

The result is like below.

category : 0 : 0.410733757610904 #person AP
category : 1 : 0.20226150054237374 #bird AP
....
category : 79 : 0.04993736566987926
(all categories) mAP : 0.27999824034118914 # my results
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.280 #original

Mabe answered 4/6, 2019 at 11:16 Comment(0)
M
2

In lines 458-464 of https://github.com/kimyoon-young/centerNet-deep-sort/blob/master/tools/cocoeval.py, to support a flexible number of categories, you can replace line 458 (num_classes = 80) with

num_classes = len(p.catIds)
Mena answered 27/7, 2020 at 14:55 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.