错误类型、混淆矩阵及目标检测常用评价指标

目标检测常用评价指标

本文主要参考陈恺大佬在B站商汤账号的介绍mmdetection的视频。

检测结果的正确/错误类型

真阳性(Ture Positive):算法检测到了某类物体(Positive),而实际图中也确实有这个物体,检测结果正确(True)。
假阳性(False Positive):算法检测到了某类物体(Postive),但是图中没有这个物体,检测结果错误(False)。 又称为误检
假阴性(False Negtive):算法没有检测到某类物体(Negtive),但是图中有这个物体,检测结果错误(False)。 又称为漏检

在这里插入图片描述

左下实线框中确实有只猫,也检测到了,即TP。
右下实线框内没有物体,但是检测到了,即FP。
右上虚线框内有屏幕,但是没有检测到,即FN。

实际上,二元的混淆矩阵是这样的:

在这里插入图片描述

一定要注意:初次面对这些概念时,两个字母表示四种可能性,可能会自然而然地认为前后字母分别代表真实值和预测值的真假,但实际上不是这样的。

P/N确实是表示预测值是真或假,而T/F可不是表示真实值的真或假。T/P 和 F/N 的真正含义是:

  • T/F:表示预测的对不对,代表的是预测值与真实值之间的关系
  • P/N:表示预测值是真还是假,代表模型对某个样本的预测结果

这个一定要弄清楚,别被混淆矩阵把自己搞“混淆”了。

精确率Precision与召回率Recall

召回率=预测为真且实际为真总数实际为真总数,  即   Recall=TPTP+FN召回率=\frac{预测为真且实际为真总数}{实际为真总数}, \ \ 即\ \ \ Recall=\frac{TP}{TP+FN} 召回率=实际为真总数预测为真且实际为真总数     Recall=TP+FNTP

精确率=预测为真且实际为真总数预测为真总数,  即   Precision=TPTP+FP精确率=\frac{预测为真且实际为真总数}{预测为真总数}, \ \ 即\ \ \ Precision=\frac{TP}{TP+FP} 精确率=预测为真总数预测为真且实际为真总数     Precision=TP+FPTP

准确率=预测正确总数全部样本总数,  即   Accuracy=TP+TNTP+FP+TN+FN准确率=\frac{预测正确总数}{全部样本总数}, \ \ 即\ \ \ Accuracy=\frac{TP+TN}{TP+FP+TN+FN} 准确率=全部样本总数预测正确总数     Accuracy=TP+FP+TN+FNTP+TN

召回率是实际为真样本中预测为真的比例,精确率是预测为真样本中真实为真的比例,准确率是预测正确的比例。

两种极端的情况:

  1. 检测器将所有的锚框都判断为物体,此时召回率 Recall≈100%Recall\approx100\%Recall100% ,但是大量的背景都被误检为物体,FP很高,导致准确率很低。
  2. 检测器只将置信度最高的一个框检测为物体,当然有很大的几率是正确的,准确率 Precision≈100%Precision\approx100\%Precision100% ,但是大量的物体被漏检为背景,FN很高,导致召回率很低。

最理想的情况当然是召回率和准确率都为 100%,但在算法能力有限的现实情况下,我们应当尽可能地平衡二者。

通常做法是将检测框按照置信度排序,并设置一个置信度阈值,仅输出置信度大于该阈值的若干个框。

PR曲线和AP值

以上的做法无疑会受到阈值的选取的影响,为了得到和阈值无关的评分,我们可以遍历阈值,并对召回率和准确率求平均。

具体做法:

  1. 检测框按照置信度排序,取前 KKK 个框计算Precision和Recall。

  2. 遍历 KKK 从1到全部检测框,将得到的Precision和Recall绘制在坐标系上,得到PR曲线。

在这里插入图片描述

  1. 定义 Average Precision = Precision对Recall的平均值,即PR曲线下的面积,作为检测器的性能衡量指标。
    AP=∫01P(R)dRAP = \int_0^1P(R)dR AP=01P(R)dR

Mean AP

分类别统计AP,并按类别平均得到Mean AP。

Mean AP的完整计算流程:

  1. 将数据集中全部图像的预测框按预测类别分类。
  2. 对于某一类别的所有检测框,计算AP:
    • 按置信度将该类别所有检测框排序
    • 逐一与真值框比较,判定TP或FP,并绘制PR曲线
    • 对PR曲线插值,计算AP
  3. 求所有类别的AP的平均,得到Mean AP。
    mAP=1C∑i=1C∫01P(R)dRmAP=\frac{1}{C}\sum_{i=1}^C\int_0^1P(R)dR mAP=C1i=1C01P(R)dR CCC 是全部类别数。

部分数据集(如COCO),还需要在不同的IOU阈值下计算Mean AP并平均,作为最终评分,这可以衡量检测器在不同定位精度要求下的性能。

AP、AP50、AP75

以上我们讨论的是在固定 IOU 下的 mAP 结果,我们也提到,有时会对不同的 IOU 也做测试,并记录性能。我们经常在论文中见到 AP、AP50、AP75 这样的指标就是指的在不同的 IOU 下的 mAP 结果。

具体来说:

  • AP50、AP75:这样在 AP 后面带数字的,很好理解,即分别是在 IOU 为 50、75 下的 mAP 值。
  • AP:这样不带数字的 AP 指标通常指的是 AP@50:5:95,表示 IOU 从 50 ,取到95,步长为5(即50, 55, 60, 65, …, 90, 95),分别计算这些 IOU 值下的 mAP,再求平均。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php显示json,PHP解决JSON中文显示问题

PHP如何解决JSON中文显示问题&#xff1f;本文主要介绍了PHP JSON格式的中文显示问题解决方法&#xff0c;本文总结了3种解决中文显示\u开头字符问题的方法。希望对大家有所帮助。返回json数据中文显示的问题解决方法一&#xff1a;<?php function Notice(){include ./incl…

使用yolov5训练自己的目标检测数据集

使用yolov5训练自己的目标检测数据集 yolov4出来后不久&#xff0c;又出现了yolov5&#xff0c;没有论文。虽然作者没有放上和yolov4的直接测试对比&#xff0c;但在COCO数据集的测试效果还是很可观的。很多人考虑到YOLOv5的创新性不足&#xff0c;对算法是否能够进化&#xf…

php的integer,PHP整型 integer

整数是一个没有小数的数字。整数规则:整数必须至少有一个数字 (0-9)整数不能包含逗号或空格整数是没有小数点的整数可以是正数或负数整型可以用三种格式来指定&#xff1a;十进制&#xff0c; 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。在以下实例中我们将测试不同的数字。 …

einops和einsum:直接操作张量的利器

einops和einsum&#xff1a;直接操作张量的利器 einops和einsum是Vision Transformer的代码实现里出现的两个操作tensor维度和指定tensor计算的神器&#xff0c;在卷积神经网络里不多见&#xff0c;本文将介绍简单介绍一下这两样工具&#xff0c;方便大家更好地理解Vision Tra…

php的filter input,php中filter_input函数用法分析

本文实例分析了php中filter_input函数用法。分享给大家供大家参考。具体分析如下&#xff1a;在 php5.2 中,内置了filter 模块,用于变量的验证和过滤,过滤变量等操作&#xff0c;这里我们看下如何直接过滤用户输入的内容.fliter 模块对应的 filter_input 函数使用起来非常的简单…

COCO 数据集格式及mmdetection中的转换方法

COCO 数据集格式及mmdetection中的转换方法 COCO格式 CV中的目标检测任务不同于分类&#xff0c;其标签的形式稍为复杂&#xff0c;有几种常用检测数据集格式&#xff0c;本文将简要介绍最为常见的COCO数据集的格式。 完整的官方样例可自行查阅&#xff0c;以下是几项关键的…

php获取h1,jQuery获取h1-h6标题元素值方法实例

本文主要介绍了jQuery实现获取h1-h6标题元素值的方法,涉及$(":header")选择器操作h1-h6元素及事件响应相关技巧,需要的朋友可以参考下&#xff0c;希望能帮助到大家。1、问题背景&#xff1a;查找到h1-h6&#xff0c;并遍历它们&#xff0c;打印出内容2、实现代码&am…

在导入NVIDIA的apex库时报错 ImportError cannot import name ‘UnencryptedCookieSessionFactoryConfig‘ from

在导入NVIDIA的apex库时报错 ImportError: cannot import name ‘UnencryptedCookieSessionFactoryConfig’ from ‘pyramid.session’ (unknown location) 报错 在使用NVIDIA的apex库时报错 ImportError: cannot import name ‘UnencryptedCookieSessionFactoryConfig’ fro…

php怎么取request,PHP-如何在Guzzle中获取Request对象?

我需要使用Guzzle检查数据库中的很多项目.例如,项目数量为2000-5000.将其全部加载到单个数组中太多了,因此我想将其分成多个块&#xff1a;SELECT * FROM items LIMIT100.当最后一个项目发送到Guzzle时,则请求下一个100个项目.在“已满”处理程序中,我应该知道哪个项目得到了响…

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 论文简析及关键代码简析

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 论文简析及关键代码简析 论文&#xff1a;https://arxiv.org/abs/2104.00323 代码&#xff1a;https://github.com/dvlab-research/JigsawClustering 总结 本文提出了一种单批次&#xff0…

java jps都卡死,java长时间运行后,jps失效

在部署完应用后&#xff0c;原本jps使用的好好的&#xff0c;能正确的查询到自己正在运行的java程序。但&#xff0c;过了一段时间后&#xff0c;再使用jps来查看运行的应用时&#xff0c;自己运行的程序都看不到&#xff0c;但是自己也没有关闭这些程序啊&#xff01;然而使用…

指针(*)、取地址()、解引用(*)与引用()

指针(*)、取地址(&)、解引用(*)与引用(&) C 提供了两种指针运算符&#xff0c;一种是取地址运算符 &&#xff0c;一种是间接寻址运算符 *。 指针是一个包含了另一个变量地址的变量&#xff0c;您可以把一个包含了另一个变量地址的变量说成是"指向"另一…

matlab电类,985电气研二,有发过考研经验贴 电气电力类的有

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼clc;clear;p[2.259;2.257;2.256;2.254;2.252;2.248;2.247;2.245;2.244;2.243;2.239;2.238;2.236;2.235;2.234;2.231;2.229;2.228;2.226;2.225;2.221;2.220;2.219;2.217;2.216;2.211;2.209;2.208;2.207;2.206;2.202;2.201;2.199;2.1…

matlab legend 分块,matlab legend 分块!

matlab legend 分块&#xff01;(2013-03-26 18:07:38)%%%压差clc;clear all;figure(55);set (gcf,Position,[116 123 275 210],color,w);P[25 26 27 28 29 30 31 32 33 34 35];%理论q0.00006*pi*28*P*10^(6)*0.03^3/(12*0.028448*5);q1110.00006*pi*28*P*10^(6)*0.03^3/(12*0.…

利用opencv-python绘制多边形框或(半透明)区域填充(可用于分割任务mask可视化)

利用opencv-python绘制多边形框或&#xff08;半透明&#xff09;区域填充&#xff08;可用于分割任务mask可视化&#xff09; 本文主要就少opencv中两个函数polylines和fillPoly分别用于绘制多边形框或区域填充&#xff0c;并会会以常见用途分割任务mask&#xff08;还是笔者…

matlab与maple互联,Matlab,Maple和Mathematica三款主流科学计算软件的互操作

本文根据网上零散的信息以及这三款软件自带的说明文档整理而成&#xff0c;为备忘而记录。记录了Matlab和Maple之间的相互调用&#xff0c;以及Matlab和Mathematica之间相互调用的安装配置方法。为何需要互操作&#xff1f; 数值计算和图形方面Matlab毫无疑问是最强的&a…

PyTorch中的topk方法以及分类Top-K准确率的实现

PyTorch中的topk方法以及分类Top-K准确率的实现 Top-K 准确率 在分类任务中的类别数很多时&#xff08;如ImageNet中1000类&#xff09;&#xff0c;通常任务是比较困难的&#xff0c;有时模型虽然不能准确地将ground truth作为最高概率预测出来&#xff0c;但通过学习&#…

java高级语言特性,Java高级语言特性之注解

注解的定义Java 注解(Annotation)又称 Java 标注&#xff0c;是 JDK1.5 引入的一种注释机制。注解是元数据的一种形式&#xff0c;提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响。注解本身没有任何意义&#xff0c;单独的注解就是一种注释&am…

C/C++中的typedef 和 #define

C/C中的typedef 和 #define typedef C/C中的关键字typedef允许用户为类型名来起一个新名字&#xff0c;通常会是缩写或者能够清晰表明类型含义的新名字。 例&#xff1a; typedef unsigned int UINT; UINT 100;值得注意的是&#xff0c;typedef除了为C/C内置的数据类型取别…

php3.2.3 升级,thinkphp3.2.3 升级到3.2.4时出错问题

有些项目最初用OneThink做的&#xff0c;而OneThink 默认使用的TP 是3.2.0 的&#xff0c;没事的时候就想给升级一下&#xff0c;但是直接复制进去的时候&#xff0c;有错误&#xff0c;导致OneThink 不能运行&#xff0c;排查后&#xff0c;需要修改两个地方1、修改 Applicati…