AI News HubLIVE
站內改寫3 分鐘閱讀

那些讓駕駛崩潰的漏洞

本文回顧了comma.ai的openpilot自動駕駛系統中幾個最有趣的漏洞,包括車輛向右偏移、車道線誤識別、彎道切內線、剎車導致圖像模糊、高速巡航速度不收斂以及訓練與運行時圖像填充不一致等問題。這些漏洞的修復顯著提升了系統性能。

來源Hacker News AI作者: LorenDB

軟件中漏洞無處不在,而通常糟糕的軟件正是因為這些漏洞,而非糟糕的算法選擇。openpilot也不例外;多年來,我們通過引入激動人心的新機器學習技術取得了巨大進步,但大多數駕駛改進實際上源於發現並修復了一些明顯的漏洞。本文將帶你回顧這些年最有趣的幾個漏洞。

向右偏移

2017年,comma還是一家不成熟的公司。用户少、日誌質量低、訓練中除了無量綱的驗證損失外沒有其他指標,也沒有閉環模擬測試。因此,除了駕駛時注意到的明顯問題外,我們基本上對openpilot的實際表現一無所知。從Slack消息中可以看出,我們意識到駕駛模型有輕微向右偏移的傾向,但數月來找不到根本原因或合理解釋。

到年底,我們終於找到了主要原因。模型訓練時,用於預測未來行駛軌跡和車道線的目標值是通過依賴陀螺儀測量及其他傳感器的定位器進行真值標註的。陀螺儀通常存在偏置,而Android系統會在檢測到設備靜止時自動校正偏置。這意味着當openpilot啓動且車輛靜止時,偏置被正確校正。然而,當車輛開始移動後,openpilot設備會發熱,導致偏置變化,但設備不再靜止,因此偏置無法再被校正。偏置與温度的關聯在所有設備上相似,因此所有數據都向同一方向傾斜。最終,通過採用一個更全面的、能準確處理偏置的定位器修復了此問題。

車道誤識別

2019年,我們開始收到一些神秘投訴:在車道線清晰的公路上,車輛會偏離車道。這是因為當時openpilot仍依賴車道線進行駕駛決策,而如圖像所示,在這些情況下,系統會莫名地在車道中間檢測出一條車道線。經過進一步查找,我們發現所有例子都發生在明亮的日光條件下。

查看訓練數據中帶有同樣缺陷的多個例子後,問題變得明顯:在某些光照條件下,陽光會在引擎蓋上反射,形成明亮的白色區域,這被真值標註棧檢測為車道線標記,且始終位於車輛正前方,因此被重建為道路中間的車道線。通過在車道線檢測器中加入這些特定例子的更好真值標註,我們重新訓練了檢測器,並訓練了一個修復後的新駕駛模型。

彎道切內線

2020年10月,有多起投訴稱openpilot在彎道中壓到內側車道線。查看例子後發現,它們都發生在夜間長距離緩彎中,且駕駛模型對路徑和車道線的預測都偏向彎道內側。

對真值標註的調查顯示,定位器在這些情況下錯誤地計算了車輛運動。定位器調試揭示,頭燈照射在連續的長車道線上會給視覺里程計帶來問題。ORB特徵檢測器依據頭燈照明選擇了隨車輛移動的邊緣特徵。這意味着在場景中其他可追蹤特徵很少時,定位器只會依賴這些錯誤特徵,導致其持續偏向彎道內側。通過更智能的ORB特徵匹配和異常點剔除修復了此問題,重新訓練後的模型解決了投訴。

剎車導致圖像模糊

手機攝像頭使用音圈電機移動鏡頭進行對焦。這意味着鏡頭並非剛性固定在對焦位置,而是安裝在彈簧上,通過對焦電機施加力來實現移動。這也意味着如果設備有快速加速,鏡頭會因慣性力而偏移,為保持對焦,電機需要施加補償力。

我們有一個算法來補償2019年使用的OnePlus手機的這種偏移。後來我們換用了Leeco手機,但未重新評估對焦算法。結果發現,我們的補償算法在新設備上導致了明顯的剎車模糊,而這些手機其實完全不需要對焦補償。這個算法恰恰導致了它本應防止的問題!

高速巡航模型不收斂

當openpilot引入實驗模式後,它在高速公路上無法果斷加速或減速到合適的速度。在穩態下,它會一直保持初始速度行駛。例如,在空曠的長直高速上以55英里/小時的速度一直開下去。

openpilot的駕駛模型是在駕駛模擬器中通過策略內訓練(on-policy)進行的。模擬器的輸入是六自由度姿態變化,我們用它代替動作(加速度和曲率),以便對模擬物理進行更精細的控制。我們注意到需要在模擬中加入大量俯仰噪聲,模型才能學會剎車和加速。

經過調查,這是由於俯仰和加速度之間的緊密耦合。在任何正常車輛中,加速都會引起俯仰運動。這意味着加速度必須伴隨相應的俯仰變化。模擬器中缺乏這種真實感可以被訓練的學生模型利用。如下結果所示,通過在模擬加速中模擬真實的俯仰運動來修復這些人為因素,使得模型在速度收斂測試中表現更好。

運行時性能與訓練時不一致

這個漏洞太經典了,我們寫了四次。多年來,openpilot支持多種攝像頭和安裝配置。因此,模型有時訓練時使用的圖像尺寸比某些配置中可用的大。為了適配,需要對圖像進行填充以符合模型期望的輸入尺寸。訓練時和運行時的填充必須一致,但推理棧和訓練棧完全分離。多年來它們各自頻繁更改,且缺乏匹配測試。

以下是所有因填充不一致導致運行時與訓練時不同、從而造成輸出退化的漏洞:2021年、2024年、2026年(兩次)。

回顧

自2017年以來,很多事情發生了變化。藉助我們當前的工具和基礎設施,許多這些漏洞不太可能再進入生產環境。不過,我們仍會寫出許多愚蠢的漏洞,如果你喜歡修復這些漏洞,也許你應該來這裏工作。

—— Harald Schäfer,comma.ai首席技術官