本篇博客主要整理基于深度学习的目标检测所用的一些评价指标。
先介绍评价指标,当然也适用于很多其他的任务;
然后再介绍数据集,见下一篇博客。
一、评价指标
参考链接:
1、参考1
2、参考2
3、参考3
1、准确率、精确率、召回率
对于一个分类或者检测任务来讲,有准确率、精确率、召回率这几种评价指标。
假设有这样一个测试集,男生40和女生60人。请选出测试集中所有的男生。
然后模型选出了30个,其中20个男生,10个女生。
首先分析:男生40人中有20被分为是男生,另20人被分为是女生;女生60人中有50人被分为女生,另10人被分为男生。
true positive(TP):选出的30人正确识别为男生;即20人男生
false positive(FP):选出的30人中没有正确识别为男生;即10人女生
true negative(TN):正确识别为不是男生;即50人女生;
false negative(FN):没有正确识别为男生;即20人男生;
准确率(TP+TN)/(TP+FP+TN+FN):所有类别都正确分类的概率,即(20+50)/100=70%;
精确率(TP)/(TP+FP):选出的30个测试数据被正确分类的概率,即20/30=66.7%
召回率(TP)/(TP+FN):每个类被正确分类的概率(该例子中要选出男生,即男生正确分类的概率),即20/40=50%。
2、precision-recall曲线
上面中提高的precision和recall,当选择不同的阈值时会发生不同的变化。一个好的模型是precision和recall同时保持很高。
如下表(数据虚拟)
阈值 | precision | recall |
---|---|---|
10人 | 100% | 25% |
20人 | 100% | 50% |
30人 | 66.7% | 50% |
40人 | 62.5% | 62.5% |
50人 | 60% | 75% |
60人 | 58.3% | 87.5% |
70人 | 57.1% | 100% |
80人 | 50% | 100% |
90人 | 44.4% | 100% |
100人 | 40% | 100% |
所以一般都会用precision-recall曲线来表示模型的性能。
3、ROC曲线和AUC曲线
3.1 ROC曲线
比较的是TP率和FP率的关系。TP率实际上就是precision。
ROC曲线越接近左上角,即FP很低,TP很高,模型效果越好。
阈值 | precision | recall | TP | FP |
---|---|---|---|---|
10人 | 100% | 25% | 100% | 0 |
20人 | 100% | 50% | 100% | 0 |
30人 | 66.7% | 50% | 66.7% | 33.3% |
40人 | 62.5% | 62.5% | 62.5% | 37.5% |
50人 | 60% | 75% | 60% | 40% |
60人 | 58.3% | 87.5% | 58.3% | 41.7% |
70人 | 57.1% | 100% | 57.1% | 42.9% |
80人 | 50% | 100% | 50% | 50% |
90人 | 44.4% | 100% | 44.4% | 55.6% |
100人 | 40% | 100% | 40% | 60% |
3.2 AUC曲线
AUC,即Area Under Curve,为ROC曲线下的面积。面积不会大于1,一本来说,AUC越大,模型相对效果越好。
3.3 总结
为什么还要使用ROC和AUC呢?
因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。
下图是ROC曲线和Precision-Recall曲线5的对比:
在上图中,(a)和(c)为ROC曲线,(b)和(d)为Precision-Recall曲线。(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,(c)和(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果。可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线则变化较大。
4、approximated average precision、interpolated average precision、AP和mAP
4.1 approximated average precision
相较于precision-recall曲线,我们有时候更想关注数字指标,即AAP;
积分公式如下,其中p是precision,r是recall,p(r)是一个以recall为参数的函数。
可以把积分公式换成离散型数值,即,对每个阈值分别求出precision和recall变化的乘积,然后把所有乘积加起来。
离散公式如下,其中,k是阈值,P是precision,是recall的变化(从k-1到k的变化),
例如,上面例子中,
AAP=1*0.25+1*0.25+0.667*0+0.625*0.125+0.60*0.125
+0.583*0.125+0.571*0.125+0.50*0+0.444*0+0.40*0
=0.797375
以上recall变化为0的就对AAP没有贡献。
4.2 interpolated average precision
相对于AAP的另一种评价指标。
取所有阈值中precision最高的与recall的变化相乘,再把乘积加起来。
在上述例子中,就是,
IAP = 1*0.25+1*0.25+1*0+1*0.125+1*0.125
+1*0.125+1*0.125+1*0+1*0+1*0
=1
4.3 AP和mAP
平均精度(Average-Precision,AP)与 mean Average Precision(mAP)
AP就是Precision-recall 曲线下面的面积,通常来说一个越好的分类器,AP值越高。
mAP是多个类别AP的平均值。这个mean的意思是对每个类的AP再求平均,得到的就是mAP的值,mAP的大小一定在[0,1]区间,越大越好。该指标是目标检测算法中最重要的一个。
5、IOU
就是系统检测出的目标框与实际目标框之间的重合度。
即detection result与ground truth的交集比上他们的并集。
这个值越高,说明定位越准确。
6、非极大值抑制(NMS)
Non-Maximum Suppression就是需要根据score矩阵和region的坐标信息,从中找到置信度比较高的bounding box。对于有重叠在一起的预测框,只保留得分最高的那个。
NMS计算出每一个bounding box的面积,然后根据score进行排序,把score最大的bounding box作为队列中首个要比较的对象;
计算其余bounding box与当前最大score与box的IoU,去除IoU大于设定的阈值的bounding box,保留小的IoU得预测框;
然后重复上面的过程,直至候选bounding box为空。
最终,检测了bounding box的过程中有两个阈值,一个就是IoU,另一个是在过程之后,从候选的bounding box中剔除score小于阈值的bounding box。需要注意的是:Non-Maximum Suppression一次处理一个类别,如果有N个类别,Non-Maximum Suppression就需要执行N次。