从TP、FP、TN、FN到ROC曲线、miss rate、行人检测评估

2023-11-18

从TP、FP、TN、FN到ROC曲线、miss rate、行人检测评估

 

update 2018年1月31日22:21:56

最初版本是基于行人检测Piotr Dollar大佬的论文和代码胡乱写的 难免有错

严谨的paper请参考:The Relationship Between Precision-Recall and ROC Curves (ICML2006) , https://www.biostat.wisc.edu/~page/rocpr.pdf

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

想要在行人检测的evaluation阶段要计算miss rate,就要从True Positive Rate讲起:miss rate = 1 - true positive rate

true positive rate毕竟是一个rate,是一个比值。是谁和谁比呢?P

要从TP、FP、TN、FN讲起。
考虑一个二分类问题:一个item,它实际值有0、1两种取值,即负例、正例;而二分类算法预测出来的结果,也只有0、1两种取值,即负例、正例。我们不考虑二分类算法细节,当作黑箱子就好;我们关心的是,预测的结果和实际情况匹配、偏差的情况。

TP:true positive,实际是正例,预测为正例
FP:false positive,实际为负例,预测为正例
TN:true negative,实际为负例,预测为负例
FN:false negative,实际为正例,预测为负例

也就是说:我们不仅考虑算法的预测结果对不对,还要考虑是“哪一种对”;我们还考虑算法预测错的情况,并且我们深究“是哪一种错”:

OK,既然把TP、FP、TN、FN搞清楚了,那么看几个rate的定义。
TPR:true positive rate, 等于,又叫precision rate
FPR:false positive rate,等于
TNR:true negative rate,等于
FNR:false negative rate,等于,又叫miss rate
观察后不难发现,每个rate的公式,都是前,#表示number,即统计数量。
而结合前面画的那张图,容易发现,每个rate公式还可以通过画图理解:每个rate都等于,虽然这么说起来不严谨,赫赫但是形象化的理解更容易记住。
还有一点:fnr+tpr=1, fpr+tnr=1
其实后面使用到的,更多的是fnr,俗称miss rate,作为ROC曲线的纵坐标;而横坐标则取fpr

理解阈值
再次考虑二分类问题。你说,真实世界会存在严格的二分类吗?就说人的性取向,有的人也是“徘徊不定”的,这样的人真是让人头疼但是必须想办法处理掉。因此设定一个阈值:根据这个人的一系列举动,给ta的性别累计打分并最终映射到[0,1]区间(得到score),然后比如设定阈值t为0.5,若score>t=0.5,那么ta是男的;否则是女的。
回到理论上,每一个需要预测的变量,其取值都可以根据阈值进行划分。对于二分类,我设定阈值t,当某个item取值大于t,就判定为正例(positive),否则判定为负例(negative)。
也就是说,我手头有一堆预测得到的数据(甭管我用的是哪种机器学习算法),我通过设定不同的阈值,能得到不同的TP、FP、TN、FN取值,相应的TPR、FPR、TNR、FNR取值也产生变化。那么这种变化我就可以通过图像显示出来:对于一个确定的阈值t,FPR和TPR是确定的,得到一个(fpr,tpr)元组;将阈值从0到1变化,当t=0时所有预测结果都大于0都是Positive所以FP=TP=1,FN=TN=0,fpr=tpr=1,得到(1,1)点,当t=1时所有预测结果都小于0都是Negative所以FP=TP=0,FN=TN=1,fpr=tpr=0,得到(0,0)点,t取(0,1)上的值时则fpr和tpr都在0到1之间变化,且不难发现:当t增加,#FP也减小,#TN增加,则fpr减小;当t增加,#TP减小,#FN增加,则tpr减小。也就是说,当阈值t从0变化到1,fpr和tpr也单调减小,从(1,1)减小到(0,0)

呃,这里不知道为什么,大多数我看到的文献,都是画出fpr和tpr的图像,而把阈值本身省掉了,得到ROC曲线:

Anyway,我们继续,我们的目标是搞清楚行人检测评估中的miss rate怎么算。等等,好像已经出来了:miss rate = 1 - true positive rate,那么对应的YoX图像,也就是miss rate - false positive rate图像,就应当是单调下降的曲线。

绘图
干巴巴的说什么单调增加单调下降缺少直观印象,有代码有绘图才是正道~
我使用的是Caltech行人检测数据集网站主页提供的matlab工具,因为想要搞明白的miss rate是在pedestrian检测中作为评价标准出现,而这个Caltech数据集以及matlab工具都是行人检测中会用到的工具。废话不多说,下载好这个toolbox后打开并添加到path中,进入matlab目录调用plotRoc函数就能玩了,比如:

1.k=2; x=0:.0001:1; data1 = [1-x; (1-x.^k).^(1/k)]';
2.k=3; x=0:.0001:1; data2 = [1-x; (1-x.^k).^(1/k)]';
3.hs(1)=plotRoc(data1,struct('color','g','marker','s'));
4.hs(2)=plotRoc(data2,struct('color','b','lineSt','--'));
5.legend( hs, {'roc1','roc2'} ); xlabel('fp'); ylabel('fn');

图中纵坐标标记为fn,其实是fnr(false negative rate),也就是1-tnr。fnr俗称miss rate。而横坐标fpr(false positive rate),也可以用FPPI(False Positive Per Image)或者FPPW(False Positive Per Window)来表示。

OK,总算搞懂了:要想绘制行人检测的evaluation阶段的miss rate - FPPI图像(roc曲线),需要有带annotation的测试图片(提供作为ground truth的object window的bbox坐标),并且用某个算法(各种机器学习模型都行,看效果了)对每个测试图片算出若干bbox坐标:前者()作为“实际取值”,后者()作为“预测取值”,当阈值t从0变化到1,每个预测取值也会变化,从{TP,FP,TN,FN}中取值,而在任意一个t的取值上,FPR、FNR(miss rate)都可以通过统计#TP,#FP,#TN,#FN后算出,因而就能得到plotRoc绘图函数所需的参数D,进而绘制出ROC曲线勒~

 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从TP、FP、TN、FN到ROC曲线、miss rate、行人检测评估 的相关文章

  • Matlab,如何获取imagesc生成的结果?

    我读过一些类似的文章 但它们不是我想要的 得到imagesc之后的矩阵 https stackoverflow com questions 14364239 get the matrix after imagesc 14364434 143
  • 读取 MEX 文件中的 4D 数组

    我在 MATLAB 中有一个 4 维数组 我正在尝试访问 MEX 函数中的数组 下面创建 testmatrix 一个 4 维矩阵 已知数据为uint8 type Create a 4D array 2x 2y rgb 3 framenumb
  • 如何在matlab中显示图像上的点?

    我有一些像素点 比如 p1 1 1 和 p2 1 10 等等 我想以任何颜色在图像上显示这些点 这个怎么做 MATLAB plot http www mathworks com help techdoc ref plot html文档非常全
  • 如何从 Matlab 在 vi​​rtualenv 中执行 Python 代码

    我正在创建一个用于研究的 Matlab 工具箱 我需要执行 Matlab 代码 但也需要执行 Python 代码 我想允许用户从 Matlab 执行 Python 代码 问题是 如果我立即执行此操作 我将必须在 Python 环境中安装所有
  • 从彩色背景中提取黑色对象

    人眼很容易辨别black来自其他颜色 但是计算机呢 我在普通的A4纸上打印了一些色块 由于组成彩色图像有青色 品红色和黄色三种墨水 所以我设置每个块的颜色C 20 C 30 C 40 C 50 以及其余两种颜色是 0 这是我的源图像的第一列
  • 如何在matlab中绘制彩色一维直方图

    我有一个一维数组 X 其中包含相关系数的统计数据 我想绘制一个彩色直方图 我使用以下代码 histogram X 10 它可以创建具有单色的直方图 现在我想绘制一个直方图 其中每个条形都有不同的颜色 但 FaceColor 选项只能调整整个
  • 有没有办法在 Visual Studio 或 MATLAB 中“映射”程序执行顺序?

    我所说的 地图 是指我有一个 主 函数 它调用内部的许多其他程序 我希望能够看到哪个文件首先运行 第二个 第三个等等 基本上 我希望能够请参阅这个大型 OOP 设计程序 创建者没有为其制作 UML 类图 中的依赖项列表和顺序 以帮助破译代码
  • 在Matlab中将矩阵中的元素i,j设置为i*j

    我想生成一个矩阵 其中 i j 元素等于 i j 其中 i j e g 0 2 3 2 0 6 3 6 0 到目前为止 我已经发现我可以使用这个索引矩阵访问非对角线元素 idx 1 eye 3 但我还没有弄清楚如何将矩阵单元的索引合并到计算
  • 在 Matlab 2014b 中移动等高线图的 z 值

    我正在尝试绘制曲面图 在曲面下方我希望显示轮廓线 但我希望轮廓位于z 1而不是默认值0 我找到了之前关于这个问题的帖子here https stackoverflow com questions 8054966 matlab how to
  • Matlab 中 interp2 的类似 OpenCV Api

    有没有类似的功能 其工作原理与 interp2 x y frame z xd yd linear 0 在 OpenCV 中 功能cv remap 几乎可以满足您的要求 请参阅文档here http docs opencv org modul
  • MATLAB 链表

    有哪些可能的方法来实现链表MATLAB http en wikipedia org wiki MATLAB 注意 我问这个问题是为了教学价值 而不是实用价值 我意识到 如果您实际上在 MATLAB 中滚动自己的链表 那么您可能做错了什么 然
  • 在matlab中设置图例符号的精度

    我有这个 leg2 strcat Max Degree num2str adet 1 1 ch l leg3 strcat Min Degree num2str adet 1 2 ch l leg4 strcat Max Request n
  • 如何读取 10 位原始图像?其中包含 RGB-IR 数据

    我想知道如何从我的 10 位原始 它有 rgb ir 图像数据 数据中提取 RGB 图像 如何使用 Python 或 MATLAB 进行阅读 拍摄时的相机分辨率为 1280x720 室内照片图片下载 https drive google c
  • Matlab 编辑器不使用 emacs 快捷方式

    Is there some way I can make the matlab integrated editor not use emacs shortcut but use more normal shortcuts such that
  • 在 C/C++ 中调用 MATLAB API

    我刚刚从某处听说 对于数值计算 MATLAB 确实提供了一些用户友好的 API 如果你在 C C 代码中调用这些 API 你可以显着加快计算速度 但我在MATLAB文档中没有找到这样的信息 例如http www mathworks com
  • 将组合字符串和数字输入的元胞数组写入文本文件

    考虑以下 DateTime 2007 01 01 00 00 2007 02 01 00 00 2007 03 01 00 00 Headers Datetime Data Dat 100 200 300 Data DateTime num
  • 在 Matlab 中快速加载大块二进制文件

    我有一些相当大的 int16 格式的数据文件 256 个通道 大约 75 1 亿个样本 每个文件约 40 50 GB 左右 它以平面二进制格式编写 因此结构类似于 CH1S1 CH2S1 CH3S1 CH256S1 CH1S2 CH2S2
  • 同时重新排序和旋转图像的高效方法

    为了快速加载 jpeg 我为turbojpeg 实现了一个 mex wrapper 以有效地将 大 jpeg 读入 MATLAB 对于 4000x3000px 的图像 实际解码只需要大约 120 毫秒 而不是 5 毫秒 然而 像素顺序是 R
  • 为什么matlab的mldivide比dgels好这么多?

    Solve Ax b 真正的双 A是超定的 Mx2 其中 M gt gt 2 b是MX1 我运行了大量的数据mldivide 并且结果非常好 我用 MKL 写了一个 mex 例程LAPACKE dgels但它远没有那么好 结果有大量噪音 并
  • MATLAB 图中轴标签与轴之间的距离

    我正在使用 MATLAB 绘制一些数据 我想调整轴标签与轴本身之间的距离 但是 只需向标签的 位置 属性添加一点即可使标签移出图窗窗口 是否有 保证金 属性或类似的东西 在上图中 我想增加数字和标签 Time s 之间的距离 同时自动扩展数

随机推荐

  • [机缘参悟-74]:沟通技巧-无论在职场还是在家,尽量少用反问句

    目录 反问句的案例 尽量不要使用反问句 避免使用反问词 把反问句改为陈述句 反问句的案例 那天闲聊 邻居老贾向老友们诉苦 老伴今天又用反问句 款待 他了 中午炒菜时 老伴让他拿一瓶油来 老贾问 油瓶在哪里 你觉得油瓶会在哪里 老贾又问 是不
  • 解决k8s集群环境内存不足导致容器被kill问题

    背景 最近线上环境上出现了一个问题 k8s集群环境Pod中的tomcat容器运行一段时间后直接被killd 但有时一切看起来正常 不能准确判断在什么时机出现被Killd问题 本文就此问题介绍了Linux内存不足原因以及为什么特定进程会被杀死
  • nRF24L01单芯片2.4GHz收发模块射频信道频率

    框架图 管脚图 操作模式配置 射频信道频率 RF通道频率决定了 nRF24L01 使用的通道中心 该通道在 1Mbps 时占用 1MHz 带宽 在 2Mbps 时占用 2MHz 带宽 nRF24L01 可以在 2 400GHz 到 2 52
  • poll()函数详解

    poll提供的功能与select类似 不过在处理流设备时 它能够提供额外的信息 include
  • 测试流程简述

    测试流程 整体流程如下 需求评审 功能需求 性能需求 接口需求 测试计划 测试用例 用例评审 测试环境搭建 平台 架构 web服务器 数据库 执行用例 缺陷记录 缺陷跟踪和回归测试 测试报告 测试计划 测试计划 描述了要进行的测试活动的范围
  • 第八站:JavaScript的数据类型、运算符、流程控制语句

    第八站 JavaScript的数据类型 运算符 流程控制语句 欢迎来到第八站 JavaScript的数据类型 运算符 流程控制语句 在这一站 我们将深入探索JavaScript中的核心概念 为你揭示这个语言的奇妙之处 准备好继续冒险了吗 让
  • linux安装datax

    1 创建文件夹 存放安装包 cd opt mkdir datax cd datax 2 下载安装包 wget http datax opensource oss cn hangzhou aliyuncs com datax tar gz 3
  • 流程引擎是什么?有什么作用?

    编者按 本文详细论述了流程引擎的概念 流程引擎的作用以及选型的要旨 并介绍了自主研发具有中国特色的流程引擎 关键词 流程引擎 集成性 数据分析 BPMN2 0规范 中国特色 流程审批 自主研发 流程引擎是什么 流程引擎 用来驱动业务按照设定
  • Python基础语法(函数式编程)

    目录 实例1 温度转换 实例2 蟒蛇绘制 模块1 turtle库 基本图形绘制 基本数据类型 1 整数 浮点数 复数 1 整数 2 浮点数 3 复数 4 数值运算操作符 实例3 天天向上的力量 2 字符串 模块2 time库 时间的基本处理
  • SpringCloud文件上传

    2 实现图片上传 刚才的新增实现中 我们并没有上传图片 接下来我们一起完成图片上传逻辑 文件的上传并不只是在品牌管理中有需求 以后的其它服务也可能需要 因此我们创建一个独立的微服务 专门处理各种上传 2 1 搭建项目 2 1 1 创建Spr
  • Android:播放UDP流例如udp://@239.0.0.3:8218

    成功实现播放udp github下载 求大佬们给个star GitHub YangWenlong71 udpplayer 基于ijk重新编译 未做删减几乎全能的安卓视频播放器 支持播放UDP https http 等 分割线 研究思路及结果
  • Django(17):Cookie 和 Session

    目录 Cookie 什么是Cookie Django使用Cookie Cookie使用示例 session 什么是session Django使用session Session使用示例 小结 HTTP协议本身是 无状态 的 在一次请求和下一
  • Flutter——头像上传功能,实现照片选择及裁剪

    使用两个开发库 image picker和image crop 前者用来拍照或者从相册选择照片 后者用来裁剪 结果均为File类型 裁剪完成后可以直接上传文件 先写到这儿 有时间上代码 更新 实现的功能是点击头像图片 弹出选择框 选择拍照或
  • C# 流程图完整功能,矩形,菱形圆,三角形,直线,折线,放大,滚动条,保存等等功能(附下载链接)

    C 流程图完整功能 矩形 菱形圆 三角形 直线 折线 放大 滚动条 保存等等功能 点我下载项目源码 流程图具体功能如下 连接时图形有线帽 部分动漫展示 public virtual void Draw Graphics gr canvas
  • 51虚拟安卓系统v1.1.0.6-安卓端的虚拟机(支持root,xposed框架)

    应用名称 51虚拟安卓系统 应用包名 com f1player 应用版本 1 1 0 6 应用大小 266 87M 下载地址 链接 https pan baidu com s 1N9YWIafoI575GfKvtHkd3A 提取码 qnr2
  • Ubuntu系统中如何进行屏幕截图

    前言 我的环境是双系统 ubuntu20 04 但应该无论是什么版本的ubuntu都可以实现 方法 1 快捷键截图 在设置里找到键盘快捷键 找到截图目录 就可以看到有关截图的快捷键 可以自己手动更改 单击选项即可 一般使用shift pri
  • 【C++编程技巧】根据字符串中的指定字符作为分界将字符串拆分

    在C 中可以用split 函数方便的实现字符串的拆分 在C 中没有类似的函数 用strtok函数进行完成字符串分割 原型 char strtok char str const char delim 功能 分解字符串为一组字符串 参数说明 s
  • JAVA中的JeeSite框架基本简介

    JAVA的主流框架是很多的 每一个框架都有它的适用项目和条件 所有JAVA程序员都熟悉的肯定是常用的四大框架 而JeeSite这个框架使用的人却不是很多 但是这个框架却有它的独到之处 稳定 高效 调用方便 这里对JeeSite做一个简单的介
  • kill掉僵尸进程的方法(kill -9 <PPID>)

    ps A ostat ppid pid cmd grep e Zz 先用以上bash命令找到僵尸进程 Z右边第一列为PPID 第二列为PID kill 9 PPID 即PID对应的父进程即可 kill 9
  • 从TP、FP、TN、FN到ROC曲线、miss rate、行人检测评估

    从TP FP TN FN到ROC曲线 miss rate 行人检测评估 update 2018年1月31日22 21 56 最初版本是基于行人检测Piotr Dollar大佬的论文和代码胡乱写的 难免有错 严谨的paper请参考 The R