【解决方案】COCO数据集分类别测试mAP


问题描述

coco数据集官方给出的pycocotools.cocoeval库只能测所有类别平均mAP;
需要修改自己的类别数量,并给出单类别mAP;
以下代码参考了这个仓库
可用于目标检测与实例分割计算单目标mAP。


解决方案

  • 调用代码
from pycocotools.cocoeval import COC0eval
from pycocotools.coco import COCO
gt = r"gt_path" #.json,为coco官方格式
dt = r"dt_path" #.json,为EvalCOCOMetric函数测试时自动保存的,具体看此函数简介
coco_gt = COCO(gt)
coco_dt = coco_gt.LoadRes (dt)
cocoEval = COCOevaL(coco_gt, coco_dt, 'segm') #可改'segm'(实例分割)为'bbox'(目标检测)
cocoEval.evaluate()
cocoEval.accumuLate()
cocoEval.summarize()
print (cocoEval. stats)
  • 修改cocoEval.summarize()中_summarize()函数,在print前添加以下代码,注意代码模块空格。
     #cacluate AP(average precision) for each category
     num_classes = len(p.catIds)
     avg_ap = 0.0
     if ap == 1:
         for i in range(0, num_classes):
             print('category : {0} : {1}'.format(i,np.mean(s[:,:,i,:])))
             avg_ap +=np.mean(s[:,:,i,:])
         print('(all categories) mAP : {}'.format(avg_ap / num_classes))

 print(iStr.format(titleStr, typeStr, iouStr, areaRng, maxDets, mean_s))
 return mean_s
  • 因为_summarizeDets()函数会调用_summarize()很多次,如果不需要每次都计算分类别的mAP,可以增添_summarize()参数。这里我给_summarize()函数加了个mAP的参,这样就只会输出我想要的某几次分类别mAP,即下图第三行里的mAP=True。
    在这里插入图片描述
    当然_summarize()函数声明里面也要加一个参mAP=False。
    在这里插入图片描述

实现效果

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值