• 目标检测模型的评估指标mAP详解(附代码)
  • 理解目标检测当中的mAP
  • 目标检测的评价方法(PR,IOU,AP,MAP),比较详细
  • YoloV3_Keras模型MAP测试

mAP定义及相关概念

mAP: mean Average Precision, 即各类别AP的平均值;
AP: PR曲线下面积,后文会详细讲解;
PR曲线: Precision-Recall曲线;
Precision: TP / (TP + FP);
Recall: TP / (TP + FN);
TP: IoU>0.5的检测框数量(同一Ground Truth只计算一次);
FP: IoU<=0.5的检测框,或者是检测到同一个GT的多余检测框的数量;
FN: 没有检测到的GT的数量;

举例计算mAP

presto lead lag计算 pre怎么算_github

根据IOU(阈值)计算算TP、FP

首先我们计算每张图pre和label的IOU,根据IOU是否大于0.5,来判断该pre是属于TP还是属于FP。显而易见,pre1是TP,pre2是FP,pre3是TP。

排序

根据每个pre的置信度进行从高到低排序,这里pre1、pre2、pre3置信度刚好就是从高到低。

在不同置信度阈值下获得precision和recall

首先,设置阈值为0.9,无视所有小于0.9的pre。那么检测器检出的所有框pre即TP+FP=1,并且pre1是TP,那么Precision=1/1。因为所有的label=3,所以Recall=1/3。这样就得到一组P、R值。

然后,设置阈值为0.8,无视所有小于0.8的pre。那么检测器检出的所有框pre即TP+FP=2,因为pre1是TP,pre2是FP,那么Precision=1/2=0.5。因为所有的label=3,所以Recall=1/3=0.33。这样就又得到一组P、R值。

再然后,设置阈值为0.7,无视所有小于0.7的pre。那么检测器检出的所有框pre即TP+FP=3,因为pre1是TP,pre2是FP,pre3是TP,那么Precision=2/3=0.67。因为所有的label=3,所以Recall=2/3=0.67。这样就又得到一组P、R值。

绘制PR曲线并计算AP值

根据上面3组PR值绘制PR曲线如下。然后每个“峰值点”往左画一条线段直到与上一个峰值点的垂直线相交。这样画出来的红色线段与坐标轴围起来的面积就是AP值。

在这里 A P = 1 ∗ 0.33 + 0.67 ∗ 0.33 ≈ 0.55

presto lead lag计算 pre怎么算_目标检测_02

计算mAP

AP衡量的是对一个类检测好坏,mAP就是对多个类的检测好坏(分别对每一类计算AP)。就是简单粗暴的把所有类的AP值取平均就好了。比如有两类,类A的AP值是0.5,类B的AP值是0.2,那么 m A P = ( 0.5 + 0.2 ) / 2 = 0.35 \ mAP=(0.5+0.2)/2=0.35 mAP=(0.5+0.2)/2=0.35。

** 计算mAP的工具:https://github.com/Cartucho/mAP **

mAP的计算的两种方式

在VOC2010以前,只需要选取当Recall >= 0, 0.1, 0.2, …, 1共11个点时的Precision最大值,然后AP就是这11个Precision的平均值。

在VOC2010及以后,需要针对每一个不同的Recall值(包括0和1),选取其大于等于这些Recall值时的Precision最大值,然后计算PR曲线下面积作为AP值。

代码实现