目标检测算法的评价指标
对于一个目标检测模型的好坏,总的来说可以从以下三个方面来评估:
- 分类的精度。一般可以用准确度(
Accuracy
),精度(Precision
),召回率(Recall Rate
),PR
曲线,AP
,mAP
等 - 定位的精度。比如
IoU
- 运行的速度。比如
fps
,一秒处理几张图。
严格说某些场合也会很在意模型的大小,这也是一个研究方向,比如 squeeze net
, mobile net
, shuffle net
等。所以除了上面三个维度,模型的大小也可以是一个评价维度。
0 不同比赛中的指标
PASCAL VOC 挑战赛:该挑战赛目标检测评价指标官方文档,当前 PASCAL VOC 目标检测挑战赛使用的指标是Precision - Recall
曲线和Average - Precision
.
COCO 检测挑战赛:该挑战赛使用不同的指标来评估不同算法的目标检测准确性。 这里可以找到 COCO 上的目标检测性能的 12 个指标的文档。
Google Open Images Dataset V4 Competition: 使用 500 个类别的平均精度 (mAP) 来评估对象检测任务。
1 基础概念
1.1 Intersection over Union (IoU)
Intersection Over Union (IOU) 是基于 Jaccard Index 的度量,用于评估两个边界框之间的重叠。它需要一个真实边界框(即ground truth bounding box)和一个预测边界框(即predicted bounding box),通过计算IOU,我们可以判断检测是否有效(真阳性)或无效(假阳性)。
IOU 由预测边界框和真实边界框之间的交集除以它们之间的并集得出:
1.2 Predictions: TP - FP - FN - TN
我们在训练一个模型时,我们希望这个模型性能尽量达到最优,但是结果却表现很差,我们就会去找这个模型到底哪里出问题了?应该怎么去优化?有很多方法可以衡量模型的性能,但是经得起时间考验的是混淆矩阵,它可以评估模型性能,帮助我们如何去优化。
混淆矩阵(confusion matrix):
混淆矩阵是一个N*N矩阵,用于评估分类模型的性能,其中N是目标类的数量。该矩阵将真实值和预测值进行比较,使我们能够全面了解我们分类模型的性能以及结果表现差的原因。
举个例子,对于二分类问题,我们就有一个2*2矩阵:
该矩阵中:
- 目标变量有两个值:Positive 或 Negative
- 矩阵的列代表目标变量的实际值
- 矩阵的行代表目标变量的预测值
矩阵每一个数值具体含义如下:
- True Positive(TP) : True表示预测值和实际值匹配,即实际值为Positive,预测值也为Positive
- True Negative(TN) : 预测值和实际值匹配,即实际值为Negative,预测值也为Negative
- False Negative (FP): False表示预测值和实际值不匹配,即实际值为Positive,但预测值为Negative
- False Negative(FN) : 预测值和实际值不匹配,即实际值为Negative,但预测值为Negative
为什么我们要用混淆矩阵?
假设我们想预测有多少人中出现症状之前就感染了传染性病毒,并将他们与健康人群隔离开,因此我们的目标变量有两个:感染和未感染。
假设我们预测的数据集是一个数据不平衡的数据集,其中包含940例未感染传染性病毒和60例感染了传染性病毒。预测结果统计得:TP=30,TN=930,FP=30,FN=10。如果我们仅仅用准确率(accuracy)来评估我们的模型性能,则accuracy = (930+30)/1000 = 0.96。
其中,准确率公式为:
A
c
c
u
r
a
c
y
=
T
P
+
T
N
T
P
+
T
N
+
F
P
+
F
N
Accuracy=\frac{TP+TN}{TP+TN+FP+FN}
Accuracy=TP+TN+FP+FNTP+TN
96%的准确率看起来很高,但是它产生了一个错误的结果。我们以为模型所说的96%是指96%的准确率预测感染了传染性病毒,然而实际上未感染传染性病毒的样本占了绝大部份,其实模型是以接近96%的准确率预测未感染传染性病毒。
因此,仅仅用准确率可以用来评价模型的好坏吗?显然不能,准确率是所有预测中正确预测样本数量的百分比,在处理不平衡的数据时,准确率结果具有误导性,因为每个类的数量并不相同,而准确率更重视样本多的类。因此我们不仅仅要知道有多少样本被正确的预测,也要知道在正确预测中有多少样本是感染的等等,而混淆矩阵可以计算真阳性率、假阳性率、真阴性率、假阴性率、准确率、精确率和F指标等各种评价指标。
在检测任务中,如何创建混淆矩阵?
通过计算IOU,我们设置了一个阈值用于通过计算IOU值将检测问题转换为二分类问题,其中高于该阈值的IOU被认为是正确的预测,低于该阈值的IOU被认为是错误的预测,因此,预测分为真阳性——True Positives (TP) 、假阴性—— False Negatives (FN) 、假阳性—— False Positives (FP) 和真阴性——True Negative(TN)。
1.3 Precision
精确率(查准率)是指在所有检测出的正样本中是不是实际都为正样本,即预测为正的样本中真正为正的比例。比如中垃圾邮件判断等场景中,要求有更高的precision,确保放在回收站的都是垃圾邮件。
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
=
T
P
A
l
l
D
e
t
e
c
t
i
o
n
s
Precision=\frac{TP}{TP+FP} =\frac{TP}{All Detections}
Precision=TP+FPTP=AllDetectionsTP
1.4 Recall
召回率(查全率)是指所有的证样本是不是都被检测出来了,即所有正样本中被正确预测的比例。
R
e
c
a
l
l
=
T
P
T
P
+
F
N
=
T
P
A
l
l
G
r
o
u
n
d
T
r
u
t
h
Recall=\frac{TP}{TP+FN} =\frac{TP}{All Ground Truth}
Recall=TP+FNTP=AllGroundTruthTP
召回率和精确率是评价模型性能的两个不同维度:在图像分类中,考查最多的是accuracy,比如ImageNet的评价标准;但具体到单个类别,如果高召回率但低精确率,比如大部分的汽车都被识别出来了,但把很多卡车也误识别为了汽车,意味着存在大量的误检;如果低召回率但高精确率,比如检测出的飞机结果很准确,但是有很多的飞机没有被识别出来,意味着存在大量的假阴性;如果高召回率和高精确率意味着是一个优秀的检测器。我们可以通过混淆矩阵评估整个模型的性能,也可以评估每个类别标签上的性能,计算特定于类别的评估指标。
下面我们举个例子对上述几个概念进行说明下。如下图所示,假设IOU阈值为0.5,以第一行为例,在第一行中有两个类别person和dog,person预测出两个预测框,IOU值分别为0.47和0.89,因此分别记为FP和TP;dog也预测出两个预测框,IOU值分别为0.54和0.86,因为只存在一个物体,那么IOU值最高的为TP,其余的为FP,因此分别记为FP和TP。
那么预测是怎么工作的呢?
- 当多个框检测到同一个物体时,IoU最高的框被认为是TP,其余的框被认为是FP。
- 如果物体存在并且预测框与ground truth box的IoU <阈值,则该预测被认为是FP。 如果没有bounding box正确检测到它,那么被认为是FN。
- 如果物体不在图像中,但模型检测到一个,则预测被认为是 FP。
- 然后通过应用上述公式计算每个类的召回率和精度,其中对 TP、FP 和 FN 的预测进行累积。
我们计算一下person这个类的精度和召回率:
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
=
1
1
+
2
=
0.33
Precision=\frac{TP}{TP+FP} =\frac{1}{1+2}=0.33
Precision=TP+FPTP=1+21=0.33
R
e
c
a
l
l
=
T
P
T
P
+
F
N
=
1
1
+
1
=
0.5
Recall=\frac{TP}{TP+FN} =\frac{1}{1+1}=0.5
Recall=TP+FNTP=1+11=0.5
这样算来,这两个指标似乎都不满意,那么如何提高性能呢?这里需要引进一个confidence指标,见下一节。
2 评价指标
2.1 Precision x Recall curve
在针对precision和recall优化模型时,模型不可能同时产生峰值精确率和召回率,我们需要在这两个值中间进行权衡,这种权衡取决于置信度阈值,让我们看看它是如何工作的。
任何一个预测边界框,都会与一个置信度相关联,置信度用来评估该类出现在边界框中的概率。因此我们可以设置一个阈值将这些置信度转化为分类,即置信度高于阈值则检测被认为是TP,置信度低于阈值则检测被认为是FP。我们可以通过调节置信度阈值来平衡精确率和召回率。
Precision x Recall 曲线是在平衡精确率和召回率下用来评估目标检测器模型性能的方法。 每个类都可以画一条Precision x Recall 曲线,其中召回率为x轴,精确率为y轴,曲线上的每一个点代表某置信度下的召回率和精确率。 理想状态下,随着召回率的增大,模型应具有较高的精确率,如果模型精确率不增加,那么可以考虑通过降低置信度来增加召回率。
另一方面,在比较多个模型事=时,Precision x Recall 曲线最高的模型被认为表现性能最好的。
然后,在精确率和召回率权衡的过程中,曲线可能由于噪声并且具有特定的锯齿形状,使得难以估计模型的性能,并且不同模型的曲线都是相互交叉的,难以比较模型的好坏,因此我们使用平均精度( Average Precision)来估计曲线下的面积。
2.2 Average Precision(AP)
Average Precision是使用Precision x Recall 曲线的曲线下的面积 (AUC) 计算的,由于AP曲线通常是锯齿状的,因此在同一图中比较不同模型通常是一件不容易的事情。实际上,AP是0到1之间所有召回率的平均精确率。
2.3 Mean Average Precision(mAP)
mAP 分数是通过取所有类别和/或所有 IoU 阈值的平均 AP 来计算的,具体取决于比赛。