LiDAR-LLM论文精读
Basic Information
- Title:LiDAR-LLM: Exploring the Potential of Large Language Models for 3D LiDAR Understanding
- Author:Senqiao Yang, Jiaming Liu, Ray Zhang, Mingjie Pan, Zoey Guo, Xiaoqi Li, Zehui Chen, Peng Gao, Yandong Guo, Shanghang Zhang
- Institution:Peking University, AI2Robotics, Shanghai Artificial Intelligence Laboratory
- Conference:AAAI 2025
- Homepage:https://sites.google.com/view/lidar-llm
Abstract
Recently, Large Language Models (LLMs) and Multimodal Large Language Models (MLLMs) have shown promise in instruction following and image understanding. While these models are powerful, they have not yet been developed to comprehend the more challenging 3D geometric and physical scenes, especially when it comes to the sparse outdoor LiDAR data. In this paper, we introduce LiDAR-LLM, which takes raw LiDAR data as input and harnesses the remarkable reasoning capabilities of LLMs to gain a comprehensive understanding of outdoor 3D scenes. The central insight of our LiDAR-LLM is the reformulation of 3D outdoor scene cognition as a language modeling problem, encompassing tasks such as 3D captioning, 3D grounding, 3D question answering, etc. Specifically, due to the scarcity of 3D LiDAR-text pairing data, we introduce a three-stage training strategy and generate relevant datasets, progressively aligning the 3D modality with the language embedding of LLM. Furthermore, we design a Position-Aware Transformer (PAT) to connect the 3D encoder with the LLM, which effectively bridges the modality gap and enhances the LLM’s spatial orientation comprehension of visual features. Our experiments demonstrate that LiDAR-LLM effectively comprehends a wide range of instructions related to 3D scenes, achieving a 40.9 BLEU-1 score on the 3D captioning dataset, a Grounded Captioning accuracy of 63.1%, and a BEV mIoU of 14.3%.
近来,大型语言模型 (LLM) 和多模态大型语言模型 (MLLM) 在指令遵循和图像理解方面显示出了巨大的潜力。然而,尽管这些模型功能强大,但它们尚未被开发用于理解更具挑战性的三维几何和物理场景,尤其是在处理稀疏的室外激光雷达 (LiDAR) 数据时。在本文中,我们介绍了LiDAR-LLM,它将原始的激光雷达数据作为输入,并利用大型语言模型卓越的推理能力来全面理解室外三维场景。我们LiDAR-LLM的核心思想是将三维室外场景认知重新表述为一个语言建模问题,涵盖了三维字幕生成、三维实体定位、三维问答等任务。具体而言,由于三维激光雷达-文本配对数据的稀缺,我们引入了一种三阶段的训练策略,并生成了相关的数据集,逐步将三维模态与大型语言模型的语言嵌入对齐。此外,我们设计了一个位置感知变换器 (Position-Aware Transformer, PAT) 来连接三维编码器和大型语言模型,有效地弥合了模态间的差距,并增强了大型语言模型对视觉特征的空间方位理解能力。我们的实验表明,LiDAR-LLM 能够有效地理解与三维场景相关的广泛指令,在三维字幕生成数据集上取得了40.9的BLEU-1分数,在定位字幕生成任务上取得了63.1%的准确率,以及14.3%的鸟瞰图平均交并比 (BEV mIoU)。
Current Issues, Challenges, Author’s Motivation, and Proposed Solution
尽管2D多模态模型能力强大,但它们在理解更具挑战性的3D物理世界上仍有局限 。3D场景理解,特别是基于激光雷达(LiDAR)的理解,对于自动驾驶、机器人等应用至关重要,因为它提供了丰富的空间信息。目前有一些工作尝试将LLM应用于室内3D点云数据 ,但这些方法通常处理的是单个物体或密集的室内场景,难以直接应用于室外稀疏且复杂的LiDAR数据。
大型语言模型(LLMs)(Touvron et al. 2023; OpenAI 2023; Brown et al. 2020)在自然语言处理领域展现出了强大的复杂推理和稳健的对话能力。在大型语言模型的基础上,多模态大型语言模型(MLLMs)(Liu et al. 2024; Li et al. 2023; et al 2022; Lin et al. 2023; Wang et al. 2023a),例如BLIP-2和Flamingo等模型被相继推出。这些模型能够接收更多模态(例如二维图像)作为输入,使得大型语言模型能够讨论和理解视觉场景。尽管多模态大型语言模型在处理二维图像内容方面表现出色,但它们对于更具挑战性的三维真实世界场景的理解仍是一个悬而未决的问题。理解三维场景对于包括自动驾驶(Arnold et al. 2019; Chen et al. 2017)和机器人技术在内的多种应用都至关重要(Dhamo et al. 2021; Yao et al. 2018; Wang et al. 2024),这得益于三维数据中丰富的空间信息。
现有的三维理解方法(Yang et al. 2021; Jiao et al. 2022; Parelli et al. 2023; Azuma et al. 2022; Ma et al. 2022)在面对未曾见过的新场景时,通常缺乏足够的泛化能力。它们在以人类可理解的方式表达特定的下游任务(如生成近景字幕和问答)方面也存在局限性。因此,近期的工作(Wang et al. 2023b; Hong et al. 2023; Qi et al. 2024)开始将室内的三维点云作为输入,并利用大型语言模型的强大能力来分析它们,从而将三维特征与大型语言模型的文本特征对齐。然而,这些方法在处理三维室外LiDAR数据时仍然会遇到挑战。具体来说,由于LiDAR数据的稀疏特性,将三维数据渲染为多视图图像(Hong et al. 2023)会导致渲染和特征提取的质量不佳。此外,像(Guo et al. 2023; Qi et al. 2024)这样的方法只能编码单个物体级别的点云,而无法理解复杂的室外场景。
作者发现,现有方法在处理室外稀疏LiDAR数据上存在明显的空白。具体来说,当下的挑战主要有两个:
- 3D LiDAR-文本配对数据极度稀缺:与图文数据(如ImageNet, COCO)的海量存在不同,几乎没有现成的大规模LiDAR点云与高质量文本描述配对的数据集,这使得模型难以进行有效的跨模态训练。
- 室外LiDAR场景的内在复杂性:室外场景包含大量动态和静态物体,它们之间存在复杂的遮挡和相互影响关系。同时,LiDAR数据本身是稀疏的、不规则的,这给多模态对齐和场景推理带来了巨大困难。

需要解决的关键难题正是前述的两大挑战:
- 难点一:如何解决LiDAR-文本数据稀缺的问题?
- 难点二:如何有效连接稀疏的3D LiDAR特征和稠密的LLM语言空间,以处理复杂的空间关系?
这项研究具有非常重要的实际意义:
- 赋能自动驾驶:它可以让自动驾驶系统不仅仅是“看到”障碍物,更能“理解”场景。例如,可以通过问答形式查询“前方是否有行人横穿马路?”或让系统生成“前方有施工车辆,交通拥堵”的文字描述。其零样本规划能力,如在特定场景下生成“应减速刹车”的决策 ,展示了其在可解释性决策和提升安全性方面的巨大潜力。
- 赋能机器人:在机器人领域,这种理解能力同样关键,可以帮助机器人更好地理解和导航于室外环境 。
- 提升人机交互性:通过自然语言交互,非专业人员也能轻松地理解和查询复杂的3D感知结果,大大降低了使用门槛。
在本文中,如图1所示,我们介绍了一种名为LiDAR-LLM的新颖方法,它利用大型语言模型(LLM)的推理能力来全面理解室外三维场景。LiDAR-LLM的架构包含一个三维LiDAR编码器、一个对齐变换器,以及一个大型语言模型(例如LLaMA (Touvron et al. 2023))。LiDAR-LLM的关键洞察在于通过解释性的感知语言建模来重新定义场景认知问题。然而,将大型语言模型引入室外三维场景感知面临两个主要挑战:1) 与数量丰富的图像-文本配对数据(Sharma et al. 2018; Schuhmann et al. 2022; Changpinyo et al. 2021)相比,三维LiDAR-文本配对数据极其稀少,并且现有的多模态编码器(例如CLIP (Radford et al. 2021))也无法访问这些数据。2) 三维LiDAR是稀疏的点云,并且缺乏与多种物体相关的复杂几何关系。
为了应对这些挑战,我们生成了所需的数据集,并引入了一个包含跨模态对齐、感知和高阶指令三个阶段的训练策略。该策略逐步将三维表示转换到语言特征空间中,从而释放大型语言模型对三维场景的推理能力。在第一阶段,我们利用多模态大型语言模型(MLLM)(Zhang et al. 2023; Li et al. 2023)和GPT-4(OpenAI 2023)来促进多视图图像与nuScenes数据集(Caesar et al. 2020)中每个场景的语言之间的通信,该数据集包含了配对好的三维LiDAR数据。这个过程自动生成了一个包含42万个LiDAR-文本对的字幕数据集,实现了三维LiDAR特征与大型语言模型词嵌入的跨模态对齐。在第二阶段,我们认识到感知能力对于三维场景理解至关重要,因此我们将三维边界框集成到问答文本中,创建了一个包含28万个LiDAR-文本对的定位(grounding)数据集。然后,我们应用一种以物体为中心的学习策略,使模型具备三维感知能力。最后,在第三阶段,我们对高阶指令任务(例如自动驾驶预测和规划等多种三维下游任务)高效地微调LiDAR-LLM(Qian et al. 2023; Contributors 2023),以增强其指令遵循能力。
为了更有效地弥合三维LiDAR和文本之间的模态鸿沟,我们设计了一个连接三维LiDAR编码器和大型语言模型的位置感知变换器(Position-Aware Transformer, PAT),它将鸟瞰图(BEV)位置嵌入显式地注入到三维特征中。结合三阶段训练策略,PAT增强了模型对空间方位的理解能力。总而言之,我们的贡献如下:
- 我们提出了LiDAR-LLM框架,它将三维LiDAR数据和语言作为输入,利用大型语言模型的推理能力来理解室外三维场景。LiDAR-LLM能够执行三维字幕生成、三维定位、三维问答、高阶规划等多种任务。
- 我们引入了一个三阶段训练策略,用于将三维表示逐步转换到文本特征空间,其中涉及跨模态对齐、感知和高阶指令。
- 为了便于训练,我们收集了一套LiDAR-文本配对数据集,包含42万条三维字幕生成数据(nu-Caption)和28万条三维定位数据(nu-Grounding)。这些数据集将被发布以供研究。
- 我们专门设计了一个连接三维LiDAR编码器和大型语言模型的位置感知变换器(PAT),它弥合了模态间的差距,并增强了模型对空间方位的理解能力。
Preliminary
概览 (Overview)
LiDAR-LLM的整体框架如图2所示。其核心概念在于将稀疏且复杂的几何LiDAR数据转换到大型语言模型(LLM)可以理解的表示空间中。然而,将LLM集成用于理解室外三维场景面临两个挑战:(1)与现有丰富的图像-文本配对数据不同,三维LiDAR-文本配对数据极其稀缺;(2)稀疏的LiDAR数据涉及多样的物体以及它们之间复杂的几何关系。为了克服这些挑战,我们提出了一种三阶段训练策略,并生成所需的LiDAR-文本配对数据,以将三维表示迁移到LLM的特征空间中。通过这一过程,LLM 在三维LiDAR数据 上的对齐、感知和常识推理能力逐渐得到增强。LiDAR-LLM能够在场景和实例两个层面上执行LiDAR模态下的复杂跨模态任务,并处理复杂的跨模态场景。此外,我们引入了位置感知变换器(Position-Aware Transformer, PAT)模块,它将三维编码器与LLM连接起来。该模块整合了鸟瞰图(BEV)位置嵌入,以增强LLM对空间方位的理解。因此,特殊设计的训练策略与PAT模块共同助力LiDAR-LLM获得对室外三维场景中复杂空间信息的全面理解。最后,由于空间所限,我们将相关的详细工作收录在附录D中。

模型架构 (Model Architecture)
给定一个LiDAR输入 L ∈ R n × 3 L \in \mathbb{R}^{n \times 3} L∈Rn×3,其中 n n n 是点的数量,我们使用VoxelNet (Zhou and Tuzel 2018) 来提取其三维体素特征。随后,考虑到计算成本,我们将该特征沿z轴展平以生成鸟瞰图(BEV)特征。与此同时,对于最大长度为 m m m 个字符的文本输入 T T T,我们利用LLaMA (Touvron et al. 2023) 来提取文本特征。对于维度为 F v ∈ R 512 × 180 × 180 \mathcal{F}_v \in \mathbb{R}^{512 \times 180 \times 180} Fv∈R512×180×180 的BEV特征以及维度为 F t ∈ R 576 × 768 \mathcal{F}_t \in \mathbb{R}^{576 \times 768} Ft∈R576×768 的文本特征(其中768是特征的维度),我们的目标是通过我们提出的位置感知变换器(PAT),将这些LiDAR BEV特征投影到预训练LLaMA的词嵌入空间中。这种对齐对于在三维下游任务中进行多模态理解和生成准确答案至关重要。在训练过程中,我们仅对注入到LLaMA和PAT模块中的适配器(Hu et al. 2021)进行微调,同时冻结主要的参数。这样做旨在保留现有模块强大的特征提取和推理能力,并进一步为模型赋予理解三维LiDAR场景的能力。
Method
PAT 设计 (PAT design)
在图2的右侧部分,PAT的输入包含一组包含K个可学习的查询嵌入(query embeddings),其中K被设置为576,以便于投影到大型语言模型(LLM)的词嵌入空间中。这些查询通过一个交叉注意力机制(cross-attention mechanism)与鸟瞰图(BEV)特征进行交互,其中可学习的查询作为“查询(query)”,而BEV特征则作为“键(key)”和“值(value)”。PAT会生成一个包含K个已编码视觉向量的输出,每个查询嵌入对应一个向量。这些向量随后会经过一个多层感知机(MLP)的处理,并最终被送入已冻结的LLM中。然而,室外的LiDAR数据要求对不同物体和自车(ego car)之间的方位关系有全面的理解。因此,我们为BEV特征引入了BEV位置嵌入,旨在明确地增强空间方位的理解能力。
具体来说,我们首先构建一个初始参数为零的BEV位置嵌入 B p ∈ R c × v B_p \in \mathbb{R}^{c \times v} Bp∈Rc×v,其中c代表嵌入的维度,v代表BEV场景中不同的方位。这种方位的划分取决于原始室外数据集采集时所用的相机设置。例如,nuScenes数据集(Caesar et al. 2020)将BEV场景分成了六个视图(v=6),包括前、前右、后右、后、后左和前左视图,而Waymo数据集(Sun et al. 2020)则包含五个视图(v=5)。如果需要更精细的视图划分,我们的PAT设计也能够高效地适应这一需求。在此之后,我们便可以清晰地描述物体与车之间的空间关系,避免了诸如“一辆车位于车左后方还是后方”这类模棱两可的描述。在跨模态对齐阶段,当处理一个与特定视图相关的问题时,我们会将相应的BEV位置嵌入同时注入到BEV特征和查询中。例如,在训练一个与左前视图相关的字幕样本时,我们只将左前部分的BEV位置嵌入 B p ∈ R c × 1 B_p \in \mathbb{R}^{c \times 1} Bp∈Rc×1 注入到BEV特征的左前部分和整个查询集合中(如图2左侧所示)。此外,当物体位于两个视图的交界处时,它们会在两个相邻的视图中都被描绘出来,从而避免了信息丢失。
请注意,我们的PAT设计旨在增强模型对空间方位的理解。如三阶段训练策略一节所述,我们仅在初始的跨模态对齐阶段训练单个视图时,才会引入独立的BEV位置嵌入。对于全景场景和后续的任务(即感知和高阶指令),我们会使用整套BEV位置嵌入,这使得模型能够进行端到端的、带有灵活语言描述的训练。最后,我们在 消融研究(Ablation Study) 一节中提供了定量分析,以验证PAT模块的有效性。
三阶段训练策略 (Three-Stage Training Strategy)
在本节中,我们将演示如何赋予大型语言模型(LLM)理解三维LiDAR数据并统一完成各种三维任务的能力。我们引入了一个三阶段的训练策略并生成了相关的数据集,从而逐步地将三维表示迁移到文本特征空间中。这三个阶段包含:跨模态对齐、感知和高阶指令。
跨模态对齐(三维字幕生成) (Cross-Modal Alignment (3D Captioning))
为了有效地处理众多三维下游任务,模型需要对LiDAR场景有透彻的理解。通过将整个三维场景集成到大型语言模型中,场景字幕生成(Scene captioning)成为一种合乎逻辑的方法,它能使模型从LiDAR数据中捕捉到本质的信息和细节。
然而,目前缺乏将LiDAR数据与文本描述配对的开源字幕数据集。不过,现有的数据集(Caesar et al. 2020; Sun et al. 2020)包含了配对好的多视图图像和LiDAR数据。这启发了我们去利用多视图图像来自动生成文本描述,这些描述随后可以与相应的LiDAR数据配对。通过采用强大的、现成的二维多模态大型语言模型(2D MLLMs)(Li et al. 2023; Zhang et al. 2023),我们为每个视图的图像输入生成字幕,从而获得单视图的LiDAR-文本配对数据。随后,通过合并多个视图的字幕,我们可以获得全景场景的LiDAR-文本配对数据。尽管如此,为LiDAR生成的字幕和二维多视图图像的字幕并非完美对齐,因为二维多模态大型语言模型可能会提供与天气或颜色相关的描述,而这些信息并不适用于LiDAR数据。为了解决这种不一致性,我们进一步利用GPT-4(OpenAI 2023)来过滤掉不相关的字幕/词语。这个过滤过程可分为三个步骤:1)我们首先向GPT-4提供提示词:“请移除描述颜色和天气的词语和句子,并确保其含义保持一致。”以进行过滤。2)第一轮过滤后,我们将过滤后的字幕和对应的原始字幕再次输入给GPT-4,并使用提示词:“请检查以下两个句子的含义相似度…”这是为了确保原始字幕的含义没有被改变。3)我们自动移除那些含义发生改变的字幕,整个过程不涉及任何手动验证。关于数据生成的更多细节可以在附录C中找到。
利用收集到的LiDAR-文本字幕对,我们的目标是使大型语言模型(LLM)能够根据LiDAR输入生成描述性文本。我们观察到,由于LiDAR数据具有复杂的几何结构,其文本字幕往往会过分详细和冗长。对整体字幕进行联合学习可能会导致LLM在推理时产生混淆。为了缓解这个问题,我们引入了一种从单个视图到全景场景的训练机制。具体来说,我们最初先训练模型为单个视图生成字幕以降低复杂性,在此之后,下一步则涉及指导模型去理解整个全景场景并生成一个全局性的描述。通过这样做,我们将三维特征表示与LLM的文本特征空间对齐,使模型能够理解LiDAR数据中的上下文。
感知 (Perception)
在模型具备了全景场景理解能力之后,此阶段专注于赋予模型实例级别的三维感知能力,这为诸如规划等高阶指令任务奠定了基础。我们的目标是将三维物体的特征表示与LLM相应的文本嵌入对齐。为实现这一目标,我们采用了一种以物体为中心的学习策略,确保LiDAR-LLM能够学习到各种物体细节,例如数量、定位和空间关系。
为了这个目的,我们设计了两个任务:视觉定位(visual grounding)和带定位的字幕生成(grounded captioning)。物体首先被表示为一个离散令牌(token)的序列,其中每个物体都有其标签和边界框。给定一个带有标注的三维物体,其类别名称和位置会被预训练LLM的分词器(tokenizer)编码为一个词嵌入。与以往的室内三维多模态大型语言模型(Wang et al. 2023b)不同,我们的方法无需从点云中单独提取出每个物体;相反,我们是在整个三维场景中实现物体感知的。对于视觉定位,模型学习根据LiDAR输入和指令,生成指定了区域位置 ( x 1 , y 1 , z 1 , x 2 , y 2 , z 2 , θ ) (x_1, y_1, z_1, x_2, y_2, z_2, \theta) (x1,y1,z1,x2,y2,z2,θ) 的定位令牌,其中 θ \theta θ 是边界框的角度。带定位的字幕生成任务则被定位为视觉定位的逆向对应任务。模型通过利用输入的LiDAR数据以及带有位置信息的文本,被训练来生成描述性文本。相关的指令在图3中有描绘。
高阶指令 (High-level Instruction)
在此阶段,在全面理解了LiDAR场景并为模型装备了基础的三维感知能力之后,我们利用高阶指令数据集(即nuScenes-QA (Qian et al. 2023) 和 DriveLM-nuScenes (Contributors 2023))来进一步增强模型在三维空间中的推理技能。通过使用这些数据集对LiDAR-LLM进行微调,我们不仅提升了其理解多样化指令的熟练度,还赋予了它生成既具创造性又符合上下文的响应的能力。同时,我们没有在规划问答数据(DriveLM-nuScenes)上进行微调,而是直接利用我们训练好的模型来推理与规划相关的问题。通过我们提出的三阶段训练策略,LiDAR-LLM发展出了初步的规划能力,如附录B所示。反之,如果在高阶指令微调阶段就引入DriveLM-nuScenes数据集,可以赋予LiDAR-LLM在感知、驾驶行为和规划方面的自动驾驶推理能力,并产生了有前景的结果,如实验-高阶指令任务一节所证。
训练与任务推理 (Training and Task Inference)
LiDAR-LLM通过与多种任务和数据集进行联合微调,为其装备了一套多功能的技能,以熟练处理复杂的跨模态场景下的多样化任务。在微调阶段,我们使用一个由我们生成的70万个LiDAR-文本对和75万个公开可用的数据集(Qian et al. 2023; Contributors 2023)组成的数据集进行微调。所有的训练步骤都通过交叉熵损失(cross-entropy loss)进行监督。在推理(inference)过程中,我们的输入仍然由LiDAR和问题文本组成。LiDAR-LLM足够灵活,可以单个地推理每个问题,也可以连续地推理多个问题。
Experiments
在本节中,我们对我们生成的数据集、DriveLM-nuScene(Contributors 2023)以及 NuScenes-QA(Qian et al. 2023)进行了广泛的实验。在接下来的两个小节中,我们首先介绍选定的基线模型(baselines)和评估指标(evaluation metrics),以及我们方法的实现细节。我们的主要实验在后续的小节中评估了模型在三个任务上的表现,包括:三维字幕生成、三维定位,以及高阶指令任务。最后,在消融研究和定性分析小节中,我们对我们的方法提供了更深入的分析。
Settings
基线模型与评估指标 (Baselines & Evaluation Metrics)
基线模型 (Baselines): 据我们所知,我们是第一个利用LiDAR数据和文本指令作为输入并实现一系列室外三维任务的多模态大型语言模型(MLLM)。由于没有可以直接处理LiDAR数据的二维/三维多模态大型语言模型,我们将LiDAR数据投影到二维平面上,并采用当前最先进的(SOTA)二维多模态大型语言模型方法,包括MiniGPT-4 (Zhu et al. 2023)、LLaVA1.5 (Liu et al. 2023) 和LLaMA-Adapter V2 (Zhang et al. 2023),作为我们的竞争性对比模型。更多的基线比较实验可以在附录A中找到,例如与使用图像输入的二维多模态大型语言模型的比较。
评估指标 (Evaluation Metrics): 为了评估三维字幕生成任务中的语言生成效果,我们使用BLEU (Papineni et al. 2002) 和BERT Score (Zhang et al. 2019)。对于三维定位任务,我们使用分类Top-1准确率和BEV mIoU(鸟瞰图平均交并比)来评估。在NuScene-QA任务中,模型的性能遵循视觉问答(VQA)的实践,使用Top-1准确率进行衡量,并对不同问题类型进行分开评估(Azuma et al. 2022)。对于DriveLM-nuScene任务,我们使用BLEU和BERT Score来验证我们方法的有效性。
实现细节 (Implementation Details)
我们的LiDAR-LLM有三个主要组件:一个LiDAR特征提取骨干网络、位置感知变换器(PAT)和大型语言模型(LLM)。对于LiDAR特征提取,我们使用 标准的3D检测器 CenterPoint-Voxel (Zhou and Tuzel 2018),它在3D检测任务上进行了预训练 (Caesar et al. 2020)。我们输入多邻近帧的点云(每个样本9个扫描帧)来编码时序信息。点云的范围是 [-54.0m, -54.0m, -5.0m, 54.0m, 54.0m, 3.0m],BEV网格尺寸是 [0.6m, 0.6m]。PAT模块使用576个维度为768的可学习查询令牌。对于大型语言模型,我们使用LLaMA-7B (Touvron et al. 2023) 以保证其效率和效果。在三阶段训练过程中,我们使用Adam优化器,其参数 ( β 1 , β 2 ) = ( 0.9 , 0.999 ) (\beta_1, \beta_2) = (0.9, 0.999) (β1,β2)=(0.9,0.999),初始学习率为1e-4,每2个轮次(epoch)减半。我们对PAT和LLaMA的适配器进行了6个轮次的微调。所有的实验都在NVIDIA Tesla A100 GPU上运行。
Main Results

三维字幕生成 (3D Captioning)
数据集构建 (Dataset Construction): 由于缺乏专为LiDAR数据定制的字幕数据集,我们集成了GPT-4(OpenAI 2023)和二维多模态大型语言模型(2D MLLMs)(Zhang et al. 2023)来构建一个名为nu-Caption的大型三维字幕生成数据集。该数据集包含42万个高精度的LiDAR-文本对。在nu-Caption中,我们使用34.8万对LiDAR-文本对作为训练集,7.2万对作为验证集。字幕问题涵盖了从简单到困难的三个方面:1)对当前场景和交通状况的总体描述,2)对物体及其关系的详细描述,3)对道路上潜在风险的识别。更多细节可以在附录C中找到。
结果分析 (Results Analysis): 我们随后在我们生成的nu-Caption数据集上评估了这些方法,并将结果报告在表1中。LiDAR-LLM在所有评估指标上均优于之前的二维多模态大型语言模型。具体来说,我们的模型达到了19.26%的BLEU-4和91.32%的Bert score精度,超过了MiniGPT4(其BLEU-4为2.63%,Bert-P为84.38%);同时,与LLaMA-AdapterV2相比,也取得了11.81%的BLEU-4和3.87%的Bert-P提升。这些结果表明,直接利用二维多模态大型语言模型来理解LiDAR数据会产生不理想的结果,导致字幕描述中关键细节的遗漏。与此同时,我们将我们的方法(从单个视图到全景)与在全景场景上直接生成字幕的方法进行了比较。我们的(全景)方法达到了16.23%的BLEU-4(下降了3.03%),这表明从简单到复杂场景的渐进式学习有益于模型的理解。
三维定位 (3D Grounding)
数据集构建 (Dataset Construction): 除了字幕生成,三维定位还需要感知能力。我们使用nuScenes的标注,创建了一个名为nu-Grounding的数据集,其中包含28万个用于视觉定位和带定位的字幕生成任务的问答对。其中,23.2万对用于训练,4.8万对用于验证。对于带定位的字幕生成,我们测量了所有19个类别(Caesar et al. 2020)和5个主要类别(汽车、行人、公交车、卡车和工程车辆)的准确率。对于视觉定位,我们预测“汽车”类别和5个主要类别的边界框,并计算它们的鸟瞰图平均交并比(BEV mIoU)。
结果分析 (Results Analysis): 如表2所示,对于带定位的字幕生成任务,我们的模型在包含5个类别的场景中达到了63.1%的准确率,分别超过了LLaMA-Adapter和MiniGPT4的23.4%和21.2%。同样,在19个类别上进行训练和测试时,我们的方法仍然显示出比二维多模态大型语言模型显著的优势。这表明我们的LiDAR-LLM具备了对三维LiDAR数据中定位和分类信息的理解能力。对于视觉定位,我们的LiDAR-LLM在单个汽车类别和5个主要类别上分别达到了14.3%和9.9%的BEV mIoU。这些结果表明我们的方法展现了基础的感知能力,并且能生成精细的边界框。在此任务中,我们的目标不仅是为物体定位信息,还要增强模型对LiDAR数据中空间关系的理解。
高阶指令任务 (High-Level Instruction Task)
NuScenes-QA(Qian et al. 2023)是一个用于自动驾驶的多模态视觉问答(VQA)基准数据集,包含五种问题类型:存在性、计数、查询对象、查询状态和比较。问题按推理复杂度分为零跳(zero-hop)和一跳(one-hop)推理。DriveLM-nuScene(Contributors 2023)是另一个用于自动驾驶的数据集,带有标注的问答对。然而,DriveLM-nuScene中的一些问答对的目标是二维多视图图像,并带有文本提示和二维坐标。我们在训练期间会自动过滤掉这些问答对。最终得到的DriveLM-nuScene数据集面向LiDAR数据,专注于三个推理任务:感知、规划和驾驶行为。由于只有训练数据集是公开的,我们划分出其中的10%来创建验证集。

NuScenes-QA 结果分析 (NuScenes-QA Results Analysis): 如表3所示,我们首先比较了我们的模型在不同预训练阶段下在NuScenes-QA上的性能。在实验1(Ex1)中,从零开始训练LiDAR-LLM达到了41.2%的准确率,验证了我们模型设计在高阶指令任务中的有效性。在实验2(Ex2)中,与实验1相比,在字幕生成任务上进行预训练带来了6.2%的准确率提升。在实验3(Ex3)中,在定位任务上进行预训练比实验1取得了5.3%的准确率提升。结果显示,当LiDAR-LLM具备了基础的三维场景理解或感知能力时,它能更有效地完成高阶推理任务。与在单个任务上预训练相比,同时在字幕生成和定位任务上进行预训练(实验4,Ex4)显示出显著的提升,总准确率达到了48.6%。这种提升在零跳和一跳推理问题中都能观察到。此外,如表3下半部分所示,我们比较了我们的模型与之前的二维多模态大型语言模型的性能,结果突显了我们模型在处理各种高阶推理任务方面的显著能力。
DriveLM-nuScene 结果分析 (DriveLM-nuScene Results Analysis)
如表4所示,我们在DriveLM-nuScene数据集上对LiDAR-LLM进行微调,展示了它在三个推理任务中的性能。在感知推理任务中,LiDAR-LLM取得了57.44%的BLEU-1分数,这表明了它能有效描述高阶感知信息的能力,而这得益于我们所提出的三维感知训练阶段。此外,在规划任务中,LiDAR-LLM取得了37.47%的BLEU-1分数,表明了其强大的推理能力和在处理规划相关问题方面的潜力,尤其是在自动驾驶领域。值得注意的是,在驾驶行为任务中,我们的方法取得了前所未有的BLEU分数。我们将其归因于涉及二维坐标的众多行为问答对,这导致了大量数据的过滤,而剩余的数据则具有固定的提示词格式。因此,在关注Bert Score指标时,LiDAR-LLM也达到了98.15%的精度,验证了我们的模型可以根据交通状况预测出合理的自车驾驶行为。详细的定性结果可以在附录B中找到。为了更全面地展示我们LiDAR-LLM的功效,我们还进行了与使用多视图输入的二维多模态大型语言模型(2D-MLLM)以及最先进的室内三维大型语言模型(indoor 3D LLM)的对比。由于篇幅限制,这些结果呈现在附录A中。

Ablation Studies
位置感知变换器(PAT)的有效性
为了证明PAT中每个组件的有效性,我们在三维字幕生成任务中比较了BLEU-4和BERT scores的精度。如表5所示,实验1(Ex1)在没有使用任何变换器结构或位置嵌入的情况下,BEV特征在被送入LLM之前由一个MLP直接处理,这使得实验1取得了88.14%的BERT-P分数和11.37%的BLEU-4。在实验2(Ex2)中,通过使用查询变换器(Query Transformer),我们观察到BERT Score达到了90.60%,BLEU-4达到了15.41%。这个结果表明我们提出的查询变换器能更好地将LiDAR特征与文本嵌入对齐。与实验2和实验3相比,引入BEV位置嵌入带来了0.7%的BERT score和3.85%的BLEU-4提升。这个结果证实了引入BEV位置嵌入有助于模型更好地理解三维空间关系,同时又不限制语言的灵活性。
定性分析 (Qualitative Analysis)

在三维字幕生成任务中,如图3的绿色部分所示,LiDAR-LLM展示了其将语言与LiDAR输入对齐的熟练度。它展现了对LiDAR数据中上下文信息的理解,并能根据文本问题和相应的视觉信息提供答案。从图中可以看出,我们的方法在识别关键物体并评估其状态(例如“已停放”或“正在驶下”)方面表现出色,展示了其理解三维场景的能力。在定位(grounding)阶段,如图3的蓝色部分所示,模型展现了其识别被指代物体、表现出空间关系感知并展示精确本地化技能的能力。在图3的黄色部分,我们展示了LiDAR-LLM在规划任务中的可解释性。利用我们方法解锁的能力,LiDAR-LLM 能够生成连贯的高阶行动 。例如,在第二个子图中,我们提示模型描述自车的安全行动。模型准确地识别出前方没有障碍物或潜在危险,因此推理出的答案是“直行或左转”。此外,在另一个高阶任务(NuScenes-QA)中,如图3的粉色部分所代表,模型展示了相对全面的全景场景感知和推理能力。
Conclusion
总而言之,我们的论文代表了一项开创性的工作,旨在释放大型语言模型(LLM)的推理能力以理解室外的LiDAR数据。为了训练LiDAR-LLM,我们生成了一套全面的LiDAR-文本配对数据集,其中包含了42万条三维字幕生成数据和28万条三维定位数据。我们接着引入了一个三阶段的训练策略,逐步地将LiDAR模态与LLM的语言嵌入空间进行对齐。我们的架构创新引入了位置感知变换器(Position-Aware Transformer),用以连接三维编码器和大型语言模型。通过在我们自建的数据集和开源数据集上进行广泛的实验,我们的LiDAR-LLM在多样化的任务中展现了出色的性能,这些任务包括三维字幕生成、三维定位、三维问答、自动驾驶规划以及一系列高阶指令任务。
Limitations
-
对多模态融合的依赖与不足:
- 间接融合:论文的核心创新之一是利用多视角2D图像来生成LiDAR的文本描述,从而创建数据集 。但这是一种间接的、离线的多模态利用。在实际推理时,模型仅输入LiDAR数据,无法利用摄像头的实时信息。
- 感知能力缺失:这直接导致模型无法感知LiDAR无法捕捉的信息,例如交通灯的颜色、路面标线、天气状况等。从论文的失败案例(图5)中可以看到,模型会“幻觉”出“多云的天气”和“红色的交通信号灯”,这证明了单靠LiDAR的局限性。
-
缺乏时序信息建模:
- 静态快照式理解:模型处理的是单帧(或短时聚合)的LiDAR点云,本质上是对一个静态“快照”进行理解。它虽然能判断物体是“移动”还是“静止”,但这只是基于当前帧的瞬时状态。
- 无法进行动态预测:它无法真正理解物体的运动轨迹、意图和未来的动态变化。例如,它无法回答“前方那辆自行车会在下一个路口左转吗?”这类需要时序推理和预测的问题。这对于自动驾驶中复杂的博弈场景是至关重要的。
-
规划与推理能力的初步性:
- 浅层零样本规划:论文中提到的“零样本规划”能力非常初步 。模型生成的指令如“刹车并停止” 或 “继续前进”,是基于当前场景的直接反应,缺乏长远、多步骤的规划能力。
- 可解释性的幻觉:LLM生成的“解释”虽然语言流畅,但可能是一种“事后合理化”,而非对模型内部决策机制的忠实呈现。我们无法保证其生成的风险判断是真正基于视觉特征的逻辑推理,还是仅仅输出了一个听起来最合理的“答案”。
-
部署效率与实时性问题:
- 模型体量巨大:该框架使用了LLaMA-7B这样的大模型 ,加上多个复杂的组件,在自动驾驶车辆的边缘计算设备上实现实时推理(尤其是低延迟)是一个巨大的挑战。论文结尾也提到了在边缘设备上部署是未来的工作 。
-
数据生成方法的瓶颈:
- 成本与可扩展性:使用GPT-4和2D MLLMs生成数据集的方法虽然巧妙,但成本高昂且效率有限 。并且,生成数据的质量上限被所使用的2D MLLM和GPT-4的能力所限制,这可能引入偏见或错误。
Direction For Improvment
-
实现实时的多模态在线融合:
- 改进方案:修改模型架构,在推理时同时接收LiDAR BEV特征和来自相机的图像特征。可以设计一个多模态融合版的VAT,让Learnable Queries同时与BEV特征和图像特征进行交叉注意力交互,从而让模型在做决策时能“看到”交通灯颜色和路面标志。
-
引入时序建模能力:
- 改进方案:将VAT升级为时空感知变换器 (Spatio-Temporal Aware Transformer)。输入不再是单帧BEV特征
[B, C, H, W],而是一个包含过去几秒的BEV特征序列[B, T, C, H, W](T是时间步)。通过在VAT中加入时序注意力机制,让模型能够理解物体的运动历史和轨迹,从而做出更精准的判断和预测。
- 改进方案:将VAT升级为时空感知变换器 (Spatio-Temporal Aware Transformer)。输入不再是单帧BEV特征
-
深化推理与规划能力:
- 改进方案:采用**思维链(Chain-of-Thought, CoT)**微调。在训练时,不直接让模型输出最终答案,而是引导它先生成中间的推理步骤。例如:“1. 识别关键物体:前方有一辆校车。2. 分析状态:校车正在减速并闪烁黄灯。3. 推断意图:可能有学生下车。4. 结论与规划:存在潜在风险,应减速并保持安全距离。” 这能极大地增强模型的可解释性和推理的可靠性。
-
模型轻量化与蒸馏:
- 改进方案:利用知识蒸馏技术。将训练好的、庞大的LiDAR-LLM作为“教师模型”,用它生成的大量“场景-回答”对来训练一个更小的、专门为部署设计的“学生模型”(例如使用更小的LLM或更高效的架构)。
Appendix
Appendix1:一些细节问题
What are 3D geometric and physical scenes?
简单说,几何就是关于“在哪里”和“长什么样”的纯粹空间信息。
你站在一个真实的十字路口。你所看到和理解的一切,就是一个“三维几何和物理场景”。我们可以把它拆解成两个层面来看:
-
三维几何 (3D Geometry):
这可以理解为场景的 “骨架”或“数学蓝图”。它不关心一个物体“是”什么,只关心它的形状、大小、位置和方向。- 形状 (Shape): 这辆车是长方体,那棵树是圆柱体加一个不规则的球体。
- 尺寸 (Size): 这栋楼很高,那辆自行车很小。
- 位置 (Position): 车在我的正前方10米处,行人在我的左侧。
- 方向 (Orientation): 汽车正朝着东边行驶,路牌是垂直于地面的。
-
物理/物体场景 (Physical/Object Scene):
这可以理解为给场景的“骨架”赋予了“灵魂”和“意义”。它不仅知道几何信息,还能理解这些几何体分别是什么物体,以及它们之间遵循的物理规律和常识。- 物体识别 (Object Recognition): 它知道那个长方体是“汽车”,那个移动的小物体是“行人”,那片平坦的区域是“马路”。
- 物理常识 (Physical Common Sense): 它理解汽车应该在马路上行驶,而不是在墙上;人不能穿过一棵树;物体会因为重力而待在地面上,不会漂浮在空中。
- 关系理解 (Relationship Understanding): 它知道“车”和“路”的关系是“在…之上”,“行人”和“斑马线”的关系是“准备穿过”。
计算机要真正“理解”一个现实世界,就需要同时掌握这两个层面。三维几何是基础,提供了精确的空间结构;物理/物体场景则是在这个结构之上进行识别、推理和赋予意义,形成一个完整、可交互的认知。
稀疏的室外激光雷达 (LiDAR) 数据是什么?稀疏是什么意思?
首先,激光雷达 (LiDAR) 是一个传感器,通常装在自动驾驶汽车的车顶。它通过快速发射人眼看不见的激光束,然后测量激光束碰到物体后返回的时间,来精确计算出物体和传感器之间的距离。成千上万次测量后,它就能描绘出周围环境的三维形状,这个结果被称为 “点云” (Point Cloud),因为它就是由一大堆三维空间中的点组成的。
“稀疏 (Sparse)” 是点云数据最核心的特点之一,尤其是在广阔的室外。
我们可以用一个比喻来理解“稀疏”和“稠密”的区别:
- 稠密的数据 (Dense Data): 想象一张高清数码照片。它是由一个密密麻麻的像素网格组成的,每个像素点都有颜色信息,几乎没有空隙。整个画面是连续、饱满的。
- 稀疏的数据 (Sparse Data): 现在想象一下,你在一个黑暗的房间里,手里只有一个手电筒,你快速地用光束在墙上、家具上扫过。光点所照亮的地方就是你获得的信息。LiDAR的点云就像这些光点,点与点之间存在着大量的空白区域。
为什么室外LiDAR数据是稀疏的?
- 扫描限制: LiDAR发射的激光束是呈线状或特定模式扫描的,线与线之间必然有空隙。
- 距离效应: 物体离LiDAR越远,照射到它表面的激光点就越分散,点与点之间的距离越大。一个50米外的行人身上可能只有几个零星的点,你很难从这几个点直接看出这是一个“人”。
- 表面反射: 某些表面(如黑色的吸光材料、玻璃)可能不会很好地反射激光,导致数据丢失。
稀疏的室外LiDAR数据,就是一个由三维空间中离散、不连续的点组成的集合,它能大致勾勒出环境的轮廓,但点与点之间有很大空隙。这对AI来说是一个巨大的挑战,因为它必须仅凭这些零星的“证据”,去脑补和推理出物体的完整形状和身份(例如,把几个分散的点识别成一辆完整的自行车)。
将“三维室外场景认知重新表述为一个语言建模问题”
这是一个非常核心且巧妙的思路转变,我们可以分步来理解:
-
传统的做法:
过去,要让AI理解三维场景,我们会为每一个任务设计一个专门的模型。比如:- 一个模型专门用来检测场景里有哪些物体(“这是一辆车,那是一棵树”)。
- 另一个模型专门用来分割场景(把属于“路面”的点标为蓝色,属于“建筑”的点标为灰色)。
- 还有一个模型专门用来回答特定问题(“车离我多远?”)。
这些模型各司其职,但不够灵活,无法处理超出它们设计范围的新任务。
-
语言模型 (LLM) 的威力:
像GPT这样的大型语言模型,其核心能力是强大的通用推理和上下文理解能力。你给它一段文字,它可以总结、翻译、回答问题、写故事。它的能力是“通用”的,而不是为某个特定任务设计的。 -
“重新表述”的精髓——搭起桥梁:
这篇论文的核心思想是:我们能不能不把3D场景当作一堆点,而是把它当作一种特殊的“语言”,让强大的语言模型(LLM)来“阅读”和“理解”它?实现这个“重新表述”的过程大致如下:
-
第一步:翻译场景为“语言”
他们设计了一个特殊的模块(论文中提到的Position-Aware Transformer),这个模块就像一个 “翻译官”。它的任务是“阅读”那些稀疏、混乱的LiDAR三维点云,并将其中蕴含的几何形状、物体位置等信息,转换(编码)成一种LLM能够理解的数学表示(向量嵌入)。这个数学表示,就相当于把三维场景“翻译”成了一段LLM能懂的“话”。 -
第二步:用语言与场景“对话”
一旦翻译完成,LLM就接收到了这段描述场景的特殊“语言”作为上下文。然后,我们就可以用人类的自然语言来和它互动了。- 你问:“请描述一下我面前的场景。”
- LLM结合它“读到”的场景信息和自己的世界知识,生成回答:“你面前是一条街道,停着一辆蓝色汽车,右边有一个行人正在等红绿灯。”
- 你再问:“那个行人离我有多远?”
- LLM再次分析场景信息,并回答:“大约15米。”
-
这个方法不再是训练一堆“专科医生”(特定任务模型),而是聘请一位“全科王牌医生”(LLM),并为他配备了一位能将“医学影像(LiDAR点云)”解读成他能听懂的报告的“专业翻译官”。通过这种方式,AI对三维场景的理解不再是孤立的任务求解,而是变成了一种基于语言的、可进行灵活对话和深度推理的综合认知过程。这极大地提升了AI理解复杂现实世界的通用性和智能水平。
几何关系 (Geometric Relationships)
简单来说,几何关系描述的是场景中多个物体在三维空间里的相互位置、方向和尺寸关系。
如果说识别出“这是一辆车”、“这是一个行人”是认识物体的 “是什么” ,那么理解几何关系就是搞清楚它们 “怎么样” 地存在于空间中。它包含了以下几个层面:
- 距离关系 (远/近):
- 那辆卡车紧跟在这辆小轿车后面。
- 那个行人远离了马路边,站得很安全。
- 方位关系 (上/下, 左/右, 前/后):
- 交通信号灯在人行道的上方。
- 自行车停在汽车的左侧。
- 一棵树在建筑物的前面。
- 方向/姿态关系 (平行/垂直/朝向):
- 路边停放的汽车与马路牙子是平行的。
- 停止线与人行横道是垂直的。
- 两辆车相向而行。
- 尺寸关系 (大/小):
- 公交车比旁边的摩托车大得多。
- 拓扑关系 (遮挡/相交/包含):
- 一个行人被公交车站部分遮挡了。
- 建筑的轮廓与天空的边界相交。
为什么这在稀疏的LiDAR数据中特别复杂?
因为LiDAR数据是稀疏的点,AI模型无法“看”到完整的、连续的物体表面。它必须根据零散的点,先脑补出物体的完整形状,然后再去推理这些不完整的物体之间的复杂几何关系。比如,要判断一辆车是否被树遮挡,AI需要先从几个点推断出“这是一辆车”,从另外几个点推断出“这是一棵树”,然后再根据它们的空间位置,推理出“树在车的前面,所以产生了遮挡”。这个过程非常具有挑战性。
三维体素特征 (3D Voxel Feature)
三维体素特征是一种将原始、散乱的3D点云,整理成规整的“小立方块”网格,并为每个“小立方块”计算出一个浓缩了内部点云信息的数值描述的方法。这是AI高效理解三维空间的关键一步。
为了理解“三维体素”,可以先从大家熟悉的“二维像素”开始类比
- 像素 (Pixel): 是“图像元素”(Picture Element)的缩写。一张2D图片是由一个像素网格组成的,每个像素(小方格)都有一个颜色值。
- 体素 (Voxel): 是“体积元素”(Volume Element)的缩写。它是像素的3D版本。你可以把它想象成一个 三维空间里的小立方块。
那么,“三维体素特征”就是:
-
体素化 (Voxelization): 首先,AI模型会将整个LiDAR点云(它本来是无序、散乱的点)用一个巨大的三维网格笼罩起来。这样,每个原始的LiDAR点就都掉进了某一个小立方块(体素)里。
-
提取特征 (Feature Extraction): 接下来,模型会分析每个小立方块(体素)里包含了哪些点,并为这个小立方块计算出一个概括性的描述,这个描述就是“特征”。这个特征通常是一串数字(一个向量),它浓缩了以下信息:
- 这个体素里点的密度(点是多还是少)。
- 这些点的平均位置。
- 这些点在空间中的分布形态。
- 以及模型通过学习得到的、有助于识别物体的更抽象的信息。
为什么要这么做?
原始的LiDAR点云是杂乱无章的,处理起来非常不方便。通过“体素化”这个步骤,AI把一堆乱糟糟的点,变成了一个像乐高积木一样整齐、规整的三维网格。这样做的好处是,可以很方便地使用高效的算法(比如三维卷积神经网络)来系统性地分析整个场景,就像处理2D图片一样。
第一步:最终目标是什么?
AI模型有一个负责“看”三维世界的“视觉大脑”(LiDAR编码器),和一个负责“思考和说”的“语言大脑”(LLM)。PAT模块就是连接这两个大脑的“神经中枢”。
它的核心目标是翻译。它必须把“视觉大脑”看到的、由一堆三维点构成的、冰冷的几何地图(BEV特征),翻译成“语言大脑”能够理解的、富有意义的“语言”。只有翻译得好,“语言大脑”才能根据看到的景象,准确地回答你的问题或生成描述。
第二步:基础设计 - “20个问题”游戏 (交叉注意力)
那么,这个“翻译”过程是怎么进行的呢?PAT用了一种叫做 交叉注意力(Cross-Attention) 的机制。
我们可以把它比作一个高效的 “20个问题”游戏。
-
提问者 (可学习的查询 - Learnable Queries):
PAT并不是漫无目的地看整个3D地图。它初始化了一组(文中说是576个)“可学习的查询”。你可以把这576个查询想象成576个 “标准问题模板”。这些问题不是人写的,而是模型在训练中自己“学会”的、最高效的问题。比如,问题1号可能学会了专门去寻找“平面或地面”,问题2号可能学会了专门寻找“垂直的、柱状的物体”,问题3号专门寻找“运动的物体”等等。 -
回答者 (3D地图 - BEV特征):
3D地图(BEV特征)包含了场景中所有的视觉信息,它在这里扮演“回答者”的角色。 -
“提问-回答”过程 (交叉注意力):
这576个“问题”会同时“广播”给整个3D地图。地图上的每个部分会根据自己的信息,对每个问题给出“回应”。交叉注意力机制会计算每个“问题”和地图上每个“信息点”的 相关度,然后把最相关的视觉信息“抓取”过来,作为对这个问题的“回答”。
结果: 游戏结束后,PAT就得到了576个“带答案的问题”。这576组答案汇集在一起,就形成了一份对整个3D场景的、非常精炼且全面的 “视觉报告”。这份报告随后被送给“语言大脑”(LLM)进行最终的思考和理解。
第三步:核心创新 - “给地图分区并贴上地址标签” (BEV位置嵌入)
上面的基础设计虽然很好,但遇到了一个大麻烦:它没有方向感!
核心问题: 对于自动驾驶来说,“车在我正前方”和“车在我正后方”是天壤之别。但对于基础的PAT模型来说,它只知道场景里“有一辆车”,但可能不清楚这辆车相对于“我”(自车 Ego Car)的具体方位。它可能会混淆“左后方”和“正后方”。
解决方案:BEV位置嵌入 (BEV Position Embeddings)。
这个名字很吓人,但思想很直观。它的本质就是:在分析地图前,先给地图划分好区域,并给每个区域贴上一个独一无二的“地址标签”。
我们可以把它想象成一个剧院舞台:
-
划分区域 (Divide Views):
首先,以自车为中心,把周围360度的鸟瞰图(BEV)空间划分成几个扇区。就像把舞台划分为“上场门”、“下场门”、“前舞台”、“后舞台”一样。论文中提到,nuScenes数据集把它划分为6个区域:前、前右、后右、后、后左、前左。 -
制作“地址标签” (Position Embeddings):
接下来,为这6个区域分别制作一个独一无二的数字“标签”。这个数字标签就是“位置嵌入”。比如,标签A代表“前左区域”,标签B代表“正前区域”,以此类推。这个标签本身就蕴含了“方向”的信息。 -
“盖章”或“注入” (Inject Embeddings):
这是最关键的一步。在PAT进行“20个问题”游戏之前,它会执行一个“盖章”操作:- 给地图盖章: 所有来自“前左”区域的3D视觉特征,全部被盖上“前左”的地址标签A。
- 给问题盖章: 那576个“问题模板”(查询),也被盖上“前左”的地址标签A。
这会发生什么? 现在,当模型处理一个指令,比如“请描述一下 前左方 的卡车”时:
- 模型的语言大脑(LLM)看到“前左方”这个词。
- PAT的查询(问题)因为被盖上了“前左”的标签,所以它们会优先、重点关注那些同样被盖了“前左”标签的视觉特征。
- 它就建立了一个强绑定:语言中的“前左方”这个词,精确地对应到了3D空间中那个被标记为“前左”的扇区里的视觉信息。
模型不再会含糊其辞。因为它通过这种“贴标签”的方式,精确地学会了语言描述(如“左后方”)和物理空间方位(BEV地图上的扇区)之间的一一对应关系。这就彻底解决了方向模糊的问题,使得模型能够生成和理解带有精确空间方位描述的语言。这个设计非常精妙。它通过 “提问-回答(交叉注意力)” 的机制来理解场景内容,又通过 “ 给地图分区贴标签(位置嵌入)” 的方式来理解场景中物体的精确方位。两者结合,最终让AI模型既能“看懂”物体,又能“分清”方向。
576个查询都贴的一样的位置标签吗?
是的,在处理一个特定视图的任务时,所有576个查询确实都会被贴上同一个位置标签。
为什么?
因为在这个特定的学习瞬间,模型的目标是集中全部“注意力”去理解一个特定的方向。
回到我们的“20个问题”比喻。假设模型正在学习的句子是:“前左方有一辆自行车”。
- 指令: 系统的指令是:“现在,我们要学习‘前左方’这个概念”。
- 行动: 为了达成这个目标,系统会把那576个“问题模板”(查询)全部盖上“前左方”这个地址标签。
- 效果: 这相当于告诉整个“提问团队”:“各位,现在我们所有的提问都只针对‘前左方’这个区域,请大家集中火力,把这个区域给我分析透彻!”
这确保了模型在这一刻的全部信息提取能力都聚焦于一个方向,从而建立最强、最无歧义的关联。
那些被盖上其他标签的区域特征呢?
在刚才那个“前左方”的例子中,那些对应着“正前方”、“正后方”等其他区域的特征,会怎么样呢?
答案是:在那个特定的学习瞬间,其他区域的特征会被“暂时忽略”或者说“不被关注”。
我们可以用一个聚光灯的比喻来理解整个过程:
场景: 整个360度的鸟瞰图(BEV)就像一个黑暗的圆形舞台。那576个查询就像576位坐在观众席的“分析师”。
-
聚焦阶段(学习“前左方”)
- 当学习“前左方有一辆自行车”时,系统会打一束强力聚光灯,只照亮舞台上“前左方”那个扇区。舞台的其他部分(正前方、后方等)仍然处在黑暗中。
- 同时,系统告诉所有576位分析师(查询):“请大家统一朝向,只看聚光灯照亮的那个区域,然后告诉我你们看到了什么。”(这就是给所有查询贴上“前左方”标签的意义)。
- 于是,分析师们完全忽略了黑暗中的其他区域,集中全部精力分析“前左方”区域内的视觉特征,并最终把分析报告(即“视觉报告”)和语言中的“前左方”、“自行车”这些词关联起来。
-
切换焦点
- 下一个学习样本可能是“正后方停着一辆卡车”。
- 这时,聚光灯会“啪”地一下关掉前左方的,然后移动到舞台的“正后方”区域并照亮它。
- 系统再次对576位分析师下达指令:“好了,现在请大家全部转向,集中看‘正后方’这个新照亮的区域。”(即把所有查询的标签换成“正后方”)。
这种“用聚光灯一次只照亮一个区域”的训练方式,主要用在论文提到的 “初始跨模态对齐阶段”。这是一个打基础的“新兵训练营”阶段,目的就是让模型毫无歧义地学会空间方位词汇(前、后、左、右等)和真实物理空间的精确对应关系。 当模型从“新兵训练营”毕业后,在执行更复杂的、需要理解整个 全景场景 的任务时,它就可以 同时使用所有的位置标签(相当于把舞台上所有的灯都打开),因为它已经深刻理解了每个区域的方位含义,能够综合分析整个舞台的复杂情况了。
PAT模块中“左前方”位置编码的注入流程详解
这个流程的目标是将代表“左前方”这个方位信息的一个数学向量(位置编码),融入到模型的视觉特征和查询向量中,从而让模型在后续处理时“意识”到它需要关注左前方的区域。
Pipeline 拆解:
第一步:输入与初始特征提取
- 输入: 原始的LiDAR点云数据,论文中表示为 L ∈ R n × 3 L\in\mathbb{R}^{n\times3} L∈Rn×3,代表n个点,每个点有(x,y,z)三个坐标 。
- 处理: 点云数据首先被送入一个3D编码器(如VoxelNet) ,将其转换成3D体素特征 。
- 输出 (BEV Feature): 3D体素特征在垂直方向(z轴)上被“压平”(Flatten),生成鸟瞰图(Bird’s-Eye View, BEV)特征 。
- 数据结构与维度: 这一步的输出是一个三维张量(Tensor),表示为 F ∈ R 512 × 180 × 180 \mathcal{F}\in\mathbb{R}^{512\times180\times180} F∈R512×180×180 。
- 维度含义:
512: 特征通道数(Channel),可以理解为描述每个位置点的特征向量的维度。180x180: BEV栅格的空间分辨率。这就像一张180x180像素的鸟瞰图,每个“像素”格点都由一个512维的向量来描述其特征。
第二步:BEV位置编码的定义与选择
- 定义: 作者首先构建了一个BEV位置嵌入矩阵,表示为 B p ∈ R c × v \mathcal{B}_{p}\in\mathbb{R}^{c\times v} Bp∈Rc×v 。
- 数据结构与维度: 这是一个二维矩阵。
- 维度含义:
c: 嵌入维度 。这个维度需要和BEV特征的通道数一致,所以c=512。v: BEV场景中的不同方位(视角)数量 。对于nuScenes数据集,作者将其分为6个视角(前、前右、前左、后、后右、后左),所以v=6。
- 矩阵内容: 这个 512 × 6 512 \times 6 512×6 的矩阵是可学习的参数 。它的每一列都是一个512维的向量,分别代表了六个方位之一。例如,第1列代表“前方”,第2列代表“前右”,第3列代表“前左”,以此类推。
- 选择: 当处理一个与“左前方”相关的任务时(例如,问句是“描述左前方的交通状况”),模型会从这个 512 × 6 512 \times 6 512×6 的矩阵中,选择出代表“左前方”的那一列。
- 输出: 一个代表“左前方”的512维向量。我们称之为 B p , frontleft ∈ R 512 × 1 \mathcal{B}_{p, \text{frontleft}} \in \mathbb{R}^{512 \times 1} Bp,frontleft∈R512×1 。
第三步:将位置编码注入BEV特征
- 输入:
- 原始的BEV特征图 F ∈ R 512 × 180 × 180 \mathcal{F} \in \mathbb{R}^{512 \times 180 \times 180} F∈R512×180×180。
- “左前方”位置编码 B p , frontleft ∈ R 512 × 1 \mathcal{B}_{p, \text{frontleft}} \in \mathbb{R}^{512 \times 1} Bp,frontleft∈R512×1。
- 处理: 论文描述为“将‘左前方’部分的位置嵌入注入到BEV特征的‘左前方’部分” 。
- 具体实现推测: 这意味着180x180的栅格空间被预先划分了区域。例如,所有对应于车辆左前方的栅格点被识别出来。然后,将 B p , frontleft \mathcal{B}_{p, \text{frontleft}} Bp,frontleft 这个512维的向量,通过加法操作,广播(broadcast)并添加到这些区域内所有栅格点的512维特征向量上。
- 举例: 假设 (i, j) 是180x180栅格中属于左前方区域的一个点,其原始特征是 F i , j ∈ R 512 \mathcal{F}_{i,j} \in \mathbb{R}^{512} Fi,j∈R512。注入操作就是 F i , j ′ = F i , j + B p , frontleft \mathcal{F}'_{i,j} = \mathcal{F}_{i,j} + \mathcal{B}_{p, \text{frontleft}} Fi,j′=Fi,j+Bp,frontleft。对于不属于左前方的点,其特征保持不变。
- 输出: 一个被注入了方位信息的、新的BEV特征图 F ′ ∈ R 512 × 180 × 180 \mathcal{F}' \in \mathbb{R}^{512 \times 180 \times 180} F′∈R512×180×180。
第四步:将位置编码注入可学习查询(Queries)
- 输入:
- 一组可学习的查询向量(Learnable Queries)。其作用是作为信息“探针”,去BEV特征中提取信息。论文中设定了 K=576 个查询 。每个查询的维度与LLM的词嵌入维度一致,为768。所以查询矩阵为 Q ∈ R 576 × 768 Q \in \mathbb{R}^{576 \times 768} Q∈R576×768。
- “左前方”位置编码 B p , frontleft ∈ R 512 × 1 \mathcal{B}_{p, \text{frontleft}} \in \mathbb{R}^{512 \times 1} Bp,frontleft∈R512×1。
- 处理: 论文描述为“注入到整个查询集合中” 。论文并未说明维度不匹配(512 vs 768)时如何注入。一种常见的做法是先通过一个线性层将512维的位置编码映射到768维,然后再与所有的576个查询向量相加。但由于原文未提及,我们只能明确其意图是让所有查询都携带上“我要关注左前方”的信号。
- 输出: 一组被注入了方位信息的新查询矩阵 Q ′ ∈ R 576 × 768 Q' \in \mathbb{R}^{576 \times 768} Q′∈R576×768。
第五步:PAT模块处理与最终输出
- 输入:
- 注入方位信息后的BEV特征 F ′ \mathcal{F}' F′ (作为Cross-Attention的Key和Value) 。
- 注入方位信息后的查询 Q ′ Q' Q′ (作为Cross-Attention的Query) 。
- 处理: 在PAT模块内部,查询 Q ′ Q' Q′ 与BEV特征 F ′ \mathcal{F}' F′ 进行交叉注意力(Cross Attention)等一系列计算 。
- 输出: K个(即576个)编码了视觉信息的向量 。这些向量随后通过一个MLP层 和一个适配器(Adapter) ,最终作为“软提示”注入到大语言模型(LLM)中,引导LLM生成关于左前方的描述 。
LiDAR深度信息如何投影到2D平面?
论文在介绍基线(Baselines)模型时提到:“…我们将LiDAR的深度信息投影到2D平面上,并使用当前最先进的(SOTA)2D MLLM方法…” 。
然而,论文在此处仅陈述了这一操作,并未提供将LiDAR点云投影到2D平面的具体技术方法或算法细节。这在学术论文中是常见的,当描述对基线模型的修改时,如果不是作者的核心贡献,可能会描述得比较简略。
通常,这类投影方法有多种,例如:
- 前向视图投影(Front View Projection):将3D点云投影到一个垂直平面上,类似于从车辆前方看出去的视角,生成一张深度图。
- 鸟瞰图投影(BEV Projection):即将点云从上往下投影到一个水平平面上,这也是本文作者自己模型中使用的视图。
- 球面投影(Spherical Projection):将3D点云投影到一个球面上,可以生成一个360°的全景图。
作者可能采用了其中一种或几种方式为2D模型准备输入,但具体是哪一种以及实现的细节(如分辨率、归一化方法等),原文没有进一步说明。
BEV下的mIoU是什么意思?
BEV mIoU 是指在鸟瞰图(Bird’s-Eye View)视角下计算的平均交并比(mean Intersection over Union)。
- IoU (Intersection over Union):交并比,是衡量两个边界框重合度的标准指标。计算方法是两个边界框的交集面积除以它们的并集面积。其值范围在0到1之间,1代表完全重合,0代表毫无交集。
- BEV (Bird’s-Eye View):鸟瞰图。在自动驾驶场景中,这意味着将所有3D物体(如车辆、行人)的3D边界框都投影到地面的2D水平面上,变成2D的矩形框。
- mIoU (mean IoU):平均交并比。当场景中有多个物体类别时,会先计算每个类别的平均IoU,然后再对所有类别的IoU求一个平均值。
因此,在本文的3D定位(3D Grounding)任务中 ,模型需要预测出物体的3D边界框。为了评估预测的准确性,作者将模型预测的3D框和真实的3D框都投影到鸟瞰图上,然后计算这些2D框的mIoU 。这么做是因为在自动驾驶中,物体在水平面上的位置和朝向(即BEV视角下的信息)通常是最关键的。
BLEU-4具体是如何计算的?
论文中提到使用 BLEU (Papineni et al. 2002) 作为评估语言生成任务的指标之一 。BLEU-4 特指在计算时,会同时考虑1-gram, 2-gram, 3-gram, 和 4-gram 的匹配精度。论文本身没有解释其计算方法,以下是该标准指标的计算流程,并附上一个实例。
BLEU的核心思想是衡量模型生成的句子(候选句,Candidate)与人类给出的标准答案(参考句,Reference)之间的相似度。
计算步骤:
-
计算n-gram精度 ( p n p_n pn):
- n-gram是指句子中连续的n个词。例如,“我爱北京天安门”的2-gram包括“我爱”、“爱北”、“北京”、“京天”、“天安”、“安门”。
- 对于每个n-gram(从1到4),计算它在候选句中出现的次数,但这个次数不能超过它在任意单个参考句中出现的最大次数。这个过程叫做“裁剪计数”(Clipped Count)。
- p n p_n pn 的计算公式为:
p n = ∑ n-gram ∈ Cand Count clipped ( n-gram ) ∑ n-gram ∈ Cand Count ( n-gram ) p_n = \frac{\sum_{\text{n-gram} \in \text{Cand}} \text{Count}_{\text{clipped}}(\text{n-gram})}{\sum_{\text{n-gram} \in \text{Cand}} \text{Count}(\text{n-gram})} pn=∑n-gram∈CandCount(n-gram)∑n-gram∈CandCountclipped(n-gram)
-
计算简短惩罚因子(Brevity Penalty, BP):
- 如果候选句比参考句短很多,它可能会侥幸获得很高的n-gram精度。BP就是为了惩罚这种情况。
- 计算公式为:
B P = { 1 if c > r e ( 1 − r / c ) if c ≤ r BP = \begin{cases} 1 & \text{if } c > r \\ e^{(1 - r/c)} & \text{if } c \le r \end{cases} BP={1e(1−r/c)if c>rif c≤r
其中c是候选句的长度,r是与候选句长度最接近的参考句的长度。
-
计算最终BLEU-4得分:
- BLEU-4得分是 BP 乘以1到4-gram精度的几何平均值。
- 公式为:
BLEU-4 = B P × exp ( ∑ n = 1 4 w n log p n ) \text{BLEU-4} = BP \times \exp\left(\sum_{n=1}^{4} w_n \log p_n\right) BLEU-4=BP×exp(n=1∑4wnlogpn)
通常权重 w n w_n wn 取均匀值,即都为1/4=0.25。所以公式简化为:
BLEU-4 = B P × ( p 1 × p 2 × p 3 × p 4 ) 1 / 4 \text{BLEU-4} = BP \times (p_1 \times p_2 \times p_3 \times p_4)^{1/4} BLEU-4=BP×(p1×p2×p3×p4)1/4
举个实际例子:
- 候选句 (Candidate): “the the cat is on the mat” (长度 c = 7)
- 参考句1 (Reference 1): “the cat is on the mat” (长度 r1 = 6)
- 参考句2 (Reference 2): “there is a cat on the mat” (长度 r2 = 7)
计算过程:
-
p 1 p_1 p1 (1-gram精度):
- 候选句1-grams: the(2), cat(1), is(1), on(1), the(1), mat(1) -> 实际是 the(2)
- 裁剪计数: "the"在候选句出现2次,在Ref1出现2次,在Ref2出现1次,所以最大出现次数是2,裁剪后计数为2。"cat"在候选句出现1次,Ref1和Ref2中都出现1次,裁剪后为1。其他词类似。
- Clipped Counts: the(2), cat(1), is(1), on(1), mat(1)。总和 = 2+1+1+1+1 = 6。
- p 1 = 6 / 7 p_1 = 6 / 7 p1=6/7
-
p 2 p_2 p2 (2-gram精度):
- 候选句2-grams: the the(1), the cat(1), cat is(1), is on(1), on the(1), the mat(1)
- 裁剪计数: “the the” 在参考句中未出现,计0。"the cat"出现1次,计1。 "cat is"出现1次,计1。"is on"出现1次,计1。"on the"出现1次,计1。"the mat"出现1次,计1。
- Clipped Counts 总和 = 0+1+1+1+1+1 = 5。
- p 2 = 5 / 6 p_2 = 5 / 6 p2=5/6
-
p 3 p_3 p3 (3-gram精度):
- Clipped Counts 总和 = 0+1+1+1+1 = 4。
- p 3 = 4 / 5 p_3 = 4 / 5 p3=4/5
-
p 4 p_4 p4 (4-gram精度):
- Clipped Counts 总和 = 0+1+1+1 = 3。
- p 4 = 3 / 4 p_4 = 3 / 4 p4=3/4
-
简短惩罚因子 (BP):
- 候选句长度 c = 7。
- 参考句长度 r1 = 6, r2 = 7。与c最接近的是 r2=7。(如果候选句更短,比如长度5,最接近的参考句是r1=6)。
- 因为 c (7) 不小于 r (7),所以 BP = 1。
-
最终BLEU-4得分:
- BLEU-4 = 1 × ( 6 / 7 × 5 / 6 × 4 / 5 × 3 / 4 ) 1 / 4 = ( 3 / 7 ) 1 / 4 ≈ 0.808 \text{BLEU-4} = 1 \times (6/7 \times 5/6 \times 4/5 \times 3/4)^{1/4} = (3/7)^{1/4} \approx 0.808 BLEU-4=1×(6/7×5/6×4/5×3/4)1/4=(3/7)1/4≈0.808
这个例子展示了BLEU-4如何通过匹配不同长度的词组并惩罚过短的句子,来综合评估生成文本的质量。
Appendix2:LiDAR-LLM方法全流程
假设我们有一辆自动驾驶汽车,它正行驶在一个城市十字路口。我们想让系统回答一个比较复杂的问题。
初始输入:
- LiDAR数据 (
lidar_points): 汽车顶部的LiDAR传感器捕获的当前时刻的原始点云数据。这是一个包含数万个点的集合,每个点有三维坐标 (x, y, z) 和反射强度i。- 数据结构: 一个列表或Numpy数组,
shape: [N, 4],其中 N 是点的数量(例如 120,000),4 代表(x, y, z, i)。
- 数据结构: 一个列表或Numpy数组,
- 文本指令 (
text_prompt): 我们向系统提出的问题。- 问题内容:
"请描述一下左前方的交通状况,并判断是否存在风险?"
- 问题内容:
现在,我们来看LiDAR-LLM是如何处理这个请求的:
第 1 步: LiDAR特征提取 (冻结的视觉骨干)
首先,系统需要将原始、稀疏的点云“翻译”成一种更结构化、更稠密的格式,以便后续模块处理。
- 操作: 原始点云
lidar_points被送入一个预训练好且参数冻结的LiDAR编码器(骨干网络),例如VoxelNet或CenterPoint 。 - 细节:
- 体素化 (Voxelization): 将不规则的点云空间划分为一个个微小的3D立方体(体素),并计算每个体素内的点云特征。
- 3D卷积: 使用3D卷积网络处理这些体素,提取深层的3D几何特征。
- BEV投影: 考虑到计算效率和后续处理的便利性,模型会将3D特征沿着垂直方向(Z轴)进行压缩,生成一个2D的鸟瞰图(Bird’s-Eye View, BEV)特征图 。你可以把它想象成一张从车顶正上方往下看的高级“地图”,每个像素都包含了丰富的3D信息。
- 输出: BEV特征图 (
bev_features)- 数据结构: 一个PyTorch张量。
- Shape:
[B, C, H, W],其中B是批大小(这里是1),C是特征通道数(例如256),H和W是BEV地图的高度和宽度(例如200x200)。 - 含义: 这张特征图
bev_features就是LiDAR场景的“视觉摘要”。
第 2 步: 视角感知变换器(VAT) (微调的核心桥梁)
现在我们有了一张包含所有信息的BEV“地图”,但LLM不知道该看这张地图的哪个部分,也不知道如何“阅读”它。VAT的作用就是根据问题,智能地从地图中提取相关信息。
- 操作: VAT模块接收BEV特征图,并根据文本指令中的方位信息,输出一组视觉向量。
- 细节:
- 解析视角: 系统首先从文本指令
"请描述一下左前方..."中解析出关键方位词——“左前方 (front-left)”。 - 注入视角位置嵌入 (VPE): 这是VAT的核心创新。VAT内部有6个可学习的、分别代表6个方位(前、后、左、右、左前、右前)的位置嵌入向量 。因为问题是关于“左前方”,模型会:
- 取出“左前方”专属的VPE 。
- 将这个VPE“添加”到BEV特征图中对应“左前方”的区域,以及VAT内部的可学习查询向量(Learnable Queries)中 。这就像给模型一个高光笔,告诉它:“嘿,重点看这个区域!”
- 信息提取 (Cross-Attention): VAT内部有一组固定的、可学习的查询向量(
K=576个) 。这些“加持”了方位信息的查询向量会通过交叉注意力机制去“扫描”同样被注入了方位信息的BEV特征图 。这个过程就像是576个小侦探,带着“去左前方搜集情报”的命令,去BEV地图上搜集所有相关细节。
- 解析视角: 系统首先从文本指令
- 输出: 视觉软提示 (
visual_soft_prompt)- 数据结构: 一个PyTorch张量。
- Shape:
[B, K, D_llm],其中B=1,K=576,D_llm是LLM的词嵌入维度(例如 LLaMA-7B的4096)。 - 含义: 这
576个向量已经“吸收”了LiDAR场景中“左前方”区域的所有关键视觉信息。它不再是原始的像素或点,而是LLM可以理解的、高度浓缩的“视觉概念”。
第 3 步: LLM的输入准备与推理 (冻结的语言大脑)
现在我们有了视觉信息和文本问题,需要把它们组合起来喂给LLM。
- 操作: 将视觉软提示和文本指令的词嵌入进行拼接,形成LLM的最终输入。
- 细节:
- 文本编码: 原始文本指令
"请描述一下..."被LLM的Tokenizer转换成一串词嵌入向量 (text_embeddings) 。 - 拼接: 将上一步得到的
visual_soft_prompt(576个向量)和这一步的text_embeddings(比如15个向量)在序列维度上拼接起来 。
- 文本编码: 原始文本指令
- 输出: 组合嵌入 (
combined_embeddings)- 数据结构: 一个PyTorch张量。
- Shape:
[B, K + L, D_llm],其中B=1,K=576,L是文本指令的长度(例如15),D_llm是嵌入维度。 - 含义: 这是LLM的最终输入。序列的前
576个位置是视觉信息,后面15个位置是文本问题。
第 4 步: 生成最终回答
- 操作: 冻结的LLM接收
combined_embeddings,并自回归地生成回答。 - 细节: LLM在推理时,会同时关注视觉部分(它知道左前方有一辆车和一个人)和文本部分(它知道问题是“描述状况”和“判断风险”)。通过其强大的常识和推理能力(这些能力在预训练中已经具备,并通过三阶段微调被激活),它会将视觉信息组织成连贯的语言。
- 输出: 最终回答文本 (
response_text)- 内容:
"左前方有一辆卡车正在转弯,同时路边有一位行人。卡车存在内轮差,可能对行人造成风险。"
- 内容:
这个过程之所以能成功,离不开论文提出的三阶段训练:
- 字幕生成阶段教会了模型如何用语言描述基本的3D场景。
- 目标定位阶段教会了模型识别“卡车”、“行人”等具体物体并理解其空间位置。
- 高阶指令微调则进一步打磨了模型根据复杂指令进行推理和判断风险的能力。
为了更清晰地展示上述流程,以下是带注释的PyTorch伪代码。
import torch
import torch.nn as nn
# 假设所有模型组件都已定义好
from some_lib import LidarEncoder, ViewAwareTransformer, LLaMA, LLaMATokenizer, MLPProjector
class LiDAR_LLM(nn.Module):
"""
LiDAR-LLM 模型的完整流程伪代码实现。
"""
def __init__(self, llm_config):
super().__init__()
# --- 1. 初始化模型组件 ---
# 冻结的LiDAR编码器,用于从点云提取BEV特征
self.lidar_encoder = LidarEncoder()
self.lidar_encoder.eval() # 设置为评估模式
for param in self.lidar_encoder.parameters():
param.requires_grad = False # 冻结参数
# 可微调的视角感知变换器 (VAT)
self.view_aware_transformer = ViewAwareTransformer(
num_queries=576, # K=576, 可学习查询向量的数量
num_views=6 # 6个预设的视角
)
# 冻结的大语言模型 (LLM) 和其分词器
self.llm = LLaMA(config=llm_config)
self.llm_tokenizer = LLaMATokenizer.from_pretrained(llm_config.name)
self.llm.eval()
for param in self.llm.parameters():
param.requires_grad = False # 冻结LLM主体参数
# 在LLM中注入可微调的Adapter层 (这里为概念展示,实际实现更复杂)
# 实际中会使用类似LoRA的库来注入adapter
self.llm.add_adapter(lora_config)
# 可微调的MLP投影层,用于对齐VAT输出和LLM嵌入维度
self.mlp_projector = MLPProjector(
input_dim=self.view_aware_transformer.output_dim,
output_dim=self.llm.config.hidden_size # D_llm
)
def forward(self, lidar_points, text_prompt):
"""
模型的完整前向传播流程。
Args:
lidar_points (torch.Tensor): 原始LiDAR点云。
- Shape: [B, N, 4] (B:批大小, N:点数, 4 for x,y,z,i)
text_prompt (list[str]): 输入的文本指令列表。
- e.g., ["请描述一下左前方的交通状况..."]
Returns:
str: LLM生成的回答文本。
"""
# --- 步骤 1: LiDAR特征提取 ---
# 输入: [B, N, 4]
# 输出: bev_features, Shape: [B, C, H, W] (e.g., [1, 256, 200, 200])
with torch.no_grad(): # 确保冻结的部分不计算梯度
bev_features = self.lidar_encoder(lidar_points)
# --- 步骤 2: 视角感知变换器 (VAT) ---
# 从文本中解析出视角信息,这是VAT的关键输入之一
# 真实实现会更复杂,这里仅为示意
view_info = self.parse_view_from_prompt(text_prompt[0]) # e.g., 'frontleft'
# VAT接收BEV特征和视角信息,输出视觉软提示
# 输入: bev_features [B, C, H, W], view_info (str)
# 输出: visual_queries, Shape: [B, K, D_vat] (e.g., [1, 576, 768])
visual_queries = self.view_aware_transformer(bev_features, view_info)
# --- 步骤 3: 准备LLM的输入 ---
# 3.1 将VAT输出的视觉向量投影到LLM的词嵌入空间
# 输入: visual_queries [B, K, D_vat]
# 输出: visual_soft_prompt, Shape: [B, K, D_llm] (e.g., [1, 576, 4096])
visual_soft_prompt = self.mlp_projector(visual_queries)
# 3.2 将文本指令分词并转换为词嵌入
# 输出: token_ids, e.g., {'input_ids': tensor([[...]]), 'attention_mask': tensor([[...]])}
token_ids = self.llm_tokenizer(text_prompt, return_tensors="pt", padding=True).to(bev_features.device)
# 输出: text_embeddings, Shape: [B, L, D_llm] (L是文本分词后的长度)
text_embeddings = self.llm.get_input_embeddings()(token_ids.input_ids)
# 3.3 拼接视觉和文本嵌入,形成最终输入
# 维度: [B, K, D_llm] + [B, L, D_llm] -> [B, K+L, D_llm]
combined_embeddings = torch.cat([visual_soft_prompt, text_embeddings], dim=1)
combined_attention_mask = torch.cat([
torch.ones(visual_soft_prompt.shape[:2], device=bev_features.device),
token_ids.attention_mask
], dim=1)
# --- 步骤 4: LLM生成回答 ---
# LLM主体被冻结,但内部的Adapter层是可训练的
# generate函数会调用模型内部的forward pass
output_ids = self.llm.generate(
inputs_embeds=combined_embeddings,
attention_mask=combined_attention_mask,
max_new_tokens=100 # 设置最大生成长度
)
# 将生成的token ids解码成可读的文本
response_text = self.llm_tokenizer.batch_decode(output_ids, skip_special_tokens=True)
return response_text[0]
def parse_view_from_prompt(self, prompt: str) -> str:
# 简化的视角解析函数
if "左前" in prompt: return "frontleft"
if "右前" in prompt: return "front_right"
if "前" in prompt: return "front"
# ... 其他视角
return "all" # 如果没有指定,则为全景
# --- 运行示例 ---
if __name__ == '__main__':
# 1. 实例化模型
# 假设有预设的LLaMA配置
llm_config = {"name": "llama-7b", "hidden_size": 4096}
model = LiDAR_LLM(llm_config)
# 仅训练需要微调的参数
# for name, param in model.named_parameters():
# if param.requires_grad:
# print(f"Training parameter: {name}")
# 2. 准备输入数据
# 伪造一个LiDAR点云输入
dummy_lidar_points = torch.randn(1, 120000, 4) # [B, N, 4]
# 输入的文本问题
question = "请描述一下左前方的交通状况,并判断是否存在风险?"
# 3. 执行推理
model.eval() # 切换到评估模式
with torch.no_grad():
generated_answer = model(dummy_lidar_points, [question])
# 4. 打印结果
print(f"问题: {question}")
print(f"LiDAR-LLM 回答: {generated_answer}")
更多推荐


所有评论(0)