文远知行自动驾驶感知算法面试经历:3D目标检测+多传感器融合全考察

自动驾驶作者: 美历团队

2年自动驾驶感知经验,详细复盘文远知行三轮技术面试:一面CV基础与3D检测、二面多传感器融合LiDAR+Camera、三面项目深挖与BEV感知,含真题汇总与心得建议

背景介绍

我是在一家自动驾驶创业公司做了2年感知算法,主要做3D目标检测和多传感器融合。文远知行一直是我特别想去的公司,他们在L4自动驾驶感知方面的技术积累非常深厚,尤其是BEV感知和多传感器融合这块,在业内是公认的领先。今年3月份看到他们在招感知算法工程师,我马上就投了。

说实话投之前心里挺没底的,因为我的经验主要在LiDAR检测上,Camera端的3D检测做得比较少。但文远知行的感知岗本身就是要求LiDAR+Camera都懂的,我这半吊子水平能不能过真不好说。于是花了将近三周时间疯狂补课,把PointPillars、CenterPoint、BEVFormer、DETR3D这些经典论文都过了一遍,代码也手撸了几个关键模块。

面试流程是三轮技术面,每一轮侧重点不同,下面详细复盘。

面试流程复盘

一面:CV基础+3D检测

一面是个看起来很干练的女工程师,后来知道是感知组的核心成员。开场先让我自我介绍,然后问了几个CV基础问题热身。

1. FPN的特征融合方式有哪些?各有什么优缺点?

我说FPN是自顶向下的特征融合,后来PANet加了自底向上的路径,BiFPN进一步做了加权特征融合。FPN的问题是对小目标的特征增强不够,因为高层特征虽然语义丰富但空间分辨率低;PANet通过自底向上路径增强了低层特征的语义信息;BiFPN通过可学习权重让模型自适应地融合不同层特征。

2. Attention机制在CV中是怎么用的?

我说主要有两种:自注意力(Self-Attention)和交叉注意力(Cross-Attention)。自注意力用于捕捉特征内部的长距离依赖,比如SE-Net的通道注意力、ViT的patch注意力;交叉注意力用于融合不同模态或不同尺度的特征,比如在DETR中用于query和feature map的交互。

热身完了,开始进入3D检测的核心问题:

3. PointPillars和VoxelNet的区别?为什么PointPillars更快?

我说VoxelNet是3D体素化,在z方向也做了体素划分,需要3D卷积;而PointPillars只在xy平面做柱状体素化,z方向不做划分,所以可以用2D卷积替代3D卷积,速度大幅提升。另外PointPillars的PointNet只用了MLP+MaxPool,没有VoxelNet那么复杂的VFE层,也减少了计算量。

4. CenterPoint的anchor-free设计有什么优势?

我说CenterPoint最大的优势是不需要NMS后处理。传统anchor-based方法会生成大量重叠的检测框,需要NMS去重,而CenterPoint通过预测中心点热力图,每个目标只对应一个峰值点,天然避免了重复检测。另外anchor-free方法不需要手动设计anchor尺寸,对不同形状大小的目标适应性更好。

5. 你们实际项目中3D检测的精度怎么样?有什么主要的failure case?

我说在Waymo Open Dataset上我们的模型大概能达到72-75的APH Level 2。主要的failure case有三种:一是远处小目标检测不到,因为点云太稀疏;二是严重遮挡场景下容易漏检;三是雨天点云噪声大,误检会增多。对于远处小目标,我们尝试了多尺度特征融合和超分辨率方法,有一定提升但还不够理想。

6. 你们怎么处理类别不平衡问题?

我说我们用了focal loss来处理前景背景的不平衡,另外对稀有类别(比如行人、骑车人)做了过采样和难例挖掘。在数据层面,我们也做了一些增强,比如对稀有类别做copy-paste增强。

一面大概1小时,面试官最后说"3D检测基础还不错",让我等二面通知。我心里稍微松了口气。

二面:多传感器融合(LiDAR+Camera)

二面是个看起来很有经验的工程师,一上来就直奔融合主题。

1. 多传感器融合有哪些层次?各有什么特点?

我说主要分三个层次:早期融合(数据级)、中期融合(特征级)、晚期融合(决策级)。早期融合直接在原始数据层面融合,信息保留最完整但对时空同步要求高;中期融合在特征层面融合,是目前最主流的方式;晚期融合在各传感器独立检测后融合结果,最简单但信息损失最大。

2. 你们项目里用的是哪种融合方式?为什么?

我说我们用的是特征级融合,具体来说是在BEV空间做融合。先把Camera的图像特征通过LSS(Lift-Splat-Shoot)投影到BEV空间,然后和LiDAR的BEV特征拼接,再用卷积做融合。选择这种方式的原因是BEV空间天然适合自动驾驶感知,而且LiDAR和Camera的特征在BEV空间中对齐比较方便。

3. LSS的深度估计不准怎么办?

我说这确实是LSS的一个核心问题。LSS需要预测每个像素的深度分布来把2D特征提升到3D,如果深度估计不准,投影到BEV的位置就会偏移。我们的解决方案有两个:一是用LiDAR点云做深度监督,让深度估计更准;二是用可变形注意力替代固定投影,让模型自适应地学习特征投影位置,类似BEVFormer的做法。

4. LiDAR和Camera的时间同步问题怎么处理?

我说我们用的是硬件同步方案,通过PPS信号让LiDAR和Camera在同一时刻触发采集。但即使硬件同步,由于曝光时间不同,还是会有几十毫秒的延迟。对于运动物体,我们会根据自车速度和目标速度做运动补偿,把历史帧的特征对齐到当前时刻。

5. 如果LiDAR失效了,纯Camera能做3D检测吗?

我说可以,但精度会下降不少。纯Camera的3D检测主要靠单目深度估计或多目立体匹配,深度精度远不如LiDAR。目前比较流行的方法是BEV感知,用多个Camera的图像通过Transformer做BEV特征构建,然后做3D检测。在nuScenes上,FCOS3D、BEVFormer、PETR等方法都取得了不错的效果,但和LiDAR方法比还有明显差距。

6. DETR3D和BEVFormer的区别?

我说DETR3D是用3D reference points从多视角图像中采样特征,然后做3D目标检测;BEVFormer是用预定义的BEV queries从多视角图像中采样特征构建BEV特征图,然后在BEV特征图上做检测。核心区别是DETR3D的queries是3D的,直接预测3D检测框;BEVFormer先构建BEV特征图,再在BEV上做检测,更灵活,可以做分割、检测等多种任务。

二面大概1小时10分钟,面试官问得很深入,尤其是LSS深度估计和时序对齐的问题,我答得不算完美但也没有完全卡住。

三面:项目深挖+BEV感知

三面是感知组的负责人,气场很强但不凶,更像是技术讨论。

他先让我详细讲了一个最得意的项目,我讲了我们做的LiDAR-Camera融合检测项目。然后他开始深挖:

1. 你们的融合检测比纯LiDAR检测提升了多少?

我说在行人检测上提升了约5个点的AP,在车辆检测上提升了约2个点。主要提升来自远处目标和遮挡场景,因为Camera的语义信息能帮助区分LiDAR中点云稀疏的目标。

2. 融合带来的计算开销有多大?怎么优化的?

我说融合模块大概增加了30%的计算量,主要来自Camera backbone和LSS投影。我们做了几个优化:一是用更轻量的backbone(ResNet-50替换ResNet-101);二是LSS的深度离散化bin数从64减到48,精度损失很小但速度提升明显;三是用TensorRT做推理优化,整体延迟控制在100ms以内。

3. BEV感知的时序融合怎么做?

我说我们用了时序BEV融合的方式:把历史帧的BEV特征根据自车运动做warp对齐到当前帧,然后和当前帧的BEV特征做拼接或注意力融合。时序融合的好处是可以利用历史信息增强当前帧的检测,尤其是对遮挡和远处目标有帮助。

4. BEV感知在量产中有什么挑战?

我说最大的挑战是算力。BEV感知需要多个Camera同时推理,计算量很大,车载平台的算力有限。另外BEV感知的鲁棒性也是问题,比如Camera标定偏差、极端天气(雨雪雾)都会影响BEV特征的质量。还有就是BEV感知的可解释性不如LiDAR检测,出了问题很难定位原因。

5. 你怎么看纯视觉方案和LiDAR方案的路线之争?

我说我觉得短期内LiDAR+Camera的融合方案还是更靠谱的,因为LiDAR提供的精确深度信息是Camera无法替代的。但从长期来看,纯视觉方案如果解决了深度估计和鲁棒性问题,成本优势会非常大。我个人倾向于融合方案,但在研究中也应该关注纯视觉方案的进展。

三面聊了1小时20分钟,最后面试官问我有什么问题,我问了文远知行在BEV感知方面的最新进展,他提到了一些关于时序BEV和occupancy network的工作,听起来很前沿。

真题汇总

CV基础部分:

1. FPN的特征融合方式及各方法优缺点?

2. Attention机制在CV中的应用?

3D检测部分:

3. PointPillars和VoxelNet的区别?PointPillars为什么更快?

4. CenterPoint的anchor-free设计优势?

5. 3D检测的精度和主要failure case?

6. 类别不平衡问题的处理方法?

多传感器融合部分:

7. 多传感器融合的层次和特点?

8. 特征级融合的具体实现方式?

9. LSS深度估计不准的解决方案?

10. LiDAR和Camera的时间同步处理?

11. 纯Camera 3D检测的方法和局限?

12. DETR3D和BEVFormer的区别?

BEV感知部分:

13. 融合检测相比纯LiDAR检测的提升?

14. 融合带来的计算开销和优化方法?

15. BEV感知的时序融合方法?

16. BEV感知在量产中的挑战?

17. 纯视觉方案vs LiDAR方案的路线之争?

心得建议

1. 3D检测基础一定要扎实:PointPillars、CenterPoint这些经典方法必须能讲清楚原理和代码实现,面试官会问得很细,包括loss设计、后处理、数据增强等。

2. 多传感器融合是重点:文远知行的感知岗非常看重融合能力,LSS、BEVFormer、DETR3D这些方法必须搞懂,尤其是深度估计和特征投影的细节。

3. BEV感知是加分项:如果你能讲清楚BEV感知的原理、时序融合、量产挑战等,面试官会非常感兴趣。

4. 项目经验要有数据支撑:面试官会问具体的精度数字、提升幅度、计算开销等,不能只说"有提升"就完了,要有量化结果。

5. 了解行业趋势:纯视觉vs LiDAR的路线之争、Occupancy Network、端到端感知等前沿方向,要有自己的思考和判断。

6. 准备时间建议3周:如果你有2年左右的感知经验,3周的集中准备应该够了。重点复习3D检测、多传感器融合、BEV感知三个方向。

FAQ

Q:文远知行的感知面试难度怎么样?

A:挺难的,尤其是二面和三面。一面偏基础,二面偏融合深度,三面偏项目经验和前沿思考。整体难度在自动驾驶公司里属于中上水平。

Q:需要手写代码吗?

A:没有让我手写代码,但会问代码实现的细节,比如PointPillars的VFE层怎么实现、LSS的深度投影怎么写等。建议把关键模块的代码过一遍。

Q:面试官会问论文细节吗?

A:会的,尤其是你简历上提到的论文。如果你说用了某个方法,面试官会追问论文的核心创新点和实现细节,所以简历上写的东西一定要真的懂。

Q:薪资大概什么水平?

A:感知算法岗的base大概在35-55k之间,具体看级别和谈的情况。

Q:面试结果多久出来?

A:我是一面后4天收到二面通知,二面后3天收到三面通知,三面后1周多收到offer。

#自动驾驶#感知算法#3D目标检测#多传感器融合#BEV感知#面试经历