級融合:信息矩陣與DS證據(jù)理論的Matlab仿真實(shí)踐)
做自動駕駛感知融合這幾年有個體會越來越深單傳感器的感知能力再強(qiáng)也扛不住“看不到”“看不清”“看錯”三個字。攝像頭在逆光下把白色廂式貨車當(dāng)背景毫米波雷達(dá)把靜止的鐵護(hù)欄當(dāng)成目標(biāo)激光雷達(dá)在雨霧天點(diǎn)云稀疏到?jīng)]法聚類。真正到了工程落地沒人指望某一個傳感器永遠(yuǎn)是對的大家心里都清楚要靠融合把信息捏在一起。可融合做到哪一級用什么理論框架不同做法之間的差距相當(dāng)大。這篇內(nèi)容我圍繞“信息矩陣融合算法 Dempster-Shafer證據(jù)理論 目標(biāo)級融合”這個技術(shù)組合展開結(jié)合一套Matlab仿真代碼談?wù)務(wù)w設(shè)計、核心原理、實(shí)現(xiàn)細(xì)節(jié)和調(diào)試過程中踩過的坑適合正在做多傳感器融合、算法預(yù)研或者畢業(yè)設(shè)計的開發(fā)者參考。先交代一下這套方案解決的核心問題在自動駕駛中攝像頭、毫米波雷達(dá)、激光雷達(dá)各自輸出目標(biāo)列表位置、速度、類型、置信度但這些輸出來自異構(gòu)傳感器坐標(biāo)系不同、精度不同、語義信息也不同。目標(biāo)級融合要做的就是把這些“已經(jīng)形成的目標(biāo)假設(shè)”合并成一份完整、一致、可信的環(huán)境目標(biāo)列表給后續(xù)的決策規(guī)劃模塊用。這里的狀態(tài)估計層面我用信息矩陣做加權(quán)融合屬性識別層面用DS證據(jù)理論處理不確定性。1. 目標(biāo)級融合的整體思路為什么把“決策”放在融合之后1.1 從數(shù)據(jù)級、特征級到目標(biāo)級的演進(jìn)邏輯多傳感器融合按照數(shù)據(jù)處理層次通常分成數(shù)據(jù)級、特征級和目標(biāo)級三類。數(shù)據(jù)級融合直接對原始信號做處理像激光雷達(dá)點(diǎn)云直接疊加、多攝像頭圖像像素級拼接這種方法信息損失最小但對通信帶寬、時間同步和計算資源的要求極高而且不同傳感器如果分辨率差太多原始數(shù)據(jù)根本對不上。特征級融合是從原始數(shù)據(jù)里提取特征后再融合比如分別提取邊緣、角點(diǎn)、深度特征再在特征空間里做匹配靈活性比數(shù)據(jù)級高一些但特征對齊本身就是一個難題。目標(biāo)級融合是層級最高、也是最貼合自動駕駛工程實(shí)踐的方案。它的輸入是各傳感器已經(jīng)完成目標(biāo)檢測和跟蹤后的輸出通常是結(jié)構(gòu)化目標(biāo)列表包括目標(biāo)ID、三維位置、速度、尺寸、類型概率等屬性。融合模塊不關(guān)心這些目標(biāo)是怎么檢測出來的只關(guān)心怎么確認(rèn)兩個傳感器報告的是同一個物理目標(biāo)、怎么把多份有冗余且可能沖突的信息合并成更可信的結(jié)果。這種方案的工程優(yōu)勢很明顯傳感器之間松耦合任意一路傳感器壞了或暫時掉線系統(tǒng)整體還能運(yùn)行通信量小適合分布式部署模塊邊界清晰檢測、跟蹤、融合、決策可以分開開發(fā)和測試。1.2 雙通道融合設(shè)計狀態(tài)通道用信息矩陣屬性通道用DS證據(jù)拿到目標(biāo)級數(shù)據(jù)之后要融合的信息其實(shí)是兩類東西。一類是連續(xù)量比如目標(biāo)的橫縱向位置、速度、加速度這些量有明確的物理單位適合用估計理論處理另一類是離散量比如目標(biāo)是車輛、行人還是自行車每個傳感器會給出類型置信度還有可能是“未知”這些量是語義層面的判斷存在重疊、模糊和沖突不適合用傳統(tǒng)的最小二乘去“平均”。所以我把融合拆成雙通道。狀態(tài)通道走信息矩陣融合每個傳感器上報目標(biāo)時附帶狀態(tài)估計和協(xié)方差矩陣把協(xié)方差求逆得到信息矩陣按互不相關(guān)的原則相加再還原成融合后的狀態(tài)估計和協(xié)方差。這個通道的理論基礎(chǔ)是信息濾波本質(zhì)上是把“不確定性越低貢獻(xiàn)越大”這件事變成了數(shù)學(xué)上的加權(quán)。屬性通道走Dempster-Shafer證據(jù)融合構(gòu)造辨識框架把各傳感器的類型置信度映射成基本概率分配再用Dempster組合規(guī)則合并多路證據(jù)輸出各候選類型的信任度和似然度。為什么要這樣拆分因為這兩類信息在數(shù)學(xué)結(jié)構(gòu)上完全不同。位置和速度可以用高斯分布近似表達(dá)誤差傳播和更新有一套成熟的體系類型判斷本質(zhì)上是分類問題分類器輸出的概率并不總是滿足可加性和完備性直接做貝葉斯融合在“傳感器可能互相矛盾”的場景下會給出偏激的結(jié)果。DS理論允許把概率質(zhì)量賦予集合而不是單個元素天然支持“不確定”和“不知道”的表達(dá)這一點(diǎn)和自動駕駛中“目標(biāo)類型確實(shí)不確定”的現(xiàn)實(shí)非常契合。2. Dempster-Shafer理論的核心細(xì)節(jié)與BPA構(gòu)造2.1 辨識框架、BPA、信任與似然的關(guān)系DS證據(jù)理論最關(guān)鍵的概念是辨識框架也就是所有可能結(jié)論組成的完備集合記作Θ。在自動駕駛目標(biāo)類型融合里可以設(shè)Θ {車輛, 行人, 自行車}這就是一個三元素辨識框架共有2的3次方等于8個子集。基本概率分配函數(shù)BPA給每個子集分配一個質(zhì)量值滿足空集的質(zhì)量為0所有子集質(zhì)量之和為1。和概率分布的區(qū)別在于概率必須把質(zhì)量分給單元素而BPA允許把質(zhì)量分給多元素集合比如m({車輛, 行人}) 0.3這條表示“我認(rèn)為是車或行人但區(qū)分不了”。我對這個特性特別看重它在傳感器被遮擋、目標(biāo)輪廓模糊時非常實(shí)用。信任函數(shù)Bel和似然函數(shù)Pl是從BPA推導(dǎo)出來的兩個區(qū)間端點(diǎn)。Bel(A)是所有A子集的質(zhì)量之和表示“對A的完全信任下限”Pl(A)是所有與A有交集的質(zhì)量之和表示“對A的潛在信任上限”。區(qū)間[Bel(A), Pl(A)]就是A的不確定區(qū)間區(qū)間越大說明證據(jù)越拿不準(zhǔn)。在目標(biāo)類型判定時不能只用Bel大小排序還要看Pl和Bel的差距如果差距太大說明當(dāng)前證據(jù)不足以支撐一個果斷的決策不如輸出“未知”。2.2 從分類器輸出到BPA的三種映射方案在Matlab代碼里把傳感器輸出的類型概率轉(zhuǎn)換成BPA是整套算法里最容易出錯的一步。我實(shí)際用過三種方案各有適用場景。第一種是直接映射適用于神經(jīng)網(wǎng)絡(luò)分類器輸出層帶softmax并且訓(xùn)練數(shù)據(jù)分布比較均衡的情況。如果模型輸出車輛0.6、行人0.3、自行車0.1直接把這三個置信度作為單元素焦元的BPAm({車輛}) 0.6m({行人}) 0.3m({自行車}) 0.1不分配多元素質(zhì)量。這種做法的缺陷是模型如果看到未知目標(biāo)比如一輛三輪車softmax還是會強(qiáng)行給出一個分布哪一類都不高但硬要選一個直接映射會把這種錯誤固化進(jìn)融合結(jié)果。第二種是基于先驗概率打折的方案也是我在項目里最常用的。每種傳感器都有一個混淆矩陣表示它把真實(shí)目標(biāo)判斷成各類別的概率。假設(shè)通過經(jīng)驗標(biāo)定知道某攝像頭的目標(biāo)類型識別可靠性只有70%我就從總質(zhì)量1里取出0.3作為全局不確定質(zhì)量分配給全集Θ剩下0.7按模型輸出比例分配給單元素。這樣即使模型輸出帶偏差融合公式里也會保留“我不知道”的空間。第三種是基于似然比或證據(jù)距離的構(gòu)造用于處理傳感器輸出不是概率而是邊界框置信度加類型的場景通過歸一化把檢測置信度轉(zhuǎn)成BPA。具體到代碼實(shí)現(xiàn)我會用一個結(jié)構(gòu)體數(shù)組存儲BPA每個元素包含焦元列表focal_elements和對應(yīng)的質(zhì)量值mass_values。建議不要把BPA寫成一個固定長度的數(shù)組因為不同傳感器在不同時刻的有效焦元集合是變的。比如傳感器A輸出車輛0.8、全集0.2傳感器B輸出車輛0.7、行人0.2、全集0.1焦元集合不同組合時要動態(tài)求交集。Matlab用cellfun和unique配合可以比較優(yōu)雅地完成這個操作。2.3 Dempster組合規(guī)則的實(shí)現(xiàn)與沖突困境Dempster組合規(guī)則是DS融合的核心計算公式是組合后的質(zhì)量正比于所有交疊為空集的兩兩組合質(zhì)量乘積。規(guī)則本身不復(fù)雜但實(shí)現(xiàn)時要注意歸一化系數(shù)K的處理。K是所有空集交疊質(zhì)量乘積之和它反映了兩路證據(jù)的沖突程度。如果K趨近1說明兩路證據(jù)幾乎完全矛盾比如傳感器A強(qiáng)烈認(rèn)為是車輛傳感器B強(qiáng)烈認(rèn)為是行人此時組合結(jié)果對K極其敏感微小數(shù)值誤差都會被放大。我建議代碼里做一個沖突系數(shù)閾值判斷K高于某個上限比如0.8時丟棄融合結(jié)果改用單路高置信證據(jù)或者輸出未知類型而不是強(qiáng)行組合出一個沒有依據(jù)的結(jié)論。實(shí)現(xiàn)Dempster組合規(guī)則時有幾個數(shù)值細(xì)節(jié)值得注意。第一浮點(diǎn)數(shù)累加時K會存在誤差質(zhì)量極小的焦元可以設(shè)置一個截斷閾值比如1e-6低于閾值的質(zhì)量直接清零再重新歸一化避免淹沒在后續(xù)計算里。第二如果有多路證據(jù)不要一次性把所有BPA塞進(jìn)組合規(guī)則里而是兩兩遞歸組合。組合順序?qū)Y(jié)果有影響但不是理論缺陷實(shí)際工程項目里一般按傳感器可信度從高到低組合這樣低可信傳感器引入的噪聲影響更小。第三組合后檢查是否出現(xiàn)了不正常的全零質(zhì)量這通常意味著某路BPA構(gòu)造錯誤尤其是出現(xiàn)了m(空集)不為0的情況一定要在BPA構(gòu)造函數(shù)入口做斷言檢查。3. 信息矩陣融合與目標(biāo)關(guān)聯(lián)的實(shí)現(xiàn)要點(diǎn)3.1 信息矩陣與協(xié)方差的關(guān)系為什么要用信息矩陣狀態(tài)融合這一路我選擇用信息矩陣而不是直接加權(quán)平均原因是信息矩陣在“融合多路具備不同不確定性的估計”時數(shù)學(xué)形式非常自然。對一個高斯分布估計信息矩陣定義為協(xié)方差矩陣的逆矩陣信息向量定義為信息矩陣乘以狀態(tài)向量。兩路相互獨(dú)立的估計做融合時融合后的信息矩陣等于各路信息矩陣之和融合后的信息向量等于各路信息向量之和這個加法操作不需要額外計算權(quán)重信息量大的估計自動占據(jù)主導(dǎo)地位這是卡爾曼濾波和信息濾波的等價性推導(dǎo)出來的結(jié)果。我在Matlab里寫這段代碼時會用狀態(tài)向量x [px, py, vx, vy]協(xié)方差矩陣P。每個傳感器上報目標(biāo)時會附帶對應(yīng)的P里面包含位置方差、速度方差以及px和vx等狀態(tài)量之間的協(xié)方差項。融合前先判斷兩路輸入是否確實(shí)是同一個目標(biāo)然后做信息矩陣融合。舉個例子攝像頭測位置精度高協(xié)方差較小雷達(dá)測速度精度高協(xié)方差在速度維度上更小。融合后位置維度攝像頭貢獻(xiàn)大速度維度雷達(dá)貢獻(xiàn)大得到的協(xié)方差矩陣每個維度都比單路估計小。這個效果在加權(quán)平均方案里很難自然體現(xiàn)因為固定權(quán)重不會隨場景變化。有一點(diǎn)我在實(shí)際代碼里踩過坑直接用協(xié)方差求逆計算信息矩陣時如果協(xié)方差矩陣病態(tài)比如某個維度方差極小接近1e-8量級求逆結(jié)果會爆炸導(dǎo)致融合結(jié)果震蕩。解決方案是加正則項或者做特征值截斷。特征值截斷的邏輯是小于最大特征值1e-6倍的特征值強(qiáng)制設(shè)為該閾值再重構(gòu)對稱正定矩陣。Matlab里用eig分解之后修正再組合代碼量不大但對數(shù)值穩(wěn)定性提升非常明顯。3.2 時間同步與空間對準(zhǔn)目標(biāo)級融合有一件繞不開的臟活時間同步和空間對準(zhǔn)。時間不同步直接融合出來的位置全是指向不同時刻的毫無意義。我用的方案是選擇融合主時間基準(zhǔn)一般是精度高、更新率穩(wěn)定的那路傳感器的時間戳其他傳感器通過線性插值或者恒定速度外推把目標(biāo)位置和速度對齊到主時間戳上。數(shù)據(jù)更新率差異大的情況下比如激光雷達(dá)10赫茲、毫米波雷達(dá)20赫茲我會選擇緩存最近兩幀目標(biāo)狀態(tài)在融合瞬時做線性外推代碼實(shí)現(xiàn)不復(fù)雜但很有效。空間對準(zhǔn)是坐標(biāo)系轉(zhuǎn)換問題。每路傳感器都有自己的安裝位置和朝向角目標(biāo)位置要從傳感器坐標(biāo)系轉(zhuǎn)換到統(tǒng)一的車輛坐標(biāo)系。這個轉(zhuǎn)換包含平移和旋轉(zhuǎn)安裝參數(shù)可以通過標(biāo)定得到。我在代碼里建議把坐標(biāo)系轉(zhuǎn)換封裝成一個獨(dú)立函數(shù)sensor_to_vehicle(x_sensor, y_sensor, sensor_pose)其中sensor_pose包含安裝位置的x,y偏置和航向角。注意航向角的正方向定義要統(tǒng)一別一個傳感器用度、另一個用弧度這種低級錯誤排查起來非常折磨人。統(tǒng)一轉(zhuǎn)換后再檢查目標(biāo)是否在合理范圍內(nèi)比如目標(biāo)在車輛后方30米卻在雷達(dá)上報里顯示為前方目標(biāo)這種大概率是坐標(biāo)轉(zhuǎn)換或傳感器安裝參數(shù)出了問題。3.3 目標(biāo)關(guān)聯(lián)馬氏距離與屬性聯(lián)合門限關(guān)聯(lián)是目標(biāo)級融合承上啟下的關(guān)鍵步驟關(guān)聯(lián)錯了后面一切融合都白費(fèi)。我先用空間位置做初步關(guān)聯(lián)兩張目標(biāo)觀測的差值除以聯(lián)合協(xié)方差得到馬氏距離公式是d (z1-z2)^T (P1P2)^-1 (z1-z2)。這里用聯(lián)合協(xié)方差而不是某個固定閾值是為了適應(yīng)不同傳感器精度差異。攝像頭位置精度高同樣5米的歐式距離在馬氏距離里會被放大雷達(dá)相反這就要求關(guān)聯(lián)門限必須同時考慮位置差和協(xié)方差否則容易把不同目標(biāo)誤關(guān)聯(lián)或把同一目標(biāo)漏關(guān)聯(lián)。光靠空間關(guān)聯(lián)還不夠。兩個距離很近的目標(biāo)比如一個行人貼著車站雷達(dá)和攝像頭分別檢測如果空間位置相近馬氏距離可能過門但屬性一個是行人攝像頭一個是車輛雷達(dá)這種關(guān)聯(lián)值得懷疑。所以在空間關(guān)聯(lián)的基礎(chǔ)上我加了屬性一致性檢查把兩路目標(biāo)類型轉(zhuǎn)化成BPA形式計算它們的證據(jù)距離超過閾值就拒絕這段關(guān)聯(lián)。用證據(jù)距離而不是簡單地比較概率最高的類別是因為BPA中“未知”質(zhì)量的存在會讓“車輛vs車輛”和“車輛vs行人的全集”在語義上有微妙差異證據(jù)距離能更合理地量化這種差異。關(guān)聯(lián)正確性直接影響后續(xù)融合效果我在代碼里維護(hù)一個關(guān)聯(lián)矩陣每行代表融合目標(biāo)ID每列代表傳感器來源矩陣值標(biāo)識某路傳感器是否關(guān)聯(lián)到對應(yīng)目標(biāo)這樣后續(xù)實(shí)現(xiàn)時邏輯清楚調(diào)試也方便。關(guān)聯(lián)算法建議從最簡單的最近鄰法開始確認(rèn)整體流程正確后再考慮復(fù)雜算法貪心最近鄰在目標(biāo)稀疏、傳感器質(zhì)量好的場景下表現(xiàn)并不差貿(mào)然上多目標(biāo)指派算法反而增加了調(diào)試難度。4. Matlab代碼實(shí)現(xiàn)的完整流程與關(guān)鍵節(jié)點(diǎn)4.1 仿真場景與傳感器模型設(shè)計Matlab仿真的第一步是定義場景我設(shè)計了一個四車加一個行人的路口場景。在車體坐標(biāo)系下目標(biāo)1是正前方25米以60km/h行駛的轎車目標(biāo)2是左側(cè)車道15米處以50km/h行駛的SUV目標(biāo)3是前方8米處靜止站在人行道旁的行人目標(biāo)4是右側(cè)30米處對向行駛的自行車。每路傳感器都有各自特性攝像頭位置精度高但速度精度一般類型識別對行人和車輛較好但晚上容易把自行車誤判成行人毫米波雷達(dá)速度精度高但位置橫向精度差對靜止目標(biāo)的檢測能力弱激光雷達(dá)位置和尺寸精度高但遠(yuǎn)距離點(diǎn)云稀疏時類型判別不敢下結(jié)論。這些差異都體現(xiàn)在傳感器協(xié)方差矩陣和BPA構(gòu)造參數(shù)里讓仿真結(jié)果貼近真實(shí)。仿真循環(huán)以0.1秒為步長共20秒對應(yīng)200幀。每幀中按一定檢測概率決定傳感器是否檢測到目標(biāo)比如激光雷達(dá)對行人的檢測概率設(shè)為0.85毫米波雷達(dá)對行人的檢測概率只有0.6以此模擬漏檢。生成傳感器觀測時在真值上加協(xié)方差對應(yīng)的隨機(jī)擾動再把目標(biāo)類型置信度輸入到混淆矩陣模型里得到分類輸出。這樣一套流程跑下來得到了三路帶噪、帶漏檢、偶爾分類錯誤的目標(biāo)列表作為融合算法的輸入。4.2 核心函數(shù)拆分與關(guān)鍵代碼邏輯代碼拆分遵循“一個函數(shù)只做一件事”的原則main_simulation.m負(fù)責(zé)場景循環(huán)和數(shù)據(jù)流控制特殊處理的部分封裝成獨(dú)立函數(shù)。BPA構(gòu)造函數(shù)make_bpa_from_classifier接收分類輸出向量和混淆矩陣按2.2中的打折方案生成BPA。比如攝像頭分類器輸出車輛0.8、行人0.1、自行車0.1混淆矩陣主對角線表示各類型正確識別率其他位置表示誤判率函數(shù)內(nèi)部會動態(tài)計算質(zhì)量分配??梢钥聪逻@個函數(shù)的核心邏輯function bpa make_bpa_from_classifier(type_prob, confusion, unknown_mass) % 輸入type_prob是分類器輸出的類型概率向量 % confusion是混淆矩陣unknown_mass是分配給全集的不確定質(zhì)量 % 輸出bpa結(jié)構(gòu)體包含焦元集合和質(zhì)量 n_type length(type_prob); bpa.focal {}; bpa.m []; % 保留部分質(zhì)量給全集表達(dá)不確定性 bpa.focal{1} 1:n_type; bpa.m(1) unknown_mass; % 剩余質(zhì)量按分類概率分配到單元素焦元 remaining 1 - unknown_mass; for t 1:n_type bpa.focal{end1} t; bpa.m(end1) remaining * type_prob(t); end % 用混淆矩陣進(jìn)一步打折可靠度 reliability mean(diag(confusion)); bpa.m(1) 1 - reliability * (1 - bpa.m(1)); for t 1:n_type bpa.m(t1) reliability * bpa.m(t1); end % 歸一化保證和為1 bpa.m bpa.m / sum(bpa.m); endDS組合函數(shù)ds_combine是實(shí)現(xiàn)Dempster規(guī)則的模塊輸入是兩個bpa結(jié)構(gòu)體輸出組合后的bpa。核心是雙層循環(huán)遍歷所有焦元組合計算交集和沖突累加。組合后用沖突系數(shù)K做一致性判定K超過閾值時返回一個明確的沖突標(biāo)記由上層決定處理策略。這個函數(shù)我建議固化后做單元測試用幾個經(jīng)典手算案例驗證輸出比如車輛0.9和質(zhì)量1.0的證據(jù)組合結(jié)果應(yīng)該還是車輛0.9這種守恒性質(zhì)能幫你很快排除bug。信息矩陣融合函數(shù)info_matrix_fusion的輸入是兩個目標(biāo)狀態(tài)x1、x2及協(xié)方差P1、P2先對P做特征值截斷修正再求逆得到信息矩陣按信息形式加權(quán)得到融合狀態(tài)。代碼實(shí)現(xiàn)時要特別注意矩陣維度一致性Matlab里四維狀態(tài)對應(yīng)的協(xié)方差是4x4矩陣索引錯一位很容易出現(xiàn)維度不匹配的報錯。4.3 融合決策輸出與可視化評估融合完成后需要輸出決策結(jié)果并評估質(zhì)量。屬性通道對每個目標(biāo)計算融合BPA后依據(jù)信任函數(shù)和似然函數(shù)判定類型若最大信任度超過0.7且對應(yīng)不確定區(qū)間寬度小于0.3才輸出具體類型否則輸出“未知”。這個保守策略對下游的規(guī)劃模塊非常重要亂猜一個類型導(dǎo)致的后果比承認(rèn)不知道嚴(yán)重得多。狀態(tài)通道輸出融合后的目標(biāo)位置、速度和協(xié)方差橢圓。可視化方面我用Matlab的figure和plot函數(shù)繪制車體坐標(biāo)系下的目標(biāo)分布圖。用不同顏色標(biāo)記不同傳感器上報的目標(biāo)用橢圓畫置信區(qū)間融合后目標(biāo)用另一個顏色加粗繪制。我還疊加一個Confusion/Acceptance面板顯示200幀內(nèi)每個目標(biāo)的類型判定結(jié)果和關(guān)聯(lián)關(guān)系錯誤關(guān)聯(lián)和類型誤判在這種圖上一眼可見。這個可視化面板幫我找到了不少代碼問題強(qiáng)烈建議在實(shí)際項目里也做類似的可視化。另外寫一個metrics函數(shù)統(tǒng)計平均位置誤差相對單傳感器誤差、類型判定正確率、漏關(guān)聯(lián)率和誤關(guān)聯(lián)率。我跑仿真時發(fā)現(xiàn)融合后的平均位置誤差一定要明顯優(yōu)于任何單傳感器否則融合就沒有工程意義。一般來說融合誤差比最優(yōu)單傳感器提升20%到30%是合理的預(yù)期如果提升不明顯大概率是協(xié)方差估計偏大或者融合權(quán)重不合理。5. 常見問題與排查技巧實(shí)錄5.1 高沖突場景下組合結(jié)果反直覺調(diào)試中最常見的問題就是K值很大時Dempster規(guī)則給出違反直覺的結(jié)果。我舉一個真實(shí)場景攝像頭識別目標(biāo)A為車輛置信度0.9雷達(dá)識別同一目標(biāo)為行人置信度0.8。經(jīng)典Dempster組合后算法結(jié)果可能傾向于支持一個兩者都不是的結(jié)論或者輸出不穩(wěn)定的低置信度結(jié)果。這本質(zhì)是因為組合規(guī)則把沖突證據(jù)當(dāng)作“待歸一化的噪聲”而沖突大時這個噪聲會主導(dǎo)結(jié)果。我采用的處理方法分三步。第一步是關(guān)聯(lián)階段先做屬性一致性校驗證據(jù)距離過大的關(guān)聯(lián)對直接拒絕不進(jìn)入融合第二步是給每路傳感器的BPA引入基于歷史可靠性的折扣系數(shù)歷史性能差的傳感器貢獻(xiàn)自動削弱第三步是設(shè)置沖突閾值K超過0.8時不對兩路證據(jù)做Dempster組合而是執(zhí)行“選擇信任度更高者”或“輸出未知”策略。這樣處理之后仿真中即使出現(xiàn)傳感器互相臺杠的情況融合輸出也不會出現(xiàn)離譜的錯誤。5.2 同一目標(biāo)被重復(fù)融合導(dǎo)致過置信這個問題隱蔽但后果嚴(yán)重。同一個物理目標(biāo)可能在一幀內(nèi)被同一傳感器輸出兩個跟蹤軌跡比如攝像頭在目標(biāo)被短暫遮擋時生成了兩個ID融合模塊如果沒識別出兩個關(guān)聯(lián)假設(shè)描述的是同一個目標(biāo)會把兩路“實(shí)際上是同一個來源”的證據(jù)當(dāng)獨(dú)立證據(jù)做組合DS組合規(guī)則會把置信度推到接近1的虛高水平。更復(fù)雜的情況是歷史幀已經(jīng)融合過一次當(dāng)前幀又用同樣的傳感器測量做融合累積置信度看上去越來越強(qiáng)實(shí)際上是在重復(fù)計算同一個來源。解決辦法是融合模塊里維護(hù)一個目標(biāo)生命周期表記錄每個融合目標(biāo)在最近N幀關(guān)聯(lián)到的傳感器ID列表。融合前檢查當(dāng)前證據(jù)的來源是否已經(jīng)存在于目標(biāo)歷史證據(jù)源中如果存在不重復(fù)組合BPA只更新狀態(tài)估計或者對重復(fù)證據(jù)做信息矩陣層面的一致性處理。這個機(jī)制在狀態(tài)通道同樣重要信息矩陣融合假設(shè)各來源獨(dú)立如果違反獨(dú)立性信息會膨脹協(xié)方差被低估Matlab里表現(xiàn)為橢圓越畫越小但實(shí)際上位置還在漂移。5.3 信息矩陣奇異與數(shù)值不穩(wěn)定最開始跑代碼時遇到過信息矩陣求逆報錯的情況。協(xié)方差矩陣在某些場景下會變得接近奇異比如速度方差極小或位置方差極小對應(yīng)信息矩陣元素巨大融合時狀態(tài)更新劇烈震蕩。這不是算法原理有問題是數(shù)值層面沒有做保護(hù)。我后來在求逆前統(tǒng)一做一次對稱正定修正先用eig分解得到特征值向量d和特征向量矩陣V再把小于最大特征值0.000001倍的特征值替換為該值然后重構(gòu)矩陣最后再求逆。這個操作在高維狀態(tài)空間下也能穩(wěn)定工作。還有一個容易忽視的細(xì)節(jié)是信息矩陣相加時如果直接對原協(xié)方差矩陣求逆再加和計算量雖小但浮點(diǎn)誤差會被放大。折中方案是先對協(xié)方差做Cholesky分解再用分解后的下三角矩陣操作精度更好Matlab里chol函數(shù)的數(shù)值穩(wěn)定性比inv好很多。如果仿真中目標(biāo)數(shù)量大增導(dǎo)致組合爆炸提前把循環(huán)改成矩陣運(yùn)算可以在保證仿真實(shí)時性的同時減少數(shù)值誤差。5.4 漏檢與遮擋情況下的一次實(shí)戰(zhàn)處理我印象比較深的一次調(diào)試是仿真中設(shè)置了行人被前方車輛短暫遮擋的場景。遮擋期間攝像頭漏檢雷達(dá)返回一個“未知”類型且位置擾動較大的觀測。按照最初的代碼邏輯漏檢傳感器不參與融合融合結(jié)果退化為單傳感器類型置信度掉得很快決策模塊在幾幀內(nèi)不斷變換對目標(biāo)類型的判斷導(dǎo)致了后續(xù)規(guī)劃動作的猶豫。這個現(xiàn)象在真實(shí)系統(tǒng)里同樣存在解決的關(guān)鍵是“記憶與預(yù)測”。我在融合模塊中增加了一個泄漏積分機(jī)制如果當(dāng)前幀某傳感器漏檢不立即清零它的貢獻(xiàn)而是把上一幀該傳感器對該目標(biāo)的BPA做時間折扣后保留如果連續(xù)多幀漏檢折扣因子逐漸衰減最終自動退出。這樣在短暫遮擋期間融合類型置信度不會劇烈跳動位置估計也可以依靠預(yù)測模型維持。這套機(jī)制的實(shí)際效果是目標(biāo)類型判定在遮擋期間保持了穩(wěn)定明顯減少了下游模塊的誤決策。再分享一個排查方法和協(xié)作建議。如果你跑代碼時發(fā)現(xiàn)融合結(jié)果比單傳感器還差先別急著調(diào)算法參數(shù)先可視化傳感器各自的輸出以及融合輸出逐幀點(diǎn)查關(guān)聯(lián)是否錯誤。大部分問題出現(xiàn)在關(guān)聯(lián)而不是融合本身建議寫一個關(guān)聯(lián)結(jié)果回放的腳本模塊逐幀慢放盯住跳變和錯配的馬氏距離。如果發(fā)現(xiàn)DS融合的置信度始終過于樂觀檢查BPA構(gòu)造里是不是“未知”質(zhì)量分配得太少給全集的質(zhì)量調(diào)大一些往往能顯著改善序貫融合的穩(wěn)定性。按我的經(jīng)驗這套“狀態(tài)通道信息矩陣 屬性通道DS證據(jù)”的組合框架適合在中等規(guī)模的工程原型里落地代碼可控、性能穩(wěn)定、邏輯清晰也不會引入過重的計算負(fù)擔(dān)。如果后續(xù)需要擴(kuò)展到相機(jī)與激光雷達(dá)原始數(shù)據(jù)的深度融合可以在這個框架里繼續(xù)增加特征層分支但注意保持目標(biāo)層信號處理與決策模塊解耦避免以后替換底部模型時讓上層不兼容。仿真參數(shù)建議用隨機(jī)種子固定之后再逐步調(diào)不同隨機(jī)數(shù)下結(jié)果差異往往比參數(shù)差異還大對著充滿隨機(jī)性的輸出調(diào)參數(shù)容易調(diào)到“正好適配某個隨機(jī)種子”的假象白白浪費(fèi)時間。這個內(nèi)容其實(shí)還能繼續(xù)延伸比如把分類器輸出的軟概率用溫度系數(shù)標(biāo)定后再進(jìn)BPA或者用證據(jù)距離做自適應(yīng)的傳感器權(quán)重調(diào)節(jié)都能明顯提升融合質(zhì)量。我從這套仿真代碼里收獲的最大經(jīng)驗其實(shí)不是某個公式而是意識到“知道不知道”才是融合算法最難也是最有價值的部分——能夠合理表達(dá)不確定性比一味追求高置信度的說服力強(qiáng)得多。