ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

三维检测与语义理解学习路线:从点云、体素到多模态融合

三维检测与语义理解学习路线:从点云、体素到多模态融合

1. 学习路线怎么规划,才能不走弯路

先说点实在的。三维检测和三维语义理解这几年在学术圈和工业界的曝光度都很高,很多刚入门的朋友看到满屏的论文和代码仓库,第一反应往往是:我该从哪里开始?

这个问题我也纠结过很久。刚开始学的时候,我犯过的最大错误就是把时间大量花在啃数学推导上。不是说数学不重要,而是对于刚接触这个方向的人来说,视觉直觉和任务感知同样关键。你如果脑子里不能想象一个点云长什么样、一个体素栅格怎么划分,那你去看那些复杂的几何公式,很难建立真实的联系。

我自己的建议是,把学习分成四段来走,每段都有明确的目标和产出:

  1. 基础感知阶段:搞清楚三维数据格式,理解任务定义,建立直观感受。

  2. 经典方法阶段:熟悉最早期的手工特征方法,了解问题是怎么被解决的。

  3. 深度学习方法阶段:掌握主流检测和分割网络的核心思想,特别是基于点、体素、多视图这三条技术路线。

  4. 扩展应用阶段:尝试跨模态融合、开放词汇理解、统一大模型等前沿方向,把这个领域跟更广泛的认知任务结合起来。

这个路线的设计逻辑很简单:先建立对任务的感知,再掌握工具和思想,最后再谈创新和应用。很多人一上来就猛补Transformer和扩散模型,结果连最基础的FPS(最远点采样)都没搞明白,这就是典型的顺序错误。

1.1 从任务定义开始建立感知

三维检测,目标是在三维空间中找到物体。它输出的是物体的类别和三维包围框,也就是位置、大小、朝向。常用的表达方式有axis-aligned bounding box和oriented bounding box,区分它们其实不难:一个是不考虑旋转的包裹框,另一个是带旋转角度的紧贴框。在自动驾驶场景中,朝向信息几乎不可省略,所以才会有那么多论文专门研究角度回归这个问题。

三维语义理解就更广了。它不只是检测和分割,还包括场景图生成、物体关系推理、细粒度几何理解等等。你可以把它理解成:检测是回答“那里有什么、在哪里”,而语义理解是想回答“这个场景到底在发生什么、物体之间的关系是什么”。

从工程角度看,三维检测和语义理解又有很多共用的底层技术。比如特征提取骨干网络、数据增强策略、评估指标这些,都是可以在两个任务之间迁移的。所以我的建议是:不要把它们当成两个孤立方向去学,而是当成一个立体化的知识结构去搭。

1.2 数据与评估标准先搞懂

有一个常被忽视的环节是数据和评估标准。很多新手一篇篇刷论文,却连数据集有哪些划分、指标怎么计算都没看过原始文档。这会导致一个很尴尬的局面:论文里的数字你都能看到,但不知道它们代表了什么水平,也判断不了哪些工作是真正有效的。

不同数据集的评测方式和输出要求差异很大。自动驾驶相关的数据大多采用类似NuScenes的评测风格,强调距离加权和跨帧整合;室内数据集更关注物体类别均衡,从属类的检测框重叠率判定也更严格。如果你要入这个方向,建议把几个主要数据集的官方页面、可视化示例、评估脚本源码都亲自过一遍。

指标这一块,mAP和mIoU是两条主线。检测用mAP,语义分割用mIoU。不要只看数值本身,还要看评估预设在什么样的IoU阈值、什么样的距离范围下得到的。同一份结果在不同预设下进行对比,往往会得出完全相反的结论,这也是论文复现当中最容易踩的坑之一。

2. 三维数据表示与核心组件,你必须吃透的几个概念

我在带新人交流的时候,发现大家对这个方向最容易挂掉的概念不是网络结构,而是最底层的数据表示。点云、体素、多视图这些词大家都听过,但很难在脑子里形成一致的直观印象。这部分我多说一点,因为后面所有的模型设计,都是围绕用什么样数据表示、怎么用这些表示来提特征展开的。

2.1 点云的基础操作

点云本质上是空间中一组离散的点,每个点包含三维坐标,有时还会带强度、颜色、法向量等附加属性。它可能是来自激光雷达的扫描,也可能是由深度图转换而来,但不管来源如何,处理逻辑是相通的。

对点云做特征提取,绕不开采样和分组。采样是为了把稠密的点降到可控数量,常见策略有随机采样和FPS。FPS的原理是每次选择离已有采样点最远的点,这样做可以保证空间覆盖尽量均匀。我用过一次就知道为什么很多方法都选它作预采样——FPS在保持几何分布上确实比随机采样稳健太多,但代价就是计算开销大。

分组操作是另一个关键点。它解决的是“给定一个中心点,如何圈出邻域”。最简单的做法是固定半径球内搜索,复杂一点的做法是用K近邻。每一种做法背后都是对“局部邻域”定义的选择,而这个定义又直接决定了卷积感受野在三维空间中的形状。我在实际调试中会发现,K近邻对密度变化更敏感,半径球搜索对稀疏区域反而更友好,两者选型要看你的数据分布。

2.2 稀疏卷积与体素化为什么重要

点云是无序的,直接扔给常规卷积很难办。于是大家就想了个办法:把三维空间划分成一个个小格子,也就是体素化,然后在规则网格上做三维卷积。但这样做的最大问题也随之而来:大量体素是空的,计算浪费非常严重。

稀疏卷积就是为了解决这个问题出现的。它只在有数据的格子上面做运算,同时记录每个非空格子之间的空间关系。这个概念在工程上带来的收益很直观:同样一张点云,稠密体素卷积可能把显存撑爆,稀疏卷积能让你在消费级显卡上完成训练和推理。

学这部分时,不需要把所有源码都读了,但至少要把稀疏卷积的“规则网格堆叠+索引映射”这个机制理解清楚。这也是为什么很多高效检测网络都采用稀疏卷积主干,最后再配合一些稠密操作来恢复细节的原因。整个体系的性能优势,底座就是这类操作撑起来的。

2.3 多视图与鸟瞰图的核心思路

多视图方法把三维信息投影成多个二维视图,再用二维卷积来处理。它的优点很明显:能够完全复用成熟的二维预训练模型。但缺点是几何信息有损失,跨视图的对齐和融合也需要额外设计。

鸟瞰图表示则是自动驾驶方向的特别偏好。它把三维空间沿高度方向压扁,得到一张俯视的二维特征图。在这个图里,地面物体没有遮挡问题,旋转角度也容易处理。很多工业级方案都会选择用鸟瞰图作为中间表示来组织感知管线,因为它在工程上稳定、成熟、调试方便。

我不是让你把这些方法都学会后再选,而是建议你在练习时都过一遍,体会每种表示在特定任务场景里的得与失。真正深刻的理解从来都不是背概念,而是亲手用一遍之后形成的对比记忆。

3. 主流算法体系拆解,从经典骨架到前沿探索

有了前面的基础,我们再来看算法。这个领域的文献非常多,但骨架其实没想象中那么庞杂。我习惯把它分成几个层次的流派:基于点的流派、基于体素的流派、基于多视图或融合的流派,以及最近越来越热的统一大模型方向。

3.1 基于点的方法与里程碑

这个流派里,最值得一读的工作之一就是使用最远点采样和邻域特征聚合来提取点云特征的经典网络。它把点云理解为一个带坐标信息的集合,通过层次化的结构从局部到全局做特征聚合。读它的时候,建议不要只看模块设计,还要关注作者对“置换不变性”和“局部聚合”的分析。

后续很多工作都在这个基础上做了改进。有一些专门处理点云密度不均的问题,有一些引入了更强大的局部几何编码,有一些把Transformer结构引入了点云处理。但核心思路还是围绕局部聚合、全局整合、层次递进这个框架展开。

还有一个不可忽略的经典组件是特征金字塔和跨尺度特征融合。这在三维任务里同样重要,因为目标尺度差异巨大,只用单层特征往往很难同时兼顾小目标和宽阔背景。

3.2 基于体素和稀疏卷积的代表作

如果你要训练或者部署点云检测模型,直接上手点云主干网络的成本是很高的,因为它对工程优化要求很苛刻。相比之下,基于稀疏卷积体素化的方案不仅性能稳定,而且更容易在现有深度学习框架里实现和加速。

这类工作的一般流程是:把点云体素化,送入稀疏卷积骨干提取特征,再用区域提议或者单阶段头来预测检测框。值得一提的细节是,体素大小的选择直接影响检测精度和计算量:体素越小,几何分辨率越高,但计算量也成倍增长;体素太大,又会丢失细粒度细节。

我个人在实操时一般会先做一个粗体素的快速试验来定基线和调整超参数,然后再逐步缩小体素尺寸跑完整实验。这样能省不少时间。这个方法让我少走了很多弯路,也推荐刚入门的朋友尝试。

3.3 Transformer结构与分割任务中的关键设计

最近几年,Transformer结构在三维理解里的地位越来越重要。它天然适合捕捉长距离依赖,也能统一处理不同模态和不同任务的输入输出。

不过,三维Transformer并不是直接照搬图文模型就能跑的。先说一下位置编码,三维空间的坐标编码要比二维位置编码灵活得多,有些方案直接用连续坐标做隐式位置编码,有些设计了可学习的位置嵌入,不同设计对精度影响不小。

在语义分割这个任务里,常见的评价体系里还有对八类室内物体的细粒度分割评估。这意味着你在设计解码器时,不能只做简单的逐点分类,还得考虑类别之间的层次关系或者边界细化。很多新人一上来就忽略类别不均衡问题,直接用交叉熵训练,经常模型整体精度看着还行,但重点类别的预测结果其实很差。

3.4 多模态融合与统一模型的新趋势

三维检测和语义理解的数据源从来不只是点云。相机图像、文本指令、时序雷达数据都可以融入进来,形成多模态信息闭环。目前比较火的方向包括点云与图像的跨模态融合、基于语言指令的三维目标定位、开放词汇检测,以及用统一网络结构同时处理检测、分割、描述等多项任务。

这些方向看起来新颖,但底层的很多能力还是来自前面提过的基础模块。比如跨模态融合里要做的特征对齐、坐标变换、注意力交互,本身都是基础知识的组合。所以我不建议零基础的人直接追前沿,而建议先把经典方法学扎实了,再往前看时会顺畅很多。

3.5 训练技巧和调参心得

很多论文里不写的是训练细节。这一部分往往是复现成败的关键。我举个典型例子:同样的数据,不同初始化方式、不同学习率策略、不同数据增强,最终结果可能相差十多个点。这不是夸张,我自己多次碰到过这种情况。

数据增强是其中一个重点。三维空间里的增强手段比二维更多:全局旋转、随机平移、缩放、抖动、混合增强、物体级复制粘贴增强。你可以把复制粘贴增强理解成一个高级版的数据扩增法:它先把一些有标注的真实目标物体切下来,再随机粘贴到别的场景中,这样可以很好地补充稀疏类别的样本量。

另一方面是优化器与学习率。这个领域里很多工作用的优化器就是最朴实的那种,但配合合理的余弦退火或多阶段衰减策略却非常管用。 我的经验是:先把代码基线跑通,再用一个小验证集做一轮快速调参实验,确定哪些因子影响最大,再去做全量训练。盲目照搬论文Batch Size和训练轮次的做法,在换数据集时往往是行不通的。

4. 实践项目怎么选,复现和自建项目的实操建议

学习三维感知,只看论文和书籍是不够的,必须配着动手实践才能内化。很多同学卡在一个尴尬的位置上:理论知识听了不少,但一打开代码仓库就不知道从哪里下手。这里给几条亲测可行的实践路径。

4.1 复现练习的优先级

我建议的入门复现顺序是:先用那些对新手友好、社区活跃的经典项目练手,不要一上来就直接挑战大模型或最新论文。一个经典的检测或者分割项目,代码结构通常比较清晰,调参文档也完备,适合用来建立完整工程流程概念。

具体步骤上,先跑通预训练模型推理,把所有流程梳理清楚。推理通过后,再用小数据集做少量轮次的微调,验证训练流程能转起来。最后再完整训练一个模型并可视化预测结果。整个流程能把数据加载、预处理、模型定义、损失计算、评估逻辑这些环节完整过一遍。

4.2 从复现走向自建项目

复现几次之后,建议自己找一个小数据集,做一些轻量改造或新组合。比如换一种骨干网络、改改数据增强策略、加一个小模块、做一个简单的跨任务迁移。这些尝试哪怕最终效果没有大幅提升,对你的理解也帮助巨大。

自建项目时我还有三个经验:

  1. 项目的可复现性比效果好看更重要。配置、训练日志、随机种子、数据划分都一定要记录清楚,不然你后面想排查问题都没有依据。

  2. 先跑通再优化。不要一开始就把时间花在搜索最优超参数上,先让整个流程闭环跑通,再逐步改进。

  3. 一定要做错误分析。预测不准时,先看可视化结果,看模型是漏检、定位偏了、还是分类错了。不同错误类型对应完全不同的优化方向。

4.3 工具链选型

工程工具方面,三维数据处理和可视化常用软件是个人偏好问题,不用强求统一。但代码工程上,我还是建议把主流深度学习框架的基础操作练熟,同时掌握一些点云专用库和常用的三维坐标变换工具。学会使用调试器看中间变量、用可视化工具查看点云预测结果,这两项能力其实比多读十篇论文都管用。

硬件方面,消费级显卡跑经典模型和中小规模数据集的微调是可行的,受限的主要是大规模预训练。初学阶段不必纠结自己的卡不够顶级,关键是用好有限资源,把实验设计得更高效。

5. 常见问题和避坑指南,都是实测过来的经验

我在学习和训练里踩过不少坑,整理一些高频问题出来,希望对你有参考价值。

5.1 训练不收敛或效果差怎么排查

第一个要查的是坐标系的统一性。你是不是提前把点云归一化到某个范围?标签坐标系和输入坐标系是不是一致?这个看似基础的点,出错率其实很高。一个典型情况是数据做了旋转增强,但标注没有跟着旋转,这就是坐标系不一致造成的灾难。

第二个要查的是损失函数中各个子项的尺度匹配。如果分类损失、回归损失、角度损失之间的数量级差距太大,训练很容易被某个大项主导。解决思路无非是损失加权、梯度裁剪、或者改用更稳的损失函数设计。

第三个要查的是数据加载和预处理部分。点云数量上限有没有设对、归一化方式是不是每个数据一致、特征通道顺序是不是对的,这些都是看起来小、但实际影响巨大的问题。

5.2 显存不足和速度太慢怎么办

点云数据很容易把显存吃满,尤其是在处理大规模场景时。业界的常用做法是限制每帧点云数量、控制训练时的批大小、降低体素分辨率、使用混合精度训练。这些方法都能比较快地降低资源占用。

速度上,瓶颈常常在数据加载和预处理环节,而不是模型计算。如果发现GPU一直吃不饱,可以考虑并行加载、缓存预处理结果、适当压缩数据格式。我在一个实际项目里只靠优化数据加载,训练时间就缩短了将近四成,效果非常显著。

5.3 实操环境中的细节注意

还要提醒大家的是版本兼容问题。深度学习框架更新快,自定义算子或者说第三方扩展库的版本很容易不匹配。遇到编译失败时,先检查环境配置比先怀疑代码要高效得多。我习惯于在开始一个项目前,把完整的依赖环境用一个完整的配置文件或虚拟环境锁好,避免一段时间后无法复现。

另外,万不得已不要轻易完全重写论文里的核心模块。论文代码里的很多实现细节可能隐藏了非常重要的技巧,前期直接在原仓库基础上做小改动,是最稳妥的。

6. 长期学习规划,怎么把这个方向学到很深

三维检测与三维语义理解是一个非常有纵深感的方向。如果你不只是想应付一个项目、一个比赛,而是想长期深耕,我建议你在掌握基础方法和工程能力后,主动拓展下面几个方向。

第一个方向是更高效的表示与基础模型。现在大家已经不满足于单纯做一个检测器或分割器,而是追求一种通用的空间感知能力,让同一个模型能处理检测、分割、深度估计、交互理解等多种任务。如果你能把Transformer架构、预训练策略、多模态对齐这一套体系学透,在这个方向的优势会很明显。

第二个方向是面向具身智能的空间理解。三维感知其实是机器人操作、导航、交互的基础技术。理解三维空间不仅仅是识别物体,还包括理解可容纳区域、物体可操作部件、空间中的拓扑关系,这些能力在未来和人工智能与机器人的结合中很有前景。

第三个方向是高效训练与数据利用。大规模三维标注成本很高,所以弱监督、自监督、少样本、合成数据迁移等方法也会持续受到关注。这些方向对算法和工程的综合要求更高,但也特别适合做深入研究。

在学习节奏上,我建议你建立一个持续更新、持续迭代的学习笔记体系。把看过的论文核心点、复现中的运行情况、调参心得、可视化效果图都记录下来。这不仅是给自己积累,也是在训练自己快速回顾和提炼重点的能力。每隔一段时间回看这些笔记,你会对同一个问题产生新的理解。

再分享一个小习惯:每次学完一个新方法,我都会尝试用一个通俗的类比把这个方法讲给别人听。如果讲不明白,说明我自己还没真正弄懂。这个方法试过很多次,帮助我不断找出理解中的盲区。

三维感知方向虽然博杂,但只要路线清晰、动手扎实、记录细致,完全可以一步步越学越深。希望这篇路线整理能给刚开始的朋友提供一些参考,也欢迎你在实践中有自己的心得后,用自己的理解去补充和完善它。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进