【深度学习】——模型评估指标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,一经查实,立即删除!

相关文章

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]从后往…

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

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

乐视云计算基于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模型的…

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

第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…

[软件测试airtest软件安装]——填坑

目录 1、安装Python环境&#xff08;版本问题&#xff09; 2、连接手机出现连接上了但是无法进行点击 airtest官网&#xff1a; https://airtest.doc.io.netease.com/for_newer/ 关于软件测试刚入门的可以参考进行了解&#xff1a;https://airtest.doc.io.netease.com/tuto…

KUKA 机器人SPS.SUB程序解析

&ACCESS RVO&COMMENT PLC on controlDEF SPS ( );FOLD DECLARATIONS;FOLD BASISTECH DECL;Automatik externDECL STATE_T STAT定义STATE_T类型的变量。该结构为&#xff1a;STRUC STATE_T CMD_STAT RET1&#xff0c; CMD_STAT是枚举类型数据&#xff0c;组成了STATE_…

jquery validate表单验证插件

1 表单验证的准备工作 在开启长篇大论之前&#xff0c;首先将表单验证的效果展示给大家。 1.点击表单项&#xff0c;显示帮助提示         2.鼠标离开表单项时&#xff0c;开始校验元素    3.鼠标离开后的正确、错误提示及鼠标移入时的帮助提醒 对于初学者而言&…

【Python位运算】——左移操作(<<)右移操作>>

目录 左移操作 右移操作 其他博主的理解 应用——力扣题目78. 子集 解法 深度优先搜索 位运算 参考文献 左移操作 # 左移操作&#xff0c;左移一位相当于乘以b&#xff0c;a<<b,a a*(2^b) print(2<<3) # 2*2^3 16&#xff0c;2的二进制10&#xff0c;向…

sql中字段名中包含特殊字符的查询方法

sql中字段名章包含特殊字符的查询方法&#xff1a;例如包含""&#xff0c;student表中字段为&#xff1a;id“学号”、name"姓名"。 解决办法&#xff1a;用英文下的 ""&#xff08;Tab键上面那个键,不需要shift&#xff09;把字段名包起来。如&…

ABB RAPID SOCKET编程

相传在2009年6月11日&#xff0c;微博的鼻祖t-w-i-t-t-e-r还没有被封锁的时候&#xff0c;于仁颇黎写了了一个东西可以将staubli机器人在运行时的状态&#xff0c;实时发送上去&#xff0c;可以被实时的查看&#xff0c;任何一个人都可以查看&#xff0c;于是就有了这个名为TWI…

机器人 工具坐标系的标定

概念 工具坐标系是把机器人腕部法兰盘所握工具的有效方向定为Z轴&#xff0c;把坐标定义在工具尖端点&#xff0c;所以工具坐标的方向随腕部的移动而发生变化。 工具坐标的移动&#xff0c;以工具的有效方向为基准&#xff0c;与机器人的位置、姿势无关&#xff0c;所以进行相…

Linux内核分析— —计算机是如何工作的(20135213林涵锦)

实验部分 &#xff08;以下命令为实验楼64位Linux虚拟机环境下适用&#xff0c;32位Linux环境可能会稍有不同&#xff09; 使用 gcc –S –o main.s main.c -m32命令编译成汇编代码&#xff0c; int g(int x){ return x 6;} int f(int x){ return g(x);} int main(void){ r…

【测试开发】测试用例讲解

文章目录 目录 文章目录 前言 一、测试用例的基本要素 二、测试用例的设计方法 1.基于需求的设计方法 对日历根据web界面的功能布局分析出的功能框图如下&#xff1a; 继续举一个例子百度云盘非功能测试的案例&#xff1a; 2.等价类 3.边界值 5.正交表 6.场景设计法 7…

Hadoop分布式系统的安装部署

1、关于虚拟机的复制 新建一台虚拟机&#xff0c;系统为CentOS7&#xff0c;再克隆两台&#xff0c;组成一个三台机器的小集群。正常情况下一般需要五台机器&#xff08;一个Name节点&#xff0c;一个SecondName节点&#xff0c;三个Data节点。&#xff09; 此外&#xff0c;为…

Windows线程调度学习(一)

前言 Windows 线程调度器的实现分散在内核各处&#xff0c;并且与许多组件都有关联&#xff0c;很难进行系统地学习&#xff0c;所以我打算写几篇文章来记录下自己学习过程中的思考和分析&#xff0c;同时也方便日后查阅&#xff0c;此文可以看作是《Windows内核原理与实现》中…

scapy 安装及简单测试

关于scapy Scapy的是一个强大的交互式数据包处理程序&#xff08;使用python编写&#xff09;。它能够伪造或者解码大量的网络协议数据包&#xff0c;能够发送、捕捉、匹配请求和回复包等等。它可以很容易地处理一些典型操作&#xff0c;比如端口扫描&#xff0c;tracerouting&…

JavaScript 基础知识 - BOM篇

前言 本篇文章是JavaScript基础知识的BOM篇&#xff0c;如果前面的《JavaScript基础知识-DOM篇》看完了&#xff0c;现在就可以学习BOM了。 注意&#xff1a; 所有的案例都在这里链接: 提取密码密码: yvxo&#xff0c;文章中的每个案例后面都有对应的序号。 1. BOM 基本概念 B…

全球首例机器人自杀事件 因受够无聊家务

据凤凰网,一个奥地利家庭购买一小机器人,每天工作就是倒垃圾、倒垃圾。一天完工后,它竟自己启动,爬到炉边&#xff0c;推开上面的锅&#xff0c;把自己活活烧死…专家称这个机器人实在受够了无聊的家务琐事&#xff0c;才毅然选择自杀机器人也是有尊严的!为这有骨气的robot点根…