【目标检测】IoU、precision、recall、mAP

1 IoU

IoU 的全称为交并比(Intersection over Union),通过这个名称我们大概可以猜到 IoU 的计算方法。IoU 计算的是 “预测的边框” 和 “真实的边框” 的交集和并集的比值。
【目标检测】IoU、precision、recall、mAP

2 Precision & Recall

先理解一下,TP、TN、FP、FN的含义:

字母 含义
T (True) 样本被分类正确
F (False) 样本被分类错误
P (Positive) 样本被分为正样本
N (Negative 样本被分为负样本
TP (True Positive) 样本被分为正样本,且分类正确
TN (True Negative 样本被分为负样本,且分类正确
FP (False Positive) 样本被分为正样本,而分类错误
FN (False Negative 样本被分为负样本,而分类错误

按下图来解释,左半矩形是正样本(实心圆),右半矩形是负样本(空心圆)。一个2分类器,在图上画了个圆,分类器认为圆内是正样本,圆外是负样本。那么左半圆分类器认为是正样本,同时它确实是正样本,那么就是“被分为正样本,并且分对了”即TP,左半矩形扣除左半圆的部分就是分类器认为它是负样本,但是它本身却是正样本,就是“被分为负样本,但是分错了”即FN。右半圆分类器认为它是正样本,但是本身却是负样本,那么就是“被分为正样本,但是分错了”即FP。右半矩形扣除右半圆的部分就是分类器认为它是负样本,同时它本身确实是负样本,那么就是“被分为负样本,而且分对了”即TN
【目标检测】IoU、precision、recall、mAP
有了上面TP TN FP FN的概念,这个Precision和Recall的概念一张图就能说明。
【目标检测】IoU、precision、recall、mAP
Precision=TPTP+FPPrecision =\frac{TP}{TP+FP}理解:分类正确的数量占总分类数量的比值,翻译成中文就是“分类器认为是正类并且确实是正类的部分占所有分类器认为是正类的比例”,衡量的是一个分类器分出来的正类的确是正类的概率。两种极端情况就是,如果精度是100%,就代表所有分类器分出来的正类确实都是正类。如果精度是0%,就代表分类器分出来的正类没一个是正类。光是精度还不能衡量分类器的好坏程度,比如50个正样本和50个负样本,我的分类器把49个正样本和50个负样本都分为负样本,剩下一个正样本分为正样本,这样我的精度也是100%,但是*也知道这个分类器很垃圾。

Recall=TPTP+FNRecall =\frac{TP}{TP+FN}理解:分类正确的数量占总样本的数量翻译成中文就是“分类器认为是正类并且确实是正类的部分占所有确实是正类的比例”,衡量的是一个分类能把所有的正类都找出来的能力。两种极端情况,如果召回率是100%,就代表所有的正类都被分类器分为正类。如果召回率是0%,就代表没一个正类被分为正类。

3 计算mAP

图片如下,要求算法找出face。蓝色框代表标签,绿色框代表算法给出的预测结果,红色字代表置信度。设定第一张图片的预测框为pre1,第一张图片的标签叫lab1,以此类推。
【目标检测】IoU、precision、recall、mAP
【目标检测】IoU、precision、recall、mAP
【目标检测】IoU、precision、recall、mAP
根据IoU计算TP、FP
根据IoU是否大于0.5这个阈值来判断pre属于TP还是FP。可以看出pre1、pre3为TP,pre2为FP。

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

在不同置信度阈值下获得Precision和Recall
当阈值为0.9时,去除所有小于0.9的pre(pre2和pre3被去除,分类器内只有pre1)。此时TP=1,FP=0,TP+FP=1,由于pre1时TP,那么Precision=1/1。而此时总样本的数量为3,所以Recall=1/3。得到P、R值。

当阈值为0.8时,去除所有小于0.8的pre(pre3被去除,分类器内有pre1和pre2)。此时TP=1,FP=1,TP+FP=2。由于pre1是TP,pre2是FP,那么Precison=1/2。总样本数为3,所以Recall=1/3。得到P、R值。

当阈值为0.7时,去除所有小于0.7的pre(pre1、pre2和pre3都包含在内)。此时TP=2,FP=1,TP+FP=3。由于pre1和pre3都是TP,那么Precision=2/3。总样本数为3,所以Recall=2/3。得到P、R值。

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

在这里AP=10.33+0.670.330.55AP=1*0.33+0.67*0.33\approx 0.55
【目标检测】IoU、precision、recall、mAP
计算mAP
AP衡量的是对一个类检测好坏,mAP就是对多个类的检测好坏。就是简单粗暴的把所有类的AP值取平均就好了。比如有两类,类A的AP值是0.5,类B的AP值是0.2,那么mAP=(0.5+0.2)/2=0.35

参考:理解目标检测当中的mAP