1、检测精度指标
一、IoU交并比
IoU(交并比)
1、IOU的全称为交并比(Intersection over Union),是目标检测中使用的一个概念,IoU计算的是“预测的边框”和“真实的边框”的交叠率,即它们的交集和并集的比值。
2、IoU等于“预测的边框”和“真实的边框”之间交集和并集的比值。IoU计算如下图,B1为真实边框,B2为预测边框。最理想情况是完全重叠,即比值为1。
二、TP、TN、FP、FN的概念理解
T/F:表示预测的对错
P/N:表示预测的结果
目标检测中正负样本指的是模型自己预测出来的框与GT的IoU大于你设定的阈值即为正样本。
Prediction(预测)
Positive(正样本)
Negative(负样本)
Actual
(实际)
True
TP
TN
False
FP
FN
召回率:
精确度 :
准确率:
TP
(其他博主的观点:)
1、True Positives,指的是被分配为正样本,而且分配对了的样本,代表的是被正确分类的正样本,IoU > IoUthreshold 的检测框数量(同一Ground Truth只计算一次)。
2、满足IoU > IoUthreshold(阈值threshold根据实际情况取)的预测框数量(同一个Ground Truth只计算一次,也就是说如果有多个满足条件,只取IoU最大的那个)。
3、识别对了(T),识别结果为P,实际为P。
(本文给的观点:)正确的预测出正样本的检测框数量。
TN
(其他博主的观点:)
1、True Negatives,指的是被分配为负样本,而且分配对了的样本,代表的是被正确分类的负样本,在mAP评价指标中不会使用到。
2、是负样本且被检测出的数量,无法计算,在目标检测中,通常也不关注TN。
3、识别对了(T),识别结果为N,实际为N。
(本文给的观点:)正确的预测出负样本的检测框数量。
FP
(其他博主的观点:)
1、False Positives,指的是被分配为正样本,但分配错了的样本,代表的是被错误分类的负样本,IoU <= IoUthreshold 的检测框,或者是检测到同一个GT的多余检测框的数量。
2、负样本被检测为正样本的数量,也称误报,预测的 Bounding Box 与 Ground Truth 的 IoU 小于阈值的检测框(定位错误)或者预测的类型与标签类型不匹配(分类错误)。
3、识别错了(F),识别结果为P,实际为N。
(本文给的观点:)检测框原本为负样本,但被错误的预测为了正样本的数量。
FN
(其他博主的观点:)
1、False Negatives,指的是被分配为负样本,但分配错了的样本,代表的是被错误分类的正样本,没有检测到的GT的数量。
2、正样本没被检测为负样本的数量,也称漏报,指没有检测出的 Ground Truth 区域。预测值和真实值不一样,预测值为负样本(真实值为正样本)。
3、识别错了(F),识别结果为N,实际为P。
(本文给的观点:)检测框原本为正样本,但被错误的预测为了负样本的数量。
三、准确率(查准率)、召回率(查全率)、F1-Score
Precision(准确率,又叫查准率)
1、= TP/预测框总数,指在所有确实为正的样本中,被预测为正样本的占比。
2、通常来说,准确率越高,分类器越好。FP=0时,准确率为100%。
Recall(召回率,又叫查全率)
1、= TP/GT框数量,指在所有被预测为正的样本中,确实是正样本的占比。
2、查全率,(1−Recall) 就是漏检率,所以Recall越大越好。FP=0,目标100%检测。(但FP不一定为0,准确率不一定为100%)
F1-Score(不同博客的观点)
1、F1分数(F1-score)是分类问题的一个衡量指标。F1分数认为召回率和精度同等重要, 一些多分类问题的机器学习竞赛,常常将F1-score作为最终测评的方法。它是精确率和召回率的调和平均数,最大为1,最小为0。计算公式如下:
2、F1-score又称F1分数,是分类问题的一个衡量指标,常作为多分类问题的最终指标,它是精度和召回率的调和平均数。对于单个类别的F1分数,可使用如下公式计算:
3、单一的Precision和Recall均可以侧面反映分类器的性能指标,但是正如同前边例子,单一的评价指标很难宏观的表现分类器的好坏。F1-score可以联合评价精确率和召回率:
四、ROC曲线、P-R曲线
ROC曲线
1、ROC曲线是以为横坐标,以为纵坐标。其中TPR叫真阳率或灵敏度,就是召回率,指在实际为1的样本中预测为1的概率;FPR叫假阳率或特异度,是指实际为0的样本中预测为1的概率。
2、ROC曲线的走势如下图所示,曲线越往左上凸表明模型效果越好。ROC曲线和P-R曲线都是通过选择不同的阈值得到不同的点,从而画出曲线。
2、作用:
(1)可以利用ROC曲线对不同模型进行比较,如果一个模型的ROC曲线被另一个模型的曲线完全包住,则可断言后者的性能由于前者
(2)ROC曲线下方的面积(AUC)可以用来作为评估模型模型性能的指标.如当两个模型的ROC曲线发生交叉,则很难说哪一个模型更好,这时候可以用AUC(ROC曲线下面区域的面积,参考)来作为一个比较合理的判据。
(3)ROC曲线有个很好的特性,当测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变。
(4)ROC曲线可以反映二分类器的总体分类性能,但是无法直接从图中识别出分类最好的阈值,事实上最好的阈值也是视具体的场景所定。ROC曲线一定在y=x之上,否则就是一个不好的分类器。
(5)尽管ROC用处很大但是如果我们的数据中类别分布非常不均衡的时候,ROC就不再适用了。
参考:https://www.cnblogs.com/laozhanghahaha/p/12383363.html
P-R曲线(查准率-查全率曲线)
1、P-R图直观的显示出学习器在样本总体上的查全率、查准率,再进行比较时,若一个学习器的 P-R曲线被另外一个学习器的曲线完全“包住”,则可断言后者的性能优于前者。P-R曲线下面积的大小,在一定程度上表征了学习器在查准率和查全率上取得相对“双高”的比例。
2、在PR关系中,是一个此消彼长的关系,但往往我们希望二者都是越高越好,所以PR曲线是右上凸效果越好(也有例外,有比如在风险场景当预测为1实际为0时需要赔付时,大致会要求Recall接近100%,可以损失Precision)。所以除了特殊情况,通常情况都会使用Precision-recall曲线,来寻找分类器在Precision与Recall之间的权衡。AP就是Precision-recall 曲线下面的面积,通常来说一个越好的分类器,AP值越高。
3、当PR曲线越靠近右上方时,表明模型性能越好,与ROC曲线类似,在对不同模型进行比较时,若一个模型的PR曲线被另一个模型的PR曲线完全包住则说明后者的性能优于前者.如图中橘色线代表的模型要优于蓝色线代表的模型,若模型的PR曲线发生了交叉,则无法直接判断哪个模型更好.在周志华老师的机器学习上中提到了可以用平衡点.它是查准率=查全率时的取值,如图黑色线代表的模型的平衡点要大于橘色线模型代表的平衡点,表明前者优于后者,除此之外更为常用的是F1 score。
4、作用:
(1)PR曲线反映了分类器对正例的识别准确程度和对正例的覆盖能力之间的权衡。
(2)PR曲线有一个缺点就是会受到正负样本比例的影响。比如当负样本增加10倍后,在Racall不变的情况下,必然召回了更多的负样本,所以精度就会大幅下降,所以PR曲线对正负样本分布比较敏感。对于不同正负样本比例的测试集,PR曲线的变化就会非常大。
(3)当数据集类别分布非常不均衡的时候采用PR曲线。
五、AP、mAP
AP
1、AP即Average Precision,称为平均准确率,是对不同召回率点上的准确率进行平均,在PR曲线图上表现为PR曲线下面的面积。AP的值越大,则说明模型的平均准确率越高。
2、AP(average precision 平均精度):虽然名为平均精度,但AP的计算方法并不是计算Precision的平均值,而是计算每个类别的PR曲线与坐标轴围成的面积,可以用积分的方法进行计算。如果一个模型的AP越大,也就是说PR曲线与坐标轴围成的面积越大,Precision与Recall在整体上也相对较高。
mAP
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,再取平均值。
六、MS COCO评价指标和PASCAL VOC的评价指标
1、MS COCO评价指标中每条数据的含义
数据集网址:https://cocodataset.org/#detection-eval
1、Average Precision (AP)(这里其实就是mAP)
(1)AP:COCO的主要评价指标,设置的IoU阈值为IoU = range(0.5, 1.00, 0.05)共10个IoU的mAP的均值:
(2)将IoU阈值设置为0.5得到的mAP值,这个取值也是PASCAL VOC的评价指标
(3):更加严格的标准(因为IoU的阈值越大,说明网络预测框与GT重合度越来越高 -> 目标的定位越来越准,这对网络来说是很难的。)(如果对定位要求比较高就用这个。)
2、Across Scales
(1):[mAP针对小目标] 需检测目标(GT)的像素面积小于,则将其归为小目标 —— 衡量网络对于小目标的平均查准率
(2):[mAP针对中目标] 需检测目标(GT)的像素面积在和,则将其归为中目标 —— 衡量网络对于中等目标的平均查准率
(3):[mAP针对大目标] 需检测目标(GT)的像素面积大于,则将其归为大目标 —— 衡量网络对于大目标的平均查准率
通过这三个指标可以看出该目标检测网络对于不同尺度目标的检测效果。如果我们的任务需要检测的目标都是较小的,我们应该更加关注与参数而不是
3、Average Recall (AR)
对于目标检测网络,在代码部分会限制每张图片最终预测框的数量,这里的max就是这个数量。如max=100,即每张图片最终预测100个预测框。而这里的就表示在每张图片预测框阈值为100的情况下,平均的查全率是多少。
(1):在每张图片预测框阈值为1的情况下,平均的查全率是多少。
(2):在每张图片预测框阈值为10的情况下,平均的查全率是多少。
(3):在每张图片预测框阈值为100的情况下,平均的查全率是多少。
从上图可以看到,=64%,=63.3%,=45.2%。这说明取max取100和取10相差不大,说明模型训练时使用的数据集每张图片中目标(GT)的数目并不是很多,基本上在10左右;而当预测框数量限制在1时,它的AR仅为45.2%,说明每张图片的目标个数一般是>1的。
4、AR Across Scales
与AP、AP across scales类似,AR across scales表示对应不同目标尺度的AR。
(1):[AR针对小目标] 需检测目标(GT)的像素面积小于,则将其归为小目标 —— 衡量网络对于小目标的平均查全率。
(2):[AR针对中目标] 需检测目标(GT)的像素面积在和,则将其归为中目标 —— 衡量网络对于中等目标的平均查全率。
(3):[AR针对大目标] 需检测目标(GT)的像素面积大于,则将其归为大目标 —— 衡量网络对于大目标的平均查全率。
2、各种指标的选择 —— 基于不同的任务
不同的任务需要使用不同的指标。
(1)mAP
于PASCAL VOC的mAP来说,要看,因为它是PASCALVOC的主要评价指标。
如果我们对目标框定位精度要求较高的话,我们可以关注。如果我们对小目标检测要求比较高的话,我们可以关注,通过这个值可以了解网络对于小目标检测的平均查准率(整体情况)。
如果我们对中目标检测要求比较高的话,我们可以关注。
如果我们对大目标检测要求比较高的话,我们可以关注。
(2)AR
主要关注下面两个指标:、如果它俩AR(平均查全率)相差很小的话, 可以减少网络预测框的个数 ---> 提高目标检测的效率。
二、检测速度指标
1)FPS每秒传输帧数
FPS每秒传输帧数
1、每秒处理帧数,评价执行速度,越大越好。
2、除了检测准确度,目标检测算法的另一个重要评估指标是速度,只有速度快,才能够实现实时检测。FPS用来评估目标检测的速度。即每秒内可以处理的图片数量。当然要对比FPS,你需要在同一硬件上进行。另外也可以使用处理一张图片所需时间来评估检测速度,时间越短,速度越快。
2)FLOPS每秒浮点运算次数
FLOPS每秒浮点运算次数
1、浮点数运算,指计算量,越小越好。
2、FLOPS:全称:FLoating point Operations Per Second的缩写,即每秒浮点运算次数,或表示为计算速度。是一个衡量硬件性能的指标。通俗点讲 显卡算力,对应英伟达官网的那些:GPU算力排行榜。
3)FLOPs 浮点运算次数
FLOPs 浮点运算次数
1、每秒浮点数运算,即“吞吐量”,衡量速度,一般与硬件相关。越大越好。
2、注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。
3.1)Pytorch计算FLOPs
方法1:pip install ptflops
网址:
网址
from torchvision.models import resnet50
from ptflops import get_model_complexity_info
model = resnet50()
flops, params = get_model_complexity_info(model, (3, 200, 280), as_strings=True,
print_per_layer_stat=True, verbose=True)
print(flops)
方法2:pip install thop
参考:
网址
from torchvision.models import resnet50
from thop import profile
import torch
model = resnet50()
input = torch.randn(1, 3, 224, 224)
flops, params = profile(model, inputs=(input, ))
print("FLOPs=", str(flops / 1e9) + '{}'.format("G"))
print("FLOPs=", str(flops / 1e6) + '{}'.format("M"))
方法3:pip install torchstat
参考:
网址1 、
网址2
from torchstat import stat
import torchvision.models as models
model = models.vgg16()
stat(model, (3, 224, 224))
3.2)tf2计算FLOPs
pip install keras_flops
import tensorflow as tf
from keras_flops import get_flops
import keras.backend as K
import numpy as np
Mnasnet = tf.keras.Sequential([
tf.keras.layers.InputLayer(input_shape=(224, 224, 3)),
tf.keras.applications.NASNetMobile()
])
# Calculae FLOPS
flops = get_flops(Mnasnet, batch_size=1)
print(f"FLOPS: {flops / 10 ** 9:.03} G")
三、结论
本文讲述了检测精度指标:IoU、TP、TN、FP、FN、查准率、查全率、F1-Score、ROC曲线、P-R曲线、AP、mAP以及MS COCO评价指标和PASCAL VOC的评价指标的理解;检测速度指标:FPS、FLOPS和FLOPs,同时个别定义的理解引用了其他一些讲述概念容易理解的博主的观点组合而成。如果你觉得本章论文对你有帮助,请点个👍,谢谢。
四、参考
(1)检测精度指标:
1、https://blog.csdn.net/fortune_cookie/article/details/127117448
2、https://blog.csdn.net/wzk4869/article/details/127879761
3、https://blog.csdn.net/qq_38253797/article/details/116500993
4、https://blog.csdn.net/fly_wt/article/details/95445916
5、https://www.jianshu.com/p/be4b7d2d28b0
6、https://www.cnblogs.com/laozhanghahaha/p/12383363.html
7、https://blog.csdn.net/daige123/article/details/121648894
8、https://blog.csdn.net/weixin_44878336/article/details/124650328
9、b站视频
a. 目标检测mAP计算以及coco评价标准
b.
(2)检测速度指标:
版权归原作者 小wu学cv 所有, 如有侵权,请联系我们删除。