【转载】目标检测mAP的含义

news2024/11/16 11:53:57

转载自三叔家的猫
https://blog.csdn.net/qq_39056987
https://blog.csdn.net/qq_39056987/article/details/104348493

            <div id="content_views" class="markdown_views prism-atom-one-light">
                <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
                    <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
                </svg>
                <p>相信大家在看一些目标检测论文中经常会看到作者将自己的模型和其他的模型做了mAP比较,mAP作为目标检测中一个非常重要的评估指标,是对模型好坏的评价标准,当时在看YOLOv3、SSD、Faster R-CNN等这些论文的时候,对mAP还不是很熟悉,看了很多的博文,写得都很零碎,很难理解,虽然大概能明白其原理,但是可能对于很多刚进入这个领域的同学来说,难度还是很大的,刚好这几天被困在家没事做,在复习之前的东西,也重新整理一下本人对mAP的理解,用这篇博客记录下来。</p> 

YOLOv3论文中的各个模型的mAP对比图:
在这里插入图片描述
目标检测问题中,每张图片可能包含多个不同类别的不同物体,需要评测模型的分类和定位性能.

因此,图像分类问题中的精度指标是不能直接适用的. 这就是为什么采用 mAP 的原因.

一、理解mAP前要知道的一些基础概念

1.IOU

IoU 的全称为交并比(Intersection over Union),在目标检测中即计算预测边界框与真实边界框的重叠程度,重叠程度越高,说明越接近真实框。IoU 计算的是 “预测的边框” 和 “真实的边框” 的交集和并集的比值,即公式等于:

IOU = 相交的面积 / 相并的面积

在这里插入图片描述

2. 混淆矩阵

混淆矩阵是机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。其中矩阵的行表示真实值,矩阵的列表示预测值,矩阵表现形式,如下:
在这里插入图片描述
为了更好的理解,我们把矩阵中英文翻译成字面信息,True(对)、False(错)、Positive(正例)、Negative(负例),混淆矩阵重新整理一下:
在这里插入图片描述
现在我们来分析一下这个混淆矩阵,在mAP计算中,混淆矩阵的概念是非常重要的,如果你这步都没有理解的话,那接下来的mAP计算你肯定也看不懂。

2.1 真正例 TP(True Positives):

预测结果是True(对),真实值为Positives(正例),模型认为它也是Positives(正例);在一般情况下,会认为IOU>0.5时为真正例,在一些数据集上的指标也是为0.5;

2.2 假正例 FP(False Positives)

预测结果是False(错),真实值为Negative(负例),模型却认为它是Positives(正例);同理,一般情况下会认为 IOU<0.5 时为假正例;

2.3 假反例 FN( False Negatives)

预测结果是False(错),真实值为Positives(正例),模型预测它为Negative(负例);

2.4 真反例 TN(True Negatives)

预测结果为True(对),真实值为Negative(负例),模型预测它为Negative(负例);一般用不到这个

理解了混淆矩阵里的元素概念后,我们就可以继续了解以下概念

2.5 准确率(Accuracy)

即表示分类模型所判断的所有结果中,预测正确的结果占比,公式为:
在这里插入图片描述
一般不会作为模型的评估标准;

2.6 精准率或者查准率(precision)

即表示在所有预测值为正例中,有多少正例被预测出来,计算公式为:
在这里插入图片描述
相对于准确率来说,对模型的好坏评估结果会更好,注意和上面的准确率区分;

2.7 召回率(Recall)

即表示所有真实值为正例中有多少被预测出来,可以理解为有多少正确的目标被召回(找出),计算公式为:
在这里插入图片描述
在一些特定场景中,会将其作为模型评估标准;

2.8 平均精度 AP(Average Precision)

PR曲线(红线)以下与横轴、纵轴之间的面积。PR曲线是由Precision(精准率或者查准率)与Recall(召回率或者查全率)构成的曲线,横轴为Recall,纵轴为Precision。
在这里插入图片描述
2.9 mAP(mean Average Precision)

AP衡量的是对一个类检测好坏,mAP就是对多个类的检测好坏。在多类多目标检测中,计算出每个类别的AP后,再除于类别总数,即所有类别AP的平均值,比如有两类,类A的AP值是0.5,类B的AP值是0.2,那么mAP=(0.5+0.2)/2=0.35。

二、mAP计算过程

要计算mAP,首先要计算每一类的AP,比我我们有一个项目,有一个类别检测的是人脸,模型训练完后,我们有一组测试图片,每张图片上都有已经标记好的人脸 label ,这样我们就有了人脸的真实边界框(Ground Truth),在每张图片输入模型后会得到一系列人脸类别的预测边界框,每一个框上面都有一个置信度(暂时不考虑其他类别的框)。

将每张测试图片进行检测后,会得到一系列预测边界框集合,然后将这个预测边界框集合按照置信度降序排序。对于某一张测试图片,我们先计算该图片上人脸类别的预测边界框和真实的边界框的重叠度(IOU),当重叠度(IOU)大于设定的阈值(一般为0.5,可以自己设置)则将该边界框记作真正例(TP),否则记为假正例(FP)。对于测试集中的每一张图片均进行上述的操作(注意:在计算某一张图片的预测框是否为TP时,会从预测框集合中选取出该图片的预测框和真实框做对比)由此可以判定预测边界框集合中的所有预测框属于TP或者是FP。

比如下面三张测试图片,检测的是人脸,绿色框表示真实边界框,红色框表示预测边界框,旁边的红色数字为置信度。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以得出三个真实边界框(GT1、GT2、GT3),三个预测框边界框(BBox1,BBox2, BBox3)。

  1. 首先按照置信度进行降序排序;
  2. 对于每张图片中的预测框计算IOU,可以很清楚的看出:BBox1为TP,BBox2为FP,BBox3为TP;
  3. 之后计算不同召回率(Recall)下的精准率(Precision)值。对于第一个预测边界框BBox1,其Precision = TP / (TP+NP)=1/(1+0)=1Recall = TP / GT(总真实框数)= 1/3,同理,排序后的前两个预测边界框BBox1、BBox3,计算Precision = 1+1 / (1+1)= 1 ,Recall = 2/3,接下来三个预测边界框BBox1、BBox2、BBox3,Precision = 1+1 / (1+1+1)= 2/3 ,Recall = 2/3,这样我们就有了一组Precision、Recall值[(1,1/3),(1,2/3),(2/3,2/3)]
  4. 绘制PR曲线如下图,然后每个“峰值点”往左画一条线段直到与上一个峰值点的垂直线相交。这样画出来的黄色线段与坐标轴围起来的面积就是AP值。这里
    AP = (1/3 - 0)x 1 + (2/3 - 1/3)x 1 + (1 - 2/3)x 0 = 0.667
    在这里插入图片描述

按照如上方法计算其他所有类的AP,最后取平均值即为mAP(mean Average Precision)
在这里插入图片描述

其中C表示总类别数目,APi表示第i类的AP值。

三、例子(AP计算)

再通过个例子来更好的理解mAP计算过程,该部分摘自这篇博客,原文链接:目标检测中的评价指标mAP理解及计算

比如说我们的测试集中类A的GT(真实框)有7个,经过目标检测模型预测到了10个边界框,经过上次排序及判断操作,有如下结果:
在这里插入图片描述
按照confidence(置信度)降序排序。从上表TP可以看出我们预测正确5个(TP=5),从FP看出预测错误5个(FP=5)。除了表中已预测到的5个GT,还有2个GT并未被预测出来(FN=2)。
接下来计算AP,计算前*个BBox得到的precision和recall:
在这里插入图片描述
在计算precision和Recall时Rank指的是前个预测边界框的TP和FP之和。

于是我们得到了一个recall阈值列表[0,0.14,0.29,0.43,0.57,0.71,1],为recall阈值列表中的各值生成对应的precision列表,选择recall>=阈值元素所对应的precision的最大值。为此可得precision列表为[1,1,1,0.5,0.5,0.5,0]。

在这里举个计算的例子吧,比如找recall阈值列表中0.57所对应的precision,当recall>=0.57时,由上表可得precision为max{0.44,0.5}=0.5,其他recall对应precision的选取同理。

有了这两个列表就可以计算类A的AP了:
AP=(0.14−0)∗1+(0.29−0.14)∗1+(0.43−0.29)∗0.5+(0.57−0.43)∗0.5+(0.71−0.57)∗0.5+(1−0.71)∗0=0.5。

同样可以通过绘制PR曲线计算线下面积,如下图所示:
在这里插入图片描述
AP值即浅蓝色图形的面积,蓝色折线为recall、precision点,同理求出其他类的AP,即可算出mAP值。


参考文档:

  1. 理解目标检测当中的mAP

  2. 目标检测中的评价指标mAP理解及计算

  3. 目标检测评测指标mAP及计算[译]

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

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

相关文章

不用服务器 | 我搭建了一个属于自己的GPT聊天应用!!!

原文地址&#xff1a;aiutools.fun/archives/5118 平台限制部分内容未显示&#xff0c;详情请访问原文。 展示 不废话&#xff0c;直接上干货&#xff01; 我这里搭建的Lobe Chat 支持 聊天TTS & STT 语音会话文生图各种优秀的插件 下面搭建好的样子 前期准备 需要…

(2)滑动窗口算法练习:无重复字符的最长子串

无重复字符的最长子串 题目链接&#xff1a;3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的最长子串的长度。 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是"a…

Java字符串(String、字符串拼接、原理)

文章目录 一、String字符串1.1创建方式【直接赋值、new一个对象】1.1.1 使用字符串字面值直接赋值&#xff1a;&#xff08;1&#xff09;字符串字面量创建String对象的转换过程&#xff08;2&#xff09;一些方法&#xff08;3&#xff09;说明 1.1.2 使用new关键字创建字符串…

Java如何自定义注解及在SpringBoot中的应用

注解 注解&#xff08;Annotation&#xff09;&#xff0c;也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性&#xff0c;与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面&#xff0c;用来对这些元素进行说…

最快视频转绘-AnimateDiff-Lightning

最快视频转绘-AnimateDiff-Lightning Video-to-Video Generation AnimateDiff-Lightning 非常适合视频到视频的生成。使用 ControlNet 提供最简单的 comfyui 工作流程。 「ComfyUI-aki-v1.3.7z」链接&#xff1a;https://pan.quark.cn/s/199a753292d8 下载导入工作流 animat…

182440-00SF 同轴连接器

型号简介 182440-00SF是Southwest Microwave的一款连接器。该连接器采用 BeCu UNqS C17300 材料&#xff0c;并进行了镀金处理&#xff0c;以确保良好的导电性和耐腐蚀性&#xff1b;螺纹采用符合 ASTM A2582 标准的钢制合金&#xff0c;并进行磷酸盐钝化处理&#xff0c;以提高…

FunAudioLLM SenseVoice语音转录与CosyVoice语音合成及语音克隆使用案例

参考: https://fun-audio-llm.github.io/ 1、SenseVoice语音转录 在线体验:https://modelscope.cn/studios/iic/CosyVoice-300M 参考:https://github.com/FunAudioLLM/SenseVoice 下载: pip install -U funasr使用: from funasr import AutoModelmodel_dir = "…

如何从 Vue 2 无痛升级到 Vue 3,一文搞定!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 随着 Vue 3 的发布,许多开发者都面临着从 Vue 2 升级到 Vue 3 的挑战。 本文将详细介绍如何从 Vue 2 无痛升级到 Vue 3,包括每个步骤的详细说明与代码示例。 让我们开始吧! 准备工作 在正式开始升级之前,请确保你已经…

Linux网络命令:网络工具socat详解

目录 一、概述 二、基本用法 1、基本语法 2、常用选项 3、获取帮助 三、用法示例 1. 监听 TCP 端口并回显接收到的数据 2. 通过 TCP 端口转发数据到 UNIX 套接字 3. 将文件内容发送到 TCP 端口&#xff1a; 4. 使用伪终端进行串行通信 5、启动一个TCP服务器 6、建…

【Linux】网络新兵连

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 引言 在上一篇博客中&#xff0c;我们简单的介绍了一些Linux网络一些比较基本的概念。本篇博客我们将开始正式学习Linux网络套接字的内容&#xff0c;那么我们开始吧&#xff01; 1.网络中的地址管理 大家一…

【Linux】多线程_2

文章目录 九、多线程2. 线程的控制 未完待续 九、多线程 2. 线程的控制 主线程退出 等同于 进程退出 等同于 所有线程都退出。为了避免主线程退出&#xff0c;但是新线程并没有执行完自己的任务的问题&#xff0c;主线程同样要跟进程一样等待新线程返回。 pthread_join 函数…

搜维尔科技:OptiTrack在NAB2024展示了一系列业界领先的媒体技术

广泛的显示和动作捕捉跟踪技术组合涵盖无与伦比的室内和室外 LED 解决方案、前沿技术演示以及最新的软件和硬件产品 可视化技术领域的全球领导者 Planar及其附属公司 3D 跟踪系统的全球领导者OptiTrack宣布&#xff0c;两家公司将在 2024 年全国广播协会 (NAB) 展会上展示其最全…

【动态规划Ⅴ】二维数组的动态规划——0/1矩阵、最大正方形

二维数组的动态规划——0/1矩阵、最大正方形 最大正方形1277. 统计全为 1 的正方形子矩阵221. 最大正方形 01矩阵542. 01 矩阵 最大正方形 下面两个题目是非常相似的&#xff0c;只是一个统计正方形数目&#xff0c;一个统计最大正方形的面积。 1277. 统计全为 1 的正方形子矩…

【优先级队列PriorityQueue】

目录 1&#xff0c;优先级队列 1.1 概念 2&#xff0c;优先级队列的模拟实现 2.1 堆的概念 2.2 堆的存储方式 2.3 堆的创建 2.3.1 堆的向下调整&#xff08;大根堆&#xff09; 2.3.2 建堆的时间复杂度​编辑 2.4 堆的插入与删除 2.4.1 堆的插入 2.4.2 堆的删除 3&a…

源码编译构建LAMP(企业网站架构部署与优化)

部署LAMP平台 LAMV架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词&#xff0c;具体包 括 Linux操作系统&#xff0c;Apache网站服务器、MySQL数据库服务器、P…

ElementPlusError: [ElPagination] 你使用了一些已被废弃的用法,请参考 el-pagination 的官方文档 - 报警告之一

一、问题描述&#xff1a; 今天在使用elementui plus的时候遇到了一个奇葩的问题&#xff0c; 就是提示 使用了一些已被废弃的用法&#xff0c; 奇葩就在于我是 复制另一个页面的分页&#xff0c; 一摸一样的东西&#xff0c;就只这个页面报错&#xff0c; 分页也不出 为了这个…

App Cleaner Uninstaller 8.3.0激活版 最佳卸载程序和清理助手

App Cleaner & Uninstaller 完全安全地删除 Mac 上的程序&#xff0c;删除应用程序的残留物&#xff0c;管理扩展程序和启动程序。 App Cleaner & Uninstaller 8.3.0激活版下载 卸载应用程序和所有不需要的垃圾文件 当您将应用程序拖放到废纸篓时&#xff0c;请检查您…

鸿蒙开发学习笔记1

一、下载 deveco-studio 编译器 https://developer.huawei.com/consumer/cn/deveco-studio/#download 二、ArkTs 0、基本数据类型&#xff1a; 3种&#xff1a;string、number、boolean 1、存储数据&#xff08;变量、常量&#xff09; 注&#xff1a;类似于 ts 使用 con…

【work】AI八股-神经网络相关

Deep-Learning-Interview-Book/docs/深度学习.md at master amusi/Deep-Learning-Interview-Book GitHub 网上相关总结&#xff1a; 小菜鸡写一写基础深度学习的问题&#xff08;复制大佬的&#xff0c;自己复习用&#xff09; - 知乎 (zhihu.com) CV面试问题准备持续更新贴 …

springboot中@bean注解的创建和使用

bean的创建顺序 在Spring Boot中&#xff0c;当一个配置类&#xff08;使用Configuration注解的类&#xff09;中定义了多个bean时&#xff0c;这些bean的创建顺序并不完全由它们在类中的声明顺序决定。Spring框架在创建和管理bean时&#xff0c;遵循了复杂的依赖注入和生命周…