from pycocotools.cocoeval import COCOeval
from pycocotools.coco import COCO
import numpy as np
gt = COCO("/mnt/data/safety_wearing/safe_belt/annotations/instances_val2017.json")
dt = COCO("/mnt/data/safety_wearing/safe_belt/annotations/pre.json") # 预测结果每个ann多一个key为score
cocoeval = COCOeval(gt, dt, "bbox")
cocoeval.evaluate()
cocoeval.accumulate()
cocoeval.summarize()
'''
precision维度说明
shape为iou数量,召回率数量(0~1),类别数量,目标大小,最多检测目标数量
'''
# 取IOU=0.5、大小为all、最多检测100个
iou_index = np.where(cocoeval.params.iouThrs == 0.5)[0]
area_index = cocoeval.params.areaRngLbl.index("all")
maxdet_index = cocoeval.params.maxDets.index(100)
cocoeval.eval["precision"][iou_index, :, :, area_index, maxdet_index].mean()
# 如果需要每个类别的map
cocoeval.eval["precision"][iou_index, :, :, area_index, maxdet_index].mean(axis=1)
# 取IOU=0.75、大小为small、最多检测10个
iou_index = np.where(cocoeval.params.iouThrs == 0.75)[0]
area_index = cocoeval.params.areaRngLbl.index("small")
maxdet_index = cocoeval.params.maxDets.index(10)
cocoeval.eval["precision"][iou_index, :, :, area_index, maxdet_index].mean()
# 取IOU=0.5:0.95、大小为small、最多检测10个
area_index = cocoeval.params.areaRngLbl.index("small")
maxdet_index = cocoeval.params.maxDets.index(10)
cocoeval.eval["precision"][:, :, :, area_index, maxdet_index].mean()
'''
recall维度说明
shape为iou数量,类别数量,目标大小,最多检测目标数量
'''
# 取IOU=0.5、大小为all、最多检测100个
iou_index = np.where(cocoeval.params.iouThrs == 0.5)[0]
area_index = cocoeval.params.areaRngLbl.index("all")
maxdet_index = cocoeval.params.maxDets.index(100)
cocoeval.eval["recall"][iou_index, :, area_index, maxdet_index].mean()
# 如果需要每个类别的map
cocoeval.eval["recall"][iou_index, :, area_index, maxdet_index].mean(axis=1)
# 取IOU=0.75、大小为small、最多检测10个
iou_index = np.where(cocoeval.params.iouThrs == 0.75)[0]
area_index = cocoeval.params.areaRngLbl.index("small")
maxdet_index = cocoeval.params.maxDets.index(10)
cocoeval.eval["recall"][iou_index, :, area_index, maxdet_index].mean()
# 取IOU=0.5:0.95、大小为small、最多检测10个
area_index = cocoeval.params.areaRngLbl.index("small")
maxdet_index = cocoeval.params.maxDets.index(10)
cocoeval.eval["recall"][:, :, area_index, maxdet_index].mean()
cocoeval的简单使用
最新推荐文章于 2024-07-10 15:19:58 发布