【目标检测】绘制FPPI、miss rate数据及代码例子

2023-05-16

行人检测一般用FPPI而不是mAP作为评估指标,但是网上找了好久都没找到Python版本的代码,原来FPPI官方的代码是matlab的,这里记录一下用官方的代码来绘制FPPI曲线有哪些需要注意的

有两个方法:

  1. 用matlab的evaluateDetectionMissRate(建议用这个)
  2. 用官方的工具包(有一些参数我还没弄懂,欢迎清楚的小伙伴来填坑)

1. matlab的evaluateDetectionMissRate

感谢这篇文章提供思路:FPPI曲线绘制记录
matlab官方文档地址:evaluateDetectionMissRate

测试数据下载地址:matlab绘制FPPI测试数据

load fppi.mat
[am, fppi, missRate] = evaluateDetectionMissRate(results, a);
%%
% Plot log average miss rate - FPPI.
figure
loglog(fppi, missRate);
grid on
title(sprintf('log Average Miss Rate = %.5f',am))

成功绘制后图片长这个样子

如果要改成自己数据的话:
预测结果的格式(即代码中的result):

  1. 第一列为[x, y, width, height]
  2. 第二列为预测的分数
  3. 每一行中,第一列和第二列的物体数量要一样,例如第一列是6个物体,那他的shape为6*4,那么第二列也要是6个分数,shape为1*4(不懂的话可以打开fppi.mat看下)

label的格式(即代码中的a,名字我随便取的哈哈哈):

  1. 第一列为[x, y, width, height]
  2. 如果有多个物体的话,就用分号;隔开
  3. 预测结果和label的每一行都是指一张图片,所以两者的顺序要对应上

详情可以matlab源码中的注释:

function [logAverageMissRate, fppi, missRate] = evaluateDetectionMissRate(...
                                    detectionResults, groundTruthData, varargin)
%evaluateDetectionMissRate Evaluate the miss rate metric for object detection.
%   logAverageMissRate = evaluateDetectionMissRate(detectionResults,
%   groundTruthData) returns log-average miss rate to measure the detection
%   performance. For a multi-class detector, logAverageMissRate is a vector
%   of log-average miss rates for each object class. The class order
%   follows the same column order as the groundTruthData table.
% 
%   Inputs:
%   -------
%   detectionResults  - a table that has two columns for single-class
%                       detector, or three columns for multi-class
%                       detector. The first column contains M-by-4 matrices
%                       of [x, y, width, height] bounding boxes specifying
%                       object locations. The second column contains scores
%                       for each detection. For multi-class detector, the
%                       third column contains the predicted label for each
%                       detection. The label must be categorical type
%                       defined by the variable names of groundTruthData
%                       table.
%
%   groundTruthData   - a table that has one column for single-class, or
%                       multiple columns for multi-class. Each column
%                       contains M-by-4 matrices of [x, y, width, height]
%                       bounding boxes specifying object locations. The
%                       column name specifies the class label.
%  
%   [..., fppi, missRate] = evaluateDetectionMissRate(...) returns data
%   points for plotting the log-miss-rate/false-positives-per-image(FPPI)
%   curve. You can visualize the performance curve using loglog(fppi,missRate). 
%   For multi-class detector, recall and precision are cell arrays, where
%   each cell contains the data points for each object class.
%
%   [...] = evaluateDetectionMissRate(..., threshold) specifies the
%   overlap threshold for assigning a detection to a ground truth box. The
%   overlap ratio is computed as the intersection over union. The default
%   value is 0.5.
%
%   Example : Evaluate stop sign detector
%   -------------------------------------
%   % Load the ground truth table
%   load('stopSignsAndCars.mat')
%   stopSigns = stopSignsAndCars(:, 1:2);
%   stopSigns.imageFilename = fullfile(toolboxdir('vision'),'visiondata', ...
%       stopSigns.imageFilename);
%
%   % Train an ACF based detector
%   detector = trainACFObjectDetector(stopSigns,'NegativeSamplesFactor',2);
%
%   % Create a struct array to store the results
%   numImages = height(stopSigns);
%   results(numImages) = struct('Boxes', [], 'Scores', []);
%
%   % Run the detector on the training images
%   for i = 1 : numImages
%       I = imread(stopSigns.imageFilename{i});
%       [bboxes, scores] = detect(detector, I);
%       results(i).Boxes = bboxes;
%       results(i).Scores = scores;
%   end
%
%   results = struct2table(results);
%
%   % Evaluate the results against the ground truth data
%   [am, fppi, missRate] = evaluateDetectionMissRate(results, stopSigns(:, 2));
%
%   % Plot log-miss-rate/FPPI curve
%   figure
%   loglog(fppi, missRate);
%   grid on
%   title(sprintf('log Average Miss Rate = %.1f', am))
%
% See also evaluateDetectionPrecision, acfObjectDetector,
%          rcnnObjectDetector, trainACFObjectDetector, trainRCNNObjectDetector.

% Copyright 2016 The MathWorks, Inc.
%
% References
% ----------
%   [1] C. D. Manning, P. Raghavan, and H. Schutze. An Introduction to
%   Information Retrieval. Cambridge University Press, 2008.
%
%   [2] D. Hoiem, Y. Chodpathumwan, and Q. Dai. Diagnosing error in
%   object detectors. In Proc. ECCV, 2012.
%
%   [3] Dollar, Piotr, et al. "Pedestrian Detection: An Evaluation of the
%   State of the Art." Pattern Analysis and Machine Intelligence, IEEE
%   Transactions on 34.4 (2012): 743 - 761.

2. 用官方的工具包

非常感谢这篇文章:Caltech评估方法

评估的方法按照上面那篇文章可以跑通代码,需要注意的是:

  1. 要下载annotations文件,并解压到../code3.2.1/data-USA
  2. 在此处下载别人预测的结果,并放在../code3.2.1/data-USA/res中(res文件夹需要自己你新建)

文件放置如图所示:在这里插入图片描述
annotations文件内如图所示:
在这里插入图片描述
res文件内如图所示(ABC是我自己的算法名字):
在这里插入图片描述
3. 修改dbEval.m中的algs变量(在第57行),保留要你对比的算法,他的的注释掉(名字要与你res文件夹中的算法名字相同)。同时,在最后面加上你自己算法的名字,前面的布尔变量表示是否将每个box的高度调整为100/128,clrs表示颜色,'-'表示线条类型
在这里插入图片描述
4. 然后运行dbEval.m即可。图会闪一下,因为最终图片会保存到pdf里面,所以需要安装Ghostscriptpdfcrop。当然也可以在savefig(fName1,1,'pdf','-r300','-fonts'); close(1); f1=[fName1 '.pdf'];设一个断点,然后手动保存
在这里插入图片描述
5. 自己的算法一定要放在前面,不然绘图的时候会显示不出来,这个坑以后再填
6. 自己的数据格式摹仿别人的预测就好了,第一列是图片id,然后是xmin、ymin、w、h,最后不知道是什么待填坑

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

【目标检测】绘制FPPI、miss rate数据及代码例子 的相关文章

  • 码云仓库建库

    方法一 xff1a 先将在码云上新建的仓库clone到本地 xff0c 修改后再push到码云仓库 git clone https gitee com 用户个性地址 工程名字 git 将远程仓库克隆到本地 在克隆过程中 xff0c 如果仓库
  • Python 画多图 统计直方图

    画直方图的命令是这个 xff1a 把里面的内容改了就可以 ec参数调整的是edgecolor xff0c 即框线颜色 matplotlib pyplot hist span class token punctuation span x sp
  • 输入2个整数,求最大公约数和最小公倍数

    输入2个整数 xff0c 求最大公约数和最小公倍数 关于最大公约数的算法 xff0c 古希腊数学家欧几里得已经在2200年前给出我们算法公式 xff0c 我们直接拿来用就可以了 欧几里得算法也被称为辗转相除法 xff0c 用来求最大公约数
  • WSL2 安装 图形系统 及遇到的坑

    wsl本身不带有图形界面 xff0c 需要自己安装 安装流程如下 xff1a 一 windows环境安装VcXsrv 默认安装即可 二 Ubuntu环境安装 xfce4 sudo apt get install xfce4 三 Ubuntu
  • 【美团】项目学习1:登录逻辑实现

    rest framework 和app应用 INSTALLED APPS span class token operator span span class token punctuation span span class token s
  • KMP算法

    一 何谓模式串匹配 模式串匹配 xff0c 就是给定一个需要处理的文本串 xff08 理论上应该很长 xff09 和一个需要在文本串中搜索的模式串 xff08 理论上长度应该远小于文本串 xff09 xff0c 查询在该文本串中 xff0c
  • webApi不能使用put和delete请求的处理方式

    今天调试webApi接口的时候 xff0c 分别使用get post put delete方式都试一下 xff0c 发现get和post方式都能正常调用 xff0c 但是使用put和delete的时候就报错了 xff0c 如下图所示 xff
  • Git 中 6 个基本常用命令

    大家好啊 xff0c 我是大田 想更深刻了解 Git 常用命令 xff0c 先来看看原理图 xff1a 我们使用 Git 操作的核心步骤就是 xff1a 先add代码到git缓存 然后commit到git本地仓库 最后push到远程Gith
  • Ubutun 使用easy-rsa 自签证书

    sudo apt install easy rsa mkdir root cert easy rsa ln s usr share easy rsa easy rsa cd root cert easy rsa easyrsa init p
  • Ubuntu ARM环境安装

    基础环境 防火墙 jiangzz 64 ubuntu span class token function sudo span ufw status Status inactive jiangzz 64 ubuntu span class t
  • 关系代数练习

    设有三个关系 xff1a S S SNAME AGE SEX SC S C GRADE C C xff0c CNAME xff0c TEACHER 试用关系代数表达式表示下列查询语句 xff1a 1 检索LIU老师所授课程的课程号和课程名
  • 使用Opencv调用摄像头失败的解决办法

    这几天参考 OpenCV3编程入门 书中的 调用摄像头采集图像的代码进行编程 xff0c 可是代码照着书上的打完了 xff0c 进行编译的时候竟然报错了 xff0c 于是乎就在网上查找错误的解决办法 xff0c 一开始是以为自己的驱动没装好
  • java日记(一)理解代码片段

    最近跟着Berkeley的CS61B学java 跨专业小白一个学起来比较吃力 xff0c 还好有大佬带着 决定开个贴子整理一下 代码片段是 xff1a DO NOT MODIFY ANYTHING ABOVE THIS LINE span
  • IOS - ReplayKit2 获取影像方向+ReplayKit的坑

    插件对象 64 interface SampleHandler RPBroadcastSampleHandler 重写方法 void processSampleBuffer CMSampleBufferRef sampleBuffer wi
  • Sublime Text运行C和C++程序

    原文链接 xff1a Sublime Text运行C和C 43 43 程序 Sublime Text 是一款当下非常流行的文本编辑器 xff0c 其功能强大 xff08 提供有众多的插件 xff09 界面简洁 还支持跨平台使用 xff08
  • VTK——自定义三维裁剪Widget,恢复Widget(任意形状,圆形,矩形裁剪)vtkCustomPaintWidget

    裁剪图标可以通过键盘上下键切换 xff0c 裁剪模式可以通过键盘左右键切换 xff0c 裁剪区域的显示 xff0c 可以显示为Mask或者显示为Contour边界 xff0c 测试效果如下
  • iOS UITableViewCell高度自适应

    UITableViewCell高度自适应 iOS8之后 我们只需要设置这两句代码之后 xff0c 即可放心的往cell的控件里面加上内容 xff0c cell会根据内部所有控件的高度动态的计算自己的高度从而显示出来 tableView es
  • 记一次vncServer的离线安装经历

    记一次vncServer的离线安装经历 背景 xff1a 需要在一台服务器上面装Oracle xff0c 但是服务器并不能接触到 xff0c 所以只能在客户端进行远程ssh操作 首先根据我以往装Oracle的经验 xff0c 先把安装包这些
  • debian 修改桌面背景

    64 桌面背景 push 图片到对应目录替换 xff1a adb push 图片 usr share desktop base active theme wallpaper contents images 64 当前语言查看 cat etc
  • 【计算机图形学基础教程】MFC基本绘图函数2

    MFC基本绘图函数 绘图工具类 CGdiObject类 xff1a GDI绘图工具的基类CBitmap类 xff1a 封装了GDI画刷 xff0c 可以选作设备上下文的当前画刷 xff0c 用于填充图形的内部CFont类 xff1a 封装了

随机推荐

  • thrift安装及示例

    1 简介 Apache Thrift软件框架 xff08 用于可扩展的跨语言服务开发 xff09 将软件堆栈与代码生成引擎结合在一起 xff0c 它有自己的跨机器的通信框架 xff0c 并提供一套库 它是一个代码生成器 xff0c 按照它的
  • you-get库二开,带UI界面的下载器

    you get库二开 带UI界面的下载器 span class token comment coding utf 8 span span class token comment Form implementation generated f
  • 工厂方法模式【Python篇】

    前言 在 设计模式 一书中工厂模式提到了 xff1a 工厂方法模式 xff08 Factory Method xff09 抽象工厂模式 xff08 Abstract Factory xff09 但是在实际过程中还有一种工厂模式经常被使用 x
  • docker安装gitlab 教程详解

    文章目录 前言一 环境处理二 docker部署gitlab三 调整gitlab配置1 配置克隆项目时所需2 root所需 参考 前言 环境 xff1a 1 xff1a Linux dnsserver moa kdzl cn 3 10 0 6
  • 问题解决:consider to specify kernel configuration cache directory through OPENCV_OCL4DNN_CONFIG_PATH par

    在使用Openpose代码运行的时候 xff0c 提示 xff1a consider to specify kernel configuration cache directory through OPENCV OCL4DNN CONFIG
  • zabbix监控平台搭建,及监控华为S5735S系列交换机和2288hv5服务器

    提要 无监控不运维 xff01 告别 救火员 的运维 二次搭建zabbix了 xff0c 这次打算以zabbix 集团基础硬件为主 43 prometheus k8s 43 微服务集群为主 43 grafana dashbroad展示 xf
  • Selenium 常用API大全(一篇就够)

    Selenium Crawl API xff08 一篇就够 xff09 万字长文整理不易 xff0c 希望对各位有所帮助 xff0c 欢迎大家一键三连 xff0c 点赞收藏加关注 同时也欢迎大家交流分享 xff0c 共同学习互相进步 xff
  • CV和NLP的区别

    本质 xff08 根 xff09 上没有区别 xff0c 都是信息信号处理 xff0c 都是高维信号的分解和组合 xff0c 但是信号的结构特征有区别 xff0c 所以需要不同的策略来挖掘数据信息 xff0c 即使用不同的分解和组合策略 x
  • 【Linux学习笔记】Linux环境搭建Maven私服

    Linux环境搭建Maven私服 一 概要说明二 搭建Nexus3 X xff08 3 18 xff09 2 1 下载Nexus2 2 解压Nexus2 3 启动Nexus2 3 1 创建一个nis用户来启动nexus2 3 2 修改nex
  • Win10喇叭图标出现红叉提示"未安装任何音频输出设备"

    如果你按网上搜的各种方法都试了还是没有声音 xff0c 那么就 1 关机 xff1b 2 拔掉所有的线 xff0c 包括电源线 xff1b 3 长按开机键 15s 重复三次 4 插上电源 xff0c 开机 xff08 此方法适用于我的笔记本
  • C语言提供的线程/进程间同步(锁)机制

    目录 一 C语言提供的线程间同步机制 1 互斥体 xff08 Mutex xff09 2 读写锁 xff08 read write locks xff09 3 条件变量 xff08 conditional variables xff09 4
  • vue 3.0 使用axios

    一 安装axios xff0c vue axios 使用yarn span class token operator span yarn add axios yarn add vue span class token operator sp
  • 深度学习CV(基础理论知识)

    Python 解释性语言 1 tuple元组 xff1a 定义一个只有一个元素的tuple xff0c 必须加逗号 2 幂 xff1b 整除 3 机器学习常用库 numpy xff08 科学计算 xff0c 数据分析 xff09 panda
  • sublime 写C++程序

    sublime 配置 下载 安装sublime安装编译器配置g 43 43 环境变量配置sublime写一个hello world 程序其它的编译build命令 sublime 配置 下载 安装sublime https www subli
  • mysql开启ssl以及如何创建证书

    MYSQL版本8 0 32 xff0c 默认是开启ssl的 xff0c 同时也是自带证书的在 var lib mysql 下 jdbc连接Mysql数据库需要使用SSL时 xff0c 可以按一下步骤进行设置 xff1a 前置条件 xff08
  • Python基础知识:基本语句

    1 if 语句 1 xff09 基本用法 xff1a if 要判断的条件 条件成立的时候 xff0c 要做的事情 else 条件不成立的时候 xff0c 要做的事情 if和else语句以及各自的缩进部分都是一个完整的代码块 示例 xff1a
  • anaconda装好后,cmd不能使用conda等命令的解决

    windows下安装好anaconda3后 xff0c 在cmd中使用conda命令会出现 xff1a 39 conda 39 不是内部或外部命令 xff0c 也不是可运行的程序或批处理文件 把anaconda目录下的scripts添加到环
  • 【Linux】curl: (7) Failed to connect to 127.0.0.1 port 1086: Connection refused解决办法

    背景描述 关了 上网后 xff0c 发现平时能正常访问的网站上不了 问题描述 在终端输入curl www baidu com会返回下列错误 xff1a curl 7 Failed to connect to 127 0 0 1 port 1
  • 【Python】append的坑:返回值为None

    有一列表b 61 1 xff0c 想要在b内append元素2后整个b后append到a中 xff0c 一开始想把两个append写成一行 xff0c 却发现a 61 None a span class token operator 61
  • 【目标检测】绘制FPPI、miss rate数据及代码例子

    行人检测一般用FPPI而不是mAP作为评估指标 xff0c 但是网上找了好久都没找到Python版本的代码 xff0c 原来FPPI官方的代码是matlab的 xff0c 这里记录一下用官方的代码来绘制FPPI曲线有哪些需要注意的 有两个方