在這篇文章中,前賽靈思機(jī)器視覺市場(chǎng)戰(zhàn)略總監(jiān)Aaron Behman 針對(duì)嵌入式視覺方面的問題進(jìn)行了介紹,并解讀了賽靈思 All Programmable Zynq? SoC 的獨(dú)特解決方案。希望能為讀者了解該領(lǐng)域的問題有所幫助。
?
一、嵌入式視覺四大普遍趨勢(shì)
嵌入式視覺可劃分為兩個(gè)高級(jí)類別;感知環(huán)境和采取行動(dòng)。視覺導(dǎo)向的機(jī)器人和無人機(jī)屬于后面的采取行動(dòng)類。
在民用領(lǐng)域,目前無人機(jī)是商業(yè)、醫(yī)療、農(nóng)業(yè)、廣播和執(zhí)法應(yīng)用中最熱門的話題之一。對(duì)許多這樣的應(yīng)用,無人機(jī)可提供顯著的優(yōu)勢(shì)。在廣播和執(zhí)法領(lǐng)域,無人機(jī)能夠以低得多的成本提供之前需要直升機(jī)才能提供的能力。無人機(jī)還能執(zhí)行預(yù)訂服務(wù),例如即將推出的 Amazon Prime 交貨服務(wù),或者如烏干達(dá)偏遠(yuǎn)地區(qū)的醫(yī)療產(chǎn)品交貨服務(wù)。在農(nóng)業(yè)應(yīng)用中,無人機(jī)能使用高光譜成像來判斷作物的健康狀況。而這些應(yīng)用,只不過是目前已經(jīng)在使用或正在考慮使用無人機(jī)技術(shù)應(yīng)用的冰山一角。
農(nóng)業(yè)無人機(jī)應(yīng)用示例
這些應(yīng)用,綜合起來體現(xiàn)著我們?cè)谇度胧揭曈X總體環(huán)境中觀察到的嵌入式視覺當(dāng)前四大普遍趨勢(shì)中的三大趨勢(shì):
1、邊緣(edge)端通過機(jī)器學(xué)習(xí)獲得的智能化 – 智能化嵌入在無人機(jī)本身內(nèi)部,需要從它的攝像頭提取信息并根據(jù)該信息采取行動(dòng),達(dá)成自己的目標(biāo)。
2、開放式高級(jí)語言和框架 – 在無人機(jī)中實(shí)現(xiàn)智能化需要高級(jí)框架和語言。這些中最常用的是開源多平臺(tái)框架,比如嵌入式環(huán)境里的 OpenCV、OpenVX,以及在機(jī)器學(xué)習(xí)環(huán)境里的 Tensor Flow 和 Caffe。
3、多層次的安全性 – 用于確保無人機(jī)不僅能夠運(yùn)行,且不能影響安全性和信息獲取。這種方法要求在器件、系統(tǒng)和網(wǎng)絡(luò)層面實(shí)現(xiàn)多層次的安全性。
第四個(gè)趨勢(shì)是嵌入式視覺的普及化。雖然視覺導(dǎo)向的機(jī)器人和無人機(jī)還不像我們的手機(jī)一樣普及——我們常在旅行中用手機(jī)來翻譯標(biāo)牌等用途,隨著新用例被發(fā)掘出來,使用視覺導(dǎo)向的機(jī)器人和無人機(jī)的應(yīng)用正處于快速發(fā)展中。
在架構(gòu)層面無人機(jī)擁有一些關(guān)鍵的子系統(tǒng),包括實(shí)時(shí)精準(zhǔn)的馬達(dá)控制系統(tǒng)、提供與無人機(jī)雙向通信的軟件無線電和精確的嵌入式視覺系統(tǒng)。視覺導(dǎo)向的機(jī)器人和無人機(jī)主要針對(duì)大部分電池供電的應(yīng)用,因此設(shè)計(jì)高能效解決方案的能力極為重要。
高精度嵌入式視覺系統(tǒng)提供高幀率,其處理圖像和根據(jù)圖像采取行動(dòng)的能力要遠(yuǎn)超過人眼。對(duì)許多應(yīng)用來說,需要使用多個(gè)攝像頭來形成立體多視覺,以完整掌握無人機(jī)周邊環(huán)境。這也稱為傳感器融合。雖然許多應(yīng)用使用多攝像頭方法來觀察環(huán)境,部分應(yīng)用還會(huì)把設(shè)計(jì)用于觀測(cè)電磁場(chǎng)頻譜不同組成部分的攝像頭結(jié)合起來使用,例如在超光譜或紅外應(yīng)用中的情況。在使用多個(gè)相同類型傳感器的時(shí)候這一般稱為同構(gòu),在使用不同傳感器技術(shù)的時(shí)候稱為異構(gòu)。
在算法層面,這種高精度嵌入式視覺系統(tǒng)運(yùn)行的算法有同步定位與地圖構(gòu)建(SLAM)和稠密光流(Dense Optical Flow),以為平臺(tái)提供增強(qiáng)型感知和避障系統(tǒng)。這些算法還與更傳統(tǒng)的模式和對(duì)象識(shí)別算法結(jié)合。
稠密光流設(shè)計(jì)
視覺導(dǎo)向的機(jī)器人和無人機(jī)因此不僅需要強(qiáng)大的處理能力,還需要有能力進(jìn)行功耗優(yōu)化,提供面向未來且具有可擴(kuò)展性的解決方案。
All Programmable Zynq? SoC 可針對(duì)您面臨的問題提供獨(dú)特的解決方案。Zynq 提供的高性能邏輯,與雙核 ARM? A9 處理器集成可打造出緊密集成的異構(gòu)處理單元。該異構(gòu)處理單元能夠在處理器內(nèi)或可編程邏輯內(nèi)實(shí)現(xiàn)高效率的功能細(xì)分。
使用基于 ARM 的處理系統(tǒng),可以在邊緣開展極為復(fù)雜的實(shí)時(shí)視覺分析。在與可編程邏輯架構(gòu)結(jié)合后,它提供實(shí)時(shí)檢測(cè)對(duì)象然后使用處理器系統(tǒng)分類對(duì)象的能力。分類完成后,視覺導(dǎo)向機(jī)器人系統(tǒng)或無人機(jī)就能針對(duì)檢測(cè)出的對(duì)象類采取適當(dāng)?shù)男袆?dòng)。
為在邊緣實(shí)現(xiàn)實(shí)時(shí)視覺分析,我們運(yùn)用了機(jī)器學(xué)習(xí)提供的智能化技術(shù)。要執(zhí)行這些算法,我們首先需要模型并提供大型培訓(xùn)數(shù)據(jù)集,使模型能夠進(jìn)行分析。在極高性能工作站上進(jìn)行培訓(xùn),得到的分類器被用于實(shí)現(xiàn)方案中。開展這類機(jī)器學(xué)習(xí)有多種不同的方法可供選擇,例如卷積神經(jīng)網(wǎng)絡(luò)、深度神經(jīng)網(wǎng)絡(luò)或遞歸神經(jīng)網(wǎng)絡(luò)。
當(dāng)我們?cè)谶吘墝?shí)現(xiàn)這些模型時(shí),我們不需要與培訓(xùn)相同水平的性能。可以使用整數(shù)或浮點(diǎn)數(shù)學(xué),兩者都能方便地實(shí)現(xiàn)在 All Programmable SoC 中。
SoC 內(nèi)的可編程邏輯架構(gòu)本身具有可重編程性,這意味著該器件能支持任意連接。同時(shí)處理系統(tǒng)內(nèi)的多路復(fù)用 IO(MIO)提供通過多種常用協(xié)議(從 SPI、I2C 和串行到千兆以太網(wǎng)、CAN 和 USB)連接的能力,擁有極為靈活的從該設(shè)備輸入/輸出數(shù)據(jù)的方式。
Zynq 同時(shí)接口和處理多個(gè)攝像頭輸入的實(shí)例
對(duì)使用的圖像傳感器來說,可編程邏輯架構(gòu)還能夠支持最適合于目前應(yīng)用的特定傳感器。與限制傳感器接口和圖像處理流水線的一些標(biāo)準(zhǔn)解決方案不同。
這種高度的靈活性能夠打造出面向未來的設(shè)計(jì)方案。目前它可以先實(shí)例化一個(gè)接口,然后隨著新標(biāo)準(zhǔn)的出現(xiàn),重新編程已經(jīng)部署的系統(tǒng)以支持新標(biāo)準(zhǔn)。可編程邏輯的靈活性還體現(xiàn)在能從一個(gè)標(biāo)準(zhǔn)轉(zhuǎn)換到另一個(gè)標(biāo)準(zhǔn)。
在同構(gòu)和異構(gòu)傳感器融合方面,這個(gè)最大的 SoC 產(chǎn)品系列提供充足的可編程邏輯架構(gòu),能實(shí)現(xiàn) 20 個(gè)以上的視覺通道并讓每一個(gè)通道并行運(yùn)行。
因?yàn)檫@些通道實(shí)現(xiàn)在可編程邏輯架構(gòu)內(nèi),設(shè)計(jì)工程人員不受定義的圖像處理路徑制約,相反他們有能力為目前的應(yīng)用實(shí)現(xiàn)所需的特定圖像處理流水線。
就生成圖像處理流水線而言,和普通的想法不同的是我們不必使用 HDL 重新生成一切。在標(biāo)準(zhǔn) Vivado? IP 庫內(nèi)提供了一些圖像處理內(nèi)核,使用 AXI Streaming 接口就能夠連接。使用 AXI Streaming 接口便于把靈活、可擴(kuò)展的圖像處理流水線創(chuàng)建成標(biāo)準(zhǔn)接口,用在所有的 IP 模塊上。這種標(biāo)準(zhǔn)化能縮短初始開發(fā)時(shí)間,便于隨著產(chǎn)品規(guī)劃圖的延伸更容易地升級(jí)和復(fù)用。
當(dāng)然許多圖像處理算法相當(dāng)復(fù)雜,需要先在 OpenCV 或 MATLAB 等應(yīng)用中建模。OpenCV 能與 Vivado? 高層次綜合視頻庫結(jié)合,即 OpenCV 庫的可綜合版本,極為簡便地為我們的流水線實(shí)現(xiàn)圖像處理算法。隨后這些算法能拉回到 Vivado 內(nèi)的圖像處理流水線中,縮短開發(fā)和驗(yàn)證時(shí)間。
另外,還可以實(shí)現(xiàn)基于 MathWorks MATLAB 流程的模型設(shè)計(jì)流程。它能夠先在模型層面定義整個(gè)圖像處理流水線,然后在定義底層的代碼。
不過大多數(shù)現(xiàn)代應(yīng)用都必須考慮安全性,以防范對(duì)系統(tǒng)、系統(tǒng)數(shù)據(jù)的無授權(quán)改動(dòng)或訪問,或是防范惡意黑客攻擊。開發(fā)安全設(shè)計(jì)必須從系統(tǒng)層面自上而下考慮。不過使用 All Programmable SoC 能提供一系列器件級(jí)和系統(tǒng)級(jí)安全功能,讓實(shí)現(xiàn)工作變得簡便易行。Zynq SoC 能夠?qū)?dǎo)向與配置流程進(jìn)行加密和認(rèn)證。也可使用 Trust Zone 技術(shù)創(chuàng)建正交環(huán)境,限制軟件借助管理程序訪問底層硬件。同時(shí),內(nèi)置的 XADC 能用于監(jiān)測(cè)器件電壓和溫度以及外部參數(shù),提供防篡改方法。還有一些功能能實(shí)現(xiàn)在設(shè)計(jì)中,進(jìn)一步增強(qiáng)安全性。
All Programmable SoC 能實(shí)現(xiàn)多個(gè)并行圖像處理流水線以及同構(gòu)/異構(gòu)傳感器融合,然后實(shí)時(shí)執(zhí)行視覺分析和決策,而且提供對(duì)電池供電系統(tǒng)非常關(guān)鍵的極高效的單位功耗性能。借助內(nèi)在的靈活性,All Programmable SoC 能提供真正的差異化因素,值得在設(shè)計(jì)中考慮使用,尤其是在需要考慮單位功耗像素?cái)?shù)量的時(shí)候。
結(jié)論
隨著使用視覺導(dǎo)向發(fā)機(jī)器人和無人機(jī)應(yīng)用的快速發(fā)展,視覺導(dǎo)向的機(jī)器人和無人機(jī)本身也正在飛速發(fā)展。要開發(fā)出擁有理想單位功耗性能的高精度視覺系統(tǒng),最好是使用 All Programmable SoC。All Programmable SoC 能實(shí)現(xiàn)大量并行處理鏈,在邊緣完成傳感器融合和實(shí)時(shí)分析,同時(shí)提供高能效、高靈活度和高安全性的系統(tǒng)。
二、賽靈思 All Programmable SoC
視覺導(dǎo)向的的機(jī)器人和無人機(jī)高度依賴前面介紹的嵌入式視覺應(yīng)用來成功完成自己的使命。支持視覺導(dǎo)向的的機(jī)器人和無人機(jī)的這些嵌入式視覺應(yīng)用的實(shí)現(xiàn)就是賽靈思 All Programmable SoC。賽靈思 All Programmable SoC在單個(gè)器件中實(shí)現(xiàn)處理系統(tǒng)與可編程邏輯的強(qiáng)大組合,支持硬件加速計(jì)算。
在這些應(yīng)用中通常實(shí)現(xiàn)的算法有多種,最常見的三種是:
1、環(huán)視系統(tǒng) – 這些系統(tǒng)用于生成車輛周邊環(huán)境的三維可視化,實(shí)現(xiàn)對(duì)環(huán)境的進(jìn)一步了解。典型的環(huán)視系統(tǒng)使用球面攝像頭。環(huán)視往往用于需要同步定位與地圖構(gòu)建(SLAM)和光流的應(yīng)用中。
2、全景攝像頭 – 這些攝像頭為周邊環(huán)境提供360度視野,用于監(jiān)控應(yīng)用和車輛可視化。
3、異構(gòu)傳感器融合 – 融合來自電磁頻譜不同組成部分的圖像,例如紅外成像,以增強(qiáng)低光/夜視性能。
實(shí)現(xiàn)這些算法會(huì)帶來幾個(gè)必須解決的共同挑戰(zhàn),例如:透鏡校正、消除透鏡失真、視角轉(zhuǎn)換、使用并行表面進(jìn)行視頻紋理填充。
結(jié)合電磁頻譜中可視部分和紅外部分的傳感器融合實(shí)例
另一個(gè)是如何呈現(xiàn)最終圖像。這就帶來了多通道處理和多通道同步的難題,但這是保證所有攝像頭都顯示相同幀所需要的。
當(dāng)然多通道處理和同步問題并不只局限于視覺導(dǎo)向的的機(jī)器人和無人機(jī)應(yīng)用,這是許多嵌入式視覺應(yīng)用的通病。視覺導(dǎo)向的的機(jī)器人和無人機(jī)也是檢測(cè)和分類對(duì)象,實(shí)現(xiàn)自動(dòng)和半自動(dòng)操作所需要的。
運(yùn)用IP
在工程項(xiàng)目中實(shí)現(xiàn)這些復(fù)雜的圖像處理算法堪稱一項(xiàng)壯舉。它需要具有專家級(jí)技能水平的工程師正確地在 SoC 內(nèi)實(shí)現(xiàn)算法。這些工程師能夠針對(duì)目標(biāo)架構(gòu)開發(fā)和優(yōu)化特定問題。取得這樣的技能需要企業(yè)聘用一個(gè)長期工程師或分包工程師。除了需要取得專家級(jí)技能,由于需要全新開發(fā)這些功能,還會(huì)延長產(chǎn)品上市時(shí)間。
使用專業(yè)提供商開發(fā)的 IP,無需尋找專家級(jí)工程師,同時(shí)還能夠縮短開發(fā)時(shí)間,從而加速產(chǎn)品上市進(jìn)程。它還能夠讓開發(fā)企業(yè)集中精力實(shí)現(xiàn)產(chǎn)品增值,確保嵌入式視覺產(chǎn)品在市場(chǎng)上占據(jù)有力地位。
使用現(xiàn)有的、基于成熟技術(shù)的 IP 模塊還降低了項(xiàng)目的總體風(fēng)險(xiǎn)。在項(xiàng)目上使用商用 IP 核,還能與輔助合同一起提供,讓內(nèi)核能無縫集成到您的應(yīng)用中。
有數(shù)個(gè) IP 模塊作為 Vivado? Design Suite 標(biāo)配提供,其它用于嵌入式解決方案的高級(jí)商用 IP 由多家第三方供應(yīng)商提供。
其中一個(gè)這樣的圖像處理庫組合就是 Xylon 在他們的 LogicBRICKS IP 庫中提供的。該庫專門為在 Vivado Design Suite 中使用進(jìn)行了優(yōu)化。一旦這些 IP 模塊運(yùn)用到 Vivado 設(shè)計(jì)中,它們就能夠根據(jù)應(yīng)用的要求加以定制。
在 logicBRICKS IP 庫內(nèi)有數(shù)個(gè)對(duì)開發(fā)視覺導(dǎo)向的的機(jī)器人和無人機(jī)應(yīng)用有重要意義的 IP 模塊。
在嵌入式視覺應(yīng)用中往往使用基于梯度方向直方圖(HOG)分類器來檢測(cè)和跟蹤對(duì)象。HOG分類器使用屬于機(jī)器學(xué)習(xí)一部分的支持向量機(jī)(SVM)。在 logicBRICK 庫內(nèi)有一個(gè)以 LogiHOG 形式提供的 HOG 分類器,能夠檢測(cè)多達(dá)四個(gè)不同的 SVM 分類器,從而并行檢測(cè)多個(gè)對(duì)象。這些 SVM 經(jīng)訓(xùn)練和更新后能適應(yīng)天氣和燈光等多種不同條件。
工作中的 LogiHOG 分類器
LogicBRICKS 庫中有多種其他常用的 IP 核,可用于簡化開發(fā)工作。另外還有幾種圖像信號(hào)處理流水線可供設(shè)計(jì)人員實(shí)現(xiàn)在自己的設(shè)計(jì)中。這些圖像處理內(nèi)核提供完整解決方案,支持創(chuàng)建高達(dá) 4K2K P60 的流水線。這些流水線在 SoC 內(nèi)與攝像頭界面接口,因此能夠支持多種不同的攝像頭技術(shù)。
開發(fā)流程遵循傳統(tǒng) SoC 開發(fā),根據(jù)運(yùn)行要求配置 SoC。LogicBRICKS 庫中的 IP 核隨后插入到可編程邏輯架構(gòu)中,以構(gòu)成具備所需功能的圖像處理流水線。然后用運(yùn)行在 ARM? A9 內(nèi)核上的應(yīng)用軟件提供的 API 調(diào)用按要求實(shí)時(shí)地精調(diào)算法。
許多應(yīng)用使用的是高動(dòng)態(tài)范圍攝像頭。動(dòng)態(tài)范圍代表的是傳感器捕獲擁有寬范照度強(qiáng)度的圖像的能力,一般使用 dB 或比率來表達(dá)。這意味著同一幅圖像中可以同時(shí)有高照度區(qū)域和黑暗區(qū)域。通過增強(qiáng)圖像的照度和圖像局部區(qū)域的亮度,logiHDR 內(nèi)核提供與這些攝像頭接口并從圖像中提取最大細(xì)節(jié)的能力。
為專門應(yīng)用加速
在使用免費(fèi)或商用 IP 實(shí)現(xiàn)大部分圖像處理流水線后,要讓應(yīng)用功能完整,還有需要實(shí)現(xiàn)的其余功能。使用 SoC 就能在處理器中或是在可編程邏輯中完成這一步。使用 SDSoC? 開發(fā)工具,我們能無縫地在這兩者間移植功能,加快首先用高級(jí)語言開發(fā)的應(yīng)用的設(shè)計(jì)速度。
要發(fā)揮 SDSoC 的功能,我們可以使用 IP 核定義一個(gè)包含底層圖像處理流水線的新平臺(tái)。SDSoC 隨后就能夠使用可用的邏輯和互聯(lián)資源加速設(shè)計(jì)。
在 SDSoC 內(nèi)有多個(gè)庫可供設(shè)計(jì)人員開發(fā)能在可編程邏輯內(nèi)加速的應(yīng)用。具體到圖像處理,主要有兩個(gè)支持 HLS 的庫:
1、HLS_video – 該庫提供嵌入式視覺功能和數(shù)據(jù)結(jié)構(gòu)。這些元素可綜合在一起。
2、HLS_OpenCV – 該庫提供預(yù)先編譯的 OpenCV 功能,以及與 IP 模塊接口所需的專門支持功能。該庫目的是供測(cè)試臺(tái)使用,因此不可綜合。
許多算法將使用 OpenCV 等開源圖像處理框架開發(fā)。因此,在使用 SDSoC 開發(fā)以加速為目的的系統(tǒng)時(shí),設(shè)計(jì)人員希望使用熟悉的框架。這就是 HLS_OpenCV 庫配合 SDSoC 開發(fā)工具發(fā)揮作用的地方。它提供與加速功能接口所需的功能。
OpenCV 組元中最基本的是 cv::mat 類,用于定義以 X 軸和 Y 軸表示的圖像大小以及像素信息。例如每個(gè)像素內(nèi)的位數(shù)、有符號(hào)還是無符號(hào)、多少個(gè)通道構(gòu)成一個(gè)像素。這個(gè)類是我們使用 OpenCV 時(shí)如何存儲(chǔ)和操作圖像的基礎(chǔ)。
在 HLS 庫中有一個(gè)類似的結(jié)構(gòu),即 hls::mat。鑒于 HLS 流是創(chuàng)建圖像處理流水線的標(biāo)準(zhǔn)接口,該庫還提供一些讓我們能把 hls::mat 類轉(zhuǎn)化為 HLS 流或把 HLS 流轉(zhuǎn)化為 hls::mat 類的功能。cv::mat 類和 hls::mat 類之間的主要區(qū)別在于 hls::mat 類被定義為適用可編程邏輯架構(gòu)的像素流,這與屬于內(nèi)存映射的 cv::mat 類不同。流實(shí)現(xiàn)和內(nèi)存映射實(shí)現(xiàn)之間的這種差別意味著我們使用 hls::mat 類時(shí)不必隨即訪問像素。
這樣就能夠使用處理器內(nèi)的雙 ARM A9 內(nèi)核完成應(yīng)用的初步開發(fā),確保算法的功能。在需要該功能時(shí),可編程邏輯中的算法就能被加速。設(shè)計(jì)人員可使用追蹤和 AXI 性能監(jiān)測(cè)等 SDSoC 功能優(yōu)化加速性能。
結(jié)論
視覺導(dǎo)向的的機(jī)器人和無人機(jī)技術(shù)在開發(fā)嵌入式視覺算法的過程中面臨一系列的難題,但這些算法可幫助視覺導(dǎo)向的的機(jī)器人和無人機(jī)了解所處環(huán)境并根據(jù)得到的信息做出決策。為協(xié)助這些圖像處理系統(tǒng)的開發(fā)工作,設(shè)計(jì)人員可使用 IP 核提供的功能,并運(yùn)用 SDSoC 等系統(tǒng)級(jí)開發(fā)工具,生成所需的最終硬件加速功能。
評(píng)論
查看更多