文遠知行自動駕駛感知算法面試經歷: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中是怎麼用的?
我說主要有兩種:自注意力和交叉注意力。自注意力用於捕捉特徵內部的長距離依賴,比如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投影到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。