不同检测网络的性能好坏我们经常使用AP来表示, AP越高表示网络的学习能力越好。那么什么是AP呢? mAP又是什么? AUC又是啥?这里简单做下汇总。
-
True positive(TP)
检测正确, iou>=threshold -
False positive(FP)
检测错误, iou < threshold -
False Negative(FN)
漏检, 目标没有被检测到。 -
True Negative (TN)
意思为正确的漏检, 也就是说, 不是检测目标的地方没有被检测出来, 对于检测网络来说,这个指标没有用。
有了以上基础,那么就有了precision和recall的概念。
-
Accuracy
accuracy = 预测对的/所有 = (TP+TN)/(TP+FN+FP+TN)
-
Precision
-
Recall
如果把Precision和Recall分别作为y和x, 那么可以画在一张图上。
对于不同的detector可以画一个不同的曲线,那么怎么比较两个曲线哪个好呢? 那么怎么用一个数字就能看出检测的好坏呢? 这是就要考虑AUC(曲线下面积), 对于PR曲线来说, 曲线下的面积称为AP。 -
TPR和FPR
TPR和FPR计算参考上图 -
ROC 曲线
对于不同的阈值, 我们可以算出不同fp,tp等数值,对应的tpr和fpr也可以得到, 那么把tpr和fpr放在一个坐标系下可以画出下面这张图, 曲线下的面积可以表示出一个模型的性能好坏.
实现代码可以参考sklearn.metrics.roc_curve.
- AP计算
下面开始尝试手动计算AP, 对于一个数据集图片总数为5, 总gt bbox个数有15个,用红框表示预测框, 绿色表示gt框。如下图:
下面将所有检测框分类为tp和fp, 分类的标准是IOU > threshold, 比如上面的AP50,指的就是这个threshold=50%. 这个例子中,我们使用threshold=30%, 也就是说iou>30%就认为是tp。但是也有一个特例, 比如一个gt box有多个预测框与其iou都大于30%, 那么只有第一个预测框为tp, 剩下的都是fp(参考了VOC 2012 metric计算要求)。按照这么个规则区分tp和fp,我们可以得到下面一个表格。
接下来按照confidence排序,则有:
可以看出precision和recall递减,一个递增, 画出来如下:
至此,我们就得到了一个PR curve, 这种犬牙交错的曲线算AP有两种方法。11点插值法 和 所有点插值法
-
11点插值法
故名思意, 从[0, 1]之间均匀采样11点, 用这11个点的precision均值作为ap。
如图, 红色点为采样点,采样点基本不会刚好落在真实的pr曲线上, 那么采样点的precision就取pr曲线上最近的precision值。 -
所有点插值法
如上上, 算出红色曲线下的面积即为AP。
所以,算AP的总过程为:
- 所有预测框按照iou 阈值分为tp和fp
- 将预测框按照confidence排序,计算出不同confidence下的precision和recall
- 按照11点或者全部点插值算法计算出AP。
论文里经常看到AP50, AP75, APs, APm, APl的等值, 他们是什么意思呢?
-
AP50
iou 阈值大于0.5时AP值 -
AP75
iou阈值大于0.75时的AP值 -
APs
像素面积小于32*32目标框的AP值 -
APm
像素面积小于32*32 ~96 * 96之间目标框的AP值 -
APl
像素面积大于96*96的目标框 AP值 -
mAP
一般AP是指单个类下,mAP则是所有类别AP的平均。
f score
f
s
c
o
r
e
=
(
1
+
β
2
)
∗
P
∗
R
/
(
β
2
∗
P
+
R
)
fscore=(1+ β^2)*P*R/(β^2*P + R)
fscore=(1+β2)∗P∗R/(β2∗P+R)
β为1即为f1score, 表示P和R一样重要.
参考资料:https://github.com/rafaelpadilla/Object-Detection-Metrics