做自動駕駛芯片必須軟硬一體,最多的工作不是芯片本身,而是與之對應(yīng)的算法庫。對于自動駕駛,英偉達(dá)提供兩種合作模式。
圖片來源:互聯(lián)網(wǎng)
一種是車企交出全部靈魂,英偉達(dá)提供全套解決方案,包括底層OS,中間件DRIVEWORKS,上層應(yīng)用模塊DRIVE AV包括座艙的模塊DRIVE IX也一起提供。不過中國禁止國外廠家上路采集信息,也就是用于識別的訓(xùn)練數(shù)據(jù)集還是需要中國廠家自己去做。如果是在美國,訓(xùn)練數(shù)據(jù)集英偉達(dá)也可以提供。
另一種是車企交出部分靈魂,英偉達(dá)提供底層的基礎(chǔ)算法,這些算法大多基于手工模型,和深度學(xué)習(xí)沒關(guān)聯(lián)。實(shí)際深度學(xué)習(xí)或者說AI是自動駕駛領(lǐng)域最容易做的部分,搜集數(shù)據(jù),標(biāo)注數(shù)據(jù),訓(xùn)練數(shù)據(jù),提取權(quán)重模型。這也是為什么AI不具備可解釋性,無法迭代,好在AI可溯源。工作量最大,難度最高的都是非深度學(xué)習(xí)部分。手工模型,傳統(tǒng)算法的好處是可解釋,可迭代,具備確定性。
后一種的算法庫,英偉達(dá)稱之為VPI,即Vision Programming Interface,2021年2月發(fā)布,目前是2.0版本,VPI除了針對智能駕駛,也能用在任何計算機(jī)視覺領(lǐng)域,英偉達(dá)Jeston系列硬件平臺都支持VPI。VPI提供一系列軟件庫,可在英偉達(dá)的硬件平臺上得到加速,通常加速器還叫Backend后端。VPI用來取代NVIDIA®VisionWorks™。VPI可以最大化利用硬件,特別是Xavier和Orin的PVA、VIC、OFA。簡單地說VPI將一些簡單的算法封裝成了類似硬件指令集的指令,對用戶幾乎透明,可直接調(diào)用,讓原本需要N行代碼才能完成的算法函數(shù),只需一行指令就完成,讓不熟悉基礎(chǔ)算法的人也能勝任。大大縮減了開發(fā)周期和開發(fā)人員,效率顯著提升。缺點(diǎn)是被英偉達(dá)深度捆綁,想換個平臺絕無可能。
圖片來源:互聯(lián)網(wǎng)
用C++或Python都可以直接使用。
- PVA(Programmable Vision Accelerator),可編程視覺加速器;VIC(Video Image Compositor),做一些固定功能的圖像處理,如縮放、色彩轉(zhuǎn)換、消噪;NVENC(NVIDIA Encoder Engine),主要做視覺編碼,也能做稠密光流應(yīng)用。
整個VPI的執(zhí)行概念,就是提供適合實(shí)時圖像處理應(yīng)用的異步計算管道,由一個或多個異步計算流(streams)組成,這些流在可用計算后端(backends)的緩沖區(qū)(buffers)上運(yùn)行算法(algorithms),流之間使用事件(events)進(jìn)行同步。VPI將數(shù)據(jù)封裝到需要使用的每個算法的緩沖區(qū)中,提供Images(二維圖像)、Arrays(一維數(shù)組)和Pyramids(二維圖像金字塔)的三種抽象,以及用戶分配內(nèi)存包裝,由VPI直接分配和管理。
英偉達(dá)VPI 2.0算法對應(yīng)硬件。
圖片來源:互聯(lián)網(wǎng)
算法庫主要包含三類算法:
- 一是簡單的圖像前處理,包括各種平滑濾波、鏡頭畸變矯正、縮放、透視、拼接、直方圖、消噪、快速傅里葉變換等;
- 二是針對立體雙目視差的獲得;三是光流追蹤。
OFA即光流加速器,為Orin平臺獨(dú)有,Xavier平臺不支持。OFA只針對一個算法,就是立體雙目視差估算。
英偉達(dá)VPI核心算法即圖中這六大算法
圖片來源:互聯(lián)網(wǎng)
盡管只有奔馳和豐田用英偉達(dá)處理器處理立體雙目,新型造車除了RIVIAN目前都不使用立體雙目(小鵬小米可能在將來使用立體雙目),但英偉達(dá)每一次硬件升級都不忘對立體雙目部分特別關(guān)照。
英偉達(dá)立體雙目處理流程
圖片來源:互聯(lián)網(wǎng)
立體雙目視差的獲得需要多種運(yùn)算資源的參加,包括了VIC、GPU(CUDA)、CPU和PVA。
圖片來源:互聯(lián)網(wǎng)
英偉達(dá)Orin平臺立體雙目視差測試成績,要達(dá)到每秒30幀,那么處理時間必須低于30毫秒,考慮到還有后端決策與控制系統(tǒng)的延遲,處理時間必須低于20毫秒。1個下取樣情況下,顯然都無法滿足30幀的要求,4個下取樣,不加置信度圖時,單用OFA就可以滿足。加置信圖后,需要OFA/PVA/VIC聯(lián)手,也能滿足30幀需求。但這只是200萬像素,300萬像素估計就無法滿足了。
圖片來源:互聯(lián)網(wǎng)
并且此時是火力全開,運(yùn)行頻率如下:
- CPU: 12x ARMv8 Processor rev 1 (v8l) running at 2.2016 GHzEMC freq.: 3.1990 GHzGPU freq.: 1.3005 GHzPVA/VPS freq.: 1.1520 GHzPVA/AXI freq.: 832.8 MHzVIC freq.: 729.6 GHzPower mode: MAXNFan speed: MAX
這種火力全開情況下,恐怕不能持續(xù)太長時間。
光流Optical Flow追蹤主要用于目標(biāo)的行駛軌跡的預(yù)測。
圖片來源:互聯(lián)網(wǎng)
上圖就是奔馳用光流法預(yù)測車輛行駛軌跡。
圖片來源:互聯(lián)網(wǎng)
上圖是奔馳的顏色編碼,不同的顏色代表車輛即將行駛的速度和方位角。
光流是利用圖像序列中像素在時間域上的變化以及相鄰幀之間的相關(guān)性來找到上一幀跟當(dāng)前幀之間存在的對應(yīng)關(guān)系,從而計算出相鄰幀之間物體的運(yùn)動信息的一種方法。研究光流場的目的就是為了從圖片序列中近似得到不能直接得到的運(yùn)動場,其本質(zhì)是一個二維向量場,每個向量表示了場景中該點(diǎn)從前一幀到后一幀的位移。那對于光流的求解,即輸入兩張連續(xù)圖像(圖像像素),輸出二維向量場的過程。除了智能駕駛,體育比賽中各種球類的軌跡預(yù)測,軍事行動中的目標(biāo)軌跡預(yù)測都能用到。光流場是運(yùn)動場在二維圖像平面上的投影。因?yàn)榱Ⅲw雙目和激光雷達(dá)都是3D傳感器,而單目或三目是2D傳感器,所以單目或三目的光流非常難做。光流再分為稀疏和稠密(Dense)兩種,稀疏光流對部分特征點(diǎn)進(jìn)行光流解算,稠密光流則針對的是所有點(diǎn)的偏移。
最常見的光流算法即KLT特征追蹤,源自1981年,早期的光流算法都是稀疏光流,手工模型或者說傳統(tǒng)算法。2015年有人提出深度學(xué)習(xí)光流法,在CVPR2017上發(fā)表改進(jìn)版本FlowNet2.0,成為當(dāng)時最先進(jìn)的方法。截至目前,F(xiàn)lowNet和FlowNet2.0依然是深度學(xué)習(xí)光流估計算法中引用率最高的論文。傳統(tǒng)算法計算資源消耗少,實(shí)時性好,效果比較均衡,但魯棒性不佳。深度學(xué)習(xí)消耗大量的運(yùn)算資源,魯棒性好,但容易出現(xiàn)極端,即某個場景非常差,但無法解釋,與訓(xùn)練數(shù)據(jù)集關(guān)聯(lián)程度高。即使強(qiáng)大的Orin也無法FlowNet2.0做到實(shí)時性,畢竟Orin不能只做光流這一件事。因此英偉達(dá)還是推薦KLT。產(chǎn)業(yè)領(lǐng)域光流法主流還是KLT。但學(xué)術(shù)領(lǐng)域已經(jīng)是深度學(xué)習(xí)了。
硬件與算法互相推動,硬件算力的增強(qiáng)讓人們敢于部署越來越大規(guī)模的深度學(xué)習(xí)模型,反過來,這又推動硬件算力的需求,特別是自動駕駛,傳統(tǒng)可解釋算法研究的人越來越少,因?yàn)橥度氘a(chǎn)出比太低,深度學(xué)習(xí)正橫掃一切,但深度學(xué)習(xí)不可解釋,汽車領(lǐng)域需要的是可解釋可預(yù)測可確定。否則無法迭代,無法劃出安全邊際線。這也是自動駕駛難以落地的主要原因。
聲明:本文僅代表作者個人觀點(diǎn)。