嵌入式視覺解決方案將是汽車實現全自動駕駛的關鍵驅動因素。為汽車裝配眼睛 – 采用多個攝像頭和圖像傳感器 – 是第一步,而汽車解析來自這些圖像的內容并且相應采取行動也至關重要。要做到這一點,嵌入式視覺處理器的硬件必須經過性能優(yōu)化,同時實現低功耗和小體積,擁有對硬件進行高效編程的工具,并且擁有運行這些處理器的算法。
過去,汽車安全的重大改進(例如抗碎裂玻璃、三點式安全帶、氣囊)都是被動安全措施,目的是盡量減少事故造成的傷害?,F在,我們的技術可主動幫助駕駛員第一時間避免碰撞。高級駕駛員輔助系統(tǒng) (ADAS) 將幫助自動駕駛車輛成為現實。盲點偵測可以在駕駛員試圖進入被占用車道時發(fā)出提醒。車道偏離報警和車道保持輔助可在車輛偏離車道時提醒駕駛員,并主動將車輛駛回原先車道。行人偵測可告知駕駛員注意車前或車后的行人,而自動緊急剎車通過剎車而避免事故或者行人受傷。通過將ADAS能力結合在一起,我們離自動駕駛車輛的目標越來越近 —所有這些都通過高性能視覺處理而實現。
目前,汽車制造商在汽車中配備了更多攝像頭,如圖1所示。前置攝像頭可以偵測行人和其他障礙,并且采用適當的算法幫助駕駛員制動。后置攝像頭 – 美國強制要求從2018年起的大多數新車配置后置攝像頭 – 可以通過提醒駕駛員注意不在視野內的車后物體而挽救生命。駕駛艙內面向駕駛員的攝像頭可以識別駕駛員分心,并發(fā)出提醒。最近,增加四到六個攝像頭可以提供車輛周圍360度的視圖。
圖1 配備高性能視覺處理器的攝像頭可以 “看到” 物體是否未在預期地點
用于對象檢測的視覺處理器
由于駕駛員面向前方,前置攝像頭似乎沒有必要。其價值在于,前置攝像頭在探測和提醒障礙時必須始終比駕駛員快。盡管ADAS系統(tǒng)的反應快于駕駛員,但它需要借助嵌入式視覺提供對視頻流的實時分析,并知道采取哪種應對措施。
視覺處理器基于異構處理單元。這意味著編程任務被分配到具有不同強項的處理單元中(見圖2)。用于傳統(tǒng)32位標量處理器(易于編程開發(fā)的處理器)的大部分代碼使用C或C++編寫。向量DSP單元將執(zhí)行大部分計算工作,因為該單元極大的指令字可對收到的每個圖像的像素進行大量并行計算。
圖2 視覺處理器基于異構處理單元,包括標量和極大指令字 (VLIW) 向量DSP單元
檢測車前行人是廣義的“物體檢測”的一部分。對于要檢測的每個物體,傳統(tǒng)計算機視覺算法采用手工方式。檢測算法的例子包括Viola-Jones和最近的定向梯度直方圖 (HoG)。HOG算法通過查看圖像內的邊緣方向而試圖描述物體。HOG直到2014年才被視為一種先進的行人檢測算法。
通過深度學習而進行物體檢測的興起
盡管依據人類大腦建模的計算機系統(tǒng) – 神經網絡的概念已經出現了很長時間,但直到最近,半導體才實現了處理器的性能,使其成為可行的現實。2012年,卷積神經網絡 (CNN) 進入每年一度的ImageNet競賽表明,在圖像分類方面,這種技術比傳統(tǒng)計算機視覺算法在準確度上有重大改進。由于準確度更高,基于神經網絡的圖像分類、檢測和識別技術得到了快速普及。
深度神經網絡的重要突破是,對象檢測不必進行手動編碼。深度經網絡允許各種特性自動從訓練實例中學習。如果神經網絡有一個輸入和輸出層,而且至少有一個隱含的中間層,它就被視為具有“深度”學習能力。每個節(jié)點從前一層中多個節(jié)點的加權輸入結果進行計算。CNN是目前為視覺處理高效實施深度神經網絡的最先進技術。CNN的效率更高,因為它們重復利用圖像中的多個權重。
在嵌入式領域,早期的CNN采用GPU或者采用視覺處理器的向量DSP部分實現。然而,考察三個不同異構處理單元中執(zhí)行的任務非常有幫助,如圖3所示。
圖3 向嵌入式視覺處理器添加CNN引擎可幫助系統(tǒng)通過訓練而學習
CNN早期在硬件中的實施包括有限的乘累加 (MAC) 單元。例如,Synopsys的EV5x – 業(yè)內首個可編程、可配置的視覺處理器IP內核 – 實施了具有64個MAC的CNN引擎。EV5x的運行頻率為500 MHz,可產生32 GMACs/s或64 GOPs/s的性能(乘法累加器在一個指令中執(zhí)行兩次運算)。這一性能不足以處理整個1MP (1280 x 1024) 幀或圖像。然而,其處理能力足以在部分圖像上執(zhí)行CNN(比如64x64像素塊)。要處理整個圖像,行人檢測需要分兩個步驟進行。向量DSP將對收到的每個視頻流中的圖像執(zhí)行計算密集型感興趣區(qū)域 (ROI) 算法。ROI采用滑動窗口方法識別可能的行人候選對象(例如排除天空部分)。然后,這些“行人”圖像塊由CNN處理,確定是否真的是行人。實踐證明,基于CNN的行人決策解決方案比HoG等算法的精確度更高,也許更重要的是,與通過寫入新的手動算法而檢測自行車而非行人相比,CNN更容易重新訓練,從而用來查找自行車。
更大型的CNN用于全幀對象決策
隨著嵌入式CNN變得更加強大,它們不再僅僅限于處理收到的圖像。Synopsys最新的視覺處理器EV6x包含了一個配備880個MAC的CNN引擎 – 比前代產品的性能有了顯著提高。該產品的運行頻率為800MHz,可生成 (880 x .8) = 704 GMACs/s或大約1400 GOPs/s。這一性能足以使用CNN處理整個1MP圖像。向量DSP對于預處理圖像(例如重新格式化和金字塔處理)以及執(zhí)行后處理任務仍然非常有用,例如非極大值抑制 (NMS)。如圖4所示,EV6x仍為異構處理提供了標量、向量和CNN單元。它還帶有多內核特性,可通過輕松擴展而配置多個視覺內核。
圖4 DesignWare EV6x嵌入式視覺處理器包含用于預處理和后處理的標量、向量和CNN處理
處理整個圖像幀的好處是CNN可以通過訓練而檢測多個對象。如今,CNN圖形不僅僅用于尋找行人,而是可以通過訓練而尋找自行車、其他機動車輛、貨車等。采用HoG算法做到這一點需要針對每個新對象類型對算法進行手動編寫。
訓練和部署CNN
如前文所述,CNN不采用編程方式。它需要經過訓練。Caffe或TensorFlow這樣的深度學習框架將使用較大的圖像數據集對CNN圖形進行訓練 – 通過多次迭代而對各個系數進行優(yōu)化 – 從而檢測圖像中的具體特征。圖5顯示了CNN圖形訓練的關鍵組件,其中,訓練階段采用云端的GPU存儲體,以提供所需的大量處理能力。
圖5 圖形訓練所需的組件
部署 – 或“推理”–階段在嵌入式系統(tǒng)上執(zhí)行。如Synopsys的MetaWare EV Toolkit等開發(fā)工具采用訓練階段的32位浮點權重或系數輸出,并擴展為定點格式。這樣做的目標是采用最小的分辨率,因為這仍能產生與32位浮點輸出相當的精確度。對于嵌入式解決方案來說,更少的乘累加位數意味著計算CNN所需的功耗更低,芯片面積更小(從而降低成本)。根據Synopsys的計算,如果不進行圖形的重新訓練,需要至少10位定點的格式來保證和32位浮點Caffe輸出差不多的精度。
MetaWare EV工具采用權重和圖形拓撲(CNN圖形中存在的卷積,非線性,池化結構和全面互連層),并且會把這些映射到專用CNN引擎的硬件中。假設沒有特殊圖形層,CNN現在可通過“編程” 檢測你想要識別的對象,只要這些內容CNN事先訓練過。
為了保持小巧的體積,CNN引擎經過優(yōu)化,可執(zhí)行關鍵CNN特性,例如3x3和5x5矩陣相乘,但其優(yōu)化程度不夠,無法成為完全的硬件解決方案。通過編程保持靈活性非常重要。隨著CNN的持續(xù)演進 – 例如新的分層技術或池化方法 – 向量DSP可以在視覺處理中扮演另一個重要角色。由于向量DSP和CNN引擎在Synopsys EV6x中密切耦合,根據需要從CNN對向量DSP分派任務變得非常簡單。整合進MetaWare EV工具中的OpenVX運行環(huán)境保證了這些任務根據其他向量DSP處理要求而定時運行。向量DSP應該是很好地前瞻到了CNN的發(fā)展。
圖6顯示了嵌入式視覺處理器的輸入和輸出。來自車輛攝像頭的流圖被送到預先配置了圖形算法和權重的CNN引擎中。CNN的輸出是經過分類的圖像內容。
圖6 嵌入式視覺處理器的輸入和輸出
場景細分和導航
截止到目前,我們已經討論了可用于避免行人碰撞的(或者自行車、汽車或貨車)對象分類 – 這是ADAS的一個例子。性能足夠高的CNN也可用于場景細分 – 識別圖像中的所有像素。比起識別特定像素,場景細分的目標主要是識別場景中對象類型間的界限。知道道路與場景中其他對象的相對關系對于車輛導航非常有幫助,并且使我們向自動駕駛的目標更近一步。
圖7 場景細分可識別對象類型間的界限
舉例來說,DesignWare® EV61 CNN上運行的場景細分可采用11類對象(道路、天空、建筑物、行人等)對流式圖像進行細分。通過使用五個通道的1920x1080圖像作為輸入,以800MHz的頻率運行的CNN達到了18fps。如果沒有足夠的性能處理完整圖像(幀)的多個事例,CNN就很難實現場景細分。
汽車視覺中視覺處理的未來要求
視覺處理解決方案會隨著未來更高的處理性能需求而持續(xù)擴張。對于車輛中現有的攝像頭,1MP圖像是合理的分辨率。然而,車輛中的攝像頭不斷增多,對分辨率的需求從1MP增加到3MP,甚至是8MP攝像頭。攝像頭分辨率越高,系統(tǒng)就可以檢測到更遠處的對象。這樣可以分析更多的像素位,以確定前方是否有物體,例如行人。攝像頭幀率 (FPS) 也很重要。幀率越高,延時越短,而且停車距離也越短。對于以15 FPS運行的1MP RGB攝像頭,需要處理的數量是1280x1024像素/幀 x 15幀/秒 x 三種顏色或者大約59M字節(jié)/秒。30fps的8MP圖像需要處理3264x2448像素/幀 x 30幀/秒 x 三種顏色,或者大約720M字節(jié)/秒。
這種卓越的處理性能不能帶來功耗或芯片面積不成比例的增加。汽車是屬于持續(xù)性價格承壓的消費品,更低的功耗對其意義重大。視覺處理器的架構必須針對功耗不斷優(yōu)化,并且還要保持其可編程性。
總結
隨著汽車應用領域中對ADAS的要求持續(xù)提高,嵌入式視覺和深度學習技術也需要跟上發(fā)展步伐。對象檢測已經從小規(guī)模識別發(fā)展為包含每個像素的全面場景識別,而且靈活性也變得和性能、功耗、面積同樣重要。Synopsys的DesignWare EV6x嵌入式視覺處理器可通過全面編程而處理新的圖形,并在極小的面積和功耗下提供了優(yōu)秀的性能。
作者:Gordon Cooper,Synopsys嵌入式視覺產品營銷經理