当前位置: 首页 > news >正文

3D目标检测实战 | 图解KITTI数据集评价指标AP R40(附Python实现)

目录

  • 1 准确率和召回率
  • 2 P-R曲线的绘制
  • 3 AP R11与AP R40标准
  • 4 实际案例

1 准确率和召回率

首先给出 T P TP TP F P FP FP F N FN FN T N TN TN的概念

  • 真阳性 True Positive T P TP TP
    预测为正(某类)且真值也为正(某类)的样本数,可视为 I o U > I o U t h r e s h o l d \mathrm{IoU>IoU_{threshold}} IoU>IoUthreshold的检测框数量
  • 假阳性 False Positive F P FP FP
    预测为正(某类)但真值为负(另一类)的样本数,可视为 I o U ≤ I o U t h r e s h o l d \mathrm{IoU\le IoU_{threshold}} IoUIoUthreshold的检测框数量
  • 真阴性 True Negative T N TN TN
    预测为负(不是某类)且真值也为负(不是某类)的样本数
  • 假阴性 False Negative F N FN FN
    预测为负(不是某类)但真值为正(某类)的样本数,即在真值区域没有给出检测框

基于上述概念给出准确率和召回率的计算方法

  • 准确率 Precision

P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP

  • 召回率 Recall

R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP

准确率 P P P又称为查准率,反映了目标检测的正确性;召回率 R R R又称为查全率,反映了目标检测的泛化性。

在这里插入图片描述

查准率高且查全率高

在这里插入图片描述

查准率高但查全率低

在这里插入图片描述

查准率低但查全率高

2 P-R曲线的绘制

P-R性能也称为准确率-召回率性能,或称查准率-查全率性能,常用于信息检索、Web推荐引擎等应用中。体现P-R性能的主要是P-R曲线,P-R曲线是用于评估二分类模型性能的重要工具,它展示了在不同阈值下模型的准确率和召回率之间的变化关系

P-R曲线的绘制过程是:将预测置信度从高到低排序,依次选择置信度为预测阈值(即大于该阈值的判定为正样本,否则为负样本),计算该阈值下的TP、FN、FP,从而得到准确率和召回率,从高到低移动阈值形成P-R曲线

以一个实例说明绘制过程

假设有10个样本,其中正负样本各5个,按照预测置信度从高到低排序,依次计算准确率和召回率

在这里插入图片描述

将形成的(Precision, Recall)坐标对画到坐标系上可得

在这里插入图片描述
随着样本增加,折现会趋于曲线

3 AP R11与AP R40标准

P-R曲线围成的面积称为平均准确率(Average Precision, AP),用于衡量模型的综合性能

在这里插入图片描述
对于面积的计算,一种方法是积分,但由于曲线形态各异,积分比较耗费计算资源;另一种方法是离散化求和,即用若干个矩形面积来近似曲线下面积

在这里插入图片描述

具体的公式为

A P ∣ R = 1 ∣ R ∣ ∑ r ∈ R ρ i n t e r ( r ) AP\mid_{R}^{}=\frac{1}{\left| R \right|}\sum_{r\in R}{\rho _{\mathrm{inter}}\left( r \right)} APR=R1rRρinter(r)

其中 R = { r 1 , r 2 , ⋯ , r n } R=\left\{ r_1,r_2,\cdots ,r_n \right\} R={r1,r2,,rn}是等间隔的召回率点, R 11 R_{11} R11 R 40 R_{40} R40分别指

R 11 = { 0 , 1 10 , 2 10 , ⋯ , 1 } R 40 = { 1 40 , 2 40 , 3 40 , ⋯ , 1 } R_{11}=\left\{ 0,\frac{1}{10},\frac{2}{10},\cdots ,1 \right\} \\ R_{40}=\left\{ \frac{1}{40},\frac{2}{40},\frac{3}{40},\cdots ,1 \right\} R11={0,101,102,,1}R40={401,402,403,,1}

相当于把召回率等分为 ∣ R ∣ \left| R \right| R个矩形,高度为P-R曲线在该召回率点的准确度。但问题是可能原曲线在该点没有计算准确度指(因为本质上还是离散曲线),因此就引入准确度插值函数

ρ i n t e r ( r ) = max ⁡ r ′ : r ′ > r ρ ( r ′ ) \rho _{\mathrm{inter}}\left( r \right) =\max _{r':r'>r}\rho \left( r' \right) ρinter(r)=r:r>rmaxρ(r)

就是取召回率为 r ′ r' r的位置之后所有准确率的最大值,作为该点的插值准确率,相当于把P-R曲线化成阶梯矩形,如下图蓝色曲线所示,接着按公式计算即可

在这里插入图片描述

R 40 R_{40} R40一定程度上削弱了 R 11 R_{11} R11在准确率很低时,AP结果仍然很高的情况,举例而言

假设一个场景中有20个Ground Truth,但是算法只给出了一个检测结果,且检测的IoU大于阈值,即这是一个TP样本。该置信度下, P r e c i s i o n = 1.0 Precision=1.0 Precision=1.0 R e c a l l = 1 20 = 0.05 Recall=\frac{1}{20}=0.05 Recall=201=0.05

  • 计算 A P ∣ R 11 = 1 11 = 0.0909 AP\mid_{R_{11}}^{}=\frac{1}{11}=0.0909 APR11=111=0.0909,这里的1对应 R 11 R_{11} R11中召回点0,而这个准确率已经超过了很多单目3D检测算法的准确率,显然不合理

在这里插入图片描述

  • 计算 A P ∣ R 40 = 1 + 1 40 = 0.05 AP\mid_{R_{40}}^{}=\frac{1+1}{40}=0.05 APR40=401+1=0.05,这里的1对应 R 40 R_{40} R40中召回点 1 40 \frac{1}{40} 401 2 40 \frac{2}{40} 402

目前KITTI官方也认可了 A P ∣ R 40 AP\mid_{R_{40}}^{} APR40指标,后续基本也采用 A P ∣ R 40 AP\mid_{R_{40}}^{} APR40进行实验评估

以下是KITTI数据集AP检测的实例

Car AP@0.70, 0.70, 0.70:
bbox AP:90.7769, 89.7942, 88.8813
bev  AP:90.0097, 87.9282, 86.4528
3d   AP:88.6137, 78.6245, 77.2243
aos  AP:90.75, 89.66, 88.66
Car AP_R40@0.70, 0.70, 0.70:
bbox AP:95.5825, 94.0067, 91.5784
bev  AP:92.4184, 88.5586, 87.6479
3d   AP:90.5534, 81.6116, 78.6108
aos  AP:95.55, 93.85, 91.33

解释如下:

  • 第一行 Car AP@0.70, 0.70, 0.70

    Car表示类别,AP表示基于AP R11的平均准确率,后面三个0.70分别指代2D检测框、BEV检测框和3D检测框的IoU阈值,即大于这个阈值才认为是正样本

  • 第二、三、四行
    每一行指代一种检测模式,即2D检测框、BEV检测框和3D检测框,每一行的三个数值分别对应EasyModerateHard三种检测难度的的结果,难度越大(例如遮挡严重),检测准确度越小

  • 第五行
    aos表示平均朝向相似度(average orientation similarity),用于评价预测输出的朝向与真实框朝向的相似程度

4 实际案例

在KITTI数据集中,按以下步骤计算AP数值

  1. 计算IoU,这部分原理参考3D目标检测实战 | 详解2D/3D检测框交并比IoU计算(附Python实现)

    frame_overlaps, parted_overlaps, gt_num, dt_num = iou(gt_annos, dt_annos, method, num_parts)
    
  2. 以0置信度阈值计算置信度列表,即只要IoU符合条件的都视为TP样本,提取其置信度评分

    rets = compute(frame_overlaps[i], gt_data_list[i], dt_data_list[i],ignored_gts[i], ignored_dts[i], min_overlap=min_overlap, thresh=0.0)
    _, _, _, _, scores_i = rets
    
  3. 对置信度列表均匀采样41个点,得到40个召回点对应的置信度阈值

    thresholds = getThresholds(np.array(scores), valid_gt_num)def getThresholds(scores: np.ndarray, num_gt, num_sample_pts=41):scores.sort()scores = scores[::-1]current_recall = 0thresholds = []for i, score in enumerate(scores):l_recall = (i + 1) / num_gtif i < (len(scores) - 1):r_recall = (i + 2) / num_gtelse:r_recall = l_recallif (((r_recall - current_recall) < (current_recall - l_recall))and (i < (len(scores) - 1))):continuethresholds.append(score)current_recall += 1 / (num_sample_pts - 1.0)return thresholds
    
  4. 遍历每个阈值,计算该阈值下的TP、FP和FN,从而计算准确率和召回率

    for i in range(len(thresholds)):recall[m, l, k, i] = pr[i, 0] / (pr[i, 0] + pr[i, 2])precision[m, l, k, i] = pr[i, 0] / (pr[i, 0] + pr[i, 1])if compute_aos:aos[m, l, k, i] = pr[i, 3] / (pr[i, 0] + pr[i, 1])
    
  5. 取PR曲线外接矩形

    for i in range(len(thresholds)):precision[m, l, k, i] = np.max(precision[m, l, k, i:], axis=-1)recall[m, l, k, i] = np.max(recall[m, l, k, i:], axis=-1)if compute_aos:aos[m, l, k, i] = np.max(aos[m, l, k, i:], axis=-1)
    
  6. 计算AP

    def mAP(prec):sums = 0for i in range(0, prec.shape[-1], 4):sums = sums + prec[..., i]return sums / 11 * 100def mAPR40(prec):sums = 0for i in range(1, prec.shape[-1]):sums = sums + prec[..., i]return sums / 40 * 100
    

在这里插入图片描述

本文完整工程代码请通过下方名片联系博主获取


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

相关文章:

3D目标检测实战 | 图解KITTI数据集评价指标AP R40(附Python实现)

目录 1 准确率和召回率2 P-R曲线的绘制3 AP R11与AP R40标准4 实际案例 1 准确率和召回率 首先给出 T P TP TP、 F P FP FP、 F N FN FN、 T N TN TN的概念 真阳性 True Positive T P TP TP 预测为正(某类)且真值也为正(某类)的样本数&#xff0c;可视为 I o U > I o U t…...

制作一个ros2机器人需要学习的课本(还不全面)

1《C语言》---这个是基础200页左右 2《C》-----500-600页 3《高等数学》-----没有这个无法计算动态电路 4《电路分析》-----没有这个没法设计硬件电路 5《英语5000词汇》最少也得达到美国小学生毕业时候的词汇水平5000词汇量 6《ros1》因为ros2没有一本中文课本---有那么一…...

Qt OpenGL相机系统

文章目录 一、简介二、实现代码三、实现效果参考资料效果展示 一、简介 一直偷懒没有学习OpenGL,乘着这段有点时间重新学习一下OpenGL,做一个简单的小工具,有助于后面理解OSG。我们都知道OpenGL中存在着下面几个坐标空间:模型空间(物体空间)、世界空间、观察空间(或者称…...

英语语音识别,语言评测,语音打分实践与代码实现

项目在这&#xff1a;couldn/speech-evaluation-of-english 详细的可查看项目内的md文档...

【SpringBoot篇】SpringBoot整合Mybatis实战

&#x1f38a;专栏【SpringBoot】 &#x1f354;喜欢的诗句&#xff1a;天行健&#xff0c;君子以自强不息。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f33a;Spring Boot和MyBatis的好处&#x1f33a;创建工…...

android c++ 硬编码硬解码官方demo

参考&#xff1a; https://fossies.org/linux/opencv/modules/videoio/src/cap_android_mediandk.cpp 代码&#xff1a; // This file is part of OpenCV project.// It is subject to the license terms in the LICENSE file found in the top-level directory// of this d…...

Python之Excel数据相关

Excel Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具&#xff0c;再加上成功的市场营销&#xff0c;使Excel成为最流行的个人计算机数据处理软件。在1993年&#xff0c;作为Microsof…...

Ubuntu网络IP地址一直显示127.0.0.1

问题描述&#xff1a; 终端输入ip a显示127.0.0.1&#xff0c;原来类似192.168.231.1的地址不见了。 ip a 点击网络配置&#xff08;ubuntu桌面版&#xff09;&#xff0c;发现无线网络模块看不见了 正常情况应该有wired 模块&#xff0c;就是下面标红的 解决方案&#xff1a…...

Vulnhub-DC-3 靶机复现完整过程

啰嗦两句&#xff1a; 提权之前完成是一个月前做的&#xff0c;当时在提权处出了点问题就搁置了&#xff0c;今天才完成&#xff0c;所以IP地址可能会会有变化 注意&#xff1a;后续出现的IP地址为192.168.200.55同样是靶机IP地址&#xff0c;若本文能有帮助到你的地方&#xf…...

Dubbo篇---第三篇

系列文章目录 文章目录 系列文章目录一、Dubbo 容错策略二、Dubbo 动态代理策略有哪些?三、说说 Dubbo 与 Spring Cloud 的区别?一、Dubbo 容错策略 failover cluster 模式 provider 宕机重试以后,请求会分到其他的 provider 上,默认两次,可以手动设置重试次数,建 议把写…...

Redis-使用java代码操作Redis->java连接上redis,java操作redis的常见类型数据存储,redis中的项目应用

java连接上redisjava操作redis的常见类型数据存储redis中的项目应用 1.java连接上redis package com.zlj.ssm.redis;import redis.clients.jedis.Jedis;/*** author zlj* create 2023-11-03 19:27*/ public class Demo1 {public static void main(String[] args) { // …...

react 使用笔记

1.学习&#xff1a;https://reactjs.bootcss.com/learn 2.项目启动报错&#xff1a;Delete ␍ prettier/prettier 解决&#xff1a;https://blog.csdn.net/qq_30272167/article/details/133280165 3.访问地址配置 文件&#xff1a;config-overrides.js devServer: functio…...

Ubuntu下启动Apache对.htaccess 的支持步骤, 利用.htaccess绑定域名到子目录

Ubuntu下启动Apache对.htaccess 的支持步骤 1. 终端运行 sudo a2enmod 程序提示可供激活的模块名称&#xff0c;输入&#xff1a; rewrite 2. 修改/etc/apache2/sites-enabled/000-default (该链接指向的是站点配置文件) 把&#xff08;默认的www目录、或者需要应用.htacc…...

C++常用格式化输出

在C语言中可以用printf以一定的格式打印字符&#xff0c;C当然也可以。 输入输出及命名空间还不太了解的小伙伴可以看一看C入门讲解第一篇。  在C中&#xff0c;可以用流操作符&#xff08;stream manipulators&#xff09;控制数据的输出格式&#xff0c;这些流操作符定义在2…...

QCC TX 音频输入切换+提示声音

QCC TX 音频输入切换提示声音 QCC蓝牙芯片&#xff08;QCC3040 QCC3056 等等&#xff09;&#xff0c;AUX、I2S、USB输入 蓝牙音频输入&#xff0c;模拟输出是最常见的方式。 也可以再此基础上动态切换输入方式。 针对TX切换EQ,调节音量不能出提示声音问题&#xff0c;可以增…...

【Java】封装、继承、多态

面向对象的重要特征&#xff1a;封装、继承、多态&#xff1b; 面向对象的语言的语言并不止Java&#xff0c;C也是面向对象的语言&#xff1b; 访问限定符 public&#xff1a;在哪里都可以使用&#xff08;公开的&#xff09;&#xff1b;private&#xff1a;仅在当前类可以使用…...

第九章 异常处理

系列文章目录 第一章 Python 基础知识 第二章 python 字符串处理 第三章 python 数据类型 第四章 python 运算符与流程控制 第五章 python 文件操作 第六章 python 函数 第七章 python 常用内建函数 第八章 python 类(面向对象编程) 第九章 python 异常处理 第十章 python 自定…...

(四) Python Pandas入门

一、介绍 Pandas是Python中一个强大的数据处理库&#xff0c;它提供了许多功能强大的数据结构和数据分析工具。在本文中&#xff0c;我们将介绍Pandas的基本概念和如何使用它生成一个包含今天到未来20个工作日的日期列表的Excel文件。 Pandas提供了大量的数据结构和数据分析工…...

软件测试面试最经典的5个问题

软件测试面试灵魂五问&#xff01; 请做一下自我介绍&#xff1f;你为什么从上家公司离职&#xff1f;为什么转行做测试? 你对测试行业的认识&#xff1f;你的期望薪资是多少&#xff1f;最后&#xff0c;你要问我什么&#xff1f; 一、请做一下自我介绍 简历上有的可以一两…...

从公共业务提取来看架构演进——功能设置篇

1.引言 上一篇文章我们以帐号权限的提取为例&#xff0c;介绍了当架构跟不上业务发展时及时调整架构的一种思路。这篇文章我们以功能设置为例&#xff0c;进一步讨论公共业务提取这个话题。 功能设置在本文中是指产品开放给企业和用户的一些功能设置项&#xff0c;以视频会议…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...