7

我正在使用 python coco api 来运行对象检测的评估。我有两个文件,一个基本事实 json 和一个结果 json。coco notebook 演示只显示所有类的运行评估。我怎样才能只为一个特定的类或类的子集运行它?目前我正在这样做:

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()
4

2 回答 2

12

我参考这个页面(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/b694fc52f880dfbba481d43a7d5284a29f386ca7/tools/cocoeval.py#L458-L464

结果如下所示。

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

于 2019-06-04T11:16:32.793 回答
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)
于 2020-07-27T14:55:04.283 回答