理解目标检测当中的mAP_饭后吃西瓜的博客-程序员宝宝_目标检测map

技术标签: 目标检测  深度学习  人工智能  mAP  

我们在评价一个目标检测算法的“好坏”程度的时候,往往采用的是pascal voc 2012的评价标准mAP。

网上一些资料博客参差不齐,缺乏直观易懂的正确说明。希望这篇博文能够给大家一点帮助。

 

mAP历史

目标检测的mAP计算方式在2010年的voc上发生过变化,目前基本都是采用新的mAP评价标准。(我有个小疑问就是明明是2010年修改的,但是貌似现在大家都称这种计算方式为2012)所以你查到的有一些博客上记录的是之前的mAP评价标准。

但是,知乎上有一个回答,是完全错误的。而且很多评论已经指出来了,但是回答者一直没有修改。这个回答也曾经误导过我。目标检测中的mAP是什么含义? - 许博雅的回答 - 知乎 https://www.zhihu.com/question/53405779/answer/382974995

下面也放出官方论文里的定义,但是我光看这个感觉还是有点抽象

The computation of the average precision (AP) measure was changed in 2010 to improve precision and ability to measure differences between methods with low AP. It is computed as follows:

1. Compute a version of the measured precision/recall curve with precision monotonically decreasing, by setting the precision for recall r to the maximum precision obtained for any recall r′ ≥ r.

2. Compute the AP as the area under this curve by numerical integration. No approximation is involved since the curve is piecewise constant.

Note that prior to 2010 the AP is computed by sampling the monotonically

decreasing curve at a fixed set of uniformly-spaced recall values 0, 0.1, 0.2, . . . , 1. By contrast, VOC2010–2012 effectively samples the curve at all unique recall values.

准备知识(为新人准备)

1.IOU的概念

IOU的概念应该比较简单,就是衡量监测框和标签框的重合程度。一张图就能解释,做目标检测小伙伴应该都清楚,我这里不赘述。

 

2.TP TN FP FN的概念

T或者N代表的是该样本是否被分类分对,P或者N代表的是该样本被分为什么

TP(True Positives)意思我们倒着来翻译就是“被分为正样本,并且分对了”,TN(True Negatives)意思是“被分为负样本,而且分对了”,FP(False Positives)意思是“被分为正样本,但是分错了”,FN(False Negatives)意思是“被分为负样本,但是分错了”。

按下图来解释,左半矩形是正样本,右半矩形是负样本。一个2分类器,在图上画了个圆,分类器认为圆内是正样本,圆外是负样本。那么左半圆分类器认为是正样本,同时它确实是正样本,那么就是“被分为正样本,并且分对了”即TP,左半矩形扣除左半圆的部分就是分类器认为它是负样本,但是它本身却是正样本,就是“被分为负样本,但是分错了”即FN。右半圆分类器认为它是正样本,但是本身却是负样本,那么就是“被分为正样本,但是分错了”即FP。右半矩形扣除右半圆的部分就是分类器认为它是负样本,同时它本身确实是负样本,那么就是“被分为负样本,而且分对了”即TN

 

3.Precision(精度)和Recall(召回率)的概念

有了上面TP TN FP FN的概念,这个Precision和Recall的概念一张图就能说明。

Precision =\frac{TP}{TP+FP},翻译成中文就是“分类器认为是正类并且确实是正类的部分占所有分类器认为是正类的比例”,衡量的是一个分类器分出来的正类的确是正类的概率。两种极端情况就是,如果精度是100%,就代表所有分类器分出来的正类确实都是正类。如果精度是0%,就代表分类器分出来的正类没一个是正类。光是精度还不能衡量分类器的好坏程度,比如50个正样本和50个负样本,我的分类器把49个正样本和50个负样本都分为负样本,剩下一个正样本分为正样本,这样我的精度也是100%,但是傻子也知道这个分类器很垃圾。

Recall =\frac{TP}{TP+FN},翻译成中文就是“分类器认为是正类并且确实是正类的部分占所有确实是正类的比例”,衡量的是一个分类能把所有的正类都找出来的能力。两种极端情况,如果召回率是100%,就代表所有的正类都被分类器分为正类。如果召回率是0%,就代表没一个正类被分为正类。

 

举例计算mAP

有3张图如下,要求算法找出face。蓝色框代表标签label,绿色框代表算法给出的结果pre,旁边的红色小字代表置信度。设定第一张图的检出框叫pre1,第一张的标签框叫label1。第二张、第三张同理。

1.根据IOU计算TP,FP

首先我们计算每张图的pre和label的IOU,根据IOU是否大于0.5来判断该pre是属于TP还是属于FP。显而易见,pre1是TP,pre2是FP,pre3是TP。

 

2.排序

根据每个pre的置信度进行从高到低排序,这里pre1、pre2、pre3置信度刚好就是从高到低。

3.在不同置信度阈值下获得Precision和Recall

首先,设置阈值为0.9,无视所有小于0.9的pre。那么检测器检出的所有框pre即TP+FP=1,并且pre1是TP,那么Precision=1/1。因为所有的label=3,所以Recall=1/3。这样就得到一组P、R值。

然后,设置阈值为0.8,无视所有小于0.8的pre。那么检测器检出的所有框pre即TP+FP=2,因为pre1是TP,pre2是FP,那么Precision=1/2=0.5。因为所有的label=3,所以Recall=1/3=0.33。这样就又得到一组P、R值。

再然后,设置阈值为0.7,无视所有小于0.7的pre。那么检测器检出的所有框pre即TP+FP=3,因为pre1是TP,pre2是FP,pre3是TP,那么Precision=2/3=0.67。因为所有的label=3,所以Recall=2/3=0.67。这样就又得到一组P、R值。

4.绘制PR曲线并计算AP值

根据上面3组PR值绘制PR曲线如下。然后每个“峰值点”往左画一条线段直到与上一个峰值点的垂直线相交。这样画出来的红色线段与坐标轴围起来的面积就是AP值。

在这里AP=1*0.33+0.67*0.33\approx 0.55

5.计算mAP

AP衡量的是对一个类检测好坏,mAP就是对多个类的检测好坏。就是简单粗暴的把所有类的AP值取平均就好了。比如有两类,类A的AP值是0.5,类B的AP值是0.2,那么mAP=(0.5+0.2)/2=0.35

 

Github

在这里提供一个计算mAP的github地址,上面那张AP图就是它生成的。我觉得还蛮好用的。但是不知道为什么star有点少。。。

https://github.com/Cartucho/mAP

 

怎么增加AP值

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

智能推荐

mysql数据库定时备份--以及Using a password on the command line interface can be insecure的解决办法_mameng1998的博客-程序员宝宝

一、备份脚本今天做MySQL数据库备份,在/home/dbback目录下的脚本文件bkDatabaseName.sh(DatabaseName为自己数据库的名字)中,所写的语句如下:#!/bin/bashmysqldump -uusername -ppassword DatabaseName | gzip > /home/backup/DatabaseName_$(date+%...

Linux下的进程管理_村雨626的博客-程序员宝宝

#####5.1什么是进程#############进程(Process)1.程序是静态的文件2.进程是运行中的程序的一个副本3.进程存在生命周期(准备期,运行期,终止期)#####5.2进程状态################ 状态 定义 R(TASK_RUNNING) 可执行状态(RUNNI...

faste-rcnn代码详解(1)_l_ml_m_lm_m的博客-程序员宝宝

tools\train_faster_rcnn_alt_opt.py#!/usr/bin/env python# --------------------------------------------------------# Faster R-CNN# Copyright (c) 2015 Microsoft# Licensed under The MIT License [...

搭建openstack服务_jackjack博客的博客-程序员宝宝

什么是云计算 基于互联网的相关服务的增加、使用和交付模式 • 这种模式提供可用的、便捷的、按需的网络访问,迚入可配置的计算资源共享池 • 这些资源能够被快速提供,只需投入很少的管理工作,戒不服务供应商迚行很少的交互 • 通常涉及通过互联网来提供劢态易扩展且经常是虚拟化的资源 IaaS • IaaS(Infrastructure as a Service),即基础设施即服务 • 提供给...

Oracle EBS R12采购到入库所经历的表_weixin_30732825的博客-程序员宝宝

--采购到入库所经历的表--0.请购单--创建请购单方式有--a.从外挂系统导入请购的接口表PO_REQUISITIONS_INTERFACE_ALL,并允许请求(名称:导入申请)SELECT *FROM PO_REQUISITIONS_INTERFACE_ALLWHERE INTERFACE_SOURCE_CODE = 'TEST KHJ'--b.在系统中创建...

【MAC】启动 ssh 服务 及 ssh 长时间不用自动断开解决_KroneX的博客-程序员宝宝

一、启动 ssh 服务mac本身安装了ssh服务,默认情况下不会开机自启启动sshd服务:sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist停止sshd服务:sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist查看是否启...

随便推点

吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-align-right..._weixin_30321449的博客-程序员宝宝

<!DOCTYPE html><html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link...

递归无限分类笔记_weixin_33859504的博客-程序员宝宝

最近项目都上线了每天巩固一下php知识,下面是关于递归无限分类的比较供大家参考!数据库一个表就可以了,增加一个parendid字段 也就是子级分类 ,排序大家也可以加一下字段.CREATETABLE`category`(`id`int(11)NOTNULL,`name`varchar(255)CHARACTERSETutf8DEFAULTN...

宝宝的恶作剧_cmmbnja06669的博客-程序员宝宝

我们经常闲的时候问宝宝,爸爸叫什么名字呀?妈妈叫什么名字呀,她都能响亮清楚的回答出来,但是有一天,宝宝却故意把我们的名字换着说,问爸爸叫什么名字,她故意说成是妈妈的,妈妈叫什么名字,故意说成爸爸的,但是自己的名字就不说错,可能觉...

IBM预测五大创新技术 智能电网5年内实现_ciyi7513的博客-程序员宝宝

IBM近日发布《未来5年的5大创新(NextFiveinFive)》报告书,提出五项可能改变人类的五大创新,包括“节能更容易,价格更低廉”“吃什么就像什么”“手机不再只是手机”“医生将拥有超强感知能力,提供更精准的诊断与医疗服务...

java视图层_Java课程设计---新建视图层_weixin_39996798的博客-程序员宝宝

1、创建登录窗口登录窗口类:LoginView.javapackage com.system.view;import java.awt.BorderLayout;import java.awt.EventQueue;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;/*...

知名公司的Java面试题_架构师成长营的博客-程序员宝宝

查看不同公司新鲜真实的Java面试题,摘自Glassdoor.com巴克莱投资:假设有一个 getNextparson() 方法返回 Person 对象,Person 类实现了 comparable 接口,现在从文件中读取记录并排序,然后给出前 1000 条记录,纸上作答 答案见Glassdoor 写一个函数,传入 2 个有序的整数数组,返回一个有序的整数数组。 答案见Glassdo...

推荐文章

热门文章

相关标签