目标检测指标计算
mAP(mean Average Precision)
概述
- 预备参数:类别数,IoU阈值;
- 根据模型输出的置信度分数,将所有预测框按从高到低排序;
- 根据IoU是否超过阈值,判断每个预测框是 T P I o U TP_{IoU} TPIoU还是 F P I o U FP_{IoU} FPIoU(TP/FP还要结合分类置信度判断);
- 不同置信度阈值对应一个Precision-Recall点,取不同置信度阈值得到 Precision-Recall 曲线;
- PR曲线下面积即为 AP(根据面积积分计算方式不同,分为VOC和COCO风格);
- 所有类别AP平均值即为mAP;如果数据集中包含多个 IoU 阈值,则需要分别计算每个 IoU 阈值下的mAP,然后取平均值,例如 mAP@[0.5:0.95] 。
背景知识
Precision 和 Recall
- Precision(精确率) :预测为正类的样本中,实际为正类的比例。
P r e c i s i o n = T r u e P o s i t i v e s ( T P ) T r u e P o s i t i v e s ( T P ) + F a l s e P o s i t i v e s ( F P ) Precision=\frac{True Positives (TP)}{True Positives (TP)+False Positives (FP)} Precision=TruePositives(TP)+FalsePositives(FP)TruePositives(TP) - Recall(召回率) :实际为正类的样本中,被正确预测为正类的比例。
R e c a l l = T r u e P o s i t i v e s ( T P ) T r u e P o s i t i v e s ( T P ) + F a l s e N e g a t i v e s ( F N ) Recall= \frac{True Positives (TP)}{True Positives (TP)+False Negatives (FN)} Recall=TruePositives(TP)+FalseNegatives(FN)TruePositives(TP)
IoU与匹配规则
- IoU :预测框与真实框的交集面积与并集面积的比值。
I o U = A r e a o f O v e r l a p A r e a o f U n i o n IoU=\frac{Area of Overlap}{Area of Union} IoU=AreaofUnionAreaofOverlap - 如果 IoU 超过某个阈值(通常为 0.5 或其他自定义值),则认为该预测框是 T P I o U TP_{IoU} TPIoU,否则为 F P I o U FP_{IoU} FPIoU。
计算 Precision-Recall 曲线
假设我们有一个简单的例子,包含以下数据:
- 总共有 5 个真实框。
- 模型输出了 5 个预测框,按置信度排序后的结果如下:
取预测框1的置信度为阈值,则TP = 1, FP = 0;Precision=1/1=1.0,Recall=1/5=0.2;
…
取预测框5的置信度为阈值,则TP = 3, FP = 2;Precision=3/5=0.6,Recall=3/5=0.6;
这5个点可以组成PR曲线。
计算 AP(曲线下面积)
- 插值处理 :为了消除 Precision 的波动,通常对 Precision 进行插值处理,即对于每个 Recall 值 r,取大于等于 r 的最大 Precision 值。
- 积分计算 :对插值后的 Precision-Recall 曲线进行积分,计算曲线下面积。常用的方法包括:
- 直接数值积分(COCO风格)
- 使用 11 点插值法(如 VOC 2007 的标准),在 Recall = [0, 0.1, 0.2, …, 1.0] 处取 Precision 值并求平均。