目标检测模型的评价指标(Acc, Precision, Recall, AP, mAP, RoI)_目标检测模型评价指标-程序员宅基地

技术标签: 目标检测  Recall  目标检查  评估  mAP  评价指标  

目标检测模型的评价指标(Acc, Precision, Recall, AP, mAP, RoI)

对于一个目标检测模型的好坏,总的来说可以从以下三个方面来评估:

  • 分类的精度如何。一般可以用准确度(Accuracy),精度(Precision),召回率(Recall Rate), PR 曲线,AP,mAP等
  • 定位的精度如何。比如 IoU
  • 运行的速度如何。比如 fps,一秒处理几张图。

严格说某些场合也会很在意模型的大小,这也是一个研究方向,比如 squeeze net, mobile net, shuffle net 等。所以除了上面三个维度,模型的大小也可以是一个评价维度。

1.基础知识

由于有些指标是统计指标,所以我们先回顾一下相关的统计学知识。
我们在做假设检验的时候会犯两种错误。

  • 第一,原假设是正确的,而你判断它为错误的;
  • 第二,原假设是错误的,而你判断它为正确的。

我们分别称这两种错误为第一类错误和第二类错误。也许不是很清晰,直接看下面的图(图片来自知乎)就一目了然了。

对于上面的两张图,我们的原假设是没有怀孕。对于第一张图,原假设是对的,但是却判断它为错误的。对于第二张图,原假设是错误的,但是却判断它为正确的。

这个问题如果放到混淆矩阵里面就更清楚了。

真实值(label)\ 预测值 正例 反例
正例 TP FN
反例 FP TN

2. 准确度(Accuracy, Acc)

准确度是所有预测中预测正确的比例。

A c c = T P + T N T P + F N + F P + F N Acc = \frac{TP + TN}{TP + FN + FP + FN} Acc=TP+FN+FP+FNTP+TN

3. 精确率(Precision)

精确率是指在所有检测出的目标中检测正确的概率。

P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP + FP} Precision=TP+FPTP

精确率是从预测的结果的角度来定义。精确率又称为查准率。需要注意的是, Precision 和 Accuracy 是不一样的,Accuracy 针对所有样本,而 Precision 仅针对检测出来(包括误检)的那一部分样本。

4. 召回率(Recall)

召回率是指所有的正样本中正确识别的概率。

R e c a l l = T P T P + F N Recall = \frac{TP}{TP + FN} Recall=TP+FNTP

召回率是从样本的角度出发的。召回率又称查全率。

也可以参考下面这这一幅图。

5. AP(Average Precision)

查准率和查全率是一对矛盾的度量,一般而言,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。我们从直观理解确实如此:我们如果希望好瓜尽可能多地选出来,则可以通过增加选瓜的数量来实现,如果将所有瓜都选上了,那么所有好瓜也必然被选上,但是这样查准率就会越低;若希望选出的瓜中好瓜的比例尽可能高,则只选最有把握的瓜,但这样难免会漏掉不少好瓜,导致查全率较低。通常只有在一些简单任务中,才可能使查全率和查准率都很高。所以为了更全面的衡量模型的性能提出了 AP。
在看 AP 之前先来看看 PR 曲线(Precision Recall Curve),即横轴为 Recall,竖轴为 Precision。

而 AP 表示的是检测器在各个 Recall 情况下的平均值,对应的就是 PR 曲线下的面积(AUC, Area Under Curve)。

从离散的角度来说 AP 可以表达如下式。

A P = ∑ P r i ∑ r AP = \frac{\sum{P_{r_i}}}{\sum{r}} AP=rPri
其中 P r i P_{r_i} Pri 表示 PR 曲线上 r − i r-i ri 所对应的 P P P 值, 而 ∑ r = 1 \sum{r} = 1 r=1

显然 AP 是针对某一个类别来说的,比如 马这一个单一类别。

6. mAP

AP 是针对单个类别的识别器,而 mAP 是从类别的维度对 AP 进行平均,因此可以评价多分类器的性能。

m A P = A P n u m _ c l a s s e s mAP = \frac{AP}{num\_classes} mAP=num_classesAP

mAP的大小一定在[0,1]区间,越大越好。该指标是目标检测算法中最重要的一个。

6.1 VOC mAP

VOC mAP 是我们常看到的一种 mAP 计算方式。上面说的是理论上的 mAP 的定义,但是在实际计算中,由于 PR 曲线并不是单调递减的,而是抖动的,所以对进行“平滑”操作。由于 VOC 在 2010 年更新了“平滑”的方式,所以这里说的是 2010 之后的计算方式。

在 IoU = 0.5 的情况下,针对每一个不同的 Recall 值(包括0和1),选取其大于等于这些 Recall 值时的 Precision 最大值,然后计算 PR 曲线下面积作为 AP 值,从而计算 mAP。结合下面表格就更清晰了。

6.2 COCO mAP

跟 VOC mAP 类似,只是 COCO 数据集会统计不同 IoU 下的 mAP, 比如 0.5, 0.75, 0.95 等。

7. IoU(Intersection over Union)

IoU 计算的是 “预测的边框” 和 “真实的边框” 的交集和并集的比值。下面这幅图就可以很清晰的表达出 IoU 的概念了。

参考文献

目标检测 — 评价指标
目标检测之 IoU
模型评估常用指标

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kuweicai/article/details/105082446

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签