目录
- 一、检测精度
- 1、TP、FP、TN、FN概念
- ==正样本和负样本==
- ==TP(True Positive---正确的正向预测)==
- ==FP(False Positive---错误的正向预测)==
- ==FN(False Negative---错误的负向预测)==
- ==TN(True Negative---正确的负向预测)==
- 2、Precision(准确率)和Recall(召回率)
- 3、P-R curve (Precison-Recall curve)
- 4、F1 score指标
- 5、IoU (Intersection over Union)
- 6、AP (Average Precision)
- 7、mAP (mean Average Precision)
- 8、AP计算案例
- 9、不同尺度下的AP值
- 二、检测速度
- 1、前传耗时
- 2、FPS (Frames Per Second)
- 3、浮点运算量(FLOPS)
一、检测精度
大家在看目标检测论文的时候,经常会遇到mAP@0.5或者mAP@[0.5:0.95]和精度等等评估指标,自己最开始在发论文的时候对这些品估指标也总是会产生惯性思维,导致很多概念会混淆,所以也是查阅很多文献和博客去理解,但是很多博主讲的其实也不够通俗,比较偏概念化,最后将自己的理解和查阅到的内容整理了一下并列举相关例子便于大家理解。
目标检测的评估指标主要分为两部分,一类是检测精度,一类是检测速度。
1、TP、FP、TN、FN概念
正样本和负样本
要想理解上面4个概念,就需要先区分正样本和负样本,在目标检测中,正样本和负样本是指用于训练和评估模型的图像区域或图像片段。它们的概念与二分类问题中的正样本和负样本类似,但在目标检测中,正样本和负样本通常用于区分图像中是否存在目标物体。
- 正样本:正样本是指包含要检测的目标物体的图像区域或图像片段。在目标检测任务中,正样本通常被标注为目标类别,并用于训练模型以识别和定位这些目标。例如,在车辆检测任务中,车辆图像的区域被标记为正样本。
- 负样本:负样本是指不包含要检测的目标物体的图像区域或图像片段。这些图像区域通常被标注为背景或非目标类别,并用于模型训练中的负样本采样。负样本有助于模型学习如何区分目标物体和背景。例如,在车辆检测任务中,不包含车辆的图像区域被标记为负样本。
举例说明:
假设我们有一个目标检测任务,要求检测图像中的狗。在这种情况下,正样本将是图像中包含狗的区域,而负样本将是图像中不包含狗的区域。
- 正样本示例:一张图像中有一只狗站在公园里。公园中的狗区域将被标记为正样本,因为它包含我们要检测的目标(狗)。
- 负样本示例:另一张图像中是一幅风景画,没有狗。在这种情况下,整个图像或图像中不包含狗的区域都可以被标记为负样本。
通过使用正样本和负样本,模型可以学习从背景中准确地识别和定位目标物体,从而提高目标检测的性能。
TP(True Positive—正确的正向预测)
需要满足 3 个条件:
- 置信度(Confidence Score)大于阈值,实际上预测出的所有的框都要满足这个条件;
- 预测类型与标签类型匹配;
- 预测的 Bounding Box 与 Ground Truth 的交并比 (Intersection over Union,IoU,后续会详细介绍) 大于阈值 (e.g. 0.5) ,当有多个满足条件的预选框,则选择置信度最大的作为TP,其余的作为 FP。
总结:表示模型正确识别出的正样本数。即模型正确地将目标物体定位并识别出来的数量。
FP(False Positive—错误的正向预测)
负样本被检测为正样本的数量,也称误报,预测的 Bounding Box 与 Ground Truth 的 IoU 小于阈值的检测框(定位错误)或者预测的类型与标签类型不匹配(分类错误)。
总结:表示模型错误地将负样本错误识别为正样本的数量。即模型错误地将背景或非目标区域误认为是目标区域的数量。
FN(False Negative—错误的负向预测)
正样本没被检测为负样本的数量,也称漏报,指没有检测出的 Ground Truth 区域。
总结:表示模型错误地将正样本错误地识别为负样本的数量。即模型未能正确识别目标区域的数量。
TN(True Negative—正确的负向预测)
指的是被分配为负样本,而且分配对了的样本,代表的是被正确分类的负样本,在mAP评价指标中不会使用到。是负样本且被检测出的数量,无法计算,在目标检测中,通常也不关注 TN。
总结:表示模型正确识别出的负样本数。即模型正确地将背景或非目标区域排除在外的数量。
2、Precision(准确率)和Recall(召回率)
准确率(Precision):指模型正确识别出的正样本(TP)占所有模型预测为正样本的样本(TP + FP)的比例。它衡量了模型识别为正样本的样本中有多少是真正的正样本。
召回率(Recall):指模型正确识别出的正样本(TP)占所有真实正样本(TP + FN)的比例。它衡量了模型能够正确识别出多少正样本。
上面说了估计一大堆,可能还不明白,下面借用混淆矩阵来详细解释精度和召回率如何计算。
混淆矩阵(Confusion Matrix)常用来观察分类结果,其是一个N*N的方阵,N表示类别数。
混淆矩阵的行表示真实类别,列表示预测类别。例如,猫狗的二分类问题,有猫的图像10张,狗的图像30张,模型对这40张图片进行预测,得到的混淆矩阵为:
类别 | 阿猫 | 阿狗 |
---|---|---|
阿猫 | 7 | 3 |
阿狗 | 10 | 20 |
召回率计算:
从第一行中可知道,10张猫的图像中,7张预测为猫,3张预测为狗,猫的召回率(Recall)为7/10 = 70%,
从第二行中可知道,30张狗的图像中,10张预测为猫,20张预测为狗,狗的召回率为20/30 = 66.7%,
精确度计算:
从第一列中可知道,预测为猫的17张图像中,有7张是真正的猫,猫的精确度(Precision)为7 / 17 = 41.17%
从第二列中可知道,预测为狗的23张图像中,有20张是真正的狗,狗的精确度(Precision)为20 / 23 = 86.96%
模型的准确率(Accuracy)为:(猫预测正确样本数+狗预测正确样本数)/总样本数 ------> (7+20) / 40 = 67.5%
3、P-R curve (Precison-Recall curve)
它展示了在不同阈值下模型的准确率(Precision)和召回率(Recall)之间的权衡关系。
P-R 曲线的横轴是召回率(Recall),纵轴是准确率(Precision)。通过在不同的阈值下计算准确率和召回率,可以得到 P-R 曲线上的一系列点,这些点代表着不同的模型配置或不同的阈值选择。在理想情况下,我们希望模型的 P-R 曲线越靠近右上角,这意味着在较高的召回率下能够保持较高的准确率。
其实在实际训练过程,召回率和准确率是成反比的,召回率越高,检测出物体的框也就越多,那么识别错误的样本的概率也就越大,从而导致检测准确率的下降。
P-R 曲线的含义:
-
最佳工作点(Best Operating Point):P-R 曲线上的每个点对应于模型在不同阈值下的性能。在某些应用中,可能需要根据具体需求选择最佳的工作点。通常情况下,可以通过牺牲一些准确率来获得更高的召回率,或者相反地通过增加阈值来提高准确率。
-
评估模型性能:P-R 曲线提供了评估模型性能的一种方式,特别是在不平衡数据集中,其中正样本和负样本的数量差异较大。对于这种情况,准确率和召回率比仅仅使用准确率更具代表性。
-
权衡准确率和召回率:P-R 曲线展示了准确率和召回率之间的权衡关系。例如,如果需要更高的召回率,则可以降低阈值以捕获更多的正样本,但这可能会导致准确率下降。相反,如果需要更高的准确率,则可以增加阈值以减少误报,但可能会牺牲一些召回率。
-
PR曲线有一个缺点就是会受到正负样本比例的影响。比如当负样本增加10倍后,在Racall不变的情况下,必然召回了更多的负样本,所以精度就会大幅下降,所以PR曲线对正负样本分布比较敏感。对于不同正负样本比例的测试集,PR曲线的变化就会非常大。
4、F1 score指标
在目标检测中,如果仅仅使用准确率和召回率作为评估指标,是不太严谨的,所以提出了F1score指标。
F1分数是一个结合了准确率(Precision)和召回率(Recall)的单一指标,旨在综合评估分类模型的性能。它被定义为准确率和召回率的调和平均数。F1分数的公式如下:
使用F1评估指标有以下优势:
-
综合性能评估:F1分数综合考虑了准确率和召回率,因此它对模型在正负样本分类中的综合性能进行了评估。这是有益的,特别是在处理不平衡数据集(其中正负样本数量差异较大)时,因为在这种情况下,仅使用准确率可能会导致误导。
-
权衡准确率和召回率:F1分数强调了准确率和召回率之间的平衡。在某些应用中,我们可能希望模型能够在保持较高准确率的同时,保持相对较高的召回率,或者相反。F1分数提供了一个单一的指标,可以帮助找到在这两者之间达到平衡的点。
-
特别适用于不平衡数据:在不平衡数据集中,如果负样本远远多于正样本(或相反),那么一个简单的模型可以通过将所有样本都预测为多数类别来取得高准确率。但这并不是我们想要的,因为模型在正样本上的表现可能较差。F1分数有助于解决这个问题,因为它关注了分类器在两个类别上的整体性能。
-
用于二分类问题:F1分数主要用于二分类问题,其中模型需要将样本分为正类和负类。对于多分类问题,可以考虑使用类别间的宏平均或微平均来扩展F1分数的概念。
5、IoU (Intersection over Union)
IoU的概念比较简单,就是预测框与真实框之间的"重叠率",当预测框和真实框无限接近的时候,此时预测的位置最理想,IOU约等于1.
在目标检测过程中可以设置不同的阈值,来提高对模型训练的要求,当IoU阈值设置的越大,此时要求预测框越接近真实框。下面是不同IOU阈值下P-R曲线的变化情况。
假设你将IoU设置为0.5:
- 如果IoU≥为0.5,则将目标检测分类为True Positive(TP)
- 如果IoU<为0.5,则为错误检测,并将其归类为 False Positive(FP)
- 当图像中存在ground truth,且模型未能检测到该物体时,将其归类为False Negative(FN)
- True Negative (TN):TN是图像中我们没有预测到一个物体的每个部分。这个度量值对对象检测无效,因此我们忽略了TN。
6、AP (Average Precision)
1、AP即Average Precision,称为平均准确率,是对不同召回率点上的准确率进行平均,在PR曲线图上表现为PR曲线下面的面积。AP的值越大,则说明模型的平均准确率越高。
2、AP(average precision 平均精度):虽然名为平均精度,但AP的计算方法并不是计算Precision的平均值,而是计算每个类别的PR曲线与坐标轴围成的面积,可以用积分的方法进行计算。如果一个模型的AP越大,也就是说PR曲线与坐标轴围成的面积越大,Precision与Recall在整体上也相对较高。
7、mAP (mean Average Precision)
1、mAP(mean of Average Precision) : 对所有类别的AP值求平均值。AP可以反映每个类别预测的准确率,mAP就是对所有类的AP求平均值,用于反映整个模型的准确率。
2、如果是多类别目标检测任务,就要使用mAP,mAP是多个类别AP的平均值。这个mean的意思是对每个类的AP再求平均,得到的就是mAP的值,mAP的大小一定在[0,1]区间,越大越好。该指标是目标检测算法中最重要的一个。
3、mAP@0.5
mAP@0.5,这种形式表示在IOU阈值为0.5的情况下,mAP的值为多少。当预测框与标注框的IOU大于0.5时,就认为这个对象预测正确,在这个前提下再去计算AP的均值mAP。
4、mAP@[0.5:0.95]
存在mAP@[0.5:0.95]这样一种表现形式,这形式是多个IOU阈值下的mAP,会在区间[0.5,0.95]内,以0.05为步长,取10个IOU阈值,分别计算这10个IOU阈值下的mAP,再取平均值。
对于发表论文图表的要求,可以看出,会计算出每个类别的AP以及所有类别AP的平均值,也就是mAP。
8、AP计算案例
用一个简单的例子来演示平均精度(AP)的计算。 假设数据集中总共有5个苹果。 我们收集模型为苹果作的所有预测,并根据预测的置信水平(从最高到最低)对其进行排名。 第二列表示预测是否正确。 如果它与ground truth匹配并且IoU≥0.5,则是正确的预测,否则是错误的预测。
第一行:预测为正样本,正样本苹果总数为5个,所以P=1/1=1,R=1/5=0.2;
第二行:预测为正样本,P=2/2=1,R=2/5=0.4;
第三行:预测为负样本,P=2/3=0.67,此时预测的正样本依旧为2个,所以R=2/5=0.4;
第四行:预测为负样本,P=2/4=0.5,此时预测的正样本依旧为2个,所以R=2/5=0.4;
…
Recall随着包含更多预测而增加,但Precision会上下波动。
求出每次的precision和recall就可以画出P-R曲线,并计算绘制出的曲线与PR轴所围成的面积,就可以得到该类别的AP值。
9、不同尺度下的AP值
在看在YOLO目标检测相关论文的时候,会经常见到APs、APm、APL等实验室数据,因为yolo会生成多尺度的特征图,用于检测小目标、中目标、大目标,所以一般都会加上不同尺度的检测AP,如下:AP50表示在阈值设置为0.5时的检测AP。
什么样的尺度为小目标和大目标,COCO AP给了一个定义如下:当物体的大小小于322 就是小物体,大于962 就是大物体。
二、检测速度
1、前传耗时
从输入一张图像到输出最终结果所消耗的时间,包括前处理耗时(如图像归一化)、网络前传耗时、后处理耗时(如非极大值抑制)
2、FPS (Frames Per Second)
FPS (Frames Per Second):每秒钟能处理的图像数量,FPS用来评估目标检测的速度,当然要对比FPS,你需要在同一硬件上进行。另外也可以使用处理一张图片所需时间来评估检测速度,时间越短,速度越快。
3、浮点运算量(FLOPS)
处理一张图像所需要的浮点运算数量, 跟具体软硬件没有关系,可以公平地比较不同算法之间的检测速度。越小越好