Basic Information
- Title:Talk2PC: Enhancing 3D Visual Grounding through LiDAR and Radar Point Clouds Fusion for Autonomous Driving
- Author:Runwei Guan*, Jianan Liu*, Ningwei Ouyang, Daizong Liu, Xiaolou Sun, Lianqing Zheng, Ming Xu, Yutao Yue†, Hui Xiong† (*: co-first author, †: co-corresponding author)
- Institution:Hong Kong University of Science and Technology (Guangzhou), Momoni AI, Xi’an Jiaotong-Liverpool University, Peking University, Southeast University, Tongji University
- Year:ArXiv2503
- Homepage:暂无
Abstract
具身化室外场景理解是自主智能体感知、分析和应对动态驾驶环境的基础。然而,现有的三维理解主要基于二维视觉语言模型(VLM),其收集和处理的场景感知上下文有限。相比之下,与二维平面视觉信息不同,像激光雷达(LiDAR)这样的点云传感器能提供丰富的深度信息和物体的细粒度三维表示。与此同时,新兴的4D毫米波(mmWave)雷达能够检测每个物体的运动趋势、速度和反射强度。因此,这两种模态的整合为自然语言提供了更灵活的查询条件,从而实现更准确的三维视觉定位。为此,本文探索性地提出了一种名为TPCNet的新方法,这是首个在提示引导的点云传感器组合(结合了激光雷达和雷达的上下文)范式下的室外三维视觉定位模型。为了根据提示自适应地平衡这两种传感器的特征,我们设计了一种名为“两阶段异构模态自适应融合”的多重融合范式。具体而言,该范式首先采用双向代理交叉注意力(BACA),将具有全局感受野的双传感器特征送入文本特征中进行查询。此外,我们设计了一个动态门控图融合(DGGF)模块来定位查询所识别的感兴趣区域。为了进一步提升准确性,我们基于最近的物体边缘创新性地设计了C3D-RECHead。我们的实验证明,TPCNet及其各个模块在Talk2Radar和Talk2Car数据集上均达到了业界顶尖的性能。
关键词:三维视觉定位,视觉语言模型,4D雷达,激光雷达(LiDAR),多传感器融合,自动驾驶
Current Issues, Challenges, Author’s Motivation, and Proposed Solution
基于LiDAR-雷达融合的3D物体检测
利用LiDAR的高精度3D感知能力以及雷达的全天候鲁棒性和远距离传感能力,LiDAR与雷达的融合一直被视为3D物体检测的互补性解决方案。一些研究工作提出了双向雷达-LiDAR融合模块,该模块基于卷积,通过特征图的乘积来权衡各自的特征。此外,还有研究提出了基于交互的多模态融合(IMMF)模块,该模块使用双向卷积加权。Meng等人引入了交叉融合,在LiDAR的引导下生成伪雷达特征。Wang等人提出了一种两阶段LiDAR-雷达融合方法以获得高质量的复合点云特征。
基于以上工作,我们观察到,首先,几种方法采用LiDAR引导雷达的策略来补充两种模态的特征。其次,一些方法采用双向融合来增强两种模态的特征,同时突出物体区域。然而,这些方法主要基于静态卷积,这导致其在不同场景下的泛化能力有限。为解决此问题,有工作提出了基于注意力的融合方法,以实现动态交叉注意和模态间的信息交换。尽管如此,这些基于注意力的方法通常在高维特征上运行,导致计算复杂度呈二次方增长和显著的模型参数开销,从而影响了它们的表征效率。为此,我们提出了具有线性复杂度的双向代理交叉注意力,将LiDAR和雷达作为3D几何背景和运动特征的双重信息源,以获取能与文本提示对齐的丰富特征。
室外视觉定位
视觉定位是一项视觉-语言任务,旨在根据自然语言提示定位物体,它在从自动驾驶汽车到具身智能等室外应用中获得了极大的关注。近期的进展已超越了传统的基于摄像头的2D定位,扩展到了多传感器和3D空间理解。
在2D领域,Guan等人为水面无人艇(USV)开发了一种轻量级的视觉-雷达融合模型用于航道监测,而他们后来的工作则建立了一个**包含摄像头、雷达和语言特征两阶段融合的多任务基准。**然而,这些方法局限于2D平面,缺乏全面的3D空间推理能力。
在自主导航需求的推动下,该领域已自主地向3D室外定位发展。Cheng等人开创了用于驾驶场景的基于LiDAR的3D定位,而Wu等人通过语言提示实现了多摄像头物体追踪,Zhan等人提出了一个名为Mono3DVG-TR的单目3D REC基线模型。基于雷达的解决方案也已出现,Guan等人建立了一个基于VoD数据集的4D雷达基准。尽管取得了这些进步,当前的研究仍表现出三个局限性:(1)互补传感器的集成不足;(2)对动态文本引导的适应性有限;(3)针对地面无人车(UGV)的人机交互范式探索不足。
我们的工作通过两项关键贡献来弥补这些差距。首先,我们引入一个统一的3D定位框架,通过模态自适应融合来支持可插拔的点云传感器(例如LiDAR和雷达)。其次,我们开发了动态注意力机制,该机制能根据文本语义自动调整传感器权重,其性能优于传统的顺序融合方法。我们提出的Talk2PC系统在自动驾驶场景和交互式机器人导航任务中都展示了其性能。
随着自动驾驶(AD)和智能交通系统(ITS)的飞速发展,基于多传感器融合的3D感知技术已在自动驾驶汽车(AVs)、机器人以及路边感知系统中得到广泛应用。作为3D感知的主要传感器,激光雷达(LiDAR)能提供准确定位和物体的详细3D表示,并已被证明适用于自动驾驶中的众多感知任务。然而,LiDAR无法感知运动趋势和速度等关键信息,而这些信息对于周围实体至关重要。幸运的是,毫米波雷达(radar)能够感知每个物体的距离和方向,其探测范围超过了LiDAR。此外,它能捕捉运动和速度信息,并在恶劣天气条件下可靠运行。与传统雷达相比,最新的4D雷达可提供更丰富的点云数据,在3D感知方面展现出巨大潜力。因此,已有大量研究聚焦于LiDAR和雷达的融合以用于3D感知。
此外,视觉语言模型(VLM)正逐步应用于交互式感知和具身智能领域,它们使自动驾驶汽车和机器人不仅能感知场景,还能理解人类意图并定位相应物体。尽管如此,当前的技术进步主要集中在与视觉模态的集成上,而与3D点云传感器的交互却很有限,尤其是在交通场景中以语言引导的多传感器融合进行3D视觉定位的领域。例如,Talk2Car提出了一个基于驾驶汽车视角的图像平面2D视觉定位基准。WaterVG和NanoMVG则专注于基于摄像头-雷达融合的2D视觉定位。
Cheng等人的研究将Talk2Car扩展到基于LiDAR的3D视觉定位(Talk2Radar),并探索了4D雷达在3D视觉定位中的应用。基于上述情况,我们通过经验发现,2D图像平面在准确感知物体的精确空间坐标(尤其是在深度信息方面)上是不足的。此外,单个传感器捕获的物体属性本身就有限。当提示所描述的内容与传感器感知到的信息不符时,会导致模型优化和参数学习出错。
为解决上述问题,本文提出了一种探索性的方法,在一个双传感器框架中,利用自然语言引导进行LiDAR和雷达融合以实现3D视觉定位,如图1所示。考虑到提示中物体属性的描述模式并非固定,这就需要根据提示动态地权衡LiDAR和雷达的重要性。与以往采用静态融合策略(基于卷积)处理LiDAR和雷达数据的方法不同,我们设计了一种新颖的双向代理交叉注意力(Bi-directional Agent Cross Attention, BACA)融合方法。该方法在编码器阶段执行多尺度特征融合,交替采用查询和雷达作为主要信息源。值得注意的是,BACA在实现高效动态建模的同时,显著减轻了与交叉注意力相关的计算复杂性。
此外,为了减轻3D视觉定位中由点云对象引起的误报问题,并关联提示中提到的多个点云对象,我们提出了一种新颖的“文本-点云融合”(text-to-point-cloud fusion)策略,称为动态门控图融合(Dynamic Gated Graph Fusion, DGGF)。以往的图融合方法存在一个局限性,即采用静态图构建方法,所有特征都构建同一个图,因此无法根据图像内容调整图的结构,从而限制了基于图的模型的优势。相反,DGGF通过特征门控,构建了一个语言条件的候选区域建模过程。再者,为了防止由物体中心点云引起的预测误差,并尽可能将深度信息与提示中的描述对齐,我们提出了一个名为Corner3D-RECHead(C3D-RECHead)的3D视觉定位预测头。该预测头使用靠近本车、且位于对象角落的更密集的点云区域作为锚点质心。
本文的主要贡献总结如下:
我们提出了一个名为 TPCNet 的新颖模型,它通过利用文本语义来引导双点云传感器,从而执行三维视觉定位。TPCNet能够自适应地、动态地对齐语言特征与异构点云数据并进行融合。它在 Talk2Radar 和 Talk2Car 数据集上均取得了业界顶尖的性能。
我们提出了双向代理交叉注意力(BACA)方法,在充分考虑各自物理特性的基础上融合LiDAR和雷达的特征,这使得TPCNet能够将雷达的物体运动表示与LiDAR精确的三维几何环境理解嵌入到一起。
我们提出了动态门控图融合(DGGF),它为点云特征在语言特征空间中的自适应融合构建了一个动态轴向图,同时筛选出感兴趣区域。
为与点云传感器的物理特性保持一致,我们提出了一个名为 C3D-RECHead 的三维视觉定位头,其中心定位在目标物体与自车之间的最近边缘。C3D-RECHead有效地降低了物体漏检率,并在提示包含数字深度信息的样本中,显著提升了定位精度。
Preliminary
Method
整体流程
图2 展示了我们提出的TPCNet的整体架构。TPCNet接收来自两个感知传感器的输入:LiDAR和4D毫米波雷达,两者都以点云的形式表示。每个LiDAR点云包含3D空间位置信息( x , y , z x, y, z x,y,z)和强度信息( i n s ins ins)。类似地,每个4D毫米波雷达点云包含与LiDAR坐标系对齐的3D空间位置信息( x , y , z x, y, z x,y,z),以及雷达散射截面( r c s rcs rcs)和补偿后的径向速度( v v v)。此外,TPCNet还接受文本提示,用以指导模型利用这两种传感器在场景中定位物体。
对于LiDAR和雷达的输入,每个都通过一个基于Pillar的骨干网络,在三个层级上生成多尺度特征:基于LiDAR的特征 f l , i ∈ { 1 , 2 , 3 } f_{l, i \in \{1,2,3\}} fl,i∈{1,2,3} 和基于雷达的特征 f r , i ∈ { 1 , 2 , 3 } f_{r, i \in \{1,2,3\}} fr,i∈{1,2,3}。由代理(agent)提供的自然语言指令通过一个文本编码器进行处理,以提取文本特征。
多尺度的LiDAR和雷达特征随后被输入到**双向代理交叉注意力(BACA)模块中。在此模块中,BACA在三个层级上执行LiDAR-雷达融合,生成融合后的特征 l r i , i ∈ { 1 , 2 , 3 } lr_{i, i \in \{1,2,3\}} lri,i∈{1,2,3}。这些融合特征在动态门控图融合(DGGF)**模块中与文本特征进一步集成,在三个尺度上产生嵌入了语言信息的上下文特征 l c i , i ∈ { 1 , 2 , 3 } lc_{i, i \in \{1,2,3\}} lci,i∈{1,2,3}。
随后,这些特征被传递到一个特征金字塔网络(FPN)中以增强多尺度特征表示,从而得到精炼后的特征 { f i , i ∈ { 1 , 2 , 3 } ′ } \{f'_{i, i \in \{1,2,3\}}\} {fi,i∈{1,2,3}′}。最后,这些特征被送入 C3D-RECHead,它根据文本指令在点云场景中定位被查询的物体,并输出该物体的3D位置、尺寸和朝向。
LiDAR、雷达和文本指令的骨干网络
在特征编码阶段,LiDAR和雷达点云首先通过基于Pillar的骨干网络进行处理,生成鸟瞰图(BEV)Pillar特征 f l f^l fl 和 f r f^r fr。每个骨干网络都经过三个阶段,单个阶段的特征图形状为 { f l , f r } ∈ R C × H × W \{f^l, f^r\} \in \mathbb{R}^{C \times H \times W} {fl,fr}∈RC×H×W。
对于由代理提供的文本指令,我们没有使用独立的文本编码器(如BERT或RoBERTa),因为它们缺乏对点云信息的理解。我们使用 PointCLIP 来编码文本。PointCLIP利用其强大的对比学习能力将点云和文本嵌入到一个共享的表示空间中,从而实现了鲁棒的跨模态表示学习。通过使用PointCLIP,我们获得了文本特征 p l ∈ R C × L pl \in \mathbb{R}^{C \times L} pl∈RC×L。
双向代理交叉注意力 (BACA)
LiDAR提供高精度的三维空间信息,而雷达在多样的天气条件下表现出色,并且在检测物体运动方面非常有效。通过融合这两种传感器的数据,可以实现对环境更全面的理解。此外,用于描述物体的文本指令不一定能同时封装所有相关方面,例如语义、速度、方向和深度。因此,至关重要的是,LiDAR和雷达都能动态地提取特征,以确保正确的属性与文本指令对齐。再者,对于双传感器系统,最大化利用每个传感器捕获的上下文特征并交换这些信息,可以减轻单向融合中的信息不对称问题。此外,双向融合有助于相互验证。基于这些考虑,我们提出了一个高效、快速的双向融合模块:双向代理交叉注意力(BACA)。
如图4所示,来自LiDAR的初始特征 f l ∈ R C × H × W f^l \in \mathbb{R}^{C \times H \times W} fl∈RC×H×W 和来自雷达的特征 f r ∈ R C × H × W f^r \in \mathbb{R}^{C \times H \times W} fr∈RC×H×W 首先与位置编码(PE)进行增强。这些增强后的特征随后通过三个线性前馈模块,为LiDAR生成查询(Query)、键(Key)和值(Value)三元组特征,分别表示为 Q L , K L , V L Q_L, K_L, V_L QL,KL,VL。同样地, Q R , K R , V R Q_R, K_R, V_R QR,KR,VR 代表雷达对应的矩阵。上述初始化过程在下方的方程(1)到(6)中有详细说明:
Q L = ( f l + PE ) W Q L , Q L ∈ R C × H × W ( 1 ) Q_L = (f^l + \text{PE})\mathbf{W}_{QL}, Q_L \in \mathbb{R}^{C \times H \times W} \quad (1) QL=(fl+PE)WQL,QL∈RC×H×W(1)
K L = Flat ( ( f l + PE ) W K L ) , K L ∈ R C × L ( L = H × W ) ( 2 ) K_L = \text{Flat}((f^l + \text{PE})\mathbf{W}_{KL}), K_L \in \mathbb{R}^{C \times L \ (L=H \times W)} \quad (2) KL=Flat((fl+PE)WKL),KL∈RC×L (L=H×W)(2)
V L = Flat ( ( f l + PE ) W V L ) , V L ∈ R C × L ( L = H × W ) ( 3 ) V_L = \text{Flat}((f^l + \text{PE})\mathbf{W}_{VL}), V_L \in \mathbb{R}^{C \times L \ (L=H \times W)} \quad (3) VL=Flat((fl+PE)WVL),VL∈RC×L (L=H×W)(3)
Q R = ( f r + PE ) W Q R , Q R ∈ R C × H × W ( 4 ) Q_R = (f^r + \text{PE})\mathbf{W}_{QR}, Q_R \in \mathbb{R}^{C \times H \times W} \quad (4) QR=(fr+PE)WQR,QR∈RC×H×W(4)
K R = Flat ( ( f r + PE ) W K R ) , K R ∈ R C × L ( L = H × W ) ( 5 ) K_R = \text{Flat}((f^r + \text{PE})\mathbf{W}_{KR}), K_R \in \mathbb{R}^{C \times L \ (L=H \times W)} \quad (5) KR=Flat((fr+PE)WKR),KR∈RC×L (L=H×W)(5)
V R = Flat ( ( f r + PE ) W V R ) , V R ∈ R C × L ( L = H × W ) ( 6 ) V_R = \text{Flat}((f^r + \text{PE})\mathbf{W}_{VR}), V_R \in \mathbb{R}^{C \times L \ (L=H \times W)} \quad (6) VR=Flat((fr+PE)WVR),VR∈RC×L (L=H×W)(6)
其中, C C C 是通道数,而 H H H 和 W W W 分别表示特征图的高度和宽度。 L L L 是 H H H 和 W W W 的乘积。 Flat ( ⋅ ) \text{Flat}(\cdot) Flat(⋅) 表示沿类图像特征图的空间维度进行的展平操作。
此外,我们通过对两个查询矩阵 Q L Q_L QL 和 Q R Q_R QR 进行自适应池化操作,生成LiDAR和雷达的上下文代理特征 A L ∈ R C × h × w A_L \in \mathbb{R}^{C \times h \times w} AL∈RC×h×w 和 A R ∈ R C × h × w A_R \in \mathbb{R}^{C \times h \times w} AR∈RC×h×w。其中,两个上下文代理特征 A L A_L AL 和 A R A_R AR 在为下游的softmax注意力降低计算成本的同时,保持了基本的上下文结构。基于此,我们利用softmax注意力 Attn ( ⋅ ) \text{Attn}(\cdot) Attn(⋅) 来融合两种传感器的特征。具体来说,在生成LiDAR驱动的几何特征 f l g f_{lg} flg 的过程中,LiDAR上下文代理特征 A L A_L AL 首先作为 Q L Q_L QL 的代理(agent),聚合雷达提供的 K R K_R KR 和 V R V_R VR 中的全局上下文信息。由此,我们获得 LiDAR-代理交叉特征 f l c f_{lc} flc。随后,在第二次softmax注意力计算中,我们将 A L A_L AL 作为键(key), f l c f_{lc} flc 作为值(value),原始的 Q L Q_L QL 作为查询(query)。在这里,我们将全局上下文信息广播到代理特征 A L A_L AL 上,再传递给每一个查询标记(token)。这样的过程避免了查询和键特征之间直接的逐对相似性计算,同时通过代理特征保持了信息交换。
同样地,雷达驱动的运动特征 f r m f_{rm} frm 的生成过程与LiDAR驱动的几何特征 f l g f_{lg} flg 遵循相同的流程。整个过程如方程(7)和(8)所示。
{ A L = Flat ( AdaPool ( Q L ) ) , A L ∈ R C × l f l c = Attn ( A L , K R , V R ) = A L K R T d ⋅ V R , f l c ∈ R C × l f l g = Attn ( Q L , A L , f l c ) = Q L A L T d ⋅ f l c , f l g ∈ R C × L f l g = Reshape ( f l g ) , f l g ∈ R C × H × W ( 7 ) \begin{cases} A_L = \text{Flat}(\text{AdaPool}(Q_L)), A_L \in \mathbb{R}^{C \times l} \\ f_{lc} = \text{Attn}(A_L, K_R, V_R) = \frac{A_L K_R^T}{\sqrt{d}} \cdot V_R, f_{lc} \in \mathbb{R}^{C \times l} \\ f_{lg} = \text{Attn}(Q_L, A_L, f_{lc}) = \frac{Q_L A_L^T}{\sqrt{d}} \cdot f_{lc}, f_{lg} \in \mathbb{R}^{C \times L} \\ f_{lg} = \text{Reshape}(f_{lg}), f_{lg} \in \mathbb{R}^{C \times H \times W} \end{cases} \quad (7) ⎩ ⎨ ⎧AL=Flat(AdaPool(QL)),AL∈RC×lflc=Attn(AL,KR,VR)=dALKRT⋅VR,flc∈RC×lflg=Attn(QL,AL,flc)=dQLALT⋅flc,flg∈RC×Lflg=Reshape(flg),flg∈RC×H×W(7)
{ A R = Flat ( AdaPool ( Q R ) ) , A R ∈ R C × l f r c = Attn ( A R , K L , V L ) = A R K L T d ⋅ V L , f r c ∈ R C × l f r m = Attn ( Q R , A R , f r c ) = Q R A R T d ⋅ f r c , f r m ∈ R C × L f r m = Reshape ( f r m ) , f r m ∈ R C × H × W ( 8 ) \begin{cases} A_R = \text{Flat}(\text{AdaPool}(Q_R)), A_R \in \mathbb{R}^{C \times l} \\ f_{rc} = \text{Attn}(A_R, K_L, V_L) = \frac{A_R K_L^T}{\sqrt{d}} \cdot V_L, f_{rc} \in \mathbb{R}^{C \times l} \\ f_{rm} = \text{Attn}(Q_R, A_R, f_{rc}) = \frac{Q_R A_R^T}{\sqrt{d}} \cdot f_{rc}, f_{rm} \in \mathbb{R}^{C \times L} \\ f_{rm} = \text{Reshape}(f_{rm}), f_{rm} \in \mathbb{R}^{C \times H \times W} \end{cases} \quad (8) ⎩ ⎨ ⎧AR=Flat(AdaPool(QR)),AR∈RC×lfrc=Attn(AR,KL,VL)=dARKLT⋅VL,frc∈RC×lfrm=Attn(QR,AR,frc)=dQRART⋅frc,frm∈RC×Lfrm=Reshape(frm),frm∈RC×H×W(8)
其中, AdaPool ( ⋅ ) \text{AdaPool}(\cdot) AdaPool(⋅) 代表自适应池化操作。 l l l 是 h h h 和 w w w 的乘积,而 h h h 和 w w w 分别表示代理特征的高度和宽度。 h h h 和 w w w 的值都小于 H H H 和 W W W。在此背景下,代理特征的尺寸是一个超参数,它显著小于原始LiDAR和雷达特征的维度。这使得我们提出的BACA的线性计算复杂度达到了 O ( L l C ) \mathcal{O}(LlC) O(LlC),远小于传统交叉注意力的 O ( L 2 C ) \mathcal{O}(L^2C) O(L2C),同时仍然保留了全局跨模态融合的能力。
动态门控图融合
为了高效地融合点云和文本提示,如图2所示,我们采用一种跨模态门控机制来整合语言和点云特征,并构建动态图聚合以捕捉点云上下文中的感兴趣区域。
设PointCLIP提供的语言特征表示为 f t f_t ft。我们首先应用最大池化(Max-Pooling)操作以获得压缩后的语言特征 f t s f^s_t fts,然后该特征通过一个带有Sigmoid激活函数的前馈层来计算门控权重 W G \mathbf{W}_G WG。与此同时,LiDAR-雷达融合特征 l r lr lr 首先通过条件位置编码(Conditional Position Encoding, CPE)进行增强,然后将得到的位置感知特征与门控权重 W G \mathbf{W}_G WG 进行逐元素相乘,从而产生语言条件的点云特征 f t l c f^{lc}_t ftlc。详细过程如下所示:
f t s = MaxPool ( f t ) ( 9 ) f^s_t = \text{MaxPool}(f_t) \quad (9) fts=MaxPool(ft)(9)
W G = ρ ( W ⋅ f t s ) ( 10 ) \mathbf{W}_G = \rho(\mathbf{W} \cdot f^s_t) \quad (10) WG=ρ(W⋅fts)(10)
f t l c = W G ⋅ ( l r + CPE ( l r ) ) ( 11 ) f^{lc}_t = \mathbf{W}_G \cdot (lr + \text{CPE}(lr)) \quad (11) ftlc=WG⋅(lr+CPE(lr))(11)
其中 ρ ( ⋅ ) \rho(\cdot) ρ(⋅) 表示Sigmoid函数。
其次,为了捕捉由文本提示圈定的感兴趣区域以及周围的上下文信息,我们利用了图结构(graph structures)的强大能力,因为它们在处理具有复杂空间或结构关系的数据方面表现出色。鉴于点云数据缺乏固定的网格结构,我们将其特征建模为图中的一组节点。这种方法增强了模型对上下文信息进行建模的能力,从而提高了对物体空间分布和语义信息的理解。如图5所示,与稀疏视觉图注意力(SVGA)所构建的静态图相比——静态图无法根据不同特征的特点进行动态调整——我们构建的图利用了SVGA的轴向结构来保持其效率,同时动态地构建一个更具代表性的图,该图会随着特征的变化而改变。
为了实现这一点,我们通过利用一个节点子集来估算节点间欧几里得距离的均值( μ \mu μ)和标准差( σ \sigma σ)。这个子集是通过将点云的伪图像特征图划分为四个象限,并比较这些象限的对角线对来获得的。这种方法使得我们能够在原始伪图像的特征图与其对角翻转后的图像特征图之间计算出估算的 μ \mu μ和 σ \sigma σ。进行估算的目的是为了减少获取 μ \mu μ和 σ \sigma σ所需的逐对比较次数。我们避免直接计算 μ \mu μ和 σ \sigma σ的精确值,因为那样将需要计算图像中每个独立节点与所有其他节点之间的欧几里得距离,这在计算上是非常昂贵的。
随后,我们采用SVGA中的行式和列式连接来进一步降低计算复杂度。正如MobileViG所展示的,并非每个节点都应被考虑。如果两个节点之间的欧几里得距离小于估算的 μ \mu μ和 σ \sigma σ之差,我们就连接这两个节点。DGGF还支持在不同点云特征图之间建立数量可变的连接,这与图神经网络中对所有图像都使用固定K值的K-近邻(KNN)标准方法形成了对比。这是因为,在不同的特征图内,节点间的欧几里得距离通常小于估算的 μ \mu μ和 σ \sigma σ之差。
使用 μ \mu μ和 σ \sigma σ背后的直觉是,范围在 μ ± σ \mu \pm \sigma μ±σ 内的节点彼此靠近,应该共享信息。然后,这些值被用来在生成的节点之间建立连接,如图2b所示。在图5中,我们可以观察到,GGF将物体的感兴趣区域(RoI)连接到了图像中的非物体区域,而我们提出的DGGF只在点云特征图中将物体区域连接到其他物体区域。
现在我们已经获得了图像的估算均值 μ \mu μ 和标准差 σ \sigma σ,我们便将输入特征图 X X X 水平或垂直地平移 m K m_K mK 个像素,前提是 m K m_K mK 小于特征图的高度 H H H 和宽度 W W W,如算法1所示。此平移操作用于比较相隔 N N N 步的特征块。在**图5 (b)**中,坐标为 ( x , y ) (x,y) (x,y) 的节点 (5,1) 通过“滚动”到下一个节点的方式,与节点 (3,2), (6,2), (7,2), (5,3) 进行比较。
在滚动操作之后,我们计算输入 X X X 与其滚动后的版本 X r o l l e d X_{rolled} Xrolled 之间的欧几里得距离,以确定这两点是否应该连接。如果距离小于 μ − σ \mu - \sigma μ−σ,则掩码(mask)被赋值为1;否则,赋值为0。然后,这个掩码与 X r o l l e d − X X_{rolled} - X Xrolled−X 相乘以抑制那些被认为不应连接的特征块之间的最大相对分数。在算法1中,这些值分别表示为 X d o w n X_{down} Xdown 和 X r i g h t X_{right} Xright。接下来,执行一个最大值操作,结果存储在 X f i n a l X_{final} Xfinal 中。最后,在完成滚动、掩码和最大相对值操作之后,应用一个最终的Conv2d计算。
通过我们提出的方法,DGGF构建的图结构比GGF更具代表性,因为它不会连接不相似的节点。此外,与KNN相比,DGGF通过最小化图构建过程中的邻接计算,显著减少了计算开销(而KNN必须为每个图像块确定最近邻)。再者,DGGF不像基于KNN的方法那样需要为图卷积进行必要的重塑(reshaping)操作。因此,DGGF结合了KNN的表示灵活性与GGF的计算效率。
基于上述动态构建的图,我们将其连接到一个带有GeLU激活函数的前馈神经网络。给定一个输入特征 f t l c ∈ R N × N f^{lc}_t \in \mathbb{R}^{N \times N} ftlc∈RN×N,更新后的动态构图器(dynamic grapher)的详细过程如下:
l c = ϕ ( DynConv ( f t l c ) W i n ) W o u t + l r ( 12 ) lc = \phi(\text{DynConv}(f^{lc}_t)\mathbf{W}_{in})\mathbf{W}_{out} + lr \quad (12) lc=ϕ(DynConv(ftlc)Win)Wout+lr(12)
其中 l c ∈ R N × N lc \in \mathbb{R}^{N \times N} lc∈RN×N 表示输出图。 W i n \mathbf{W}_{in} Win 和 W o u t \mathbf{W}_{out} Wout 是前馈层的两个权重。 ϕ \phi ϕ 表示GeLU激活函数。
C3D-RECHead
传统的基于点云的3D物体检测模型,如CenterPoint,通常是相对于物体中心来回归(regress)边界框。然而,在基于点云传感器的三维视觉定位中,我们指出了中心点回归的两个关键局限性:
(1) 最近边缘处有更高的点云密度 (Higher Point Cloud Density at the Nearest Edge): 对于自动驾驶车辆来说,离它最近的物体,尤其是在朝向车辆的一侧,拥有更密集的点云。这为回归提供了一个更可靠的锚点,从而提高定位精度。
(2) 与文本距离提示的对齐 (Alignment with Textual Distance Prompts): 在三维视觉定位中,许多文本提示包含物体的距离信息(例如,“前方5米处的汽车”)。这些距离通常指的是物体离车辆最近的边缘,而不是其中心。因此,从这个最近的边缘点进行回归能更好地与语义和感知定位对齐。
我们提出的C3D-RECHead不再从物体中心进行回归,而是从离车辆最近的边缘点进行边界框回归。这种调整在保留CenterPoint计算效率的同时,提升了三维视觉定位任务中的定位精度。
假设一个3D边界框 B B B 表示为:
B = { p c , l , w , h , θ } , ( 13 ) B = \{pc, l, w, h, \theta\}, \quad (13) B={pc,l,w,h,θ},(13)
其中, p c pc pc 表示框的中心, l , w , h l, w, h l,w,h 分别表示框的长度、宽度和高度,而 θ \theta θ 表示框的朝向。
对于每个边界框,其八个角点为:
P = { p 1 , p 2 , … , p 8 } , ( 14 ) P = \{p_1, p_2, \dots, p_8\}, \quad (14) P={p1,p2,…,p8},(14)
其中,每个 p i p_i pi 都是使用框的尺寸和朝向计算得出的。
给定传感器的位置 p s p_s ps,边缘集合 E E E 由四个候选边缘组成(假设在鸟瞰图BEV中是一个矩形基座):
E = { e 1 , e 2 , e 3 , e 4 } , ( 15 ) E = \{e_1, e_2, e_3, e_4\}, \quad (15) E={e1,e2,e3,e4},(15)
其中,每个边缘都由两个点定义:
e i = ( p i , p j ) , i ≠ j . ( 16 ) e_i = (p_i, p_j), i \neq j. \quad (16) ei=(pi,pj),i=j.(16)
我们通过以下方式选择最近的边缘 e ∗ e^* e∗:
e ∗ = argmin e i ∈ E d ( e i , p s ) , ( 17 ) e^* = \underset{e_i \in E}{\operatorname{argmin}} \ d(e_i, p_s), \quad (17) e∗=ei∈Eargmin d(ei,ps),(17)
其中 d ( e i , p s ) d(e_i, p_s) d(ei,ps) 是从传感器到每个边缘的欧几里得距离。
损失函数
我们提出的C3D-RECHead首先生成热力图(heatmaps)来预测每个检测到的物体的最近角点位置,并将其作为后续回归的锚点。这种方法利用了LiDAR和雷达点云在最近物体周围密度增加的特点,从而提高了定位精度。在基于热力图的定位之后,我们在受CenterPoint启发的监督范式下,对关键的物体属性进行精炼。具体来说,我们的模型会预测:
- 亚体素级别的位置精炼,以增强超越体素网格分辨率的定位精度。
- 离地高度,以捕捉对在3D空间中区分物体至关重要的海拔信息。
- 3D边界框尺寸,包括宽度、长度和高度,以表征物体的形状和大小。
- 朝向角,以在3D场景中准确地建模物体旋转。
最后,我们提出的TPCNet使用一个多任务损失函数进行训练,该函数整合了这些回归目标,以优化在三维视觉定位中的性能。损失函数的公式如下:
L total = L hm + β ∑ r ∈ Λ L smooth − ℓ 1 ( Δ r a ^ , Δ r a ) ( 18 ) L_{\text{total}} = L_{\text{hm}} + \beta \sum_{r \in \Lambda} L_{\text{smooth}-\ell_1}(\widehat{\Delta r^a}, \Delta r^a) \quad (18) Ltotal=Lhm+βr∈Λ∑Lsmooth−ℓ1(Δra ,Δra)(18)
其中, L hm L_{\text{hm}} Lhm 是使用focal loss来监督基于中心的检测头所生成热力图质量的置信度损失; Λ = { x , y , z , l , h , w , θ } \Lambda = \{x, y, z, l, h, w, \theta\} Λ={x,y,z,l,h,w,θ} 表示smooth- ℓ 1 \ell_1 ℓ1损失,该损失用于监督对框中心(基于热力图峰值引导进行微调)、尺寸和朝向的回归;而 β \beta β 是用于平衡损失函数这两个组成部分的权重,其默认值被设为0.25。
Experiments
Settings
模型设置: 除了我们利用的PointCLIP,对于其他采用预训练transformer(如ALBERT)进行文本编码的模型,我们统一将令牌长度(token length)设置为30。在TPCNet的Pillar骨干网络中,雷达和LiDAR代理(Agent)的Pillar数量分别设置为10和32。默认情况下,LiDAR和雷达上下文代理特征的大小均设置为12×12。
在比较中,我们首先选择基于点云(PC-based)的检测器,涵盖了各种范式,包括PointPillars(基于Pillar)、CenterPoint(基于体素和无锚点)和CenterFormer。我们利用我们提出的TPCNet的融合范式,在骨干网络和FPN之后融合它们的点云和文本特征。在这些模型中,我们利用SECOND FPN作为PointPillars和CenterPoint中的多尺度特征融合模块。其次,我们将点云的融合方法与基于归纳偏置的HDP、基于注意力的MHCA以及基于图的GGF进行了比较,以与我们的DGGF进行对比。最后,我们还将TPCNet与SOTA(业界顶尖)的3D点云定位模型进行了比较,包括T-RadarNet, MSSG, AFMNet, EDA。此外,各种LiDAR和雷达融合方法,包括多头交叉注意力(MHCA)、多头线性注意力(MHLA)、InterRAL、L2R Fusion以及自适应门控网络(AGN),都与我们的融合方法进行了比较。
数据集设置: 我们在Talk2Radar数据集上进行了全面的训练和评估,该数据集包含三种不同的交通参与者类别:汽车(Car)、骑行者(Cyclist)和行人(Pedestrian),同时利用4D雷达和LiDAR两种模态。此外,为了严格评估T-RadarNet的泛化能力,我们将评估扩展到了Talk2Car数据集。该数据集源自nuScenes基准,提供了同步的LiDAR和雷达数据,并通过文本提示引用物体,从而能够在多样的多模态场景中对我们的方法进行鲁棒的验证。
训练与评估设置: 对于Talk2Radar数据集,所有模型都在一个由四张RTX A4000 GPU组成的分布式设置上进行训练,每张GPU的批量大小(batch size)为4,总共训练80个周期(epoch)。优化过程采用AdamW优化器,初始学习率为 1 × 1 0 − 3 1 \times 10^{-3} 1×10−3,由余弦退火学习率调度器进行调节,权重衰减为 5 × 1 0 − 4 5 \times 10^{-4} 5×10−4。为了评估三维视觉定位性能,我们利用两个关键指标:平均精度(Average Precision, AP)和平均朝向相似度(Average Orientation Similarity, AOS),这两个指标分别针对整个标注区域和驾驶走廊进行计算。具体来说,我们报告了用于3D边界框定位和朝向估计的平均精度均值(mAP)和平均朝向相似度均值(mAOS)。
对于Talk2Car数据集,我们遵循了文献[36]中概述的基线配置。具体来说,模型在四张RTX A4000 GPU上进行训练,每张GPU的批量大小为1,共训练20个周期。优化采用随机梯度下降法(SGD),动量为0.9,权重衰减为 1 × 1 0 − 4 1 \times 10^{-4} 1×10−4,初始学习率为 1 × 1 0 − 2 1 \times 10^{-2} 1×10−2,同样通过余弦退火调度器进行调整。三维视觉定位的评估指标完全基于平均精度(AP),该指标量化了预测的3D边界框相对于真实标注的定位准确度。
Main Results
在Talk2Radar和Talk2Car数据集上的总体比较: 如表I所示,我们提出的集成了LiDAR和雷达的TPCNet在Talk2Radar数据集上实现了业界顶尖的性能。与单模态模型(仅LiDAR和仅雷达)相比,TPCNet在mAP和mAOS指标上都展现出显著的提升。此外,即使在其单模态配置下,TPCNet的性能也优于具有相似传感器输入的模型,凸显了我们模型架构的优越性。在逐类准确率方面,“汽车”的检测性能略高于“骑行者”,而“行人”的准确率最低。此外,在Talk2Car数据集上,TPCNet同样超越了表现最佳的仅LiDAR模型,展示了其在不同传感器数据分布上的强大泛化能力。
TPCNet在不同类型提示下基于两种输入传感器的性能: 表III展示了TPCNet在处理各种类型的提示时,使用不同传感器输入的性能。总体而言,我们观察到对于包含运动或速度信息的文本提示,雷达通常优于LiDAR。相反,对于涉及物体深度的提示,仅LiDAR模型比仅雷达模型效果更好。然而,雷达和LiDAR的融合显著优于两种单模态方法。此外,聚合五帧点云比使用三帧或一帧能产生更好的性能。这证明了雷达和LiDAR之间强大的互补性。
Ablation Studies
C3D-RECHead 与 CenterPoint 预测头的比较: 如表VI所示,我们全面评估了两种不同的物体检测头范式在Talk2Radar数据集上进行3D物体检测和朝向角估计的准确性。我们的研究结果表明,与CenterPoint相比,我们提出的C3D-RECHead表现出显著的性能优势,在mAP和mAOS两项指标上均取得了显著提升。
模型架构的比较: 如图7所示,我们比较了T-RadarNet和TPCNet,让两个模型分别将雷达和LiDAR作为单一模态输入,以分析模型架构的有效性。我们的结果表明,无论是使用雷达还是LiDAR作为输入,TPCNet在所有物体类别以及距离自车的不同距离区间上的定位精度都持续优于T-RadarNet。这证明了TPCNet在架构上的优越性。
不同深度下物体预测精度的统计: 我们将被预测的物体划分到相对于自车的六个深度区间,每个区间跨度为10米。如表VII所示,LiDAR和雷达的融合显著增强了物体检测的准确性,尤其对于远距离物体。融合后的模型性能优于仅LiDAR和仅雷达的单模态方法,证明了多模态融合的必要性。
不同LiDAR和雷达融合方法的性能: 在TPCNet的设置下,如表IV所示,我们提出的BACA优于其他LiDAR-雷达融合方法。总体上可以观察到,基于交叉注意力的全局融合方法比基于卷积的融合方法表现更优。具体来说,基于Bi-MHCA的融合方法实现了最高的mAP,我们提出的BACA紧随其后,其性能略逊于Bi-MHCA但优于Bi-MHLCA。此外,在Talk2Car数据集上,BACA取得了最佳性能。
各种融合方法的效率比较: 如表IX所示,我们比较了非注意力融合方法(基于卷积的AGN)和基于注意力的融合方法在处理两种模态的多尺度特征图时的复杂度和推理速度。我们观察到,我们提出的BACA在参数数量上比其他三种方法有显著优势,减少了2到3个数量级。BACA的浮点运算次数(FLOPs)也远低于Bi-MHLCA、Bi-MHCA和AGN。在推理速度方面,BACA比其他基于注意力的方法实现了更高的每秒帧数(FPS),并且非常接近基于卷积的AGN。此外,当将代理特征图尺寸设置为8x8、16x16和18x18时,FLOPs的增长相对较小,展示了BACA强大的可扩展性。
TPCNet中关键模块的消融研究: 如表VIII所示:
(1) 我们首先对DGGF模块的各个组件进行了消融研究。我们的分析显示,与静态图相比,动态图在场景物体识别中实现了更高的准确度,表明动态图能更有效地处理环境中的冗余信息。此外,在构建图节点之间的边时,MaxPool在捕捉显著的节点间关系方面优于AvgPool。
(2) 我们比较了不同文本编码器在3D视觉定位任务上的性能。基于Transformer的编码器显著优于Bi-GRU,展示了注意力机制在提取有意义的文本信息方面的效率。然而,PointCLIP利用了点云和文本之间的对比学习,其性能优于RoBERTa和ALBERT,凸显了其在将文本信息与3D点云条件特征嵌入方面的优势,使其特别适用于基于3D点云的视觉定位任务。
(3) 我们在TPCNet中替换了不同的文本-点云特征融合模块。我们提出的DGGF性能优于依赖点对点融合的GGF和HDP。此外,我们观察到两个全局交叉注意力模块MHCA和MHLCA表现不佳。这主要是由于点云特征中(尤其是来自雷达的)过多的噪声,导致模型过度强调非物体区域,从而产生了高误报率。
LiDAR和雷达之间交叉注意力的性能比较: 表IX展示了对BACA模块进行的消融研究结果。我们比较了两种模型配置:一种是雷达特征作为查询(query),LiDAR特征作为键(key)和值(value);另一种是LiDAR作为查询,雷达作为键和值。我们的研究结果表明,当雷达作为主要信息源,并由LiDAR的细粒度3D特征进行补充时,TPCNet在包含运动和速度信息的提示中取得了优越的性能。然而,对于与深度相关的提示样本,使用LiDAR作为查询的融合方法表现优于雷达作为查询的配置。在这几种方法中,BACA在所有类型的提示中都展示了最佳性能。这一结果凸显了我们提出的BACA模块在利用双向融合来丰富各模态所需的环境上下文特征方面的有效性,从而增强了其准确识别与文本提示相对应物体的能力。
Qualitative Results
图8 展示了TPCNet在Talk2Radar数据集上的预测结果。如图所示,TPCNet能够有效地捕捉不同场景下与文本提示相对应的各种尺寸的物体,即使在充满杂波的复杂点云环境中也是如此。该模型在检测单个、多个物体以及不同距离(包括近距离和远距离)的物体时,都表现出鲁棒的性能。
图9 显示了TPCNet在三种设置下的性能:仅LiDAR、仅雷达以及两种传感器的融合。对于第一个样本,我们观察到基于雷达的模型产生了误报检测,而基于LiDAR的模型能得出准确的预测,但缺乏传感器融合所能达到的精细度。在第二行的样本中,我们提出的融合方法始终优于两种单传感器方法。对于最后的样本,仅LiDAR和仅雷达的模型都因杂波而表现出不同程度的误报,而基于融合的方法则有效地抑制了误报并实现了准确定位。
图10 比较了三种模型的性能:T-RadarNet,它仅依赖LiDAR输入;TPCNet-AGN,它使用AGN模块集成LiDAR和雷达特征;以及TPCNet-BACA,它采用BACA进行双传感器特征融合。在第一个样本中,文本提示指向四个物体,T-RadarNet只能检测到最近的两个物体,而无法定位更远处的两个行人。TPCNet-AGN成功识别了所有四个物体,但未能准确定位其中一个。相比之下,我们提出的TPCNet-BACA正确地检测并定位了所有四个被提示的物体。对于第二个样本,提示同时包含距离和朝向信息,T-RadarNet准确定位了正确的物体。然而,TPCNet-AGN错误地将前方的卡车识别为目标物体,未能正确定位汽车。在第三个样本中,T-RadarNet错误地将右前方的一辆车识别为指代物体,而TPCNet-AGN则产生了一个额外的误报检测。总体而言,我们提出的TPCNet-BACA在物体识别和定位方面展现了更优的准确性。
如图11所示,我们可视化了两种预测头的热力图,包括基于CenterPoint的预测头和我们提出的C3D-RECHead。我们发现,我们提出的C3D-RECHead成功地聚焦于离自车最近的角点,这与CenterPoint预测头相比,能带来更精确的边界框预测。来自C3D-RECHead的预测边界框与真实情况(ground truth)更紧密地对齐,证明了基于最近边缘进行3D视觉定位比锚定在物体中心能产生更稳定的结果。
Conclusion
本文专注于用于自动驾驶和具身感知的3D视觉定位。我们开创性地提出了一个 新颖的模型TPCNet
,它通过解读文本提示来指导LiDAR和雷达的双传感器融合,从而实现了对指代物体的3D检测。在TPCNet中,我们首先引入了 双向代理交叉注意力(BACA) 模块, 它以最小的成本高效地融合LiDAR和雷达特征,同时保留了注意力机制的动态特性 ,实现了低成本、动态的传感器特征与文本提示的融合。其次,我们为点云和文本特征提出了一种基于动态图的融合方法 —— 动态门控图融合(DGGF)。DGGF 能根据文本嵌入动态地提取点云的感兴趣区域,并且其性能优于其他融合方法。最后,为了增强3D视觉定位性能并与包含深度信息的提示对齐,我们提出了C3D-RECHead,它取得了优于CenterPoint的性能。
总而言之,TPCNet在Talk2Radar和Talk2Car数据集上均达到了业界顶尖的3D视觉定位性能,超越了现有模型。
Limitations
浅层语义理解与复杂推理的缺失:
- TPCNet的文本理解本质上是一种 “模式匹配”。它通过PointCLIP编码器将文本(如“前进的骑行者”)映射到一个特征向量,然后在融合后的点云特征中寻找与之最匹配的模式。
- 它无法处理复杂的多步推理或带有因果、空间关系的指令。例如,它很难理解“找到那辆刚刚超过卡车,并且在路口准备左转的小汽车”。这个指令需要模型首先定位“卡车”,然后理解“超过”这个动态过程,再找到“小汽车”,最后还要预测“准备左转”的意图。TPCNet的流水线式架构难以完成这种复杂的逻辑分解和推理。
时间维度的建模不足:
- 虽然论文中提到了使用多帧雷达数据(
Radar5
) ,但这更多是为了通过点云累积来增强单帧感知的鲁棒性,而不是真正地进行长时程的时间序列建模。 - 模型缺乏对 “故事性”或“事件性” 指令的理解能力。例如,“ 跟踪刚才那个闯红灯的行人” 或 “告诉我那辆白色汽车从哪个车道并过来的 ”。这些任务要求模型能够回溯历史状态,并理解一个完整的动态事件,而不仅仅是当前时刻的快照。
- 虽然论文中提到了使用多帧雷达数据(
交互模式的单向性:
- TPCNet遵循的是一种“指令-执行”的单向交互模式。人类给出指令,机器返回结果。
- 当指令模糊不清时,系统无法主动发起澄清式提问。例如,如果前方有两辆非常相似的卡车,当指令是“找到前面那辆卡车”时,一个更智能的系统应该会反问:“您是指左边那辆还是右边那辆?” 这种 多轮对话和主动交互 的能力是当前模型所不具备的。
架构的模块化与割裂感:
- TPCNet是一个精心设计的、由多个专用模块(Backbone, BACA, DGGF, FPN, Head)串联而成的系统。这种模块化设计便于理解和实现,但也带来了一定的割裂感。
- 错误会在流水线中传播。例如,如果BACA的融合效果不佳,后面的DGGF和预测头也很难做出正确判断。这与当前大模型追求的 端到端(End-to-End)一体化 设计理念有所不同,后者的内部信息流动更充分、灵活。
“闭集”词汇的依赖:
- 模型是在特定数据集(如Talk2Radar)上训练的,其能理解的物体类别(如汽车、行人和骑行者) 是有限的,即 “闭集” (Closed-set)。
- 它无法泛化到训练集中未见过的物体。如果给出一个指令“ 找到路边的那个橙色外卖机器人 ”,即使LiDAR能扫描到其轮廓,模型也因为从未学习过“外卖机器人”这个概念而无法定位。这限制了其在开放世界场景中的应用。
Direction For Improvment
引入LLM作为“推理大脑” (Reasoning Brain):
- 改进方向:用一个强大的LLM(如GPT-4, LLaMA)替换掉原来的PointCLIP文本编码器。LLM不仅仅是编码器,更是一个推理引擎。
- 具体做法:
- 指令分解:对于复杂指令“找到超过卡车的小汽车”,LLM首先将其分解为子任务:[任务1: 定位所有卡车], [任务2: 定位所有小汽车], [任务3: 分析任务1和2中物体间的时空关系“超过”]。
- 生成查询:LLM为每个子任务生成一个更简单的内部查询指令,再送入TPCNet的感知模块去执行。
- 结果综合:LLM收集所有子任务的结果,并进行逻辑推理,最终给出正确答案。
构建时空4D视觉语言模型 (Spatio-Temporal 4D VLM):
- 改进方向:将任务从静态的3D定位升级为动态的4D(3D空间+1D时间)叙事理解。
- 具体做法:在TPCNet的感知基础上,增加一个时间序列建模模块(如Transformer Decoder或GRU)。该模块接收连续多帧的感知结果(即每帧被语言嵌入的特征图
lc
),并学习它们之间的时间依赖关系。这样,模型就能理解“刚刚”、“正在”、“将要”等时间概念,并完成对整个动态事件的定位和理解。
迈向“对话式”主动感知系统:
- 改进方向:将单向的“指令-执行”升级为双向的 “对话-交互” 模式。
- 具体做法:将整个系统构建在一个VLM框架下。VLM接收用户指令后,首先调用3D感知模块(可以是TPCNet)分析场景。如果VLM的“决策模块”判断定位结果的置信度不高(例如,检测到多个符合条件的物体),它将生成一个自然语言问题反馈给用户。这个过程将感知、语言理解和语言生成融为一体。
走向统一的端到端多模态架构:
- 改进方向:打破模块化的束缚,设计一个更统一的端到端模型。
- 具体做法:借鉴Flamingo、Gato等模型的思想,将所有模态数据“Token化”。即,将LiDAR点云、雷达点云、文本指令全部转换成统一的Token序列。然后,将这些序列输入到一个巨大的Transformer模型中,让模型在内部自行学习复杂的跨模态关联,并直接输出目标物体的坐标Token。这是一种更根本、更具扩展性的范式。
Appendix
Appendix1:论文方法全流程解析
TPCNet如何找到“前方约20米处正在前进的骑行者”
场景设定:
一辆自动驾驶汽车行驶在路上,车上的LiDAR和4D雷达持续扫描环境。此时,操作员输入指令:“Find out the advancing cyclist about 20m directly in front of us.”(找出正前方约20米处,那位正在前进的骑行者)。
第1步:数据输入 (Inputs)
模型接收到三组来自不同源头的数据:
LiDAR点云 (LiDAR Point Cloud):
- 数据内容: 大量由激光雷达传感器捕捉到的点。
- 数据格式/维度: 一个点列表,形状为
[N, 4]
。N
是点的数量(例如,120,000个点)。4
代表每个点的4个属性:(x, y, z, intensity)
,即三维坐标和反射强度。
- 包含信息: 场景的静态、高精度三维几何结构。能清晰描绘出车辆、行人、树木等的轮廓和形状。对于“骑行者”这个类别,LiDAR能很好地捕捉其独特的“人+车”的几何外形。
4D雷达点云 (4D Radar Point Cloud):
- 数据内容: 由4D毫米波雷达捕捉到的点,通常比LiDAR稀疏。
- 数据格式/维度: 一个点列表,形状为
[M, 5]
。M
是点的数量(例如,1000个点)。5
代表每个点的5个属性:(x, y, z, rcs, v)
,即三维坐标、雷达截面积(反映物体材质和大小)和径向速度(v)。
- 包含信息: 物体的动态信息。对于“正在前进”这个指令,速度
v
属性至关重要,它可以帮助模型区分开移动的物体和静止的物体。
文本指令 (Textual Prompt):
- 数据内容: 自然语言字符串。
- 数据格式:
"Find out the advancing cyclist about 20m directly in front of us."
- 包含信息: 需要定位的目标的关键属性,包括类别(cyclist)、运动状态(advancing)、距离(20m)和相对位置(in front of us)。
第2步:特征编码 (Feature Encoding)
原始的点云和文本无法直接使用,需要通过各自的“编码器”(Backbone)转换成模型可以理解的特征。
点云特征化: LiDAR和雷达点云分别进入各自的Pillar-based Backbone(如PointPillars)。
- 输入: LiDAR点云
[N, 4]
和 雷达点云[M, 5]
。 - 处理过程:
- Pillar化: 将XY平面划分为网格(grid),每个网格是一个“柱子”(pillar)。将落入同一个柱子内的所有点云分组。
- 特征化: 使用一个小型神经网络(PointNet)处理每个柱子内的点,生成一个固定维度的特征向量。
- BEV视图: 将所有柱子的特征向量放回其在网格中的位置,形成一个伪图像,即鸟瞰图(Bird’s-Eye-View, BEV)特征图。
- 多尺度: Backbone网络通过卷积和下采样,会输出三个不同尺度的BEV特征图。
- 输出:
- LiDAR多尺度BEV特征:
f_l1
,f_l2
,f_l3
。例如,f_l1
的形状可能是[C, H, W]
(如[64, 80, 80]
),f_l2
的形状是[128, 40, 40]
等。这些特征富含几何细节。 - 雷达多尺度BEV特征:
f_r1
,f_r2
,f_r3
。形状与LiDAR对应。这些特征富含运动信息。
- LiDAR多尺度BEV特征:
- 输入: LiDAR点云
文本特征化: 文本指令进入PointCLIP文本编码器。
- 输入: 字符串
"..."
。 - 处理过程: PointCLIP是一个强大的编码器,它在训练时学习了点云和文本之间的对应关系。它能将文本指令转换成一个向量,这个向量在特征空间中与对应物体的点云特征非常接近。
- 输出: 文本特征
f_t
,形状为[C_text, L]
(例如,[512, 30]
),其中L
是文本序列长度。这个特征向量包含了“前进”、“骑行者”、“20米”等所有语义信息。
- 输入: 字符串
第3步:传感器融合 (BACA)
这是论文的第一个核心创新。现在模型有了LiDAR的几何特征和雷达的运动特征,需要将它们智能地融合起来。BACA在每个尺度上都会执行一次。我们以一个尺度为例:
- 输入:
- LiDAR BEV特征
f_l
,形状[C, H, W]
。 - 雷达 BEV特征
f_r
,形状[C, H, W]
。
- LiDAR BEV特征
- 处理过程 (双向注意力):
- LiDAR视角: 模型想用LiDAR精细的几何特征去“查询”雷达数据中对应的运动信息。
- 从
f_l
中生成一个小的代理特征A_l
(例如,通过池化将[C, 80, 80]
变成[C, 12, 12]
)。 A_l
与完整的雷达特征f_r
进行交叉注意力计算,高效地捕获f_r
中所有位置的运动信息,并将其整合到A_l
中。- 原始的
f_l
再与这个富含了运动信息的A_l
进行一次注意力计算,得到LiDAR驱动的几何特征f_lg
。这个特征现在是“知晓运动”的几何特征。
- 从
- 雷达视角: 对称地,模型用雷达的运动特征去“查询”LiDAR数据中对应的几何信息。
- 从
f_r
生成代理特征A_r
。 A_r
与f_l
进行交叉注意力计算。f_r
与整合了信息的A_r
进行注意力计算,得到雷达驱动的运动特征f_rm
。这个特征现在是“知晓形状”的运动特征。
- 从
- 融合: 将
f_lg
和f_rm
逐元素相加,得到最终的融合特征lr
。
- LiDAR视角: 模型想用LiDAR精细的几何特征去“查询”雷达数据中对应的运动信息。
- 输出: 融合后的多尺度特征
lr_1
,lr_2
,lr_3
。形状仍为[C, H, W]
。这个特征现在同时拥有了高精度的几何信息和准确的运动信息。对于我们的例子,它既知道哪个物体长得像“骑行者”,也知道哪个物体在“前进”。
第4步:文本-点云融合 (DGGF)
这是第二个核心创新。现在要把文本指令的“意图”注入到融合后的点云特征中,以过滤无关物体。同样以一个尺度为例:
- 输入:
- 融合后的传感器特征
lr
,形状[C, H, W]
。 - 文本特征
f_t
,形状[C_text, L]
。
- 融合后的传感器特征
- 处理过程:
- 门控 (Gating): 从文本特征
f_t
计算出一个“门控权重”W_g
。这个权重就像一个筛子,用它去乘以lr
特征图。如果文本是“前进的骑行者”,那么W_g
会放大那些同时具有“骑行者”几何特征和“前进”运动特征的区域,并抑制其他区域(如路边的静止汽车)。 - 动态图构建 (Dynamic Graph):
- 在经过门控加权的特征图上,模型会动态地构建一个图。它只在那些特征相似的区域之间建立连接。
- 例如,场景中有两个骑行者,一个在前进,一个静止。由于指令是“前进的骑行者”,经过门控后,前进骑行者区域的特征值会更高。DGGF会倾向于将这个区域与其他可能的前进物体(如果存在)连接起来,而不会与静止的骑行者或汽车连接。
- 图卷积: 在这个动态构建的图上进行信息传播(图卷积),进一步强化与指令相关的区域特征,并理解它们之间的上下文关系。
- 门控 (Gating): 从文本特征
- 输出: 语言嵌入的上下文特征
lc_1
,lc_2
,lc_3
。形状[C, H, W]
。这个特征图上,只有符合“正前方约20米处,正在前进的骑行者”描述的那个物体的区域,才会有很高的激活值,其他所有物体都被抑制了。
第5步:多尺度整合与预测 (FPN & C3D-RECHead)
FPN (特征金字塔网络):
- 输入: 三个尺度的语言嵌入特征
lc_1
,lc_2
,lc_3
。 - 处理过程: FPN将高层语义信息(来自小尺寸特征图)与低层细节信息(来自大尺寸特征图)进行融合,得到最终用于预测的多尺度特征图
ff_1
,ff_2
,ff_3
。 - 输出: 增强后的多尺度特征图
ff_1
,ff_2
,ff_3
。
- 输入: 三个尺度的语言嵌入特征
C3D-RECHead (预测头): 这是第三个核心创新。
- 输入: 最终的特征图
ff
。 - 处理过程:
- 生成热力图: 预测头首先在BEV特征图上生成一个热力图。但它预测的不是物体的中心,而是离自车最近的那个角点。对于“20米处的骑行者”,这个角点就是我们实际感知的、距离我们20米的那个点。
- 定位锚点: 在热力图上找到激活值最高的点,这个点就是被定位物体的最近角点锚点。
- 回归: 以这个锚点为基准,模型回归出其他属性:
- 位置微调 (sub-voxel refinement): 修正锚点的精确位置。
- 尺寸 (w, l, h): 预测物体的宽、长、高。
- 朝向角 (orientation, θ): 预测物体的朝向。
- 输入: 最终的特征图
- 输出: 最终的3D边界框
B = {p_corner, w, l, h, θ}
。其中p_corner
是最近角点的位置。
最终,模型在三维场景中用一个精准的3D框,框出了那个在正前方约20米处,正在前进的骑行者。整个流程成功地利用了LiDAR的几何、雷达的速度和文本的指令,解决了这个复杂的定位任务。
以下是描述TPCNet完整流程的PyTorch风格伪代码
import torch
import torch.nn as nn
import torch.nn.functional as F
# --- 预定义的或外部的模块 (Pre-defined or External Modules) ---
# 假设这些模块已经实现好,我们只关心其输入和输出
class PillarBackbone(nn.Module):
def forward(self, point_cloud):
# 输入: 原始点云 (N, D_in)
# 输出: 3个尺度的BEV特征图
# e.g., D_in=4 for LiDAR, 5 for Radar
# f1: (B, C1, H1, W1), f2: (B, C2, H2, W2), f3: (B, C3, H3, W3)
f1, f2, f3 = torch.randn(1, 64, 80, 80), torch.randn(1, 128, 40, 40), torch.randn(1, 256, 20, 20)
return [f1, f2, f3]
class PointCLIPTextEncoder(nn.Module):
def forward(self, text_prompt):
# 输入: 文本指令
# 输出: 文本特征 (B, C_text, L)
return torch.randn(1, 512, 30)
class FPN(nn.Module):
def forward(self, feature_maps):
# 输入: 列表,包含3个尺度的特征图
# 输出: 融合后的特征图列表
return feature_maps # 简化处理,实际有上采样和融合
# --- 论文核心创新模块 (Core Modules from the Paper) ---
class BACA(nn.Module):
"""双向代理交叉注意力 (Bidirectional Agent Cross Attention)"""
def __init__(self, in_channels, agent_size=12):
super().__init__()
self.in_channels = in_channels
self.agent_size = agent_size
# 定义生成Q, K, V的线性层
self.to_q = nn.Linear(in_channels, in_channels)
self.to_k = nn.Linear(in_channels, in_channels)
self.to_v = nn.Linear(in_channels, in_channels)
# 自适应池化层,用于生成代理特征
self.adaptive_pool = nn.AdaptiveAvgPool2d((agent_size, agent_size))
def forward(self, f_lidar, f_radar):
# f_lidar, f_radar: (B, C, H, W)
B, C, H, W = f_lidar.shape
L = H * W
# 1. 为LiDAR和Radar生成Q, K, V
# 为了简化,这里省略了位置编码(PE)和线性层的具体操作
# 假设我们已经得到了Q, K, V
q_l = f_lidar.view(B, C, L).transpose(1, 2) # (B, L, C)
k_l, v_l = f_lidar.view(B, C, L), f_lidar.view(B, C, L) # (B, C, L)
q_r = f_radar.view(B, C, L).transpose(1, 2) # (B, L, C)
k_r, v_r = f_radar.view(B, C, L), f_radar.view(B, C, L) # (B, C, L)
# 2. 生成代理特征 (Agent Features)
agent_l = self.adaptive_pool(f_lidar) # (B, C, h, w) where h=w=agent_size
agent_l = agent_l.view(B, C, -1).transpose(1, 2) # (B, h*w, C)
agent_r = self.adaptive_pool(f_radar) # (B, C, h, w)
agent_r = agent_r.view(B, C, -1).transpose(1, 2) # (B, h*w, C)
# --- 双向注意力计算 ---
# LiDAR驱动的几何特征
f_lc = F.softmax(torch.matmul(agent_l, k_r) / (C**0.5), dim=-1) @ v_r.transpose(1, 2) # (B, h*w, C)
f_lg = F.softmax(torch.matmul(q_l, agent_l.transpose(1, 2)) / (C**0.5), dim=-1) @ f_lc # (B, L, C)
# Radar驱动的运动特征
f_rc = F.softmax(torch.matmul(agent_r, k_l) / (C**0.5), dim=-1) @ v_l.transpose(1, 2) # (B, h*w, C)
f_rm = F.softmax(torch.matmul(q_r, agent_r.transpose(1, 2)) / (C**0.5), dim=-1) @ f_rc # (B, L, C)
# 3. 融合并还原形状
fused_feature = (f_lg + f_rm).transpose(1, 2).view(B, C, H, W) # (B, C, H, W)
return fused_feature
class DGGF(nn.Module):
"""动态门控图融合 (Dynamic Gated Graph Fusion)"""
def __init__(self, in_channels, text_channels):
super().__init__()
# 文本特征到门控权重的映射
self.gating_fc = nn.Linear(text_channels, in_channels)
# 动态图卷积模块
self.dyn_conv = nn.Conv2d(in_channels * 2, in_channels, kernel_size=1) # 简化表示
# 前馈网络
self.ffn = nn.Sequential(
nn.Linear(in_channels, in_channels * 4),
nn.GELU(),
nn.Linear(in_channels * 4, in_channels)
)
# 还有条件位置编码(CPE)等细节,此处简化
def forward(self, fused_lr_feature, text_feature):
# fused_lr_feature: (B, C, H, W)
# text_feature: (B, C_text, L)
# 1. 门控机制
# 提取全局文本特征
global_text_feature = torch.max(text_feature, dim=2)[0] # (B, C_text)
# 计算门控权重
gating_weights = torch.sigmoid(self.gating_fc(global_text_feature)) # (B, C)
# 作用于点云特征
gated_feature = fused_lr_feature * gating_weights.unsqueeze(-1).unsqueeze(-1) # (B, C, H, W)
# 2. 动态图卷积
# 伪代码简化动态图构建过程
# -- 内部逻辑:
# -- 1. 估算节点间欧氏距离的均值(mu)和标准差(sigma)
# -- 2. 通过"rolling"和"masking"操作,只连接距离小于 mu-sigma 的节点
# -- 3. 执行图更新,这里用一个卷积简化表示这个过程
# -- ...
# 假设我们得到了动态图的更新信息 X_final
x_final = torch.randn_like(gated_feature) # 假设的动态图更新结果
gated_feature_updated = self.dyn_conv(torch.cat([gated_feature, x_final], dim=1))
# 3. FFN 和残差连接
# (B, C, H, W) -> (B, H*W, C)
B, C, H, W = gated_feature_updated.shape
ffn_input = gated_feature_updated.view(B, C, -1).transpose(1, 2)
ffn_output = self.ffn(ffn_input)
# (B, H*W, C) -> (B, C, H, W)
output = ffn_output.transpose(1, 2).view(B, C, H, W)
# 残差连接
language_embedded_feature = output + fused_lr_feature
return language_embedded_feature # (B, C, H, W)
class C3D_RECHead(nn.Module):
"""基于最近角点的3D回归头"""
def __init__(self, in_channels, num_classes=3):
super().__init__()
# 预测热力图 (heatmap) 的卷积层
self.heatmap_head = nn.Conv2d(in_channels, num_classes, kernel_size=1)
# 回归其他属性的卷积层
self.regression_head = nn.Conv2d(in_channels, 8, kernel_size=1) # e.g., x,y,z,w,l,h,sin(a),cos(a)
def forward(self, fpn_feature):
# fpn_feature: (B, C, H, W)
heatmap = torch.sigmoid(self.heatmap_head(fpn_feature)) # (B, num_classes, H, W)
regression = self.regression_head(fpn_feature) # (B, 8, H, W)
return {'heatmap': heatmap, 'regression': regression}
# --- 完整模型 (The Complete TPCNet Model) ---
class TPCNet(nn.Module):
def __init__(self):
super().__init__()
# 1. 编码器
self.lidar_backbone = PillarBackbone()
self.radar_backbone = PillarBackbone()
self.text_encoder = PointCLIPTextEncoder()
# 2. 核心模块
# 为3个不同尺度分别创建BACA和DGGF模块
self.baca_modules = nn.ModuleList([BACA(c) for c in [64, 128, 256]])
self.dggf_modules = nn.ModuleList([DGGF(c, 512) for c in [64, 128, 256]])
# 3. FPN 和 预测头
self.fpn = FPN()
self.prediction_head = C3D_RECHead(in_channels=64+128+256) # 假设FPN输出拼接后的通道数
def forward(self, lidar_points, radar_points, text_prompt):
# --- 1. 特征编码 ---
lidar_bev_features = self.lidar_backbone(lidar_points) # 得到 [f_l1, f_l2, f_l3]
radar_bev_features = self.radar_backbone(radar_points) # 得到 [f_r1, f_r2, f_r3]
text_feature = self.text_encoder(text_prompt) # 得到 f_t, (B, C_text, L)
# --- 2. 逐尺度融合 ---
fused_lr_features = []
language_embedded_features = []
for i in range(len(lidar_bev_features)):
# 2a. BACA 传感器融合
fused_lr = self.baca_modules[i](lidar_bev_features[i], radar_bev_features[i])
fused_lr_features.append(fused_lr)
# 2b. DGGF 文本-点云融合
lang_emb = self.dggf_modules[i](fused_lr, text_feature)
language_embedded_features.append(lang_emb)
# --- 3. FPN 和 预测 ---
# 3a. FPN 整合多尺度特征
final_features = self.fpn(language_embedded_features)
# 假设FPN将不同尺度的特征上采样到相同大小并拼接
final_feature_map = torch.cat([F.interpolate(f, size=final_features[0].shape[2:]) for f in final_features], dim=1)
# 3b. C3D-RECHead 预测结果
output = self.prediction_head(final_feature_map)
# output 是一个字典: {'heatmap': (B, num_cls, H, W), 'regression': (B, 8, H, W)}
# 后续处理: 从heatmap找到峰值点(最近角点),并结合回归值解码出最终的3D边界框
return output
# --- 运行示例 ---
# model = TPCNet()
# lidar_data = torch.randn(100000, 4) # 10万个LiDAR点
# radar_data = torch.randn(1000, 5) # 1000个Radar点
# text = "Find the advancing cyclist about 20m in front of us."
#
# # 将数据打包成batch=1
# lidar_batch = [lidar_data]
# radar_batch = [radar_data]
#
# predictions = model(lidar_batch, radar_batch, text)
# print(predictions['heatmap'].shape)
# print(predictions['regression'].shape)