当前位置: 首页 > 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;以视频会议…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...