駕駛感知技術(shù):傳感器融合、數(shù)據(jù)對(duì)齊與工程落地的實(shí)踐指南)
簡(jiǎn)介一份聚焦自動(dòng)駕駛環(huán)境感知技術(shù)的教學(xué)課件系統(tǒng)梳理感知系統(tǒng)在車輛智能決策中的基礎(chǔ)地位并圍繞道路、靜態(tài)物體、動(dòng)態(tài)物體三類感知對(duì)象介紹激光測(cè)距儀、視頻攝像頭、車載雷達(dá)等傳感器融合方案以及卷積神經(jīng)網(wǎng)絡(luò)在圖像識(shí)別與目標(biāo)檢測(cè)中的應(yīng)用。內(nèi)容還涉及近目標(biāo)優(yōu)先、大尺度優(yōu)先、動(dòng)目標(biāo)優(yōu)先等感知原則并針對(duì)惡劣天氣、連續(xù)視頻流處理等現(xiàn)實(shí)挑戰(zhàn)與未來(lái)發(fā)展趨勢(shì)展開(kāi)討論適合自動(dòng)駕駛初學(xué)者、算法工程師及高校相關(guān)專業(yè)師生用作入門概覽或教學(xué)輔助。資源為單個(gè)演示文稿pptx文件大小約10.06MB已有294人學(xué)習(xí)。課件結(jié)構(gòu)完整包含環(huán)境感知概述、傳感器原理、網(wǎng)絡(luò)層級(jí)、挑戰(zhàn)與展望等模塊便于讀者快速建立自動(dòng)駕駛感知技術(shù)的整體框架并為進(jìn)一步學(xué)習(xí)深淺層模型與工程落地打下基礎(chǔ)。1. 自動(dòng)駕駛感知技術(shù)為什么先看數(shù)據(jù)、再看模型如果一個(gè)自動(dòng)駕駛團(tuán)隊(duì)只給你看模型的 mAP說(shuō)明它還處在“能跑 demo”的階段。真正做感知的人打開(kāi)一個(gè)“autopilot perception”類的技術(shù)分享第一眼看的往往是傳感器布局、標(biāo)注規(guī)范和評(píng)測(cè)集的劃分——這三樣決定了一套感知系統(tǒng)的上限模型只是把上限兌現(xiàn)多少的問(wèn)題。這篇博文從“感知技術(shù)”這個(gè)詞能拆出的三個(gè)層面展開(kāi)傳感器和數(shù)據(jù)如何對(duì)齊檢測(cè)、分割、跟蹤任務(wù)的分工與融合以及數(shù)據(jù)集和仿真工具鏈怎么幫你把邊界踩出來(lái)。適合正在搭感知團(tuán)隊(duì)、或準(zhǔn)備把算法往車上部署的工程師讀內(nèi)容盡量落到能直接照做的程度。2. 自動(dòng)駕駛感知的傳感器選型與數(shù)據(jù)對(duì)齊2.1 三項(xiàng)主流傳感器的信息邊界與失效模式感知技術(shù)的第一步不是挑最貴的傳感器而是明確“每一類傳感器騙你的時(shí)候長(zhǎng)什么樣”。相機(jī)有稠密紋理和顏色但它是被動(dòng)傳感器逆光、隧道口、夜間無(wú)照明時(shí)信噪比急劇下降激光雷達(dá)測(cè)距準(zhǔn)、不受光照影響但點(diǎn)云稀疏對(duì)反射率低的黑色車輛和雨霧天氣會(huì)“丟點(diǎn)”毫米波雷達(dá)對(duì)速度敏感、穿透性好但角分辨率差靜止目標(biāo)容易漏檢或誤報(bào)。實(shí)際量產(chǎn)方案里這三者不是替補(bǔ)關(guān)系而是互補(bǔ)關(guān)系視覺(jué)負(fù)責(zé)語(yǔ)義激光負(fù)責(zé)幾何毫米波負(fù)責(zé)速度和全天候底線。選型時(shí)還需要看安裝位置和視野重疊度。常見(jiàn)做法是前向三目或四目相機(jī)加一個(gè)前向激光雷達(dá)再加四個(gè)角毫米波雷達(dá)。裝完之后要立刻做兩件事外參標(biāo)定和視場(chǎng)角對(duì)齊。很多團(tuán)隊(duì)在實(shí)車上跑感知發(fā)現(xiàn)目標(biāo)在相機(jī)里有、激光點(diǎn)云里沒(méi)有往往不是模型問(wèn)題而是激光雷達(dá)的上方視場(chǎng)角沒(méi)把路牌和高架橋包進(jìn)去。感知工程師拿到車的第一周就應(yīng)該畫(huà)出每個(gè)傳感器的FOV投影圖確認(rèn)覆蓋盲區(qū)在哪。2.2 坐標(biāo)系標(biāo)定與時(shí)間同步的最小步驟多傳感器融合的基礎(chǔ)是統(tǒng)一坐標(biāo)系。感知里通常以自車后軸中心為車體坐標(biāo)系原點(diǎn)x 軸向前y 軸向左z 軸向上。相機(jī)和激光雷達(dá)各自有獨(dú)立坐標(biāo)系通過(guò)外參矩陣把點(diǎn)云或圖像投影到車體坐標(biāo)。標(biāo)定分靜態(tài)和動(dòng)態(tài)兩類靜態(tài)用標(biāo)定板或標(biāo)定間動(dòng)態(tài)用 SLAM 或直接法對(duì)配準(zhǔn)。小團(tuán)隊(duì)沒(méi)條件做專業(yè)標(biāo)定間可以用開(kāi)源工具在場(chǎng)地里跑一組包含直行、轉(zhuǎn)彎、過(guò)坡道的軌跡解算傳感器間的相對(duì)位姿。時(shí)間同步同樣容易被低估。相機(jī)曝光時(shí)刻和激光雷達(dá)掃描時(shí)刻如果相差 30 毫秒在 72 km/h 車速下目標(biāo)會(huì)平移 0.6 米。感知融合前必須先做時(shí)間對(duì)齊常見(jiàn)做法是把激光雷達(dá)的掃描時(shí)間作為主時(shí)鐘其他傳感器的數(shù)據(jù)按時(shí)間戳插值或取最近鄰。import numpy as np def align_lidar_camera(lidar_ts, cam_ts, cam_data, max_offset_ms20): 將相機(jī)數(shù)據(jù)向激光雷達(dá)時(shí)間戳對(duì)齊最近鄰。 lidar_ts: 激光雷達(dá)時(shí)間戳數(shù)組 (N,) cam_ts: 相機(jī)時(shí)間戳數(shù)組 (M,) cam_data: 原始圖像或檢測(cè)結(jié)果列表長(zhǎng)度 M 返回 aligned: 與 lidar_ts 對(duì)齊后的數(shù)據(jù)列表 lidar_time np.asarray(lidar_ts) cam_time np.asarray(cam_ts) aligned [] for t in lidar_time: idx np.argmin(np.abs(cam_time - t)) offset abs(cam_time[idx] - t) * 1000.0 # 轉(zhuǎn)為毫秒 if offset max_offset_ms: # 超出閾值直接丟棄避免把錯(cuò)位幀送入融合模塊 aligned.append(None) else: aligned.append(cam_data[idx]) return aligned這段代碼做的事情很簡(jiǎn)單對(duì)每個(gè)激光雷達(dá)時(shí)間戳找到最近的一幀相機(jī)數(shù)據(jù)并檢查時(shí)間差是否在 20 毫秒以內(nèi)。超過(guò)閾值返回None讓上層邏輯決定是丟棄還是做運(yùn)動(dòng)補(bǔ)償。參數(shù)max_offset_ms不是拍腦袋定的它需要根據(jù)車速和目標(biāo)的動(dòng)態(tài)性來(lái)調(diào)高速場(chǎng)景可以收緊到 10 毫秒城區(qū)擁堵場(chǎng)景可以放寬到 30 毫秒。2.3 標(biāo)定誤差多大模型性能穩(wěn)不住很多團(tuán)隊(duì)在數(shù)據(jù)集上訓(xùn)練模型效果不錯(cuò)一到實(shí)車就露餡問(wèn)題多半出在標(biāo)定。外參誤差 0.2 度看起來(lái)很小但投射到 50 米外就會(huì)帶來(lái)約 17 厘米的位置偏移而相機(jī)與激光雷達(dá)融合時(shí)這個(gè)偏移直接決定了目標(biāo)框是“貼得緊”還是“漂在半空”。毫米波雷達(dá)輸出的目標(biāo)點(diǎn)存在距離向和方位向的系統(tǒng)性誤差融合之前要先做標(biāo)定補(bǔ)償否則卡爾曼濾波會(huì)一直收斂不到穩(wěn)值。建議每個(gè)自然周做一次靜態(tài)標(biāo)定驗(yàn)證方法是把車停在停車場(chǎng)采集一段靜態(tài)數(shù)據(jù)檢查激光點(diǎn)云投影到圖像后是否穩(wěn)定壓在地面車道上。投影結(jié)果可以用一張圖看也可以用像素偏移的均值和方差做數(shù)值監(jiān)控。感知代碼里對(duì)外參做一層抽象標(biāo)定更新時(shí)不需要改融合邏輯這能省下大量重復(fù)調(diào)試時(shí)間。3. 感知任務(wù)的分工與部署約束3.1 檢測(cè)、分割、跟蹤分別解決什么檢測(cè)回答“哪里有什么”分割回答“目標(biāo)的精確輪廓”跟蹤回答“同一輛車在連續(xù)幀里是誰(shuí)”。三個(gè)任務(wù)不是并列關(guān)系而是遞進(jìn)關(guān)系檢測(cè)框不穩(wěn)定的車輛跟蹤很難保持 ID 一致分割結(jié)果可以反過(guò)來(lái)優(yōu)化檢測(cè)框的邊界讓框貼近車頭車尾而不是包住整個(gè)車身。量產(chǎn)感知系統(tǒng)一般把三者拆成獨(dú)立模塊各自優(yōu)化再融合端到端方案目前還很難滿足確定性要求。檢測(cè)模型選型上視覺(jué)用 YOLO 系列或 DETR 類的 transformer 方案激光點(diǎn)云用 PointPillars、CenterPoint 這類基于體素的模型。生產(chǎn)環(huán)境中我更傾向 CenterPoint 的思路把檢測(cè)建模成點(diǎn)云中心點(diǎn)預(yù)測(cè)后處理簡(jiǎn)單且在稀疏點(diǎn)云上召回率更穩(wěn)。分割模型負(fù)責(zé)給出可行駛區(qū)域和車道線語(yǔ)義分割用輕量級(jí) DeepLab 或 STDC實(shí)例分割一般只在近距離用中遠(yuǎn)距離算力消耗太大。跟蹤模塊值得單獨(dú)說(shuō)?;谝?guī)則的跟蹤也就是卡爾曼濾波加匈牙利匹配依然是量產(chǎn)最可靠的方案可解釋、可調(diào)參、不會(huì)突然學(xué)壞。3D 跟蹤常見(jiàn)做法是使用擴(kuò)展卡爾曼濾波EKF維護(hù)目標(biāo)狀態(tài)狀態(tài)量包含 x、y、z、朝向和速度匹配時(shí)用 3D IoU 或中心距離作為代價(jià)。車輛近距離遮擋后重新出現(xiàn)時(shí)需要保留一個(gè)“游離軌跡”列表至少 10 幀避免同一個(gè)目標(biāo)產(chǎn)生兩個(gè) ID。3.2 BEV視角下如何把多傳感器融合成一張圖BEV鳥(niǎo)瞰視角是當(dāng)前感知技術(shù)里的核心思路把相機(jī)圖像和激光點(diǎn)云重新投影到一個(gè)以自車為中心、俯視的網(wǎng)格上再做檢測(cè)和預(yù)測(cè)。對(duì)比在圖像平面上做感知BEV 的優(yōu)勢(shì)在于目標(biāo)尺度不隨距離劇烈變化而且做軌跡預(yù)測(cè)天然就是平面坐標(biāo)省掉透視逆變換帶來(lái)的誤差。實(shí)現(xiàn) BEV 融合有兩條路。一條是幾何方法把相機(jī)圖像用逆透視映射IPM投影到地面再把激光雷達(dá)點(diǎn)云按高度切層填入同一個(gè)網(wǎng)格。另一條是端到端方法用 transformer 的 cross-attention 直接把圖像特征變換到 BEV 空間。工程落地我推薦幾何方法起步它可視化直觀、出問(wèn)題好定位端到端留給后續(xù)迭代。import numpy as np def lidar_to_bev(points, grid_size0.1, x_range(-50, 50), y_range(-50, 50)): 將激光點(diǎn)云投影到 BEV 柵格返回 2D 強(qiáng)度圖。 points: (N, 3) 點(diǎn)云列為 x, y, z已變換到車體坐標(biāo) grid_size: 每個(gè)柵格的物理邊長(zhǎng)單位米 x_range, y_range: 投影范圍 x_min, x_max x_range y_min, y_max y_range nx int((x_max - x_min) / grid_size) ny int((y_max - y_min) / grid_size) bev np.zeros((ny, nx), dtypenp.float32) # 過(guò)濾范圍外的點(diǎn)降低無(wú)效計(jì)算 mask ( (points[:, 0] x_min) (points[:, 0] x_max) (points[:, 1] y_min) (points[:, 1] y_max) ) pts points[mask] # 只保留每個(gè)柵格中 z 值最高的點(diǎn)避免地面點(diǎn)遮擋目標(biāo) xs ((pts[:, 0] - x_min) / grid_size).astype(np.int32) ys ((pts[:, 1] - y_min) / grid_size).astype(np.int32) zs pts[:, 2] for xi, yi, zi in zip(xs, ys, zs): if zi bev[yi, xi]: bev[yi, xi] zi return bev這段代碼把每個(gè)柵格內(nèi) z 值最高的點(diǎn)寫(xiě)到 BEV 圖上等價(jià)于保留目標(biāo)的頂部輪廓。grid_size0.1意味著 100 米見(jiàn)方的范圍會(huì)產(chǎn)生 100 萬(wàn)格分辨率太高會(huì)影響存儲(chǔ)和推理速度城區(qū)場(chǎng)景用 0.2 米更合理高速場(chǎng)景可以再降到 0.4。投影完成后可以用 matplotlib 的imshow快速看一張圖確認(rèn)車道線、路沿和目標(biāo)輪廓是否清晰。3.3 模型推理上車的算力分配感知模型訓(xùn)練時(shí)用多大的顯卡都不心疼部署時(shí)就要精打細(xì)算。量產(chǎn)域控制器一般需要同時(shí)跑 6 到 12 路相機(jī)、1 到 2 個(gè)激光雷達(dá)和多個(gè)毫米波雷達(dá)整個(gè)感知棧的延遲預(yù)算通常在 100 毫秒以內(nèi)。常見(jiàn)分配方式是檢測(cè)模型占 40% 算力分割模型占 25%跟蹤和融合占 10%剩下的留給預(yù)處理和系統(tǒng)開(kāi)銷。模型輕量化有幾個(gè)固定動(dòng)作用 INT8 量化替代 FP16感知模型一般可以接受把 backbone 從 ResNet 換成 MobileNet 或 EfficientNet-Lite用 TensorRT 或 ONNX Runtime 做圖優(yōu)化順帶融合 BatchNorm 層。量化后的模型必須在夜間、雨天、逆光三組場(chǎng)景下重新跑一遍評(píng)測(cè)集因?yàn)榱炕瘜?duì)暗光特征的精度損失最大。4. 自動(dòng)駕駛數(shù)據(jù)集與仿真驗(yàn)證怎么配合4.1 開(kāi)源數(shù)據(jù)集的標(biāo)注格式與適用場(chǎng)景訓(xùn)練感知模型不能只有自己的路測(cè)數(shù)據(jù)開(kāi)源數(shù)據(jù)集的價(jià)值在于提供一個(gè)可復(fù)現(xiàn)的基線。感知領(lǐng)域公認(rèn)的三件套是 KITTI、nuScenes 和 Waymo Open Dataset。KITTI 是經(jīng)典中的經(jīng)典適合做 3D 檢測(cè)和立體匹配驗(yàn)證nuScenes 帶了完整的傳感器套件和 40 秒的連續(xù)幀適合做跟蹤和多傳感器融合Waymo 數(shù)據(jù)量最大場(chǎng)景含高速和密集交通流適合做大規(guī)模訓(xùn)練的底座。數(shù)據(jù)集的標(biāo)注格式?jīng)Q定了你寫(xiě)數(shù)據(jù)加載器的成本。KITTI 的標(biāo)注是平文本文件每行是一個(gè)目標(biāo)框字段依次是類別、截?cái)喽?、遮擋等?jí)、2D 框和 3D 框參數(shù)nuScenes 用 JSON每個(gè) sample 關(guān)聯(lián)六個(gè)方向的相機(jī)和五個(gè)激光雷達(dá)還帶 object velocity。工程上建議統(tǒng)一轉(zhuǎn)成中間格式比如 JSON Lines每行一個(gè)對(duì)象字段固定為timestamp, sensor_id, category, bbox_3d, velocity這樣內(nèi)部工具鏈就與上游數(shù)據(jù)集完全解耦。import json from pyquaternion import Quaternion from nuscenes import NuScenes def load_one_sample(nusc, sample_token): 從 nuScenes 數(shù)據(jù)集中加載一個(gè) sample 的關(guān)鍵信息 sample nusc.get(sample, sample_token) lidar_data nusc.get(sample_data, sample[data][LIDAR_TOP]) # 拿到當(dāng)前幀所有標(biāo)注的 token ann_tokens sample[anns] anns [nusc.get(sample_annotation, t) for t in ann_tokens] records [] for ann in anns: # 3D 框中心位置和尺寸單位米 translation ann[translation] size ann[size] # width, length, height rot Quaternion(ann[rotation]) records.append({ category: ann[category_name], x: translation[0], y: translation[1], z: translation[2], w: size[0], l: size[1], h: size[2], q: [rot.w, rot.x, rot.y, rot.z] }) return { timestamp: lidar_data[timestamp], lidar_path: lidar_data[filename], anns: records }代碼里sample[data][LIDAR_TOP]取的是當(dāng)前幀激光雷達(dá)的數(shù)據(jù) token標(biāo)注全部以車體坐標(biāo)系為基準(zhǔn)。nuScenes 的標(biāo)注框是水平放置的沒(méi)有俯仰和橫滾所以四元數(shù)只描述偏航角。轉(zhuǎn)成自己格式時(shí)注意單位統(tǒng)一KITTI 的 3D 框尺寸是 height、width、length 的順序nuScenes 是 width、length、height順序顛倒會(huì)讓模型訓(xùn)練直接崩掉。4.2 Carsim、NI與VTD聯(lián)合仿真場(chǎng)景怎么進(jìn)、傳感器怎么仿仿真在感知技術(shù)里的位置是“數(shù)據(jù)補(bǔ)充”和“回歸驗(yàn)證”不是替代路測(cè)。Carsim、NI 和 VTD 的聯(lián)合仿真是一種比較成熟的硬件在環(huán)HIL測(cè)試方案Carsim 負(fù)責(zé)高精度車輛動(dòng)力學(xué)模型輸出車輛的位姿、速度和加速度NI 實(shí)時(shí)系統(tǒng)負(fù)責(zé)運(yùn)行控制算法和注入故障信號(hào)比如模擬某個(gè)傳感器斷線或數(shù)據(jù)延遲VTDVirtual Test Drive負(fù)責(zé)構(gòu)建虛擬道路、交通流和傳感器模型生成“感知層看到的世界”。三者的數(shù)據(jù)流是單向閉環(huán)VTD 生成場(chǎng)景和傳感器仿真結(jié)果送給感知系統(tǒng)感知系統(tǒng)輸出目標(biāo)列表交給控制算法控制算法在 Carsim 里算出車輛的下一幀狀態(tài)再把車輛位置反饋給 VTD 更新場(chǎng)景。搭建這套環(huán)境時(shí)變量位映射是最容易出錯(cuò)的地方。Carsim 輸出的車輛位置是慣性系下的坐標(biāo)VTD 需要的是相對(duì)車體的坐標(biāo)中間要做一個(gè)坐標(biāo)變換否則仿真里的目標(biāo)位置和車輛軌跡對(duì)不上。表聯(lián)合仿真里三個(gè)工具的分工和常用接口工具模塊定位輸出內(nèi)容常見(jiàn)接口Carsim車輛動(dòng)力學(xué)車速、橫擺角速度、經(jīng)緯度/坐標(biāo)Simulink 或 TCP 協(xié)議NI實(shí)時(shí)控制和故障注入控制指令、傳感器故障狀態(tài)PXI/VeriStand共享內(nèi)存或 CANVTD場(chǎng)景與傳感器仿真真值目標(biāo)、合成點(diǎn)云、虛擬相機(jī)圖像RDB運(yùn)行時(shí)數(shù)據(jù)總線坐標(biāo)系變換建議在系統(tǒng)集成文檔里用一張表寫(xiě)清楚直接復(fù)制到代碼注釋里避免后期聯(lián)調(diào)時(shí)兩個(gè)人各查各的。仿真里的傳感器真值不能直接當(dāng)模型輸入要做“降質(zhì)處理”給激光雷達(dá)點(diǎn)云加高斯噪聲和隨機(jī)丟點(diǎn)給相機(jī)圖像加運(yùn)動(dòng)模糊和曝光波動(dòng)這樣訓(xùn)練出來(lái)的模型在仿真到實(shí)車遷移時(shí)差距才小。4.3 仿真數(shù)據(jù)多久能替代真實(shí)路測(cè)數(shù)據(jù)說(shuō)結(jié)論短期不能替代長(zhǎng)期能補(bǔ)足長(zhǎng)尾。感知模型對(duì)數(shù)據(jù)的需求是“高頻場(chǎng)景要有量低頻場(chǎng)景要有樣”。仿真數(shù)據(jù)最大的價(jià)值是生成真實(shí)路測(cè)里極難遇到、但一旦遇到就可能出事故的場(chǎng)景比如前車急剎加旁車并線、施工區(qū)突然收窄、動(dòng)物橫穿。這些場(chǎng)景在數(shù)據(jù)集中占比可以到 20% 到 30%但仿真數(shù)據(jù)的標(biāo)注是自動(dòng)生成的不存在人工標(biāo)注的一致性問(wèn)題。用仿真數(shù)據(jù)訓(xùn)練時(shí)要注意 domain gap合成圖像和真實(shí)圖像的紋理、光照差別會(huì)傳導(dǎo)到模型的特征層。常見(jiàn)的緩解方法是 domain randomize即在仿真渲染時(shí)隨機(jī)改變光照角度、地面紋理、目標(biāo)顏色讓模型學(xué)到的不是特定渲染風(fēng)格而是泛化特征。評(píng)估時(shí)用“仿真訓(xùn)練 真實(shí)數(shù)據(jù)微調(diào)”的模型對(duì)比純真實(shí)數(shù)據(jù)訓(xùn)練的模型如果前者的長(zhǎng)尾場(chǎng)景表現(xiàn)更穩(wěn)就說(shuō)明仿真數(shù)據(jù)起作用了。5. 評(píng)估指標(biāo)的坑與可落地的驗(yàn)證技巧5.1 mAP、NLE、ATE 怎么看感知技術(shù)文檔里最常見(jiàn)的指標(biāo)是 mAPmean Average Precision但 mAP 有一個(gè)天然短板它只衡量檢測(cè)框和真值框的 IoU 是否達(dá)標(biāo)不衡量時(shí)間一致性。一個(gè)目標(biāo)這一幀檢測(cè)到、下一幀丟掉mAP 可能依然很高。跟蹤指標(biāo)里NLENuScenes 使用的平均位移誤差和 AMOTA 能反映軌跡穩(wěn)定性ATEAbsolute Trajectory Error更多用于定位而非感知。評(píng)估時(shí)不能只看一個(gè)指標(biāo)至少要同時(shí)看檢測(cè)的 mAP 和跟蹤的 AMOTA前者管“找得到”后者管“跟得住”。計(jì)算 mAP 時(shí)3D 檢測(cè)的 IoU 閾值通常取 0.5 或 0.7Waymo 對(duì)車輛取 0.7、行人取 0.5。這個(gè)閾值不是越高越好閾值高會(huì)低估近距離小尺寸車輛的性能閾值低會(huì)讓遠(yuǎn)距離誤檢漏進(jìn)來(lái)。建議分距離段評(píng)估0 到 30 米、30 到 50 米、50 米以上各算一個(gè) mAP這樣優(yōu)化時(shí)能定位到是哪一段拖了后腿。def compute_iou_3d(box_a, box_b): 簡(jiǎn)化版 3D IoU只比較水平框的重疊忽略高度旋轉(zhuǎn)差異。 返回 0~1 之間的 IoU 值。 # 取水平面 x、y 坐標(biāo)和邊長(zhǎng) ax1, ay1 box_a[0] - box_a[3] / 2, box_a[1] - box_a[4] / 2 ax2, ay2 box_a[0] box_a[3] / 2, box_a[1] box_a[4] / 2 bx1, by1 box_b[0] - box_b[3] / 2, box_b[1] - box_b[4] / 2 bx2, by2 box_b[0] box_b[3] / 2, box_b[1] box_b[4] / 2 ix1, iy1 max(ax1, bx1), max(ay1, by1) ix2, iy2 min(ax2, bx2), min(ay2, by2) iw max(0, ix2 - ix1) ih max(0, iy2 - iy1) inter iw * ih area_a box_a[3] * box_a[4] area_b box_b[3] * box_b[4] union area_a area_b - inter return inter / union if union 0 else 0這段代碼假設(shè)兩個(gè)框都沒(méi)有偏航角旋轉(zhuǎn)只計(jì)算軸對(duì)齊矩形的重疊適合快速排查問(wèn)題。完整評(píng)估時(shí)請(qǐng)用 Open3D 或自己實(shí)現(xiàn)帶旋轉(zhuǎn)的 IoU 計(jì)算因?yàn)檐囕v在彎道和變道時(shí)偏航角很大忽略旋轉(zhuǎn)會(huì)高估誤差。評(píng)估代碼要固化到一個(gè)腳本里每次模型更新都跑同一份測(cè)試集并輸出每個(gè)類別的分距離段指標(biāo)形成日?qǐng)?bào)。5.2 負(fù)責(zé)人要做的一次離線回歸驗(yàn)證假設(shè)你剛改完融合算法想確認(rèn)沒(méi)有引入競(jìng)態(tài)條件或時(shí)間延遲問(wèn)題。常見(jiàn)的做法是拿一段 10 分鐘的真實(shí)路測(cè)數(shù)據(jù)回放跑完整的感知感知棧對(duì)比回歸前后的目標(biāo)列表?;胤艜r(shí)要注意如果原數(shù)據(jù)里相機(jī)和激光雷達(dá)的時(shí)間戳相差超過(guò)一個(gè)閾值回放結(jié)果可能和車上表現(xiàn)不一致。驗(yàn)證腳本建議分三步第一步檢查每幀是否正常產(chǎn)生輸出統(tǒng)計(jì)無(wú)輸出的幀數(shù)第二步對(duì)比相同時(shí)間戳下前后兩個(gè)版本的目標(biāo)數(shù)量差異超過(guò) 20% 就要警覺(jué)第三步隨機(jī)抽 50 幀人工可視化對(duì)比檢測(cè)框位置。三步通過(guò)后再上實(shí)車減少無(wú)意義的試車時(shí)間。5.3 量化感知系統(tǒng)上線的三個(gè)底線第一個(gè)底線是“感知輸出必須有協(xié)方差或置信度”下游規(guī)控模塊需要知道目標(biāo)位置不確定度才能決定是全力制動(dòng)還是緩行通過(guò)。第二個(gè)底線是“傳感器故障時(shí)功能要降級(jí)而不是崩潰”激光雷達(dá)丟了就切到視覺(jué)和毫米波融合視覺(jué)被污損就只保留雷達(dá)目標(biāo)這套降級(jí)邏輯必須在仿真里反復(fù)注入故障驗(yàn)證。第三個(gè)底線是“所有指標(biāo)必須有對(duì)應(yīng)數(shù)據(jù)版本和代碼版本”否則三個(gè)月后復(fù)現(xiàn)不出結(jié)果任何對(duì)比都是空的。把這三個(gè)底線寫(xiě)進(jìn)團(tuán)隊(duì)評(píng)審清單比多調(diào)一個(gè)模型參數(shù)更值得。本文還有配套的精品資源點(diǎn)擊獲取