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