深入浅出CenterFusion

CenterFusion实战:毫米波雷达与视觉融合的3D目标检测解析 本文深入解析了CenterFusion模型,这是一种创新的毫米波雷达与视觉融合的3D目标检测方法。针对单目视觉测距不准与雷达点云稀疏的痛点,CenterFusion采用“先视觉检测,后雷达修正”的两步策略,通过3D视锥匹配与柱体扩展技术,将稀疏雷达点精准关联至视觉目标,并利用特征融合有效提升深度与速度估计精度。文章结合NuScenes数据集实战,详细拆解了其核心模块、训练细节及工业部署中的优化挑战。 阅读详情
AI摘要

本文介绍了CenterFusion自动驾驶感知系统中,如何通过CenterNet的Backbone结构融合雷达点云和2D图像,包括特征提取、3D视椎体匹配、角度和深度估计,以及毫米波雷达问题和解决策略。

Summary

自动驾驶汽车的感知系统一般由多种传感器组成,如lidar、carmera、radar等等。除了特斯拉基于纯视觉方案来进行感知之外,大多数研究还是利用多种传感器融合来建立系统,其中lidar和camera的融合研究比较多。

CenterFusion这篇文章基于nuscenes数据集研究camera和radar的特征层融合,图像部分采用的是CenterNet,radar点云部分采用了pillar expansion后通过roi frustum来与图像检测到的box进行匹配,radar特征提取与CenterNet类似,利用radar点云的vx、vy以及depth分别构建heatmap后与图像特征进行拼接来完成融合。官方代码仓库链接

总体思路还是将雷达点云投射到图像数据中,特征层进行通道拼接,再利用卷积网络进行回归。检测分为两个阶段,Primary Regression Heads的结果除了输出外,还用来进行点云数据和box的匹配;Secondary Regression Heads由于拼接了雷达特征,可以修正Primary Regression Heads的预测结果,同时给出额外的信息,目标速度和属性等等。

主要解决了如下问题:

问题 方案
毫米波雷达点云数据有很多杂波,和真实物体经常是一对多的关系,难以与图像box进行匹配 利用3D视椎体来过滤和筛选点云,加快匹配速度,同时过滤无效的点云
一般的毫米波雷达点云数据没有高度信息,很难准确与图像中的box进行匹配 Pillar Expansion, 将点扩充为3D pillar,增大匹配概率
毫米波雷达点云数据非常稀疏,以致于表征能力弱,在整个网络中的权重较低 利用与之匹配的box来扩充雷达点云覆盖范围,由一个点转变成一小块矩形区域,提取点云heatmap作为点云特征
  1. 图片特征提取及Primary Regression
    修改了CenterNet的Head,利用全卷积backbone进行特征提取的时候,进行一个初步的回归,得到目标的2D Box 和3D Box

  2. 雷达点云和2D图像目标匹配

    • 3D 视椎体
      利用Primary Regression Heads得到的每个3D Box的深度depth、观测角alpha、3D框尺寸dim,再加上相机标定矩阵来生成3D视椎体(每个可能的Box都生成一个),类似Roi提取,加快匹配速度的同时,过滤无效的点云。

      观测角和标定矩阵是为了计算yaw角

    • 雷达点云Pillar Expansion
      雷达点云没有高度信息,将点云扩充为固定大小的3D柱子,增大点云匹配的概率(相对用点表示目标物,用柱子表示能够增加在3D空间中的体积,进而增大匹配的概率)

    • 点云匹配
      pillar投影到pixel坐标系与2D box进行匹配; pillar投影到相机坐标系与构造的3D视椎体进行深度值匹配

  3. 雷达点云特征提取
    对于每一个与视椎体关联到雷达目标,利用图像中2D检测框的位置生成三张heatmap,三张heatmap concat到图片的特征中作为额外通道,进而完成融合

  4. 利用融合特征进行Secondary Regression
    除了估计目标速度之外,还重新估计了目标的深度和角度(结合了雷达特征,估计更精确)

  5. 3D Box Decoder
    综合Primary和Secondary Regression Heads的输出,还原出3D目标检测结果(位置、大小、姿态、速度,以及类别等属性),其中dep和rot在两个heads里都有,则只利用准确度更高的second regression heads


背景知识

如果没有了解过相关内容,可以按下顺序来看,CenterFusion里的大部分代码都是来自于CornerNet和CenterNet


重点内容

Backbone结构

Backbone沿用了CenterNet的DLA-34作为全卷积骨干网络, 并将可变形卷积DeformConv引入。关于网络结构内容可参考CenterFusion(基于CenterNet)源码深度解读: :DLA34


全卷积骨干网络以图像 I ∈ R W × H × 3 I \in R^{W \times H \times 3} I∈RW×H×3作为输入,生成key points heatmap: Y ^ ∈ [ 0 , 1 ] W R × H R × C \hat{Y} \in[0,1]^{\frac{W}{R} \times \frac{H}{R} \times C} Y^∈[0,1]RW​×RH​×C,其中 W 和 H是图像的宽度和高度,R是下采样比,C 是物体类别的数量。heatmap中的每一个像素的取值在[0,1]之间。再通过回归图像特征的方法来实现对图像上目标中心点的预测,以及对目标的 2D 大小(宽度和高度)、中心偏移量、3D 尺寸、深度和旋转等信息的提取。以上均继承于CenterNet。

训练数据的图像尺寸为 3 × 900 × 1600 3\times900\times1600 3×900×1600,下采样比为2,为了下采样不产生余数,入模图像的尺寸为 3 × 448 × 800 3\times448\times800 3×448×800。

雷达点云和2D图像目标匹配

基于视锥的匹配

  1. 3D视椎体缩小了匹配范围,进而加快匹配速度

  2. 相比于直接将雷达点云投射到2D图像,3D视锥能够区分2D图像中重叠或被遮挡的目标

  3. 使用参数 δ \delta δ来调节 ROI 视椎体的大小,这是为了解决估计的深度值的不准确性,因为ROI视椎匹配时,使用的深度值 d ^ \hat{d} d^是通过图像特征估计出来的。调节视椎体大小的目的是为了尽可能的给每一个box找到至少一个雷达点云来匹配,即使匹配到多个点云,后面直接取深度最小的点云来完成box内的点云去重。如下为BEV视角示意图

    只在infer阶段用参数δ,实际调节的是视椎体的深度范围, 增加此参数的目的更多是降低漏检率。

    代码中用frustumExpansionRatio来表示调节参数,根据视锥体的深度范围计算得到一个dist_thresh,
    其中 δ = d i s t _ t h r e s h ∗ f r u s t u m E x p a n s i o n R a t i o n \delta = dist\_thresh * frustumExpansionRation δ=dist_thresh∗frustumExpansionRation, d ^ \hat{d} d^是primary head输出的3D box depth或GT depth。 图中绿色虚线是经过调节的视锥体深度值范围,深度值在此范围内的雷达点云,与这个对应的box匹配。其中roi frustum和dist_thresh构造程序如下:

    # 对每一个3D box,计算roi frustum的8个角点, roi frustum为3D box的包围盒,
    # 且roi frustum在pixel坐标系下的投影为2D box
    def comput_corners_3d(dim, rotation_y):
        # dim: 3
        # location: 3
        # rotation_y: 1
        # return: 8 x 3
        c, s = torch.cos(rotation_y), torch.sin(rotation_y)
        # dim是相机坐标系下的长宽高,下面计算的也是相机坐标系下的3D box的8个角点
        # 自动驾驶车辆在地面上行驶,一般只考虑偏航角,利用rotation_y构造旋转矩阵
        # 航向角为绕y轴旋转,所以旋转矩阵为
        R = torch.tensor([[c, 0, s], [0, 1, 0], [-s, 0, c]], dtype=torch.float32)
        l, w, h = dim[2], dim[1], dim[0]
        x_corners = [l/2, l/2, -l/2, -l/2, l/2, l/2, -l/2, -l/2]
        y_corners = [0, 0, 0, 0, -h, -h, -h, -h]
        z_corners = [w/2, -w/2, -w/2, w/2, w/2, -w/2, -w/2, w/2]
    
        corners = torch.tensor(
            [x_corners, y_corners, z_corners], dtype=torch.float32)
        
        # 相机坐标下的3D box的8个角点左乘旋转矩阵,得到roi frustum的8个角点,
        # 对应的roi frustum在pixel坐标系下的投影,刚好为2D box
        corners_3d = torch.mm(R, corners).transpose(1, 0)
        return corners_3d
    
    
    def get_dist_thresh(calib, ct, dim, alpha):
        rota
保姆级避坑指南:在RTX 3090上从零搭建CenterFusion(含DCNv2编译、CUDA冲突解决) 本文提供了一份详细的RTX 3090上搭建CenterFusion的避坑指南,涵盖DCNv2编译、CUDA冲突解决等关键步骤。通过实战验证的解决方案,帮助开发者高效应对Ampere架构的兼容性挑战,优化显存使用和性能调优,确保环境搭建的稳定性和高效性。 阅读详情

相关推荐

CenterFusion:自动驾驶感知的数据集nuScenes-COCO格式

本文还有配套的精品资源,点击获取 简介:CenterFusion数据集是专为自动驾驶设计的多模态感知任务数据集,利用深度学习与高精度定位技术。该数据集结合了nuScenes数据集的场景信息并采用COCO标准格式,支持目标检测、实例分割和多目标追踪任务。它提供了丰富的训练和测试样本,覆盖多种复杂驾驶环境。同时,"annotations_3sweeps"子文件包含了多轮激光雷达...

weixin_36064575的博客 1140

CenterFusion数据集nuScence-COCO格式

CenterFusion数据集nuScence-COCO格式

BDD测试之Behave使用入门

BDD测试(Behavior-Driven Development Testing)是一种基于“行为驱动开发”(BDD)理念。

想要成为酷盖但是失败的小明 579

手把手教你用FPGA解析AD9680的JESD204B数据流(附Verilog代码)

本文详细介绍了如何利用FPGA解析AD9680的JESD204B数据流,包括协议核心机制、硬件平台搭建、Verilog代码实现及调试技巧。通过实战案例和代码示例,帮助工程师快速掌握高速ADC数据采集与处理技术,提升系统性能。

weixin_33640562的博客 371

多GPU时代的虚拟内存革命:CUDA VMM API的跨设备协同设计哲学

本文深入探讨了NVIDIA CUDA VMM API在多GPU系统中的虚拟内存管理革命,解决了传统Peer Access的显存碎片化和同步开销问题。通过地址-内存解耦、按需映射和精细权限控制,VMM API为分布式训练提供了高效的内存协同方案,显著提升大模型训练性能。

weixin_29251337的博客 534

激光SLAM总结——Fast LIO / Fast LIO2 / Faster LIO

激光SLAM总结——Fast LIO / Fast LIO2 / Faster LIO 在之前的工作中有接触过LOAM,最近在工作中又接触到Faster LIO相关的工作,于是想着对Fast LIO / Fast LIO2 / Faster LIO这一系列工作进行一个简单的总结,以加深自己对激光SLAM算法的理解,之前总结过的一些和激光SLAM算法相关的博客还有,感兴趣的同学可以一起学习讨论: 激光SLAM总结——VLOAM / LIMO算法解析 激光SLAM总结——LIO-Mapping / LIOM /

weixin_44580210的博客 1万+

深入解析MTK DRM初始化流程:从KMS模块到组件框架

本文深入解析了联发科(MTK)平台上DRM显示框架的初始化流程。从内核模块加载、Component框架管理依赖,到核心的mtk_drm_bind函数构建KMS对象(CRTC、Plane、Encoder、Connector),最终完成DRM设备注册并创建用户空间接口。文章结合调试经验,为开发者梳理了从驱动启动到屏幕点亮的完整路径与关键排查点。

onion的博客 765

OpenClaw:深度学习驱动的智能编程工具实战解析

智能编程工具通过深度学习技术革新传统开发流程,其核心在于代码语义理解与实时协作能力。这类工具采用AI代码补全、错误预测等技术,显著降低开发者认知负荷,尤其适用于复杂业务逻辑开发和遗留系统维护场景。以OpenClaw为例,其智能填充和上下文感知功能可提升40%编码效率,减少65%调试时间。关键技术实现包含自然语言处理、代码静态分析等,在金融科技、电商系统等领域具有广泛应用前景。热词提示:代码理解引擎、智能工作流整合展现了当前AI辅助开发的最新趋势。

chubaisheng8627的博客 320

《物联网技术》课程笔记——第二章 物联网技术架构

文章目录第二章:物联网技术架构1 物联网技术体系(C3SD)2 系统体系结构的基本概念3 物联网体系结构——信息传递视角3.1物联网感知层3.1.1 感知层要解决的问题3.1.2 感知层的形态3.1.3 节点的感知能力与控制能力3.1.4 感知层实例3.2 物联网网络层3.2.1 网络相关概念3.2.2 IPV6与IPV4相比互联网协议的升级3.2.3 计算机网络的逻辑层次3.2.4 传输网的拓扑结构3.2.4.1 举例:智能小区的三表采集系统3.2.4.2 接入层3.2.4.2 汇聚层3.2.4.2 核心

南京大学软件工程硕士在读 2503

PCL:实现 PPF估计(附完整源码)

PCL:实现 PPF估计(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 716

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: 3D目标检测基础知识
下一篇: 多传感器时间同步
Untitled\n
博客等级 码龄9年 35粉丝 12原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值