| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 目标检测算法的评价指标 -> 正文阅读 |
|
[人工智能]目标检测算法的评价指标 |
目标检测算法的评价指标对于一个目标检测模型的好坏,总的来说可以从以下三个方面来评估:
严格说某些场合也会很在意模型的大小,这也是一个研究方向,比如 不同比赛中的指标PASCAL VOC 挑战赛:该挑战赛目标检测评价指标官方文档,当前 PASCAL VOC 目标检测挑战赛使用的指标是 COCO 检测挑战赛:该挑战赛使用不同的指标来评估不同算法的目标检测准确性。 这里可以找到 COCO 上的目标检测性能的 12 个指标的文档。 Google Open Images Dataset V4 Competition: 使用 500 个类别的平均精度 (mAP) 来评估对象检测任务。 基础概念Intersection over Union (IoU)Intersection Over Union (IOU) 是基于 Jaccard Index 的度量,用于评估两个边界框之间的重叠。它需要一个真实边界框(即ground truth bounding box)和一个预测边界框(即predicted bounding box),通过计算IOU,我们可以判断检测是否有效(真阳性)或无效(假阳性)。 Predictions: TP - FP - FN - TN我们在训练一个模型时,我们希望这个模型性能尽量达到最优,但是结果却表现很差,我们就会去找这个模型到底哪里出问题了?应该怎么去优化?有很多方法可以衡量模型的性能,但是经得起时间考验的是混淆矩阵,它可以评估模型性能,帮助我们如何去优化。 混淆矩阵(confusion matrix): 混淆矩阵是一个N*N矩阵,用于评估分类模型的性能,其中N是目标类的数量。该矩阵将真实值和预测值进行比较,使我们能够全面了解我们分类模型的性能以及结果表现差的原因。 举个例子,对于二分类问题,我们就有一个2*2矩阵:
矩阵每一个数值具体含义如下:
为什么我们要用混淆矩阵? 假设我们想预测有多少人中出现症状之前就感染了传染性病毒,并将他们与健康人群隔离开,因此我们的目标变量有两个:感染和未感染。 假设我们预测的数据集是一个数据不平衡的数据集,其中包含940例未感染传染性病毒和60例感染了传染性病毒。预测结果统计得:TP=30,TN=930,FP=30,FN=10。如果我们仅仅用准确率(accuracy)来评估我们的模型性能,则accuracy = (930+30)/1000 = 0.96。 其中,准确率公式为: 96%的准确率看起来很高,但是它产生了一个错误的结果。我们以为模型所说的96%是指96%的准确率预测感染了传染性病毒,然而实际上未感染传染性病毒的样本占了绝大部份,其实模型是以接近96%的准确率预测未感染传染性病毒。 因此,仅仅用准确率可以用来评价模型的好坏吗?显然不能,准确率是所有预测中正确预测样本数量的百分比,在处理不平衡的数据时,准确率结果具有误导性,因为每个类的数量并不相同,而准确率更重视样本多的类。因此我们不仅仅要知道有多少样本被正确的预测,也要知道在正确预测中有多少样本是感染的等等,而混淆矩阵可以计算真阳性率、假阳性率、真阴性率、假阴性率、准确率、精确率和F指标等各种评价指标。 在检测任务中,如何创建混淆矩阵? 通过计算IOU,我们设置了一个阈值用于通过计算IOU值将检测问题转换为二分类问题,其中高于该阈值的IOU被认为是正确的预测,低于该阈值的IOU被认为是错误的预测,因此,预测分为真阳性——True Positives (TP) 、假阴性—— False Negatives (FN) 、假阳性—— False Positives (FP) 和真阴性——True Negative(TN)。 Precision精确率(查准率)是指在所有检测出的正样本中是不是实际都为正样本,即预测为正的样本中真正为正的比例。比如中垃圾邮件判断等场景中,要求有更高的precision,确保放在回收站的都是垃圾邮件。 Recall召回率(查全率)是指所有的证样本是不是都被检测出来了,即所有正样本中被正确预测的比例。 召回率和精确率是评价模型性能的两个不同维度:在图像分类中,考查最多的是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。 那么预测是怎么工作的呢?
我们计算一下person这个类的精度和召回率:
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 评价指标Precision x Recall curve在针对precision和recall优化模型时,模型不可能同时产生峰值精确率和召回率,我们需要在这两个值中间进行权衡,这种权衡取决于置信度阈值,让我们看看它是如何工作的。 任何一个预测边界框,都会与一个置信度相关联,置信度用来评估该类出现在边界框中的概率。因此我们可以设置一个阈值将这些置信度转化为分类,即置信度高于阈值则检测被认为是TP,置信度低于阈值则检测被认为是FP。我们可以通过调节置信度阈值来平衡精确率和召回率。 Precision x Recall 曲线是在平衡精确率和召回率下用来评估目标检测器模型性能的方法。 每个类都可以画一条Precision x Recall 曲线,其中召回率为x轴,精确率为y轴,曲线上的每一个点代表某置信度下的召回率和精确率。 理想状态下,随着召回率的增大,模型应具有较高的精确率,如果模型精确率不增加,那么可以考虑通过降低置信度来增加召回率。 Average Precision(AP)Average Precision是使用Precision x Recall 曲线的曲线下的面积 (AUC) 计算的,由于AP曲线通常是锯齿状的,因此在同一图中比较不同模型通常是一件不容易的事情。实际上,AP是0到1之间所有召回率的平均精确率。 Mean Average Precision(mAP)mAP 分数是通过取所有类别和/或所有 IoU 阈值的平均 AP 来计算的,具体取决于比赛。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 2:34:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |