李建東,孟廣雙,嚴(yán)利民
(1.唐山工業(yè)職業(yè)技術(shù)學(xué)院,河北 唐山 063000;2.上海大學(xué) 微電子研究與開發(fā)中心,上海 200444 )
機(jī)器視覺識(shí)別系統(tǒng)是機(jī)器人智能化的關(guān)鍵特征之一,其性能的優(yōu)劣將直接影響機(jī)器人的識(shí)別性能與智能化程度。機(jī)器人視覺識(shí)別系統(tǒng)的核心是圖像處理,為提高圖像的處理速度,學(xué)術(shù)界與工業(yè)界將各種并行計(jì)算方法引入圖像處理過程中,如采用MPI 標(biāo)準(zhǔn)并行編程環(huán)境和基于集群的多機(jī)處理系統(tǒng)對(duì)圖像進(jìn)行信息提取、基于多線程的圖像快速處理方法和基于GPU 與CPU 異構(gòu)模式圖像快速處理方法等。上述方法采用的GPU 結(jié)構(gòu)存在功耗、體積等問題無法在機(jī)器人系統(tǒng)中廣泛應(yīng)用,而基于CPU 的結(jié)構(gòu)則共享存儲(chǔ)結(jié)構(gòu),存在內(nèi)存嚴(yán)重不足的問題,通常想法是將圖像劃分為若干塊,每次只處理一塊圖像數(shù)據(jù),這種方法可以顯著降低內(nèi)存的使用量,但存在頻繁的I/O 操作,對(duì)于需要若干次迭代收斂的算法,圖像處理速度將會(huì)下降幾倍甚至數(shù)十倍。
業(yè)界通常采用兩種方法解決上述問題,一是采用內(nèi)存映射文件技術(shù),內(nèi)存映射文件建立從磁盤中文件到特定內(nèi)存區(qū)域的映射關(guān)系,通過映射關(guān)系可以顯著提升文件訪問速度[1-2]。另一種方法是采用分布式計(jì)算技術(shù),每個(gè)計(jì)算節(jié)點(diǎn)處理的分塊小于其內(nèi)存容量,避免了迭代過程中多次讀寫存儲(chǔ)[3]。本文從分布式計(jì)算技術(shù)考慮,采用并行計(jì)算系統(tǒng)結(jié)構(gòu)和文獻(xiàn)[4]提出的采用數(shù)據(jù)驅(qū)動(dòng)機(jī)制的多核處理器原型結(jié)構(gòu),設(shè)計(jì)了一種用于智能機(jī)器人的數(shù)據(jù)驅(qū)動(dòng)多核識(shí)別系統(tǒng)。
數(shù)據(jù)流模型(數(shù)據(jù)驅(qū)動(dòng)并行程序執(zhí)行模型)是馮·諾依曼在控制流計(jì)算機(jī)并行化歷史上劃時(shí)代的突破。數(shù)據(jù)流程序邏輯基于圖表達(dá),是一種優(yōu)美、直觀、強(qiáng)大的并行計(jì)算模型,其思路最初由麻省理工學(xué)院提出。經(jīng)過近半個(gè)世紀(jì)的研究,數(shù)據(jù)流理論不斷完善、成熟,由于其獨(dú)特的性能、功耗表現(xiàn),對(duì)計(jì)算機(jī)的眾多領(lǐng)域產(chǎn)生了深遠(yuǎn)影響,直到目前仍然是前沿研究的熱點(diǎn)。[5]
多年的實(shí)踐證明數(shù)據(jù)流模型在并行方面存在優(yōu)勢(shì),區(qū)別于傳統(tǒng)指令驅(qū)動(dòng)操作的馮·諾伊曼計(jì)算機(jī)。數(shù)據(jù)流計(jì)算機(jī)采用了數(shù)據(jù)驅(qū)動(dòng)執(zhí)行方式,僅當(dāng)某一指令所需的操作數(shù)全部到齊后,指令即始執(zhí)行。這樣,如有多條指令同時(shí)滿足上述條件,就可以彼此并發(fā)執(zhí)行而不受指令順序執(zhí)行的限制,從而充分開拓并行性。
同一運(yùn)算程序下控制流與數(shù)據(jù)流的不同的執(zhí)行過程如圖1 所示。圖中可見傳統(tǒng)馮·諾依曼機(jī)采用程序計(jì)數(shù)控制,指令執(zhí)行必須按順序執(zhí)行,而采用數(shù)據(jù)驅(qū)動(dòng)方式執(zhí)行時(shí),任一指令所需要的操作數(shù)完備后,只要有可以使用的計(jì)算資源就能立即驅(qū)動(dòng)執(zhí)行,產(chǎn)生的運(yùn)算結(jié)果又可以驅(qū)動(dòng)下一條指令,這使得數(shù)據(jù)驅(qū)動(dòng)模式具有天然的并行性。
圖1 控制驅(qū)動(dòng)與數(shù)據(jù)驅(qū)動(dòng)機(jī)制比較
本文采用顯式令牌存儲(chǔ)匹配機(jī)制實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng),即直接匹配(direct matching)[6]。其原理是為活躍的代碼塊(code block)分配獨(dú)立的數(shù)據(jù)幀存儲(chǔ)空間,存儲(chǔ)空間內(nèi)保存著某個(gè)代碼塊的操作數(shù),存儲(chǔ)地址的訪問通過“虛擬地址+偏移地址”完成,如圖2 所示。在t 時(shí)刻,當(dāng)有與“乘指令”相關(guān)的數(shù)據(jù)令牌進(jìn)入后進(jìn)行完備性檢測(cè),當(dāng)檢測(cè)到乘指令所需的數(shù)據(jù)令牌未完備時(shí),在t+1 時(shí)刻暫存相對(duì)應(yīng)的幀存儲(chǔ)空間中,同時(shí)將相應(yīng)數(shù)據(jù)到達(dá)標(biāo)記位置,當(dāng)執(zhí)行乘指令的所有數(shù)據(jù)令牌到達(dá)時(shí),立即觸發(fā)乘指令執(zhí)行,同時(shí),乘指令收到執(zhí)行下一次操作的數(shù)據(jù)令牌,在t+2 時(shí)刻將其存儲(chǔ)在FP’幀存儲(chǔ)空間中,而乘指令執(zhí)行后產(chǎn)生的結(jié)果數(shù)據(jù)令牌出現(xiàn)在乘指令的輸出端,作為觸發(fā)其它指令的數(shù)據(jù)令牌。
圖2 硬件實(shí)現(xiàn)顯示存儲(chǔ)匹配機(jī)制
本文提出的數(shù)據(jù)驅(qū)動(dòng)多核視覺識(shí)別系統(tǒng)可應(yīng)用在多場(chǎng)景下的智能機(jī)器人中,依據(jù)具體應(yīng)用進(jìn)行編程,系統(tǒng)結(jié)構(gòu)如圖3 所示。
圖3 數(shù)據(jù)驅(qū)動(dòng)視覺識(shí)別系統(tǒng)
系統(tǒng)由四個(gè)處理器核組成,每個(gè)處理器核與其相關(guān)的片上SRAM 存儲(chǔ)、Flash 非易失存儲(chǔ)、調(diào)試接口等其它IP 部件掛載到系統(tǒng)總線,構(gòu)成小型單核系統(tǒng),經(jīng)獨(dú)立硬件數(shù)據(jù)驅(qū)動(dòng)模塊后點(diǎn)對(duì)點(diǎn)片內(nèi)通信。其中,主核CPU 完成從圖像采集到目標(biāo)切割等系列任務(wù),主核CPU 總線掛載攝像頭I2C 接口、SDRAM、SRAM、顯示器接口,掛接相關(guān)圖像預(yù)處理加速器。主核完成圖像切割后,將切割得到的待識(shí)別圖像信息經(jīng)數(shù)據(jù)令牌驅(qū)動(dòng),通過點(diǎn)對(duì)點(diǎn)通信模塊發(fā)往其它識(shí)別處理器進(jìn)行相應(yīng)特征的提取與識(shí)別。在識(shí)別處理器完成各自識(shí)別任務(wù)后,將識(shí)別結(jié)果經(jīng)數(shù)據(jù)令牌驅(qū)動(dòng)返回主核CPU 匯總識(shí)別。
主核視覺識(shí)別系統(tǒng)配置如圖4 所示,配置接口分為三類,第一類用于圖像傳感器捕獲及圖像存放接口,如圖4 中的攝像頭I2C 接口、SRAM 顯存讀寫接口、FLASH 讀寫接口;第二類是程序代碼執(zhí)行部件,如圖4 中配置的處理器、SDRAM 控制器、JTAG 接口、UART 接口;第三類是其它接口,包括通信擴(kuò)展口、SRAM顯存控制接口、計(jì)時(shí)器等。從核系統(tǒng)配置中僅保留有運(yùn)行識(shí)別程序的處理器,供識(shí)別代碼運(yùn)行的片上存儲(chǔ)器。
圖4 主核視覺識(shí)別系統(tǒng)配置
系統(tǒng)借鑒文獻(xiàn)[7]中提出的交點(diǎn)隊(duì)列型通信結(jié)構(gòu),在數(shù)據(jù)通信中增加了支持中斷信號(hào)處理與廣播式數(shù)據(jù)傳播,其是一種點(diǎn)對(duì)點(diǎn)的并行通信結(jié)構(gòu),在每個(gè)交點(diǎn)處都有一個(gè)FIFO 緩存,具體結(jié)構(gòu)見圖5 所示,由解碼流水、仲裁器、FIFO 緩存隊(duì)列、Crossbar、中斷控制組成。數(shù)據(jù)輸入時(shí)解碼流水對(duì)數(shù)據(jù)解包,根據(jù)匹配地址表查找數(shù)據(jù)目的FIFO 緩存隊(duì)列,每個(gè)輸入端口對(duì)應(yīng)3 個(gè)FIFO 存儲(chǔ)隊(duì)列組。解碼流水為兩級(jí)流水線結(jié)構(gòu),首先是標(biāo)簽過濾器,根據(jù)數(shù)據(jù)包信息判定數(shù)據(jù)目的地寄存有效數(shù)據(jù),根據(jù)數(shù)據(jù)包控制信息將有效數(shù)據(jù)存儲(chǔ)到相應(yīng)FIFO緩存隊(duì)列中,緩存FIFO 隊(duì)列非空時(shí)向相應(yīng)目的地發(fā)送請(qǐng)求信號(hào),經(jīng)仲裁器仲裁后,通過Crossbar 形成一條鏈路進(jìn)行數(shù)據(jù)傳送。
圖5 點(diǎn)對(duì)點(diǎn)通信結(jié)構(gòu)
為提高系統(tǒng)效率,設(shè)計(jì)集成廣播指令,即一個(gè)數(shù)據(jù)包同時(shí)發(fā)送至其它處理器核,集成中斷控制,無需頻繁查詢避免擁堵。
為保證系統(tǒng)的絕對(duì)公平,通信仲裁算法采用輪詢方式,關(guān)鍵參數(shù)是交點(diǎn)緩存深度,需構(gòu)建通信模型。交點(diǎn)隊(duì)列通信是多隊(duì)列單服務(wù)臺(tái)結(jié)構(gòu),借助排隊(duì)論構(gòu)建M/M/1 的排隊(duì)模型,具體過程如下。
1)問題的一般描述
設(shè)輸入為泊松過程,服務(wù)時(shí)間呈負(fù)指數(shù)分布,單個(gè)服務(wù)臺(tái)、系統(tǒng)無限制、數(shù)據(jù)源無限制,求系統(tǒng)狀態(tài)概率Pn與系統(tǒng)運(yùn)行指標(biāo)數(shù)據(jù)平均長度Ls,滯留隊(duì)列長度Lq,數(shù)據(jù)平均停留時(shí)間Ws,平均隊(duì)列等待時(shí)間Wq之間的關(guān)系。
2)系統(tǒng)狀態(tài)概率
利用狀態(tài)轉(zhuǎn)移圖列出平衡方程。設(shè)到達(dá)與服務(wù)率分別為λ和μ,可列出平衡方程如下:
可解得狀態(tài)概率為:
3)系統(tǒng)運(yùn)行指標(biāo)
排隊(duì)系統(tǒng)運(yùn)行指標(biāo)分別有Ls、Lq、Ws、Wq,可證明得到其與服務(wù)強(qiáng)度的關(guān)系如下:
指標(biāo)關(guān)系可用little 公式表示:
基于上述理論分析,采用輪詢的仲裁算法,通過Matlab 構(gòu)建模型進(jìn)行仿真驗(yàn)證,最終實(shí)現(xiàn)的緩存實(shí)時(shí)隊(duì)長在深度4 時(shí),數(shù)據(jù)吞吐達(dá)到98%,基于此,將緩存深度提高至8 時(shí),也僅為99%,即僅增加1 個(gè)百分點(diǎn)。綜合上述分析,權(quán)衡系統(tǒng)性能與資源消耗,選擇系統(tǒng)互聯(lián)緩存深度為4。
系統(tǒng)的關(guān)鍵特性表現(xiàn)在分布式任務(wù)計(jì)算和數(shù)據(jù)驅(qū)動(dòng)表征數(shù)據(jù)相關(guān)性上。
識(shí)別系統(tǒng)由目標(biāo)定位和目標(biāo)識(shí)別兩部分組成,系統(tǒng)示意圖如圖6 所示,主要流程包括圖像采集處理、紅色分量提取、前后列相減、sobel 算法二值化、數(shù)據(jù)膨脹、數(shù)據(jù)腐蝕、目標(biāo)定位和目標(biāo)識(shí)別。識(shí)別系統(tǒng)以FPGA 為設(shè)計(jì)平臺(tái),F(xiàn)PGA 資源消耗見表1,圖像傳感器采用OmnVision 公司OV9650。
圖6 目標(biāo)識(shí)別系統(tǒng)示意圖
表1 FPGA資源消耗
目標(biāo)識(shí)別系統(tǒng)最初是在單核系統(tǒng)完成圖像采集至目標(biāo)識(shí)別任務(wù),本文將其移植至多核平臺(tái),使用點(diǎn)對(duì)點(diǎn)通信結(jié)構(gòu)為多核核間通信連接,提高系統(tǒng)多核并行性,使用數(shù)據(jù)驅(qū)動(dòng)標(biāo)定待計(jì)算數(shù)據(jù)間的依賴關(guān)系。相比于單核識(shí)別系統(tǒng),特征明顯:
1)任務(wù)分工更明確,主核CPU 由按順序執(zhí)行轉(zhuǎn)變成為由主核CPU 管理和控制下的多核分布式計(jì)算任務(wù)模型。
2)多處理器核以數(shù)據(jù)驅(qū)動(dòng)方式自發(fā)進(jìn)行數(shù)據(jù)交換,避免程序控制,數(shù)據(jù)并行性優(yōu)異。
3)模型具備擴(kuò)展性,簡單拆解成多核平臺(tái)分布式計(jì)算。
以臺(tái)球識(shí)別場(chǎng)景為例,一般包括色彩、大小、位置等參數(shù),識(shí)別系統(tǒng)的分布式計(jì)算任務(wù)圍繞參數(shù)識(shí)別展開,系統(tǒng)將一個(gè)處理器作為主核,其余三個(gè)處理器作為從核。主核是從核的任務(wù)發(fā)起者,即從核的計(jì)算任務(wù)由主核在數(shù)據(jù)驅(qū)動(dòng)機(jī)制作用下開始,完成從圖像采集到目標(biāo)切割任務(wù),將切割得到的圖像矩陣值以數(shù)據(jù)驅(qū)動(dòng)方式分別發(fā)送至色彩、大小、位置等識(shí)別處理器,分別完成識(shí)別任務(wù)。本文設(shè)計(jì)的機(jī)器人應(yīng)用平臺(tái)如圖7 所示,平臺(tái)由主控板和機(jī)械臂組成,通過視覺識(shí)別系統(tǒng)進(jìn)行目標(biāo)球識(shí)別和定位,控制機(jī)械臂進(jìn)行抓取,識(shí)別結(jié)果如圖8 所示。
圖7 機(jī)器人實(shí)物圖
圖8 臺(tái)球識(shí)別
針對(duì)多應(yīng)用場(chǎng)景,對(duì)單核系統(tǒng)和四核系統(tǒng)進(jìn)行了加速比趨勢(shì)分析,如圖9 所示。在計(jì)算誤差允許的范圍內(nèi),加速比隨著計(jì)算量增大而緩慢上升,四核加速比逐漸趨近于4。表明隨著計(jì)算量增大,通信時(shí)間所占比例逐漸減小,不因通信量與計(jì)算量的增大而線性增大,不會(huì)成為限制多核性能的瓶頸,具有很好的性能,設(shè)計(jì)的多核處理器結(jié)構(gòu)實(shí)現(xiàn)過程中每個(gè)C 代碼段執(zhí)行純函數(shù)的操作,消除了函數(shù)間的共享變量,并行編程的復(fù)雜度有所降低。同時(shí),采用的數(shù)據(jù)驅(qū)動(dòng)機(jī)制沒有執(zhí)行順序的嚴(yán)格限制,充分挖掘了算法潛在的并行性。
圖9 加速比趨勢(shì)圖
針對(duì)智能機(jī)器人中圖像識(shí)別對(duì)并行化的處理以及低功耗應(yīng)用需求,結(jié)合分布式計(jì)算與數(shù)據(jù)流計(jì)算模型,設(shè)計(jì)了一種用于智能機(jī)器人的數(shù)據(jù)驅(qū)動(dòng)多核識(shí)別系統(tǒng),系統(tǒng)采用分布式多核結(jié)構(gòu),核間通信采用數(shù)據(jù)驅(qū)動(dòng)機(jī)制,支持函數(shù)語言編程。實(shí)驗(yàn)結(jié)果表明,系統(tǒng)采用的數(shù)據(jù)驅(qū)動(dòng)機(jī)制充分增加粗粒度的多核并行性,線性加速比較好。