從數據到模型:實現自動駕駛高效感知

來源 |  我愛計算機視覺
知圈  進“域控制器群”請加微13636581676,備注域


以上視頻為輕舟智航x火山引擎全無人自動駕駛Demo,車輛在城市晚高峰時段自己從地庫出發接了3張訂單又自動回去收車,一路完成了自動躲外賣小哥、火車站送客、禮讓行人的復雜操作...

網友紛紛留言:“無人車長大了,會自己賺錢養家了”。

成立的短短兩年時間達到如此成就,先進的研發理念背后是“輕、快、高效”的研發基因。

前段時間CV君有幸參加了國內自動駕駛公司輕舟智航的技術直播活動,活動主題是Efficient Perception(高效感知),介紹了輕舟智航在產品研發中輕快、高效的研發思路,非常值得借鑒。

主講: 楊曉東,輕舟智航 Head of Machine Learning
整理: CV君

這里面Efficient Perception集中表現在兩個方面,分別是:Data-Efficient和Model-Efficient。

  • Data-Efficient: 目的是通過機器學習的方法,來利用和挖掘海量未標注的自動駕駛的數據,來加快感知模型的開發。
  • Model-Efficient: 目的是利用數據驅動的學習方式,來替代工程師的手動設計以及手動調參,使得感知模型可以更方便、更快捷地部署到新的場景,解決新的類別。

本文將以案例的形式介紹Efficient Perception在全景分割、單目深度估計、紅綠燈識別、點云運動預測和點云中3D多物體跟蹤方面的應用。內容有點多,但絕對是干貨,無論是對做開發還是做研究的同學!

Data-Efficient

為什么要有 Data-Efficient Learning?這和在真實算法研發中面對的數據困境有很大關系。

從數據到模型:實現自動駕駛高效感知的圖1
輕舟智航自動駕駛車輛傳感器方案

以輕舟智航自動駕駛車的硬件配置為例,它的傳感器通常包括了激光雷達、相機、毫米波雷達、IMU、GPS等,其中激光雷達和相機往往有多個。統計發現平均每天一輛自動駕駛的車輛產生4TB的數據,但只有不到5%的數據最終用于開發端,其中被用作最終標注來進行模型訓練的更是少之又少,而這只是一輛車的數據情況。考慮到整個無人駕駛產業,像輕舟智航這樣的無人駕駛的公司,自動駕駛車隊在不斷擴張,面臨嚴重的數據挖掘和利用的問題。

如下圖,是數據挖掘和標注中的常見的一些難題:

從數據到模型:實現自動駕駛高效感知的圖2
自動駕駛場景下數據挖掘和標注中的常見難題

例如(a)圖是展示的全景分割的圖像,統計發現對全景分割復雜的場景,比如大于50個物體的時候,僅僅對一幅圖像進行精細的像素級標注,就需要超過數十分鐘的時間,如果對一個自動駕駛車隊的所有數據進行標注,將會是特別耗費人力、財力的事情。

(b)圖表示的是在點云中進行3D的標注,包括所感興趣的物體的3D位置、大小和朝向的信息。在點云中進行標注是非常困難的,經常會出現錯誤,而且非常費時。

(a)和(b)雖然比較困難,但是還是比較可行的,但是對于有些任務,例如(c)圖所示的通過單目相機或者是多幀進行深度估計或者光流估計,甚至幾乎沒辦法提供標注。

(d)圖展示的是感知數據中的分布情況,是很明顯的長尾分布。這意味著標注的數據,很大程度上是在重復一些比較常見或者是比較簡單的一些情況。而對于真正困難和少見的數據,一般情況下標注的效率是非常低的。

所以在輕舟智航,Data-Efficient Learning應運而生,希望通過半監督學習、自監督學習和數據合成的方式,充分利用海量的未標注或者弱標注的數據,實現高效感知的開發。

  • 半監督學習全景分割

全景分割大體上可以分解為兩個子模塊:語義分割和實例分割,但在開發過程中對于一張圖像進行完全標注是非常費時費力的,為了省時省力又最大化利用數據,輕舟智航團隊進行了如下半監督學習與全景分割結合的探索:

從數據到模型:實現自動駕駛高效感知的圖3
三種半監督方案示例

1)Spatial Semi-Supervised Learning(空間半監督學習):即通過大量圖像的統計分析,選擇性地在一張圖片里進行區域標注。盡管看起來簡單直接,但實踐表明可以減少80%的標注成本,同時可以保證全景分割模型的效果。

2)Temporal Semi-Supervised Learning(時序半監督學習):在一些長的序列里面,通常選擇關鍵幀來進行標注,但是這些關鍵幀在整個序列里所占的比例非常低。為了更好利用非關鍵幀的數據,通過性能更強的offboard teacher model,在未標注的幀上生成偽標簽,并將這些偽標簽標注的數據和人標注的數據混合在一起,進行onboard模型的訓練,可以大幅度提升全景分割模型的效果。

3) Cross-Sensor Semi-Supervised Learining(跨傳感器半監督學習):以3D點云和圖像數據為例,3D點云里的標注數據,包括物體的3D的bounding box,而對于一個box內部的點,可以認為它們和box所擁有的label是一致的,所以可以利用激光雷達和相機之間的關系,將點云投射到圖像上,這樣就可以將點云里面標注的labels利用在圖像上。

綜合利用這三種半監督的形式,可以利用不同模態數據的標注,提升最終全景分割模型的開發。

從數據到模型:實現自動駕駛高效感知的圖4
以上展示的是全景分割模型的結果
上半部分是語義分割的結果,下半部分是全景分割的結果

該模型不僅精確度高,而且運行速度很快,經過優化以后,在1024×1920分辨率的圖像上可以跑到200FPS。

  • 自監督學習單目相機深度估計


從數據到模型:實現自動駕駛高效感知的圖5
整體算法框架

上圖展示了單目深度估計的一個常用框架,輸入數據target image和source image,主要模塊為:

a)pose network,估計target image到source image的位姿變換;

b)depth network,估計target image的depth信息;

c)view synthesis合成模塊,通過結合估計出來depth、pose以及source image,合成一個新的target image,合成結果和原始的target image進行計算loss,就可以驅動整個深度估計自監督學習的過程。

輕舟智航團隊結合自動駕駛系統和環境特點,對上述算法做了改進,取得了更好的效果。上述自監督學習方式,假設環境是靜止的,即圖像中的每個pixel,它們擁有同樣的位姿變化,但是這樣的假設在場景中有移動的物體時,并不成立。尤其是當運動的物體與自車形成相對靜止的狀態時,會出現對運動物體非常錯誤的深度估計,形成無限遠的空洞。為克服這一問題,輕舟智航團隊提出了hybird-pose的方法,讓不同的運動物體擁有自己的pose,這樣可以大幅度改善對運動物體的效果。

從數據到模型:實現自動駕駛高效感知的圖6
與之前工作的結果比較,深度估計的“黑洞”消失了

通過上述改進,獲得了更精確的深度估計結果,對于相對靜止的運動車輛也不會出現類似黑洞的錯誤。

  • 數據合成紅綠燈識別

數據合成是強有力的增加訓練數據的方法,低成本合成帶標簽的數據可大大提升模型訓練效率,降低模型部署成本。

針對數據難以收集的閃爍的紅綠燈(出現短時,且往往在臨時設置的紅綠燈上)識別,下圖展示了輕舟智航團隊使用的生成模型框架:

從數據到模型:實現自動駕駛高效感知的圖7
紅綠燈生成算法框架

其特點有:

1)通過在輸入端加入class embedding,在loss上加入classification loss,將經典的unconditional generation,擴展到conditional generation,實現可控的圖像生成。生成類別紅燈、綠燈、黃燈,是程序可控制的,無需人工檢查、標注。

2)通過style mixing和masking操作,可以很好地將一個亮的紅綠燈狀態轉成滅的狀態,將亮燈和滅燈組合在一起,就可以生成大量的閃爍的紅綠燈的數據,而且閃爍頻率也是可以控制的。

3)上述masking 操作可以讓程序非常方便的獲取燈體的bounding box,這可以將紅綠燈分類的任務轉變成檢測的任務,對于相距較近的紅綠燈的識別很有幫助,因為此時僅使用分類模型會造成混亂。

從數據到模型:實現自動駕駛高效感知的圖8
合成結果示例

實驗證明,將上述方法大量合成的閃爍的紅綠燈與真實標注的數據一同加入模型訓練,可以大幅度提升紅綠燈識別的性能。

  • 自監督學習點云運動狀態


自動駕駛汽車的運動狀態估計是一個非常重要的課題,實時理解各種交通參與者的運動,對于各個技術模塊來說都非常重要,涉及諸多任務,如檢測、跟蹤、預測、規劃等。針對不同的點云運動預測方法,仍存在諸多挑戰。

從數據到模型:實現自動駕駛高效感知的圖9
點云運動預測的3種方法示例

1)通過點云物體識別,觀測歷史信息,來獲取運動信息,缺點是系統設計者永遠無法定義所有可能出現的類別。

2)通過點云對整個場景理解,獲取場景流,從而獲得運動信息,這看起來是一個不錯的方案,但目前場景流計算往往非常耗時,無法滿足自動駕駛車對實時性的要求,暫時不具備實用價值。

3)基于BEV(Bird’s Eye View)的方式,把激光雷達點云畫成一個個小網格(每個網格單元被稱為體柱),點云運動信息可以通過所有體柱的位移向量來描述,該位移向量描述了每個體柱在地面上的移動大小和方向。這種方法雖然簡化了點云運動信息,計算速度很快,但需要依靠大量帶有標注的點云數據,而點云數據的標注成本比普通圖像更高。

輕舟智航研發人員通過結合激光雷達和相機數據,改進了第三種方法,使用物體結構一致性和跨傳感器正則化作為物體運動監督信息,使監督學習變成自監督學習,避免大量的點云標注,巧妙的解決了這個問題。

如下圖所示,為了充分利用BEV中運動表征的優點,研究團隊將點云組織成體柱(Pillar),并將與每個體柱相關的運動信息稱為體柱運動(Pillar Motion)

從數據到模型:實現自動駕駛高效感知的圖10
該研究提出的自監督體柱運動學習概覽

研究團隊先引入了一種基于點云的自監督學習方法,假設連續兩次掃描之間的體柱或物體的結構形狀是不變的。然而,這在大多數情況下是不成立的,因為激光雷達的稀疏掃描,連續的兩個點云缺乏精確的點與點的對應。

解決方案是利用從相機圖像中提取的光流來提供跨傳感器正則化。如下圖所示,這種設計形成了一個統一的學習框架,包括激光雷達和配對相機之間的交互:

(1)點云有助于將自車運動(Ego-Motion)導致的運動從光流中分解出來;

(2)光流為點云中的體柱運動學習提供了輔助正則化;

(3)反投影(Back-Projected)光流形成的概率運動掩膜(Probabilistic Motion Masking)提升了點云結構的一致性。

另外,因為與相機相關的模塊僅用于訓練,在推理階段不會被使用,因此,在運行時不會對相機相關的模塊引入額外的計算。

從數據到模型:實現自動駕駛高效感知的圖11
用于點云體柱運動估計的自監督學習框架

從數據到模型:實現自動駕駛高效感知的圖12
概率運動掩膜說明,
左:投影點在前向相機圖像上的光流(已將自車運動分解)。
右:點云的一部分,顏色表示非空體柱的靜態概率。

從數據到模型:實現自動駕駛高效感知的圖13
與其他SOTA方法的比較

這項工作發表于 CVPR 2021,代碼和模型均已開放:

論文鏈接: https://arxiv.org/pdf/2104.08683.pdf
項目鏈接: https://github.com/qcraftai/pillar-motion

無需人工標注,效果又快又好!這項工作可說是自監督學習成功的典范了!

Model-Efficient

關于Model-Efficient,主要的目的是通過數據驅動的方式,將很多工程師手動設計和調試的任務轉化成一個可學習的過程,使模型在新的環境或者是增加新的類別時,快速地進行部署和訓練,節省工程師設計和調試時間。

以點云中3D多物體的跟蹤為例,tracking-by-detection的方法居于主導地位。但基于tracking-by-detection方法最大的弊端是,啟發式匹配步驟(heuristic matching)通常需要人工設計匹配規則和調試相關參數。這在實際的工程應用中帶來了諸多困難:

  1. 人工設計的規則受限于工程師的領域和先驗知識,其效果往往不如基于數據驅動的方法好,后者可以通過機器學習從大量數據中自主學習發掘規律;

  2. 調試匹配規則參數時,往往費時費力。比如在無人駕駛場景中需要檢測和跟蹤多種類別目標(車、行人、兩輪車等等),手動調參時,需要針對每一類別進行特定調試;

  3. 傳統方法可擴展性比較差,容易重復勞動——這個數據場景調好的參數,可能在另一個數據場景效果不佳,需要重新調試。


輕舟智航的研發人員嘗試在點云3D多目標跟蹤任務中去除啟發式匹配步驟,如下圖所示:

從數據到模型:實現自動駕駛高效感知的圖14
Tracking-by-Detection方法與SimTrack整體比較

給定原始點云數據,首先使用pillar或voxel方法將其體素化(voxelize),然后使用PointNet提取每個pillar或voxel的特征,在backbone中使用2D或3D卷積操作得到鳥瞰圖特征。在detection head中使用centerness map上的位置表示目標所在位置,除了輸出centerness map外,detection head還輸出目標尺寸和朝向等信息。

算法的總體結構如下圖所示:

從數據到模型:實現自動駕駛高效感知的圖15
SimTrack算法總體框架

網絡輸出3個分支,其一為hybrid-time centerness map分支,用于檢測目標在輸入的多個點云中首次出現的位置;以方便讀取目標的跟蹤身份(tracking identity);其二為motion updating分支,預測目標在輸入的多個點云中的運動偏移量,用來把目標由首次出現的位置更新到當前所在位置;其三為回歸分支,預測目標的其他屬性,比如尺寸和朝向等。

在推理時,首先將上一時刻推理得到的 updated centerness map 從數據到模型:實現自動駕駛高效感知的圖16 通過自車位姿(ego-motion)轉換到當前坐標系下,然后將其與當前時刻的hybrid-time centerness map  從數據到模型:實現自動駕駛高效感知的圖17 融合,并進行閾值判斷以去掉dead object;其次從上一時刻的updated centerness map讀取跟蹤身份到當前時刻的hybrid-time centerness map;最后使用motion updating分支輸出的motion信息更新當前目標的位置,得 從數據到模型:實現自動駕駛高效感知的圖18

結合回歸分支輸出的目標屬性信息,得到最終結果,如上圖最右側所示。在上圖右側框中,ID為1的目標表示dead object,它有比較低的置信度;ID為2~4的目標為檢測并跟蹤到的目標,ID為5的目標為新出現的目標(new-born object)。

在推理時,對于初始時刻的點云,只將該幀點云單獨作為算法的輸入,得到檢測結果用于初始化 從數據到模型:實現自動駕駛高效感知的圖19

從數據到模型:實現自動駕駛高效感知的圖20

該方法SimTrack論文被 ICCV 2021 收錄,將目標關聯、dead object清除、new-born object檢測集成在了一起,顯著降低了跟蹤系統的復雜程度。

同樣,論文和代碼已經公開,感興趣的同學可以參考:

論文鏈接: https://arxiv.org/pdf/2108.10312.pdf
項目鏈接: https://github.com/qcraftai/simtrack

總結

通過上述輕舟智航研發的真實案例,給我們帶來很多啟發:

1、在產品研發中實現Data-Efficient和Model-Efficient是非常重要的,這在做單一方向的學術研究中難以體會,但直接關系到成本和實際落地。

2、在我們認知中,單一算法往往是針對特定模式數據的,但在真實具體場景中挖掘多傳感器數據的相互輔助作用,有時候會帶來“奇效”,省卻大量人力。

3、人工智能下半場,半監督學習和自監督學習越來越受到大家重視,但如何運用起來,需要深厚、細致的場景挖掘能力!

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP