cocoeval函数教程

前言

 在目标检测算法中,coco数据集经常用到,对于许多新手来说,由于coco的标注json文件大而且标注看起来不太直观,特别在评估方法方面,导致不太会调用pycocotools的评估脚本。因此,本文记录pycocotools中cocoeval函数使用,使读者方便查找使用。

1、原理

 在正式介绍pycocotools前,首先介绍下目标检测mAP的评估方法。以coco为例,总共80个类别,那么分别遍历这80个类别,然后取单独一个类别进行评测:
 以person类别为例,遍历到当前图像时,首先拿到 m m m个预测框和 n n n个真值框,之后,根据交并比计算公式:
IoU = Area of Intersection Area of Union = ∣ A ∩ B ∣ ∣ A ∪ B ∣ \text{IoU} = \frac{\text{Area of Intersection}}{\text{Area of Union}} = \frac{|A \cap B|}{|A \cup B|} IoU=Area of UnionArea of Intersection=ABAB
其中, A A A B B B分别表示一个预测框和一个真值框。
 在实际评估中,会通过并行计算直接得到大小为 m ∗ n m*n mn的IOU矩阵,里面每个元素表示当前预测框和真值框的交并比。
 在拿到IOU矩阵后,然后遍历每一个预测框,寻找与其IOU值最大的真值框,若超过IOU_thresh,则认为匹配成功, 则TP+1;若同一真实框被多个预测框匹配,仅保留IoU最高的预测框。
 然后遍历所有图像,累加TP、FP、FN即可计算PR值:
Precision = T P T P + F P \text{Precision} = \frac{TP}{TP + FP} Precision=TP+FPTP
Recall = T P T P + F N \text{Recall} = \frac{TP}{TP + FN} Recall=TP+FNTP
 然后计算不同score下PR值,就能得到PR曲线,然后算其包络面积,便是AP。

2、代码

 底下是现成的pycocotools评估coco的脚本,可直接出评测结果。

from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval
import numpy as np
import pylab,json

if __name__ == "__main__":
    gt_path = "/home/wujian/WLL/mmdet-master/data/coco/annotations/instances_val2017.json"  # 存放真实标签的路径
    dt_path = "/home/wujian/WLL/mmdet-master/tools/work_dirs/yolo_result/my_result.json"    # 存放检测结果的路径
    cocoGt = COCO(gt_path)
    cocoDt = cocoGt.loadRes(dt_path)
    cocoEval = COCOeval(cocoGt, cocoDt, "bbox")                                             #
    cocoEval.evaluate()
    cocoEval.accumulate()
    cocoEval.summarize()

 对于代码中所用到的两个文件,读者可从下面链接中下载:代码中文件下载地址
上述两个文件bbox均是[xmin,ymin,w,h]格式!

总结

 本文简单介绍了coco数据集的mAP的评测方法以及如何使用pycocotools,希望读者能够读读mAP的源代码,定会有所收获。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值