目标检测评估指标
检测精度
混淆矩阵(confusion matrix)
confusion matrix 是用来总结一个分类器(classifier)结果的矩阵。对于 k 元分类,其实它就是一个 k x k 的表格,用来记录分类器的预测结果。
对于最常见的二元分类来说,我们的模型最终需要判断样本的结果是 0 还是 1,或者说是 positive 还是 negative。我们通过样本的采集,能够直接知道真实情况下,哪些数据结果是 positive,哪些结果是 negative。同时,我们通过用样本数据跑出分类型模型的结果,也可以知道模型认为这些数据哪些是 positive,哪些是 negative。
我们可以得到四个数据:
- 真实值是 positive,模型认为是 positive 的数量(True Positive=TP,第一位 True 表示预测的结果是正确的,第二位 Positive 表示结果为 positive)
- 真实值是 positive,模型认为是 negative 的数量(False Negative=FN):这就是统计学上的第二类错误(Type II Error)
- 真实值是 negative,模型认为是 positive 的数量(False Positive=FP):这就是统计学上的第一类错误(Type I Error)
- 真实值是 negative,模型认为是 negative 的数量(True Negative=TN)
将这四个数据(指标)呈现在表格中,可以得到如下的矩阵
Precision 精确率
在模型预测是 positive 的所有结果中,预测正确的比重。用你预测出来的正确的数量除以所有实际样本的数量。
$$ precision = \frac {TP}{TP+FP}$$
Recall 召回率(sensitivity 敏感度)
在真实值是 positive 的所有结果中,预测正确的比重。就是用你预测出来的正确的数量除以所有实际正确的数量。评估模型预测的全不全。
$$ recall = \frac {TP}{TP+FN}$$
Accuracy 正确率
$$Accuracy = \frac {TP+TN}{TP+FN+FP+TN}$$
分类模型中所有判断正确的结果占总观测值的比重。
F1-Score
$$F1-Score = \frac{2}{(\frac{1}{Precision}+\frac{1}{Recall})}= \frac{2PrecisionRecall}{Precision+Recall}$$
F1-Score 选择了调和平均数算法进行计算
F1-Score 是对精确率与召回率进行平均的一个结果,指标综合了 Precision 与 Recall 的产出的结果。F1-Score 的取值范围从 0 到 1 的,1 代表模型的输出最好,0 代表模型的输出结果最差。
IoU(Intersection over Union) 交并比
- 蓝色的框表示 Ground True(GT),在目标检测中表示标注的框。
- 橙色的框表示 Precision,表示模型预测的框。
Iou 为 1 则表示 predicated 和 GT 的 bounding boxes 完全重合。
在实际检测中我们可以设置一个 IoU 的阈值(threshold)来判断检测是有效的。
我们设置 IoU 为 0.5
- 如果 IoU>=0.5 则分类就是 TP
- 如果 IoU<0.5 则分类是 FP
- 如果图片中有 GT 但是网络没有预测出来就是 FN
- 对于图片中没有预测的种类,模型也没有预测出来就是 TN。这个指标在目标检测中没有用处,我们可以忽略他。
AP (Average Precision) And mAP
AP 衡量学习出来的模型在每一个类别上的好坏。
mAP 衡量的是学习出来的模型在所有类别上的好坏,mAP 是取所有类别上 AP 的平均值。
AP 计算,假设我们的数据集中共有五个待检测的物体,我们的模型给出了 10 个候选框,我们按照模型给出的置信度(confidence)由高到低对候选框进行排序。第二列表示预测是否正确,如果他与 GT 匹配且 IoU>=0.5,则是正确的。FN 在是有几个物体没有被检测出来
Rank | Correct? | TP | FP | FN | Precision | Recall |
---|---|---|---|---|---|---|
1 | True | 1 | 0 | 4 | $\frac{TP}{TP+FP} = \frac{1}{1+0} = 1$ | $\frac{TP}{TP+FN} = \frac{1}{1+4} = 0.2$ |
2 | True | 2 | 0 | 3 | $\frac{TP}{TP+FP} = \frac{2}{2+0} = 1$ | $\frac{TP}{TP+FN} = \frac{2}{2+3} = 0.4$ |
3 | False | 2 | 1 | 3 | $\frac{TP}{TP+FP} = \frac{2}{2+1} = 0.67$ | $\frac{TP}{TP+FN} = \frac{2}{2+3} = 0.4$ |
4 | False | 2 | 2 | 3 | $\frac{TP}{TP+FP} = \frac{2}{2+2} = 0.5$ | $\frac{TP}{TP+FN} = \frac{2}{2+3} = 0.4$ |
5 | False | 2 | 3 | 3 | $\frac{TP}{TP+FP} = \frac{2}{2+3} = 0.4$ | $\frac{TP}{TP+FN} = \frac{2}{2+3} = 0.4$ |
6 | True | 3 | 3 | 2 | $\frac{TP}{TP+FP} = \frac{3}{3+3} = 0.5$ | $\frac{TP}{TP+FN} = \frac{3}{3+2} = 0.6$ |
7 | True | 4 | 3 | 1 | $\frac{TP}{TP+FP} = \frac{4}{4+3} = 0.57$ | $\frac{TP}{TP+FN} = \frac{4}{4+1} = 0.8$ |
8 | False | 4 | 4 | 1 | $\frac{TP}{TP+FP} = \frac{4}{4+4} = 0.5$ | $\frac{TP}{TP+FN} = \frac{4}{4+1} = 0.8$ |
9 | False | 4 | 5 | 1 | $\frac{TP}{TP+FP} = \frac{4}{4+5} = 0.44$ | $\frac{TP}{TP+FN} = \frac{4}{4+1} = 0.8$ |
10 | True | 5 | 5 | 0 | $\frac{TP}{TP+FP} = \frac{5}{5+5} = 0.5$ | $\frac{TP}{TP+FN} = \frac{5}{5+0} =1$ |
我们可以看到:随着预测的增多 Recall 越来越大,Percision 会上下波动
-
P-R(precision-recall)曲线
我们当然希望检测的结果 P 越高越好,R 也越高越好,但事实上这两者在某些情况下是矛盾的。比如极端情况下,我们只检测出了一个结果,且是准确的,那么 Precision 就是$\frac{1}{1+0} = 100%$,但是 Recall = $\frac{1}{所有真正的结果}$就很低;而如果我们把所有结果都返回,那么必然 Recall 必然很大,但是 Precision 很低。
因此在不同的场合中需要自己判断希望 P 比较高还是 R 比较高。如果是做实验研究,可以绘制 Precision-Recall 曲线来帮助分析。
通过上述的数据我们可以得到 P-R 曲线
-
AP 计算
AP 就是平均精准度,简单来说就是对 PR 曲线上的 Precision 值求均值。对于 pr 曲线来说,我们使用积分来进行计算。Recall 从 0-1 对 p(r) 进行积分
$$AP = \int_{0}^{1}p(r)dr$$
在实际应用中,我们并不直接对该 PR 曲线进行计算,而是对 PR 曲线进行平滑处理。即对 PR 曲线上的每个点,Precision 的值取该点右侧最大的 Precision 的值。经过处理我们可以得到如下图像
)
-
Interplolated AP(Pascal Voc 2008 的 AP 计算方式 - “11 点法”,2010 年之前的计算方式)
Pascal VOC 2008 中设置 IoU 的 threshold 为 0.5,如果一个目标被重复检测,则 confidence 最高的为正样本,另一个为负样本。在平滑处理的 PR 曲线上,取横轴 0-1 的 10 等分点(包括断点共 11 个点)的 Precision 的值,计算其平均值为最终 AP 的值
$$AP = \frac{1}{11}*\sum_{0,0.1,\cdots,1}^{} P_{smooth}(i)$$
在我们的例子里$AP = \frac{1}{11}(50.1+40.57+20.5) = 0.753$
-
Area under curve (AUC)
上述方法有两个缺陷,
- 第一个是使用 11 个采样点在精度方面会有损失。
- 第二个是,在比较两个 AP 值较小的模型时,很难体现出两者的差别。
所以这种方法在 2009 年的 Pascalvoc 之后便不再采用了。在 Pascal voc 2010 之后,便开始采用这种精度更高的方式。绘制出平滑后的 PR 曲线后,用积分的方式计算平滑曲线下方的面积作为最终的 AP 值。求出被分割所有阶梯块的面积之和就是 AP。