2D / 3D IOU

3D目标检测IoU框计算详解 最近在看自动驾驶的面试题,有一题问三维旋转框的IoU计算方式,在csdn博客上看到此代码,但是没有解读,遂记录如下。大致示意图如下,画的不好,博主画工不大行…具体代码如下,请对照阅读。 阅读详情

IoU(Intersection over union):交并比IoU衡量的是两个区域的重叠程度,是两个区域重叠部分面积占二者总面积的比例。在目标检测中,如果模型输出的结果与真值gt的交并比 > 某个阈值(0.5或0.7)时,即认为我们的模型输出了正确的结果。

IoU 计算的必要项:

  • groundtruth bounding boxes,例如,测试集中手工标注的物体边界框.A
  • predicted bounding boxes, 检测算法模型所预测的输出.B

在这里插入图片描述
目标检测中,算法的性能好坏,预测的边界框与 groundtruth 边界框间的重叠覆盖成都,如图例示:
在这里插入图片描述
IoU有三种计算方式:
(1)2D IoU:将3D检测结果框映射回2D的Image View
(2)3D IoU:直接在3D空间计算检测结果与Ground truth的IoU
(3)BEV IoU:将3D检测结果与Gound truth映射到2D的鸟瞰图上再计算IoU

2D IoU python实现

from collections import namedtuple
import numpy as np
import cv2


def bb_intersection_over_union(boxA, boxB):
    # determine the (x, y)-coordinates of the intersection rectangle
    xA = max(boxA[0], boxB[0])
    yA = max(boxA[1], boxB[1])
    xB = min(boxA[2], boxB[2])
    yB = min(boxA[3], boxB[3])

    # compute the area of intersection rectangle
    # 交集
    interArea = (xB - xA + 1) * (yB - yA + 1)

    # compute the area of both the prediction and ground-truth rectangles
    # 并集
    boxAArea = (boxA[2] - boxA[0] + 1) * (boxA[3] - boxA[1] + 1)
    boxBArea = (boxB[2] - boxB[0] + 1) * (boxB[3] - boxB[1] + 1)

    # compute the intersection over union by taking the intersection
    # area and dividing it by the sum of prediction + ground-truth
    # areas - the interesection area
    iou = interArea / float(boxAArea + boxBArea - interArea)

    # return the intersection over union value
    return iou


# define the `Detection` object
Detection = namedtuple("Detection", ["image_path", "gt", "pred"])

# define the list of example detections
examples = [
    Detection("dog.png", [39, 63, 203, 112], [54, 66, 198, 114]),
    Detection("dog.png", [49, 75, 203, 125], [42, 78, 186, 126]),
    Detection("dog.png", [31, 69, 201, 125], [18, 63, 235, 135]),
    Detection("dog.png", [50, 72, 197, 121], [54, 72, 198, 120]),
    Detection("dog.png", [35, 51, 196, 110], [36, 60, 180, 108])]

# loop over the example detections
for detection in examples:
    # load the image
    image = cv2.imread(detection.image_path)

    # draw the ground-truth bounding box along with the predicted
    # bounding box
    cv2.rectangle(image, tuple(detection.gt[:2]),
                  tuple(detection.gt[2:]), (0, 255, 0), 2)
    cv2.rectangle(image, tuple(detection.pred[:2]),
                  tuple(detection.pred[2:]), (0, 0, 255), 2)

    # compute the intersection over union and display it
    iou = bb_intersection_over_union(detection.gt, detection.pred)
    cv2.putText(image, "IoU: {:.4f}".format(iou), (10, 30),
                cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
    print("{}: {:.4f}".format(detection.image_path, iou))

    # show the output image
    cv2.imshow("Image", image)
    cv2.waitKey(0)

在这里插入图片描述

3D IoU python实现


# 3D IOU 计算 
def boxes_iou3d_gpu(boxes_a, boxes_b):
    """
    Args:
        boxes_a: (N, 7) [x, y, z, dx, dy, dz, heading]
        boxes_b: (N, 7) [x, y, z, dx, dy, dz, heading]

    Returns:
        ans_iou: (N, M)
    """
    assert boxes_a.shape[1] == boxes_b.shape[1] == 7

    # height overlap
    boxes_a_height_max = (boxes_a[:, 2] + boxes_a[:, 5] / 2).view(-1, 1)
    boxes_a_height_min = (boxes_a[:, 2] - boxes_a[:, 5] / 2).view(-1, 1)
    boxes_b_height_max = (boxes_b[:, 2] + boxes_b[:, 5] / 2).view(1, -1)
    boxes_b_height_min = (boxes_b[:, 2] - boxes_b[:, 5] / 2).view(1, -1)

    # bev overlap
    overlaps_bev = torch.cuda.FloatTensor(torch.Size((boxes_a.shape[0], boxes_b.shape[0]))).zero_()  # (N, M)
    iou3d_nms_cuda.boxes_overlap_bev_gpu(boxes_a.contiguous(), boxes_b.contiguous(), overlaps_bev)

    max_of_min = torch.max(boxes_a_height_min, boxes_b_height_min)
    min_of_max = torch.min(boxes_a_height_max, boxes_b_height_max)
    overlaps_h = torch.clamp(min_of_max - max_of_min, min=0)

    # 3d iou
    overlaps_3d = overlaps_bev * overlaps_h

    vol_a = (boxes_a[:, 3] * boxes_a[:, 4] * boxes_a[:, 5]).view(-1, 1)
    vol_b = (boxes_b[:, 3] * boxes_b[:, 4] * boxes_b[:, 5]).view(1, -1)

    iou3d = overlaps_3d / torch.clamp(vol_a + vol_b - overlaps_3d, min=1e-6)

    return iou3d

2D和3D代码几乎完全一样,都是先算两个框各自面积/体积,再算重叠部分,最后计算IOU。

目标跟踪|3D目标跟踪入门-笔记 IOU是时间(t-1)的框与时间(t)的框有多少重叠。虽然它不足以保证2框应该匹配,但这是最流行的因素,可以很容易地设置。2D和3D IOU之间的差异: 比较面积与比较体积虽然3D IOU是一个很酷的度量标准,但它远非唯一可以使用的,而且对于遥远的目标可能会失败。另一方面,还可以使用点云距离(倒角损失)、方位差甚至质心的欧几里得度量等其他指标。一个2D卡尔曼滤波器是一个算法,输入2个坐标,在历史信息的基础上预测下一个位置。这是一个迭代算法,这意味着它存储前一个值的内存,并随着时间的推移继续。 阅读详情

相关推荐

YOLO与3D点云融合:从2D检测到3D感知的完整实践指南

最近在帮几个学生看毕设选题,发现一个很有意思的现象:很多人一上来就问:“老师,我想做目标检测,用YOLO行不行?”或者“我想做3D点云,是不是得学PCL和Open3D?”但当我把这两个方向结合起来,提到“YOLO+3D点云”时,他们往往一脸茫然,觉得这是两个完全不同的世界。 这恰恰是很多同学在选题和做研究时最容易陷入的误区:把技术工具本身当成了研究目标,而不是去思考如何用工具组合解决一个更具体、更有价值的问题。YOLO是一个强大的2D目标检测器,3D点云是描述三维世界的基础数据,把它们强行分开看,就像只研究

weixin_31100517的博客 282

【Python】2D/3D框IOU简单计算方法

shapely牛逼

SpriteNym的博客 2879

【代码精读】AB3DMOT:从2D到3D的跟踪范式迁移与KITTI实战解析

本文深入解析了AB3DMOT算法如何将2D目标跟踪技术迁移到3D空间,并详细介绍了在KITTI数据集上的实战应用。文章涵盖了3D IOU计算、卡尔曼滤波适配等核心技术改进,提供了环境配置避坑指南和性能优化技巧,帮助开发者更好地理解和应用3D多目标跟踪技术。

weixin_30887919的博客 404

三维点云处理06-2D/3DIoU计算

三维点云处理06-IoU计算 IoU定义:预测边框与真是边框的交集与并集之比 首先说明IoU的计算并不需要像下图所示对各种情况进行分类后,再进行计算 IoU的计算本质上是集合交集的计算,首先从一维IoU的计算开始,然后扩展到二维等等 一维IoU计算 首先看上图右侧一维IoU的计算,IoU的计算本质就是集合上下边界的计算 1.计算交集的下界:max(x1,y1) 2.计算交集的下界:min(x2,y2) 3.判断交集是否真是存在:上界-下界: min(x2,y2) - max(x1,

m0_45388819的博客 4794

从ShapeNet到训练Pipeline:用PyTorch3D构建你的第一个2D转3D模型

本文详细介绍了如何利用PyTorch3D框架和ShapeNet数据集构建2D转3D模型的全流程。从数据预处理、模型架构设计到训练Pipeline优化,逐步指导开发者实现单视图3D重建任务,特别强调了PyTorch3D在3D深度学习中的关键作用。

weixin_29094979的博客 372

3D卷积真的比2D强?UNet-3D/2D在肺部CT分割中的对比实验(PyTorch实现)

本文通过PyTorch实现的严谨对比实验,量化分析了UNet-3D与2D U-Net在肺部CT分割任务中的性能差异。实验表明,3D卷积能有效利用空间上下文信息,在Dice系数等指标上显著优于2D模型,但也带来了显存占用和训练时间的巨大挑战。文章为不同硬件配置与项目目标提供了清晰的选型指南和工程优化策略。

weixin_29056101的博客 372

论文:IoU Loss for 2D/3D Object Detection

在2D/3D目标检测任务中,IoU (Intersection-over- Union)作为一种评价指标,被广泛用于评价不同探测器在测试阶段的性能。然而,在训练阶段,通常采用常见的距离损失(如L1或L2)作为损失函数,以最小化预测值与真实值边界盒(Bbox)之间的差异。为了消除训练和测试之间的性能差距,在[1]和[2]中引入了IoU损失用于二维目标检测。

记录图像处理中遇到的点点滴滴 1393

3D目标检测实战 | 详解2D/3D检测框交并比IoU计算(附Python实现)

交并比IoU是一种常用的评估目标检测算法性能的指标,本文介绍2D检测框、带旋转的2D检测框和3D检测框交并比的计算,并提供Python实现

FRIGIDWINTER的博客 2904

【文章阅读】IoU Loss for 2D/3D Object Detection

Brief 最近在实验中发现,3D检测的精度和cls_loss的关系非常的大,一般来说,按照SECOND的代码训练下降到cls_loss大致为0.8左右时,会有一个不错的效果,在验证集上可以达到0.88左右的精度(对car-easy)而言,但是当loss继续向下降的时候,反而得不到刚好的效果,改了一些网络结构,加了一些特征,发现改结构的效果并不如从特征或者其他方面着手容易,因此研究别人如何通过LO...

有所为,有所成长 6111

3D IoU(3D Intersection-over-Union,IoU) python

python计算3D IoU(3D Intersection-over-Union,IoU)代码

CorelDRAW 2019安装指南:从下载到激活的完整步骤

本文提供了一份详细的CorelDRAW 2019安装指南,涵盖从下载安装包、检查系统环境到完成激活的完整步骤。文章重点解析了安装过程中的关键选项设置,并分享了首次启动后的优化配置与常见问题解决方案,旨在帮助用户高效、顺利地完成这款经典矢量设计软件的安装与配置。

weixin_29213827的博客 806

IoU Loss for 2D/3D Object Detection 学习笔记

Brief 最近在实验中发现,3D检测的精度和cls_loss的关系非常的大,一般来说,按照SECOND的代码训练下降到cls_loss大致为0.8左右时,会有一个不错的效果,在验证集上可以达到0.88左右的精度(对car-easy)而言,但是当loss继续向下降的时候,反而得不到刚好的效果,改了一些网络结构,加了一些特征,发现改结构的效果并不如从特征或者其他方面着手容易,因此研究别人如何通过LOSS来提高论文精度的。 Abstract 在2D / 3D物体检测任务中,IoU 已被广泛用作评估度量以评估测试

W1995S的博客 2365

Xilinx Vitis 2020.1头文件路径配置避坑指南:解决#include找不到文件的常见问题

本文针对Xilinx Vitis 2020.1开发环境中常见的#include头文件找不到问题,提供了系统的避坑指南。文章深入解析了Vitis的头文件搜索机制,对比了通过工程属性GUI、修改编译命令及使用环境变量三种配置方法的优劣与隐藏陷阱,并给出了高级场景的排查流程与工程结构最佳实践,帮助开发者高效解决路径配置难题。

weixin_28831399的博客 564

2D/3D IoU计算与点云目标检测:旋转矩形裁剪原理及代码实现

交并比(IoU)是计算机视觉中衡量目标定位精度的通用技术指标,从图像检测到三维点云感知,其定义与实现方式直接影响模型评估、边界框匹配与后处理质量。在点云目标检测与多目标跟踪场景中,目标框常以带偏航角的柱体形式存在,此时2D旋转矩形的交叠面积计算成为算法核心,而三维场景下的IoU则可通过底面交面积与高度重叠长度相乘精确求解。掌握多边形裁剪原理,并合理处理角度周期性与浮点误差,是构建高鲁棒评估逻辑的关键。基于此实现的高效IoU函数可支撑mAP计算、NMS去重、训练阶段正负样本分配等多种工程实践,本文围绕其数学基

weixin_29061465的博客 66

Django 前后端分离实战:网络设备运维系统 - 从登录认证到业务模块

这篇文章分享了Django+Vue前后端分离开发网络设备运维系统的实战经验,重点介绍了登录认证、全局布局和设备管理三大模块的实现。文章包含以下核心内容: 登录模块实现:包括表单验证、Token认证、记住密码功能,以及美观的UI设计(渐变背景、毛玻璃效果) 全局布局架构:采用侧边栏+顶部导航的响应式设计,支持菜单权限控制和多设备适配 业务功能开发:详细展示了设备分类和部门管理的CRUD功能实现,包括列表展示、搜索过滤、分页等功能 常见问题解决:提供了5个开发中常见问题的解决方案,如Vue Router警告、C

qq_16766705的博客 517

STM32F407+OV2640的DCMI+DMA双缓冲JPEG图像采集系统

在嵌入式视觉系统中,数字摄像头接口(DCMI)是MCU连接CMOS图像传感器的关键硬件通道,其与DMA协同实现零CPU干预的高速数据流采集;而JPEG作为一种基于DCT变换与量化压缩的有损图像格式,依赖传感器端硬件编码引擎才能满足实时性要求。理解DCMI三重同步时序(PCLK/HSYNC/VSYNC)与DMA双缓冲机制的流水线协作原理,是突破带宽瓶颈、避免FIFO溢出和帧丢失的技术基础。该架构广泛应用于智能硬件、工业检测与边缘AI前端等需低功耗、高可靠图像捕获的场景,本文以OV2640与STM32F407为

weixin_42103128的博客 147

三维点云检测中的2D/3D IoU计算:从原理到工程优化

交并比(IoU)是目标检测评估与后处理中的基础度量,用于衡量两个框的重叠程度。在三维点云检测中,IoU计算从二维平面延伸到三维空间,衍生出BEV投影下的2D IoU与完整体积重叠的3D IoU两种形态。两者的差异不仅在于维度,更影响评估精度、NMS速度与目标关联效果。本文从轴对齐矩形交并比出发,逐步解析旋转矩形的多边形裁剪原理,并给出3D框按“BEV交集×高度重叠”拆分计算的工程实现;同时针对批量场景提出包围盒快速剔除、浮点保护与numba加速等优化手段。无论复现检测模型、编写评估脚本,还是优化后处理,理解

weixin_33525298的博客 238

【碳排放数据集】全球近实时网格化二氧化碳排放数据集GRACED

【碳排放数据集】全球近实时网格化二氧化碳排放数据集GRACED

WW、forever的博客 141

Rotated_IoU

介绍 https://github.com/lilanxiao/Rotated_IoU 该报告是用于2D / 3D对象检测的IoU损失的非官方实现。 它包含Pytorch函数,该函数使用GPU计算定向矩形的相交面积。 注意 CUDA扩展最近进行了修改,以涵盖一些极端情况。 请考虑更新代码并重新编译扩展。 检查清单 pytorch函数查找定向矩形的交点 pytorch函数检查一个矩形的角是否位于另一个矩形中 CUDA扩展为两个矩形的相交多边形的逆时针排序顶点 Pytorch函数使用上述函数计算矩形.

W1995S的博客 1358

YOLOv8【第四章:注意力机制篇·第20节】一文讲透,注意力机制设计原则与选择指南 - 从原理到实践的系统化方法论!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》,该专栏持续复现网络上各种热门内容(全网YOLO改进最全最新的专栏,质量分97分+,全网顶流),改进内容支持(分类、检测、分割、追踪、关键点、OBB检测)。且专栏会随订阅人数上升而涨价(毕竟不断更新),当前性价比极高,有一定的参考&学习价值,部分内容会基于现有的国内外顶尖人工智能AIGC等AI大模型技术总结改进而来,嘎嘎硬核。    ✨ 特惠福利:目前活动一折秒杀价!一次订阅,永久免费,所有后续更新内容均免费阅读!

**My Coding Family** 890

【专栏必读】王道考研408计算机网络+湖科大教书匠计算机网络+网络编程万字笔记使用说明及章节导航

本文档汇总了王道考研408计算机网络和湖科大教书匠计算机网络课程的重点内容,包括计算机网络体系结构、物理层、数据链路层、网络层、传输层和应用层的详细讲解。通过ISO/OSI和TCP/IP模型,深入探讨了通信基础、介质访问控制、IP地址、TCP/UDP协议、流量控制和网络编程等关键概念。此外,还提供了Linux网络编程实践,帮助读者巩固理论知识

快乐江湖的博客 2万+

Objectron 3D IoU计算:终极评估指标详解与实战应用

Objectron是一个以物体为中心的短视频剪辑数据集,包含约15K个带注释的视频剪辑和4M张注释图像,涵盖自行车、书籍、瓶子等多个类别。每个视频都包含AR会话元数据,每个物体都标注有描述其位置、方向和尺寸的3D边界框,而3D IoU(Intersection Over Union)是评估这些3D边界框准确性的关键指标。 ## 3D IoU:3D边界框评估的核心指标 ### 什么是3D IoU

gitblog_00685的博客 368

AgentScope实战训练营- Java从零开始快速构建Agent完整教程

本文基于阿里巴巴开源的 AgentScope Java 框架,从零开始手把手带你构建 AI 智能体应用。内容涵盖环境搭建、基础对话、工具调用、结构化输出、多Agent流水线、Hook可观测性、会话持久化、MCP协议、RAG知识库集成、多模态工具、技能系统、Spring Boot Web部署等21个核心模块,附带完整可运行代码示例,帮助Java开发者快速掌握Agent开发全流程。

program哲学 835

深入AB3DMOT代码:如何将2D卡尔曼滤波与IOU匹配‘搬’到3D空间?

本文深入解析了AB3DMOT框架如何将2D卡尔曼滤波与IOU匹配技术扩展到3D多目标跟踪领域。通过重构状态空间、创新3D相似度度量及优化数据关联策略,AB3DMOT有效解决了3D场景下的维度挑战,为自动驾驶等应用提供了高效的Multi-Object Tracking解决方案。

weixin_30599769的博客 129

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Gr-IoU: Ground-Intersection over Union for Robust Multi-Object Tracking with 3D Geometric Constraint

Gr-IoU: Ground-Intersection over Union for Robust Multi-Object Tracking with 3D Geometric Constraints——基于3D几何约束的地面交并比用于鲁棒多目标跟踪

Together_CZ的博客 382

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

3D目标检测评价指标深度拆解:KITTI与COCO对比及自定义eval实战

在计算机视觉与自动驾驶感知领域,模型性能的量化离不开精确的评估体系。mAP(平均精度均值)作为目标检测任务最核心的指标,其计算方式却因基准数据集的不同而存在显著差异。KITTI与COCO分别代表了两套主流的评估协议:前者强调逐帧匹配、难度分组与多层IoU,后者采用全局排序与101点插值。理解这些原理不仅有助于复现论文结果,还能指导自定义评估指标的开发。本文深入拆解了官方评估函数的执行链路,并给出可扩展的eval代码骨架,适用于3D目标检测、点云感知、多模态检测等工程场景,为算法调优与基准测试提供可靠依据。

weixin_34160277的博客 289

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 代码阅读 :SECOND pytorch版本
下一篇: pointpillar anchor匹配
THE@JOKER
博客等级 码龄10年 426粉丝 155原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值