監(jiān)控系統(tǒng)高度依賴(lài)嵌入式視覺(jué)系統(tǒng)所提供的功能,以加速在廣泛市場(chǎng)與應(yīng)用中的部署。這些監(jiān)控系統(tǒng)的用途非常廣泛,包括從事件與車(chē)流量監(jiān)控、安全與安防應(yīng)用,一直到ISR與商業(yè)智慧。此用途的多樣性帶來(lái)許多挑戰(zhàn),因此系統(tǒng)設(shè)計(jì)人員在解決方案時(shí)須加以克服。
這些挑戰(zhàn),包含:
? 多攝影機(jī)視覺(jué):擁有連接多個(gè)同質(zhì)或異質(zhì)感測(cè)器類(lèi)型的能力。
? 電腦視覺(jué)技術(shù):使用高階函式庫(kù)與架構(gòu)(例如OpenCV和OpenVX)進(jìn)行開(kāi)發(fā)的能力。
? 機(jī)器學(xué)習(xí)技術(shù):使用如Caffe等架構(gòu)來(lái)運(yùn)行機(jī)器學(xué)習(xí)推論引擎的能力。
? 提高解析度和幀率:提高影像中每幀所需的資料處理。
根據(jù)不同應(yīng)用,監(jiān)控系統(tǒng)會(huì)運(yùn)用相應(yīng)的演算法,例如光學(xué)流演算來(lái)偵測(cè)影像內(nèi)的動(dòng)態(tài)。當(dāng)立體視覺(jué)提供影像內(nèi)的深度感知時(shí),機(jī)器學(xué)習(xí)技術(shù)亦用于偵測(cè)和分類(lèi)影像中的物體。

圖1 : 應(yīng)用實(shí)例面部偵測(cè)與分類(lèi) |
|

圖2 : 應(yīng)用實(shí)例光學(xué)流演算 |
|
如All Programmable Zynq-7000和Zynq Ultrascale+ MPSoC等的異質(zhì)系統(tǒng)元件逐漸被運(yùn)用在監(jiān)控系統(tǒng)應(yīng)用上,而這些元件結(jié)合高效能Arm核心,來(lái)形成一個(gè)可編程邏輯(Processing Logic, PL)結(jié)構(gòu)的處理系統(tǒng)(Processing System, PS)。
與傳統(tǒng)方案相比,PL與PS的緊密耦合使建立的系統(tǒng)具更強(qiáng)的反應(yīng)力、可重組能力及更高的功率效能。基于CPU/GPU的傳統(tǒng)SoC方案需使用系統(tǒng)記憶體將影像從一個(gè)處理階段傳送到下個(gè)階段,由于多個(gè)資源需要存取在同一個(gè)記憶體,因此會(huì)降低確定性并增加功耗與系統(tǒng)反應(yīng)延遲,造成處理演算法的瓶頸,且該瓶頸會(huì)隨著幀率和影像解析度的增加而加重。
當(dāng)解決方案采用Zynq-7000或Zynq UltraScale+ MPSoC元件時(shí),便能突破這個(gè)瓶頸。這些元件允許設(shè)計(jì)人員在元件的PL中運(yùn)行影像處理管線(xiàn),當(dāng)在其中一個(gè)階段的輸出被傳送到另一個(gè)階段輸入的PL中,設(shè)計(jì)真正的平行影像管線(xiàn)時(shí),就能獲得確定的反應(yīng)時(shí)間,并同時(shí)縮短延遲以達(dá)到功耗最佳化的解決方案。
相較于僅有固定介面的傳統(tǒng)CPU/GPU SoC方案,利用PL來(lái)運(yùn)行影像處理管線(xiàn),能擁有更廣的介面能力。 PL IO介面的彈性特質(zhì)允許任意形式的連接,因此能支援如MIPI、Camera Link、HDMI等業(yè)界標(biāo)準(zhǔn)介面。此彈性還能達(dá)到客制傳統(tǒng)介面,并進(jìn)行升級(jí)以支援最新介面標(biāo)準(zhǔn),且利用PL能讓系統(tǒng)平行連接多個(gè)攝影機(jī)。
不過(guò),最關(guān)鍵的是在無(wú)需使用硬體描述語(yǔ)言(如Verilog或VHDL)來(lái)重新編寫(xiě)高階演算法下,來(lái)實(shí)現(xiàn)應(yīng)用演算法的能力,這正是reVISION推疊的用武之地。

圖3 : 傳統(tǒng)CPU/GPU方案與Zynq-7000/Zynq UltraScale+ MPSoC的對(duì)比 |
|
reVISION推疊
reVISION推疊使開(kāi)發(fā)人員能夠?qū)崿F(xiàn)電腦視覺(jué)和機(jī)器學(xué)習(xí)技術(shù),當(dāng)針對(duì)Zynq-7000和Zynq UltraScale+ MPSoC時(shí),也能使用相同的高階架構(gòu)和函式庫(kù)。為此,reVISION廣泛地結(jié)合多種資源來(lái)支援平臺(tái)、應(yīng)用與演算法的開(kāi)發(fā)。該推疊分為三個(gè)不同等級(jí):
1.平臺(tái)開(kāi)發(fā):此為推疊的最底層,且是剩余推疊層的建構(gòu)基礎(chǔ)。該層為SDSoC 工具提供平臺(tái)定義。
2.演算法開(kāi)發(fā):此為推疊的中間層,為需運(yùn)用的演算法提供支援。同時(shí)該層亦支援影像處理和機(jī)器學(xué)習(xí)推論引擎加快轉(zhuǎn)移至可編程邏輯中。
3.應(yīng)用開(kāi)發(fā):此為推疊的最高層,為業(yè)界標(biāo)準(zhǔn)架構(gòu)提供支援。該層利用平臺(tái)開(kāi)發(fā)和演算法開(kāi)發(fā)層來(lái)發(fā)展應(yīng)用。
推疊的演算法和應(yīng)用層是被設(shè)計(jì)來(lái)支援傳統(tǒng)影像處理流程與機(jī)器學(xué)習(xí)流程。在演算層中,支援用OpenCV函式庫(kù)開(kāi)發(fā)影像處理演算法,這包含將多種OpenCV功能(包括OpenVX核心子集)加速轉(zhuǎn)移成可編程邏輯的能力。當(dāng)支援機(jī)器學(xué)習(xí)時(shí),演算法開(kāi)發(fā)層則提供幾種可放在PL中用以實(shí)現(xiàn)機(jī)器學(xué)習(xí)推論引擎的預(yù)先定義硬體功能,然后再由應(yīng)用開(kāi)發(fā)層存取這些影像處理演算法與機(jī)器學(xué)習(xí)推論引擎,來(lái)創(chuàng)立最終應(yīng)用,并為OpenVX和Caffe等高階架構(gòu)提供支援。
reVISION堆疊能提供高效能監(jiān)控系統(tǒng)演算法所需的所有必要元素。
在reVISION中加速OpenCV
演算法開(kāi)發(fā)層最重要的優(yōu)勢(shì)之一是能夠加速多種OpenCV功能。該層可加速的OpenCV功能可分成以下四種高階類(lèi)別:
1.運(yùn)算:包含兩個(gè)幀的絕對(duì)偏差、像素運(yùn)算(加、減和乘)、梯度與積分運(yùn)算等功能。
2.輸入處理:支援位元深度轉(zhuǎn)換、通道運(yùn)算、直方圖等化、重新映射與尺寸重調(diào)等。
3.濾波:支援包含Sobel、自定義卷積和高斯濾波器等多種濾波器。
4.其他:提供Canny/Fast/Harris邊緣偵測(cè)、閥值以及SVM和 HoG分類(lèi)器等多種功能。
這些功能構(gòu)成OpenVX子集的核心功能,能提供支援OpenVX的應(yīng)用開(kāi)發(fā)層緊密的整合。開(kāi)發(fā)團(tuán)隊(duì)能利用這些功能在可編程邏輯中創(chuàng)立演算法管線(xiàn),若能以此方式在邏輯中實(shí)現(xiàn)這些功能,便能明顯得提高演算法的運(yùn)行效能。
reVISION中的機(jī)器學(xué)習(xí)
reVISION提供與Caffe的整合,以實(shí)現(xiàn)機(jī)器學(xué)習(xí)推論引擎。與Caffe的整合發(fā)生在演算法和應(yīng)用開(kāi)發(fā)層。 Caffe架構(gòu)在C++函式庫(kù)中為開(kāi)發(fā)人員提供一系列的函式庫(kù)、模型和預(yù)先訓(xùn)練的參數(shù),以及Python和MATLAB捆綁程序。該架構(gòu)在無(wú)需重新開(kāi)始的狀況下,讓用戶(hù)能建立和訓(xùn)練網(wǎng)路,以執(zhí)行所需的運(yùn)算。為便于模型重用,Caffe用戶(hù)可通過(guò)模型庫(kù)(model zoo)共享模型;其模型庫(kù)中提供多個(gè)網(wǎng)路模型,用戶(hù)可針對(duì)指定的任務(wù)來(lái)執(zhí)行和更新。推論這些網(wǎng)路和參數(shù)則在prototxt檔案中被定義,且當(dāng)在機(jī)器學(xué)習(xí)環(huán)境中部署時(shí),此檔案則用來(lái)定義推論引擎。
reVISION提供Caffe整合功能,使機(jī)器學(xué)習(xí)推論引擎的執(zhí)行非常簡(jiǎn)單,剩下的工作皆由架構(gòu)來(lái)完成,只需提供prototxt文件即可。接著,此prototxt檔案來(lái)配置處理系統(tǒng)及可編程邏輯中的硬體最佳化函式庫(kù),而可編程邏輯則用來(lái)質(zhì)行推論引擎,并包含Conv、ReLu、Pooling等功能。
推論在機(jī)器學(xué)習(xí)推論引擎中所執(zhí)行使用的數(shù)字表示系統(tǒng),同時(shí)在效能上也扮演著重要的角色。機(jī)器學(xué)習(xí)應(yīng)用逐漸使用更高效率、降低精度的定點(diǎn)數(shù)字系統(tǒng),例如INT8表示法。
相較于傳統(tǒng)的FP32,使用定點(diǎn)降低精度數(shù)字系統(tǒng)的準(zhǔn)確度沒(méi)有明顯的損失。與浮點(diǎn)相比,定點(diǎn)運(yùn)算更容易實(shí)現(xiàn),因此改用INT8后,在一些執(zhí)行上能達(dá)到更高效、快速的解決方案。可編程邏輯解決方案適合用于定點(diǎn)數(shù)字系統(tǒng),而reVISION提供在PL中使用INT8表示法的能力。
這些INT8表示法允許在PL內(nèi)使用專(zhuān)用的DSP模組。當(dāng)使用同樣的核心參數(shù)時(shí),這些DSP模組架構(gòu)允許兩個(gè)INT8乘積累加函數(shù)(Multiply Accumulate)運(yùn)算同時(shí)執(zhí)行。此方案不僅能提高效能執(zhí)行,同時(shí)能降低功耗。憑借可編程邏輯的靈活特性,也可以輕松實(shí)現(xiàn)精度更低的定點(diǎn)數(shù)字表示法。
結(jié)論
reVISION使開(kāi)發(fā)人員能夠有效利用Zynq-7000和Zynq UltraScale+ MPSoC元件所提供的功能,即便不是專(zhuān)家,亦能透過(guò)可編程邏輯來(lái)實(shí)現(xiàn)演算法。這些演算法和機(jī)器學(xué)習(xí)應(yīng)用可通過(guò)高階的業(yè)界標(biāo)準(zhǔn)架構(gòu)來(lái)達(dá)成,進(jìn)而縮短系統(tǒng)開(kāi)發(fā)時(shí)程。這使開(kāi)發(fā)人員能提供較高的反應(yīng)性、可重組能力,以及更低功耗的最佳化系統(tǒng)。
(本文作者Nick Ni、Adam Taylor任職于Xilinx公司)