目标检测的中的指标的含义及其实现

news2025/1/16 7:47:17

目录

一、Precision和Recall

二、IoU (Intersection over Union)

三、top5、top1

四、Average Precision

五、COCO数据集的评价指标

1、Average Precision (AP)

2、Evaluation Code

3、Analysis Code


一、Precision和Recall

  • Precision是查准率、精确率的意思。预测为正的结果中,有多少真正是正样本。
  • Recall是查全率、召回率的意思。对所有正样本有多少预测出来了。

数学定义如下,

                                            \\TP = True positive\\ TN = True negative\\ FP = False positive\\ FN = False negative\\ \\ \\ Precision=\frac{TP}{TP+FP}\\ \\ \\Recall = \frac{TP}{TP+FN} \\ \\ \\ F_1 = 2 \cdot \frac{precision\cdot reacll}{precision + reacll}

例如,对于癌症预测,

                                          \\Precision=\frac{TP}{total\ posotive\ results}\\ \\ \\ Recall = \frac{TP}{total cancer cases}

二、IoU (Intersection over Union)

IoU测量两个区域之间的重叠程度,在目标检测中衡量预测结果和标签(真实的目标边界)之间的重叠程度。

                               这里写图片描述

python的实现代码如下:
 

def calculateIoU(candidateBound, groundTruthBound):
    cx1 = candidateBound[0]
    cy1 = candidateBound[1]
    cx2 = candidateBound[2]
    cy2 = candidateBound[3]
 
    gx1 = groundTruthBound[0]
    gy1 = groundTruthBound[1]
    gx2 = groundTruthBound[2]
    gy2 = groundTruthBound[3]
 
    carea = (cx2 - cx1) * (cy2 - cy1) #C的面积
    garea = (gx2 - gx1) * (gy2 - gy1) #G的面积
 
    x1 = max(cx1, gx1)
    y1 = max(cy1, gy1)
    x2 = min(cx2, gx2)
    y2 = min(cy2, gy2)
    w = max(0, x2 - x1)
    h = max(0, y2 - y1)
    area = w * h #C∩G的面积
 
    iou = area / (carea + garea - area)
 
    return iou

三、top5、top1

top-1正确率,就是你预测的label取最后概率向量里面最大的那一个作为预测结果,如过你的预测结果中概率最大的那个分类正确,则预测正确,否则预测错误。top5就是最后概率向量最大的前五名中,只要出现了正确概率即为预测正确。否则预测错误。

四、Average Precision

下面创建一个简单的示例来演示平均精度(AP)的计算。在数据集中共有5个苹果。收集了模型对苹果的所有预测,并根据预测的置信水平(从最高的置信水平到最低的置信水平)对其进行排序。第二列表示预测是否正确。如果它匹配ground truth且IoU≥0.5,则是正确的。

                         这里写图片描述

Rank代表第几次预测,计算第3行的精度和收回值。精度是TP = 2/(2 + 1) = 2/3 = 0.67的比例。召回率是TP在可能的阳性结果中所占的比例2/(2 + 3)= 2/5 = 0.4。当包含更多的预测时,召回率会增加,但精确度会上下波动。用召回的精确度来绘制图表:

                    这里写图片描述

AP的概念可以看作是在精确回忆图(橙色图)下找到区域,但通过平滑之字形来近似计算。召回率 ȓ 取值 0, 0.1, 0.2, …, 0.9 and 1.0 ,对任意大于ȓ的召回率用最大精度替换精度。

                                                               

实际上,在图中把它形象化要容易得多。在召回值(0、0.1、0.2、……、0.9和1.0)找到最高精度值。AP(平均精度)计算为以下11个召回级别的最高精度平均值: 

这里写图片描述

这接近于求出橙色曲线下的总面积并除以11。下面是更精确的定义。

                   这里写图片描述

pinterp(0.7)在下面的黄色框中找到最大值:

                             这里写图片描述

在这个例子中,AP =(5×1.0 + 4×0.57 + 2×0.5)/11

                       这里写图片描述

mAP只是所有类的平均值。在许多数据集中,它通常被称为AP。

  • PASCAL VOC中的AP

PASCAL VOC是一种流行的对象检测数据集。对于PASCAL VOC竞赛,IoU > 0.5的预测为正。但是,如果检测到同一物体的多次检测,则将第一次检测为阳性,其余为阴性。PASCAL VOC中的mAP与上文讨论的AP相同。

  • COCO 的AP

最新的研究论文倾向于只给出COCO数据集的结果。对于COCO, AP是多个IoU的平均值(考虑正匹配的最小IoU)。AP@ [5:。95]对应IoU从0.5到0.95的平均AP,步长为0.05。在COCO竞赛中,AP是80个类别中超过10个IoU级别的平均值。:从0.5到0.95,步长为0.05)。

注意:另一种看法是有11个值APr(0),APr(1)…APr(10),图表中有11个bar。bar的总面积是多少?AP区域是一个“概念理解”。但精确的数学方程很复杂。一旦你意识到APr(0)不是1,用它来计算平均值也是有意义的。

五、COCO数据集的评价指标

1、Average Precision (AP)

AP                               % AP at IoU=0.50:0.05:0.95 (primary challenge metric)

APIoU=.50                   % AP at IoU=0.50 (PASCAL VOC metric)

APIoU=.75                   % AP at IoU=0.75 (strict metric)

AP Across Scales:

APsmall                       % AP for small objects: area < 322

APmedium                   % AP for medium objects: 322 < area < 962

APlarge                        % AP for large objects: area > 962

Average Recall (AR):

ARmax=1                     % AR given 1 detection per image

ARmax=10                   % AR given 10 detections per image

ARmax=100                 % AR given 100 detections per image

AR Across Scales:

ARsmall                       % AR for small objects: area < 322

ARmedium                   % AR for medium objects: 322 < area < 962

ARlarge                        % AR for large objects: area > 962

  1. 除非另有说明,否则AP和AR在多个交汇点(IoU)值上取平均值。具体来说,我们使用10个IoU阈值0.50:0.05:0.95。这是对传统的一个突破,其中AP是在一个单一的0.50的IoU上计算的(这对应于我们的度量APIoU=.50 )。超过均值的IoUs能让探测器更好定位(Averaging over IoUs rewards detectors with better localization.)。
  2. AP是所有类别的平均值。传统上,这被称为“平均准确度”(mAP,mean average precision)。我们没有区分AP和mAP(同样是AR和mAR),并假定从上下文中可以清楚地看出差异。
  3. AP(所有10个IoU阈值和所有80个类别的平均值)将决定赢家。在考虑COCO性能时,这应该被认为是最重要的一个指标。
  4. 在COCO中,比大物体相比有更多的小物体。具体地说,大约41%的物体很小(面积<32^2),34%是中等(32^2< area < 96^2)),24%大(area > 962)。测量的面积(area)是分割掩码(segmentation mask)中的像素数量。
  5. AR是在每个图像中检测到固定数量的最大召回(recall),在类别和IoU上平均。AR与提案评估(proposal evaluation)中使用的同名度量相关,但是按类别计算。
  6. 所有度量标准允许每个图像(在所有类别中)最多100个最高得分检测进行计算。
  7. 除了IoU计算(分别在框(box)或掩码(mask)上执行)之外,用边界框和分割掩码检测的评估度量在所有方面是相同的。

2、Evaluation Code

评估代码可在COCO github上找到。 具体来说,分别参见Matlab或Python代码中的CocoEval.m或cocoeval.py。另请参阅Matlab或Python代码(demo)中的evalDemo。在运行评估代码之前,请按结果格式页面上描述的格式准备结果(查看具体的结果格式MS COCO数据集比赛参与(participate)(来自官网))。

评估参数如下(括号中的默认值,一般不需要改变):

params{

    "imgIds"         : [all]N img ids to use for evaluation

    "catIds "          : [all] K cat ids to use for evaluation cat=category

    "iouThrs"        : [0.5:0.05:0.95] T=10 IoU thresholds for evaluation

    "recThrs"        : [0:0.01:1] R=101 recall thresholds for evaluation

    "areaRng"      : [all,small,medium,large] A=4 area ranges for evaluation

    "maxDets"      : [1 10 100] M=3 thresholds on max detections per image

    "useSegm"    : [1] if true evaluate against ground-truth segments

    "useCats"      : [1] if true use category labels for evaluation

}

运行评估代码通过调用evaluate()和accumulate()产生两个数据结构来衡量检测质量。这两个结构分别是evalImgs和eval,它们分别衡量每个图像的质量并聚合到整个数据集中。evalImgs结构体具有KxA条目,每个评估设置一个,而eval结构体将这些信息组合成 precision 和 recall 数组。这两个结构的细节如下(另请参阅CocoEval.m或cocoeval.py):

evalImgs[{

    "dtIds"               : [1xD] id for each of the D detections (dt)

    "gtIds"               : [1xG] id for each of the G ground truths (gt)

    "dtImgIds"        : [1xD] image id for each dt

    "gtImgIds"        : [1xG] image id for each gt

    "dtMatches"     : [TxD] matching gt id at each IoU or 0

    "gtMatches"     : [TxG] matching dt id at each IoU or 0

    "dtScores"       : [1xD] confidence of each dt

    "dtIgnore"        : [TxD] ignore flag for each dt at each IoU

    "gtIgnore"        : [1xG] ignore flag for each gt

}]

eval{

    "params"        : parameters used for evaluation

    "date"              : date evaluation was performed

    "counts"          : [T,R,K,A,M] parameter dimensions (see above)

    "precision"     : [TxRxKxAxM] precision for every evaluation setting

    "recall"            : [TxKxAxM] max recall for every evaluation setting

}

最后,summary()根据eval结构计算前面定义的12个检测指标。

3、Analysis Code

除了评估代码外,我们还提供一个函数analyze()来执行误报的详细分类。这受到了Derek Hoiem等人在诊断物体检测器中的错误(Diagnosing Error in Object Detectors)的启发,但在实现和细节方面却有很大不同。代码生成这样的图像:

这两幅图显示了来自2015年检测挑战赛获胜者Kaiming He等人的ResNet(bbox)检测器的分析结果。左图显示了ResNet的人员类别错误;右图是ResNet对所有类别平均值的整体分析。每个绘图是一系列精确召回(precision recall)曲线,其中每个PR曲线被保证严格地高于之前的评估设置变得更宽容。曲线如下:

1)C75:在IoU = 0.75(严格的IoU的AP)的PR(precision),对应于APIoU=.75度量曲线下的面积(area under curve )。

2)C50:IoU = 0.50处的PR(PASCAL IoU处的AP),对应于APIoU=.50度量曲线下面积。

3)Loc:在IoU =0 .10的PR(定位误差(localization errors ignored)被忽略,但不重复检测)。 所有其余的设置使用IoU = 0.1。

4)Sim:超类别误报(fps,supercategory false positives)被移除后的PR值。具体而言,与具有不同类标签但属于同一个超类别的对象的任何匹配都不会被视为fp(或tp)。通过设置同一超类别中的所有对象与所讨论的类具有相同的类标签并将它们的忽略标志设置为1来计算Sim。注意,该人是单例超类别,因此其Sim结果与Loc完全相同。

5)Oth:所有类型混乱被移除后的PR值。与Sim类似,除了现在如果检测与任何其他对象匹配,则不再是fp(或tp)。计算Oth的方法是将所有其他对象设置为与所讨论的类具有相同的类标签,并将忽略标志设置为1。

6)BG:所有背景误报(和类混乱(class confusion))被移除后的PR。 对于单个类别,BG是一个阶跃函数,直到达到最大召回后才降为0(跨类别平均后曲线更平滑)。

7)FN:在所有剩余错误都被删除后(平均AP = 1)的PR。

每条曲线下面的区域显示在图例的括号中。在ResNet检测器的情况下,IoU = 0.75的整体AP为0.399,完美定位将使AP增加到0.682。有趣的是,消除所有类别混乱(超范畴内和超范畴内)只会将AP略微提升至0.713。除去背景fp会将性能提高到0.870 AP,而其余的错误则缺少检测(尽管假设更多的检测被添加,这也会增加大量的fps)。总之,ResNet的错误来自不完美的定位和背景混淆。

对于一个给定的探测器(detector),代码总共产生了372个块(plots)!共有80个类别(category),12个超类别(supercategory),1个总体结果,总共93个不同的设置,分析是在4个尺度(scale)(全部,小,中,大,所以93 * 4 = 372个块)进行。 文件命名为[supercategory] - [category] - [size] .pdf(对于80 * 4每个分类结果),overall- [supercategory] - [size] .pdf(对于12 * 4每个超类别结果)全部[[size] .pdf为1 * 4的整体结果。在所有图中,通常总体和超类别的结果是最感兴趣的。

注意:analyze()可能需要很长时间才能运行,请耐心等待。因此,我们通常不会在评估服务器上运行此代码;您必须使用验证集在本地运行代码。最后,目前analyze()只是Matlab API的一部分; Python代码即将推出。

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

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

相关文章

基于储能电站服务的冷热电多微网系统双层优化配置附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

QT 系统学习 day04 事件 HTTP网络请求, 音乐播放器,上位机串口通行

1.HTTP 网络 1.头文件 &#xff1a; 网络 /***** HTTP 网络相关模块 *****/ #include <QNetworkAccessManager> /** 网络访问类 **/ #include <QNetworkRequest> /** 网络请求数据类 **/ #include <QNetworkReply> /** 网络结果…

Spring学习:五、AOP 面向切面编程、Spring与Mybatis整合

7. AOP 面向切面编程 7.1 AOP概述 ​ AOP英文名为Aspect Oriented Programming&#xff0c;意为面向切面编程&#xff0c;通过预编译方式和运行期间动态代理实现程序功能统一维护的一种技术。AOP是OOP的延续&#xff0c;是Spring框架中的一个重要内容&#xff0c;利用AOP可以…

C++不知算法系列之排序从玩转冒泡算法开始

1. 前言 所谓排序&#xff0c;指把数据群体按个体数据的特征按从大到小或从小到大的顺序存放。 排序在应用开发中很常见&#xff0c;如对商品按价格、人气、购买数量等排序&#xff0c;便于使用者快速找到数据。 常见的排序算法分为两大类&#xff1a; 比较类&#xff1a;通…

springboot奖助学金评审系统的设计与实现毕业设计源码031035

奖助学金评审系统的设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用…

③【Maven】创建Maven工程,解读核心配置。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 创建Maven工程&#xff0c;解读核心配置。一、…

React render 的原理和触发时机

一、原理 在类组件和函数组件中&#xff0c;render函数的形式是不同的。 在类组件中render函数指的就是render方法&#xff1b;而在函数组件中&#xff0c;指的就是整个函数组件。 class Foo extends React.Component {render() { //类组件中return <h1> Foo </h1&…

CANoe的安装及打开

1. 安装 CANoe分为软件和硬件。硬件是一个盒子,可以连接真实ECU进行剩余仿真测试 软件需要安装使用,可以在Vector官方网站上下载软件包:https://www.vector.com/cn/zh/products/products-a-z/software/canoe/#c4327 我们以CANoe 15版本为例,下载后是压缩包 解压后,双击运…

结构(structure)创建——直接赋值法与使用struct函数创建法。

一些不同类型的数据组合成一个整体&#xff0c;虽然各个属性分别具有不同的数据类型&#xff0c;但是它们之间是密切相关的&#xff0c;结构&#xff08;(Structure&#xff09;类型就是包含一组记录的数据类型。结构类型的变量多种多样&#xff0c;可以是一维数组、二维数组或…

全面梳理Spring Boot框架的日志体系结构

文章目录1. Java 日志概览1.1 总体概览1.2 日志级别1.3 综合对比1.4 最佳实践2. Spring Boot 日志实现2.1 Spring Boot 日志配置2.2 Logback 配置2.3 Log4j 配置之前录过一个视频和大家分享 Spring Boot 日志问题&#xff0c;但是总感觉差点意思&#xff0c;因此松哥打算再通过…

第十八章 SPFA算法以及负环问题(利用dijkstra推导出该算法,超级详细!!)

第十八章 SPFA算法以及负环问题一、dijkstra算法的弊端二、dijkstra算法的优化1、SPFA算法&#xff08;1&#xff09;算法思路&#xff1a;&#xff08;2&#xff09;算法模板&#xff1a;问题&#xff1a;模板&#xff1a;逐行分析&#xff1a;三、SFPA解决负环问题&#xff1…

uni-clould常用笔记

一&#xff0c;云函数 定义&#xff1a; // hellocf云函数index.js入口文件代码 use strict; exports.main async (event, context) > {//event为客户端上传的参数let c event.a event.breturn {sum: c} // 通过return返回结果给客户端 }调用&#xff1a; // 客户端调…

【Linux】su 和 sudo 命令

su 命令 su 命令作用&#xff1a;在已登录的会话中切换到另外一个用户。 1、su root 切换超级用户root角色&#xff0c;但不切换用户环境。需要输入root角色的密码。 2、su - root 切换root角色&#xff0c;并切换用户环境。 sudo 命令 sudo 命令作用&#xff1a;暂时切…

【树莓派不吃灰】命令篇⑩ 记录Linux常用命令

目录1. 命令格式1.1 mount2. 文件处理命令2.1 ls2.2 mkdir2.3 cd2.4 pwd2.5 rmdir2.6 cp2.7 mv2.8 rm2.9 touch2.10 cat、tac2.11 more、less、head、tail2.12 ln3. 权限管理命令3.1 chmod3.2 chown3.3 chgrp3.4 umask4. 文件搜索命令4.1 find4.2 locate4.3 which4.4 whereis4.…

进阶 - Git的标签管理

本篇文章&#xff0c;是基于我自用Windows&#xff08;Win10&#xff09;系统当做示例演示 本地仓库在&#xff1a;E:\test_git_rep 远程仓库是&#xff1a;gitgithub.com:lili40342/test_git_rep.git 描述测试环境的目的&#xff0c;是更好的解释测试过程&#xff0c;以免对你…

elasticsearch-8.5.2快速入门和kibana-8.5.2的使用

一、 安装 官方安装Elasticsearch&#xff0c;和ES可视化工具kibana。安装下载过程略。 二、 启动Elasticsearch。 windows系统&#xff0c;直接进入到如图目录&#xff0c;然后启动elasticsearch.bat&#xff0c;这个就是ES服务。 启动后&#xff0c;我们可以访问https://…

#438 沸腾客厅:从数字藏品到Web3.0,不止于事件营销

点击文末“阅读原文”即可收听本期节目数字藏品是什么&#xff1f;数字藏品是指使用区块链技术&#xff0c;对应特定的作品、艺术品生成的唯一数字凭证&#xff0c;在保护其数字版权的基础上&#xff0c;实现真实可信的数字化发行、购买、收藏和使用。2022年是天津文化中心成立…

「Redis」10 三大缓存问题、分布式锁

笔记整理自【尚硅谷】Redis 6 入门到精通 超详细 教程 Redis——三大缓存问题、分布式锁 1. 三大缓存 缓存穿透 问题描述 key 对应的数据在数据源并不存在&#xff0c;每次针对此 key 的请求从缓存获取不到&#xff0c;请求都会压到数据源&#xff0c;从而可能压垮数据源。 …

Java入门教程(27)——重写和final关键字

文章目录1.重写(override)2.final关键字实例1&#xff1a;修饰变量实例2.修饰方法实例3.修饰类1.重写(override) 什么是重写呢&#xff0c;顾名思义&#xff0c;子类重写父类的方法&#xff0c;可以用自身行为替换父类行为。方法重写需要符合的条件&#xff1a; 方法名、形参列…

【Linux】静动态库的制作和使用

前言 好久不见&#xff0c;甚是想念~ 本篇文章具体以操作为主&#xff0c;介绍在Linux下如何打包动静态库&#xff0c;并且如何使用这些库&#xff0c;同时&#xff0c;简单的阐述一下原理。让我们开始吧~ 上一篇Linux文章传送地址~ 【Linux】基础IO的理解与操作 - fd_柒海啦的…