【深度学习】——模型评估指标MAP计算实例计算

目录

一、知识储备

1、IOU——交集面积与并集面积之比

 2、混淆矩阵(TP、FP、FN、TN)

 问题1:上面的TP等具体是如何计算得到的?

3、精度precision&召回率recall

 二、ap计算实战

1、计算流程

1)准备数据:

2)获取预测框:

3)获取标签框:

4)根据置信度对预测框排序:

5)统计TP和FP个数:

6)对整个测试集上的每一张图像的每一类进行TP,FP统计

7)分别对每一个类别进行ap曲线的绘制,这里以一类为例讲解,以类别1为例

8)计算不同置信度下的precision和recall

问题2:怎么求解不同置信度阈值下的precision,recall值

问题3:出现的两次预测有什么区别?

9)计算AP

10)计算map

三、学习笔记



一、知识储备:

睿智的目标检测20——利用mAP计算目标检测精确度https://blog.csdn.net/weixin_44791964/article/details/104695264?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162156782416780262569069%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162156782416780262569069&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-1-104695264.pc_search_result_hbase_insert&utm_term=map%E8%AE%A1%E7%AE%97&spm=1018.2226.3001.4187

IOU、FP、TP、TP、FN、Precision、recall

1、IOU——交集面积与并集面积之比

IOU(交并比)就是两个bounding box的交集与并集之比

理解目标检测当中的mAP_hsqyc的博客-CSDN博客_目标检测maphttps://blog.csdn.net/hsqyc/article/details/81702437

def box_iou(b1, b2):'''b1,b2均为[x1,y1,x2,y2],左上角点,右下角点坐标'''x1_1, y1_1, x2_1, y2_1 = b1x1_2, y1_2, x2_2, y2_2 = b2x1 = max(x1_1, x1_2)  # 取左上角点最大y1 = max(y1_1, y1_2)x2 = min(x2_1, x2_2)y2 = min(y2_1, y2_2)if x2 - x1 + 1 <= 0 or y2 - y1 + 1 <= 0:return 0else:inter = (x2 - x1 + 1) * (y2 - y1 + 1)union = (x2_1 - x1_1 + 1) * (y2_1 - y1_1 + 1) + (x2_2 - x1_2 + 1) * (y2_2 - y1_2 + 1) - interiou = inter / unionreturn iouif __name__ == '__main__':b1 = [0,0,4,4]b2 = [1,1,5,5]print(box_iou(b1,b2))b1 = [1,1,4,4]b2 = [2,0,5,5]print(box_iou(b1, b2))b1 = [0,0,2,2]b2 = [3,3,4,4]print(box_iou(b1,b2))

 0.47058823529411764
0.42857142857142855
0

 2、混淆矩阵(TP、FP、FN、TN)

TP TN FP FN里面一共出现了4个字母,分别是T F P N。
T是True;
F是False;
P是Positive;
N是Negative。

T或者F代表的是该样本 是否被正确分类。
P或者N代表的是该样本 被预测成了正样本还是负样本。

TP(True Positives)意思就是被分为了正样本,而且分对了。
TN(True Negatives)意思就是被分为了负样本,而且分对了。
FP(False Positives)意思是被分为了正样本,但是分错了(事实上这个样本是负样本)。
FN(False Negatives)意思是被分为了负样本,但是分错(事实上这个样本是正样本)。

注意:对于多目标检测中,每一个类别都会有一个混淆矩阵。因此每一个类别都会产生一个ap曲线

深度学习-目标检测评估指标P-R曲线、AP、mAP_‘Atlas’的博客-CSDN博客_ap值基本概念P-R曲线中,P为图中precision,即精准度,R为图中recall,即召回率。Example下面通过具体例子说明。首先用训练好的模型得到所有测试样本的confidence score,每一类(如car)的confidence score保存到一个文件中(如comp1_cls_test_car.txt)。假设共有20个测试样本,每个的id,confide...https://blog.csdn.net/qq_41994006/article/details/81051150

 问题1:上面的TP等具体是如何计算得到的?

在目标检测中,混淆矩阵是针对一个类别来说的,利用训练模型对测试集进行预测,此时会得到预测框和标签框。每个预测框会有置信度、预测标签、boxes(坐标)等信息;

1、若这个预测框被预测为正样本计算这个预测框和真实标签等于这个预测框的预测标签的所有标签框的IOU值:

1)当最大的iou值大于设定的阈值时,此时这个预测框就认为属于TP样本(预测和实际一致);

2)若iou最大值小于设定的阈值,则认为这个预测框为FP样本(预测为该类的正样本,实际不是);

2、若这个预测框被预测为负样本,即背景框,计算这个预测框和所有标签框的IOU值:

3)若iou值最大值小于阈值,则说明被正确预测为负样本,即TN

4)若iou值最大值大于阈值,则说明被错误预测为负样本,即FN

注意:在计算每一类ap的时候,一般只考虑预测为当前类的所有样本,不考虑预测为背景的样本

3、精度precision&召回率recall


TP是分类器认为是正样本而且确实是正样本的例子,FP是分类器认为是正样本但实际上不是正样本的例子,Precision翻译成中文就是“分类器认为是正类并且确实是正类的部分占所有分类器认为是正类的比例”。

 


TP是分类器认为是正样本而且确实是正样本的例子,FN是分类器认为是负样本但实际上不是负样本的例子,Recall翻译成中文就是“分类器认为是正类并且确实是正类的部分占所有确实是正类的比例”。

 二、ap计算实战

1、计算流程

  • 准备数据:

  • 测试集数据集(带标签框)、训练好的深度学习模型、nms算法(iou阈值)(两个重叠框iou大于阈值将低分的预测框去掉)
  • 获取预测框:

  • 将测试数据集输入到训练好的深度学习模型当中,得到每张图像的预测框,再利用nms算法去掉重复和重叠大的框后,记录剩下预测框的信息(坐标信息——对角顶点坐标、类别、置信度)(boxes,label,confidence)——未排序
  • 获取标签框:

  • 根据测试数据集的xml文件得到真实标签框的信息(groudtruth),包含每张图像的标签框信息(boxes,label),如下表所示:这里以两类为例,标签1,2表示不同的两个目标类,0表示背景
序号(id)对角顶点坐标(boxes)真实类别(label)
1【x1_1*,y1_1*,x1_2*,y1_2*】1
2【x2_1*,y2_1*,x2_2*,y2_2*】1
3【x3_1*,y3_1*,x3_2*,y3_2*】2
4【x4_1*,y4_1*,x4_2*,y4_2*】2
  • 根据置信度对预测框排序:

  • 对每张图像的预测框每一个类别按照置信度(分类得分)从高到低分别排序,得到类似与下列表格的信息
序号(id)对角顶点坐标(boxes)置信度(confidence)预测类别(label)
1【x1_1,y1_1,x1_2,y1_2】0.982
2【x2_1,y2_1,x2_2,y2_2】0.901
3【x3_1,y3_1,x3_2,y3_2】0.881
4【x4_1,y4_1,x4_2,y4_2】0.862
5【x5_1,y5_1,x5_2,y5_2】0.671
6【x6_1,y6_1,x6_2,y6_2】0.512

预测为类别1:

序号(id)对角顶点坐标(boxes)置信度(confidence)预测类别(label)
2【x2_1,y2_1,x2_2,y2_2】0.901
3【x3_1,y3_1,x3_2,y3_2】0.881
5【x5_1,y5_1,x5_2,y5_2】0.671

预测为类别2:

序号(id)对角顶点坐标(boxes)置信度(confidence)预测类别(label)
1【x1_1,y1_1,x1_2,y1_2】0.982
4【x4_1,y4_1,x4_2,y4_2】0.862
6【x6_1,y6_1,x6_2,y6_2】0.512
  •  统计TP和FP个数:

  • 对每张图像中的每一类进行TP和FP个数统计,假设一个预测框预测为类别2,则计算这个预测框和该图像中所有类别为2的标签框的iou,若iou大于设定的阈值(一般默认阈值为0.5),则认为该预测框为TP,否则认为是FP,以下以一张图像中的类别为例:(gtid表示序号为id的标签框,preid表示序号为id的预测框),maxiou(preid,gtid(3,4))表示序号为id的预测框和所有类别为2的标签框的最大iou值,tp/fp表示预测框预测的正确与否,正确则为tp,否则为fp,为了方便,这里tp记为1,fp记为0
序号idmax iou(preid,gtid(3,4))置信度预测labeltp/fp
10.650.9821
40.680.8621
60.450.5120
序号idmax iou(preid,gtid(1,2))置信度预测labeltp/fp
20.510.9011
30.40.8810
50.90.6711

由上表可以看到,在类别2预测框当中,2个预测正确,1个预测错误,在类别1预测框当中,2个预测正确,1个预测错误。

  • 对单张图像的每一类进行TP,FP统计,最后汇总到成一张表格,别处摘的图,这里是3类

参考:目标检测中的AP计算_lppfwl的博客-CSDN博客_目标检测ap计算

  • 对整个测试集上的每一张图像的每一类进行TP,FP统计

  • 最后汇总到成一张表格,表格和上面表格一样,只是数量上增加了而已,为了方便讲解这里以一张图像的为例进行讲解

  • 分别对每一个类别进行ap曲线的绘制,这里以一类为例讲解,以类别1为例

  • 计算不同置信度下的precision和recall

--------------------------------------------------------------------------------------------------------------------------

问题2:怎么求解不同置信度阈值下的precision,recall值

答:假设置信度阈值为thre,则当预测框的置信度大于等于thre时,将预测框视为正样本,小于阈值thre时,将预测框视为负样本。前面利用iou得到的tp/fp则作为当前预测框的真实标签,1表示实际为正样本,0表示实际为负样本。这样又有预测框的真实标签、预测标签、置信度、置信度阈值就可以求解出当前类的TP.FP.FN.TN,进而求解precision和recall

问题3:出现的两次预测有什么区别?

答:仔细看可以发现,在前面出现了两次预测框的标签预测,

1)第一次确定预测框的预测类别是否正确根据预测框和当前预测类的所有标签框进行iou计算,然后判断是否预测成功,这里其实就是将预测为同一类的预测框分为两类,预测正确和不正确两类,正确为1,不正确为0,这个就作为这个预测框在预测类中的真实标签

2)第二次是人为划分了置信度阈值,根据阈值来决定预测框的正负性,当预测框的置信度大于等于thre时,将预测框视为正样本,小于阈值thre时,将预测框视为负样本。这个作为当前置信度阈值下的预测标签。

根据预测标签和真实标签就能够计算在当前置信度阈值下的混淆矩阵,从而得到precision和recall

--------------------------------------------------------------------------------------------------------------------------

序号id置信度conference预测标签tp/fp
50.6611
100.5510
20.4511
80.3410
10.2310

 将置信度从1到0依次取点会得到一系列的(precision,recall)的坐标点,初始坐标点为(0,1),结束点为(1,0),置信度的取点我们可以根据预测框的置信度进行取点,比如conferences = 【0.66,0.55,0.45,0.34,0.23】,当置信度阈值分别等于这些值时,precision和recall取值是不一样的
 

     

序号id置信度conference置信度阈值tp/fpprecisionrecall
50.660.6611/(1+0) = 11/(1+1)=1/2
100.550.5501/(1+1)=1/21/(1+1)=1/2
20.450.4512/(2+1) = 2/32/(2+0) = 1
80.340.3402/(2+2) = 1/22/(2+0) = 1
10.230.2302/(2+3) = 2/52/(2+0) = 1

由上表可以看出,这样我们就得到了precision和recall的点对,注意,当一个recall对应多个precision时,取最大的precision即可,例如在recall=1时,对应precision=2/3、1/2、2/5、0,这时候我们取2/3即可

点对如下:(recall,precision)

【(0,1),(1/2,1),(1,2/3),(1,1/2),(1,2/5),(1,0)】最终根据这些点就可以绘制出ap曲线图

  • 计算AP

AP(average precision)= 曲线面积

比如上图:

AP = 1/2 + (1/2+2/3)*1/2*1/2 = 19/24

  • 计算map

map指的就是所有类的平均ap值,map = (ap1+ap2+...+apn)/n,其中n为标签类别号

三、学习笔记

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

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

相关文章

第 52 章 Web Server Optimization

系统配置 Intel(R) Xeon(TM) CPU 3.00GHzMemory 4GEthernet adapter 1000M52.1. ulimit 查看 ulimit ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited pending signals …

hdu5489 Removed Interval dp+线段树优化

现在看这题居然直接秒了。。。去年看的时候还以为神题。。 设以第i项为结尾的lis前缀为f[i]&#xff0c;以第j项为结尾的lis后缀为g[i]&#xff0c;如果求出f[i]和g[j]&#xff0c;然后枚举i&#xff0c;快速找到最大的满足a[j]>a[i]的g[j]就可以了。注意到如果将f[i]从后往…

JS原型链理解

1. 每个对象都有原型属性(__proto__)2. 对象的原型(__proto__)指向其构造函数(Constructor)的prototype属性3. 构造函数(Constructor)的prototype属性本身也是一个对象&#xff0c;其原型(__proto__)亦指向其构造函数的prototype4. 如此形成一个链式结构&#xff0c;而Construc…

【深度学习】——2021年FPN特征金字塔

#!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2021/4/22 17:06 # Author : linlianqin # Site : # File : fpn.py # Software: PyCharm # description:其搭建的基本流程和resnet是一致的&#xff0c;只是将每一层的卷积结果保存了起来import torch impo…

NoSQL分类及ehcache memcache redis 三大缓存的对比

NoSQL分类 由于NoSQL中没有像传统数据库那样定义数据的组织方式为关系型的&#xff0c;所以只要内部的数据组织采用了非关系型的方式&#xff0c;就可以称之为NoSQL数据库。目前&#xff0c;可以将众多的NoSQL数据库按照内部的数据组织形式进行如下分类&#xff1a; Key/Value的…

52.4. APC Cache (php-apc - APC (Alternative PHP Cache) module for PHP 5)

$ apt-cache search php-apc php-apc - APC (Alternative PHP Cache) module for PHP 5$ sudo apt-get install php-apcapc cache 状态监控 http://pecl.php.net/package/APC 下载解包找到apc.php,放到web服务器上 原文出处&#xff1a;Netkiller 系列 手札 本文作者&#xff1…

乐视云计算基于OpenStack的IaaS实践

本文作者岳龙广&#xff0c;现在就职于乐视云计算有限公司&#xff0c;负责IaaS部门的工作。 从开始工作就混在开源世界里&#xff0c;在虚拟化方面做过CloudStack/Ovirt开发&#xff0c;现在是做以OpenStack为基础的乐视云平台。所以对虚拟化情有独钟&#xff0c;也对虚拟化/云…

【深度学习】——如何提高map值

目录 代码获取 map原理 map提高技巧 技巧总结&#xff1a; 实战&#xff1a; 1、效果不佳map55.55% 1&#xff09;单独调整get_dr_txt.py中的self.iou 0.3 2&#xff09;单独调整get_map,py中的minoverlap: 3)同时调整minoverlap和self.iou 本文是在faster_rcnn模型的…

每日站立会议个人博客(冲刺周)-Wednesday

时间未完成不知道如何获取具体标签里的内容正在做爬虫技术之获取标签里的内容将要做对运用爬虫技术获取的数据进行处理转载于:https://www.cnblogs.com/andibier/p/8075098.html

数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器(转)...

第1章 引言 随着互联网应用的广泛普及&#xff0c;海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用&#xff0c;每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分来提高网站性能&#xff0c;横…

【深度学习】——纠错error: Unable to find vcvarsall.bat:关于安装pycocotools

1、安装包下载 大佬改写支持 Windows 的 COCO 地址&#xff1a;https://github.com/philferriere/cocoapi 下载后如下&#xff1a; 进入pythonAPI 先后运行&#xff1a; python setup.py build_ext --inplacepython setup.py build_ext install 出现以下标志时&#xff0c…

【小贴士】虚拟键盘与fixed带给移动端的痛!

前言今天来公司的主要目的就是研究虚拟键盘与fixed的问题&#xff0c;期间因为同事问起闭包与事件委托&#xff08;阻止冒泡&#xff09;相关问题&#xff0c;便穿插了一篇别的&#xff1a;【小贴士】工作中的”闭包“与事件委托的”阻止冒泡“&#xff0c;有兴趣的朋友可以去看…

[OJ] Wildcard Matching (Hard)

LintCode 192. Wildcard Matching (Hard)LeetCode 44. Wildcard Matching (Hard) 第二次刷还是被这题虐. 其实就是跪在一个地方, 就是关于mustFail的地方. 当*p && !*s的时候, 说明s已经被用完了, p还没有被穷尽, 这种情况下要直接退出所有的递归返回false, 因为s都匹配…

CSS3 -webkit-transition(属性渐变)

-webkit-transition&#xff1a;CSS属性(none|all|属性) 持续时间 时间函数 延迟时间 CSS属性(transition-property)&#xff1a;要变化的属性&#xff0c;比如元素变宽则是width&#xff0c;文字颜色要变色这是color&#xff1b;W3C给出了一个可变换属性的列表&#xff1a;…

vxworks的default boot line说明

boot程序的主要功能是引导vxworks 内核,所以boot程序需要知道vxworks的内核存放在何处&#xff0c;通过什么手段去获取。在vxworks缺省的boot程序里有一条内建的default boot line,它指明了获得vxworks内核的途径&#xff0c;在boot程序启动时&#xff0c;它先寻找NVRAM里面有无…

【机器视觉】——相机和镜头的选择

目录 1、相机选择 2、镜头选择 3、其他计算公式 1)芯片尺寸计算:

React Native中pointerEvent属性

在React Native界面开发中, 如果使用绝对定位布局,在代码运行时的某个时刻有可能会遮盖住它的下方的某个组件。这是因为绝对定位只是说这个组件的位置由它父组件的边框决定。 绝对定位的组件可以被认为会覆盖在它前面布局&#xff08;JSX代码顺序&#xff09;的组件的上方. 如果…

Rar Java Zip

http://wolfdream.iteye.com/blog/428588转载于:https://www.cnblogs.com/diyunpeng/p/5218381.html

库卡机器人CELL程序解析

KUKA机器人 CELL程序 解析及注释&ACCESS RVP&REL 4&COMMENT HANDLER on external automaticDEF CELL ( );EXT EXAMPLE1 ( );EXT EXAMPLE2 ( );EXT EXAMPLE3 ( ) ;FOLD INITDECL CHAR DMY[3]DMY[]"---";ENDFOLD (INIT);FOLD BASISTECH INIIR_STOPM ( )…

Ubuntu 16.04服务器安装及软件配置

1.配置静态地址 vim /etc/network/interfaces auto enp1s0 iface enp1s0 inet static address 192.168.1.131 netmask 255.255.255.0auto enp2s0 iface enp2s0 inet static address 192.168.2.131 netmask 255.255.255.0auto enp3s0 iface enp3s0 inet static address 192.168.…