【转载】目标检测mAP的含义
转载自三叔家的猫
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)。
- 首先按照置信度进行降序排序;
- 对于每张图片中的预测框计算IOU,可以很清楚的看出:BBox1为TP,BBox2为FP,BBox3为TP;
- 之后计算不同召回率(Recall)下的精准率(Precision)值。对于第一个预测边界框BBox1,其Precision = TP / (TP+NP)=1/(1+0)=1,Recall = 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)]
- 绘制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值。
参考文档:
-
理解目标检测当中的mAP
-
目标检测中的评价指标mAP理解及计算
-
目标检测评测指标mAP及计算[译]
相关文章:

【转载】目标检测mAP的含义
转载自三叔家的猫 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" s…...

智慧校园行政办公-红头文件功能概述
在智慧校园的行政办公系统中,红头文件的管理功能是一项重要的组成部分,它极大地提升了文件处理的效率与规范性。该功能围绕文件的创建、审批、归档等关键环节,进行了全面的数字化改造。 首先,系统内置了多种标准化的红头文件模板&…...

汽车IVI中控开发入门及进阶(三十三):i.MX linux开发之开发板
前言: 大部分物料/芯片,不管MCU 还是SoC,都会有原厂提供配套开发板,有这样一个使用原型,在遇到问题时或者进行开发时可以使用。 i.MX 8QuadXPlus MEK board: 1、要测试display显示器,可使用i.MX mini SAS将“LVDS1_CH0”端口连接到LVDS到HDMI适配器的cable。 2、要测试…...

Redis基础教程(十八):Redis管道技术
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝Ὁ…...

深度学习(笔记内容)
1.国内镜像网站 pip使用清华源镜像源 pip install <库> -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip使用豆瓣的镜像源 pip install <库> -i https://pypi.douban.com/simple/ pip使用中国科技大学的镜像源 pip install <库> -i https://pypi.mirro…...

阿里云登陆Centos7
用自己电脑登陆Centos7太麻烦了,还要自己弄个虚拟机,一个电脑里面既有WIN又有LINUX,索性直接买个阿里云服务器,来学习Centos7。 购买 我是新用户,可以试用3个月,先用个3个月再说哈哈哈。 一系列操作之后…...
探索C嘎嘎的奇妙世界:第十九关---STL(list的模拟实现)
1. 基本框架 首先,我们先从节点的准备工作入手,请看示例: #pragma once #include<iostream> #include<assert.h> using namespace std; //节点 template<class T> struct ListNode {ListNode<T>* _next;Li…...

【分布式系统三】监控平台Zabbix对接grafana(截图详细版)
目录 一.安装grafana并启动 二.浏览器访问 三.导入zabbix数据,对接grafana 四.如何导入模版 以前两篇博客为基础 【分布式系统】监控平台Zabbix介绍与部署(命令截图版)-CSDN博客 【分布式系统】监控平台Zabbix自定义模版配置-CSDN博客 …...

SAPUI5基础知识11 - 组件配置(Component)
1. 背景 组件(Component)是SAPUI5应用程序中独立且可重用的部件。 SAPUI5提供以下两类组件: faceless组件 (class: sap.ui.core.Component): 无界面组件即没有用户界面相关的元素,用于不需要UI元素编码的场景; UI组件 (class: …...

Spring最早的源码
地址:Spring最早的源码...

热烈祝贺!全视通多家客户上榜全球自然指数TOP100!
2024年6月18日,全球医疗机构自然指数TOP100榜单发布,中国医疗机构在其中的表现尤为引人注目。 根据《自然》杂志网站发布的数据,此次公布的排名是基于(2023年3月1日至2024年2月29日)的统计数据,全球医疗机构…...
常用接口避免频繁请求
背景 在项目开发过程中我们难免会遇到一些通用的接口,需要在多个页面调用,拿去结果。比如我们常用的字典接口,后端通过字典配置一些数据,通常这些字典数据是不常更改的。我们通过字典接口传递不同的参数过去,获取到接…...

C++入门基础
前言 本篇博客讲解一下c得入门基础 💓 个人主页:普通young man-CSDN博客 ⏩ 文章专栏:C_普通young man的博客-CSDN博客 ⏩ 本人giee:普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见📝 🎉欢迎大家点赞&…...
Unicode 与 UTF-8 的区别与联系
文章目录 UnicodeUTF-8联系区别Unicode 转义序列字符编码与字符的对应规则例子 Unicode 定义:Unicode 是一个字符编码标准,旨在为世界上所有的字符分配一个唯一的编码。 编码范围:Unicode 的编码范围从 0x0000 到 0x10FFFF,能够表…...
PHP MySQL 简介
PHP MySQL 简介 PHP 和 MySQL 是现代网站开发中最流行的两种技术。PHP 是一种服务器端脚本语言,而 MySQL 是一种关系型数据库管理系统。这两种技术经常一起使用,以创建动态和交互式的网页。本文将简要介绍 PHP 和 MySQL 的基本概念、它们的工作原理以及…...
Spring容器加载Bean和JVM加载类
1、JVM加载类 类的加载是在首次需要访问类的信息或实例化类的对象时发生的过程。ClassLoader负责加载类的字节码,并在内存中创建对应的Class对象,从而使得Java程序能够操作和使用这些类。 在Java中,类的加载是按需进行的,也就是…...
《简历宝典》04 - 简历的“个人信息”模块,要写性别吗?要放照片吗?
平时帮助小伙伴们优化简历的时候,我看见他们有人会写性别,有人不会写。 目录 1 招聘团队的考虑 2 性别是无法改变的,能不写就不写 3 什么情况下,需要写性别呢? 4 简历中要加照片吗? 1 招聘团队的考虑 …...

TTS模型汇总
TTS是“Text-to-Speech”的缩写,中文意思是“文本到语音”。这是一种将文本信息转换成口语的技术,通常通过计算机程序实现。TTS技术可以应用于多种场景,包括但不限于: 辅助阅读:帮助视障人士或有阅读困难的用户通过听…...
js打印出堆栈
在JavaScript中,直接获取并打印完整的调用堆栈(stack trace)并不像在一些其他语言中那样直接。不过,有几种方法可以实现类似的功能,具体取决于你的需求和运行环境(如浏览器环境或Node.js环境)。…...
论文阅读:A Survey on Evaluation of Large Language Models
A Survey on Evaluation of Large Language Models 这篇论文是由Yupeng Chang等人撰写的关于大型语言模型(LLMs)评估的综述,题为《A Survey on Evaluation of Large Language Models》。 摘要 大型语言模型(LLMs)在…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...

LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...