【深度学习】什么是目标检测中的平均精度均值(mAP)?
计算机视觉界已经集中在度量 mAP 上,来比较目标检测系统的性能。在这篇文章中,我们将深入了解平均精度均值 (mAP) 是如何计算的,以及为什么 mAP 已成为目标检测的首选指标。
目标检测的快速概述
在我们考虑如何计算平均精度均值之前,我们将首先定义它正在测量的任务。目标检测模型试图识别图像中相关对象的存在,并将这些对象划分为相关类别。例如,在医学图像中,我们可能希望能够计算出血流中的红细胞 (RBC)、白细胞 (WBC) 和血小板的数量,为了自动执行此操作,我们需要训练一个对象检测模型来识别这些对象并对其进行正确分类。
EfficientDet(绿色)与 YOLOv3(黄色)的示例输出
这两个模型都预测了图片中细胞周围的边界框,然后他们为每个边界框分配一个类。对于每个任务,网络都会对其预测的置信度进行建模,可以在此处看到我们共有三个类别(RBC、WBC 和Platelets)。
我们应该如何决定哪个模型更好?查看图像,看起来 EfficientDet(绿色)绘制了过多的 RBC 框,并且在图像边缘漏掉了一些细胞。这当然是从事物表面来看——但是我们可以相信图像和直觉吗?
如果我们能够直接量化每个模型在测试集中的图像、类和不同置信阈值下的表现,那就太好了。要理解平均精度均值,我们必须花一些时间来研究精度-召回曲线。
精确-召回曲线
精确是“模型猜测它正确猜测的次数?” 的一个衡量标准,召回是一种衡量“模型每次应该猜到的时候都猜到了吗?” 。假设一个具有有 10 个红细胞的图像,模型只找到这 10 个中正确标记的一个,因为“RBC”具有完美的精度(因为它做出的每一个猜测都是正确的),但并不同时具有完美的召回(仅发现十个 RBC 细胞中的一个)。
包含置信元素的模型可以通过调整进行预测所需的置信水平来权衡召回的精确度。也就是,如果模型处于避免假阳性(当细胞是白细胞时说明存在红细胞)比避免假阴性更重要的情况下,它可以将其置信阈值设置得更高,以鼓励模型只产生以降低其覆盖率(召回)为代价的高精度预测。
精度-召回曲线是绘制模型精度和以召回率作为模型置信阈值函数的过程。它是向下倾斜的,因为随着置信度的降低,会做出更多的预测,进而预测的准确性会降低(影像精确度)。
一个 NLP 项目中不同模型的精度、召回率和置信度
随着模型越来越不稳定,曲线向下倾斜,如果模型具有向上倾斜的精度和召回曲线,则该模型的置信度估计可能存在问题。
人工智能研究人员偏向于指标,并且可以在单个指标中捕获整个精确召回曲线。第一个也是最常见的是 F1,它结合了精度和召回措施,以找到最佳置信度阈值,其中精度和召回率产生最高的 F1 值。接下来是 AUC(曲线下面积),它集成了精确性和召回曲线下的绘图量。
精确召回汇总指标图
最终的精确-召回曲线指标是平均精度 (AP),它被计算为在每个阈值处实现的精度的加权平均值,并将前一个阈值的召回率增加用作权重。
AUC 和 AP 都捕获了精确-召回曲线的整个形状,选择一个或另一个进行目标检测是一个选择问题,研究界已经将注意力集中在AP 的可解释性上。
通过并集上的交点测量正确性
目标检测系统根据边界框和类标签进行预测。
真正的目标检测图
在实践中,X1、X2、Y1、Y2 坐标中预测的边界框肯定会偏离地面真实标签(即使稍微偏离)。我们知道如果边界框预测是错误的类,我们应该将其视为不正确的,但是我们应该在哪里绘制边界框重叠的线?
Intersection over Union (IoU) 提供了一个度量来设置这个边界,与地面真实边界框重叠的预测边界框的数量除以两个边界框的总面积。
真正对 IoU 指标的图形描述。
为 IoU 指标选择正确的单个阈值似乎是任意的,一位研究人员可能会证明 60% 的重叠是合理的,而另一位则认为 75% 似乎更合理,那么为什么不在一个指标中考虑所有阈值呢?
绘制mAP精度-召回曲线
为了计算 mAP,我们绘制了一系列具有不同难度级别的 IoU 阈值的精确-召回曲线。
在上图中,红色绘制的是对 IoU 的最高要求(可能是 90%),橙色线绘制的是对 IoU 的最低要求(可能是 10%),要绘制的线数通常由挑战设置。例如,COCO 挑战设置了十个不同的 IoU 阈值,从 0.5 开始,以 0.05 的步长增加到 0.95。
最后,我们为按类型划分的数据集绘制这些精度-召回曲线。
由我们真正按对象类别划分的 mAP 图
该指标在所有 IoU 阈值上单独计算每个类的平均精度 (AP),然后该指标对所有类别的 mAP 进行平均以得出最终估计值。
在实验中使用平均精度均值(mAP)
我最近在一篇文章中使用了mAP,比较了最先进的EfficientDet和YOLOv3检测模型,我想看看哪个模型在识别血液中的细胞表现更好。
在对测试集中的每个图像进行推理后,我导入了一个 python 包来计算Colab笔记本中的mAP,结果如下!
EfficientDet 对细胞物体检测的评价:
78.59% = Platelets AP
77.87% = RBC AP
96.47% = WBC AP
mAP = 84.31%
YOLOv3对细胞物体检测的评价:
72.15% = Platelets AP
74.41% = RBC AP
95.54% = WBC AP
mAP = 80.70%
因此,与本文开头的单一推断图片相反,事实证明EfficientDet在建模细胞目标检测方面做得更好!我们还将注意该指标是按对象类划分的,这告诉我们,白细胞比血小板和红细胞更容易检测,这是有道理的,因为它们比其他细胞大得多,并且不同。
地图也经常被分成小、中、大对象,这有助于识别模型(和/或数据集)可能出现错误的地方。
往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件
本站qq群851320808,加入微信群请扫码:
【深度学习】什么是目标检测中的平均精度均值(mAP)?相关推荐
- 什么是目标检测中的平均精度均值(mAP)?
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 计算机视觉界已经集中在度量 mAP 上,来比较目标检测系统的性能. ...
- 深度学习论文阅读目标检测篇(七)中英对照版:YOLOv4《Optimal Speed and Accuracy of Object Detection》
深度学习论文阅读目标检测篇(七)中英对照版:YOLOv4<Optimal Speed and Accuracy of Object Detection> Abstract 摘要 1. In ...
- 深度学习论文阅读目标检测篇(五)中英对照版:YOLOv2《 YOLO9000: Better, Faster, Stronger》
深度学习论文阅读目标检测篇(五)中文版:YOLOv2< YOLO9000: Better, Faster, Stronger> Abstract 摘要 1. Introduction 1. ...
- 深度学习时代的目标检测算法综述
目标检测VS其他计算机视觉问题 分类问题 这或许是计算机视觉领域内最著名的问题.它主要指将一张图像归为某种类别.学术界最流行的一类数据集是ImageNet,由数以百万计已分好类的图像组成,(部分)用于 ...
- HALCON 20.11:深度学习笔记(11)---目标检测
HALCON 20.11:深度学习笔记(11)---目标检测 HALCON 20.11.0.0中,实现了深度学习方法. 本章讲解了如何使用基于深度学习的对象检测. 通过对象检测,我们希望在图像中找到不 ...
- 深度学习论文阅读目标检测篇(四)中英文对照版:YOLOv1《 You Only Look Once: Unified, Real-Time Object Detection》
深度学习论文阅读目标检测篇(四)中英文对照版:YOLOv1< You Only Look Once: Unified, Real-Time Object Detection> Abstra ...
- 深度学习论文阅读目标检测篇(一):R-CNN《Rich feature hierarchies for accurate object detection and semantic...》
深度学习论文阅读目标检测篇(一):R-CNN<Rich feature hierarchies for accurate object detection and semantic segmen ...
- 基于深度学习的显著性目标检测方法综述
源自:电子学报 作者:罗会兰 袁璞 童康 摘 要 显著性目标检测旨在对图像中最显著的对象进行检测和分割,是计算机视觉任务中重要的预处理步骤之一,且在信息检索.公共安全等领域均有广泛的应 ...
- 深度学习论文阅读目标检测篇(三):Faster R-CNN《 Towards Real-Time Object Detection with Region Proposal Networks》
深度学习论文阅读目标检测篇(三):Faster R-CNN< Towards Real-Time Object Detection with Region Proposal Networks&g ...
最新文章
- 【面试系列】之一:关于Cmd和Amd
- 上传本地文件到gitlab 项目里的某个文件夹
- html中刷新按钮的代码,常见的按钮类型 点击button刷新的几种常用代码
- Ubuntu 16.04 下octave的使用入门
- 好大夫王航:长尾开发者应尽快接入百度轻应用
- 实现同步请求_图解 Promise 实现原理(二)—— Promise 链式调用
- SSM框架使用遇到的问题
- 管理计算机中的应用SQL,计算机数据库系统在信息管理中的应用
- LINUX使用sig文件验证文件的签名
- java浮点数的精确计算_Java 浮点数计算精度丢失问题?
- HDP3.1.5安装包下载地址,百度云下载
- 对路径“C:\inetpub\wwwroot\Test\Temper\”的访问被拒绝 【已解决】
- 用c语言实现矩阵的转置算法,C++实现矩阵原地转置算法
- VR/AR的需求和前景
- 【2389. 和有限的最长子序列】
- 输入90输公因数java_关于Java中的几个数论中的知识
- Python控制语句/循环语句
- 思科:vtp,vlan中继协议的配置方法
- 计算机学科那些事儿(1)-早期计算
- python 将任意图片格式(png等)转换成jpg
热门文章
- Codeforces Round #368 (Div. 2)
- 3.12课·········数组
- 使界面里的组件更圆滑
- grunt 0.4.1构建工具入门实践(转)
- new/delete和malloc/free读书笔记
- thinkPHP源码目录介绍
- NOIp2018集训test-9-7(pm) (联考一day1)
- python如何打开一个大文件?
- Asp.Net分页控件
- linux命令学习之:ifconfig