張好聰,李 濤,邢立冬,潘風蕊
1.西安郵電大學 電子工程學院,西安710121
2.西安郵電大學 計算機學院,西安710121
Khronos Groups 2019 年發布的“The OpenVXSpecification 1.3”,是計算機視覺算法和機器智能加速跨平臺規范的最新版本,支持各種現代硬件體系結構,如移動系統、嵌入式SOC 系統和桌面系統。視覺系統內層次結構通常是復雜并且不一致的,OpenVX 旨在最大程度地跨不同的硬件平臺實現功能和性能的可移植性,從而提供一種標準化的、對應用程序影響最小的計算機視覺框架,便于硬件廠商選擇不同的方式實現硬件加速。這使得高性能處理器和顯卡制造商AMD、GPU的發明者和人工智能計算的引領者NVIDIA、全球最大的CPU制造商Intel等越來越多的公司采用OpenVX開源規范。
在信息時代,計算機視覺扮演著非常重要的角色,將越來越廣泛地進入各個領域,均需要對圖像進行高速處理,并行計算相比串行計算有更快的求解問題的速度,可以縮短計算時間。并行性主要通過三種方式應用于計算機視覺處理:(1)數據并行;(2)任務并行;(3)流水線并行。
結合以上兩方面,本文提出了一種具有并行處理能力的專用指令集處理器(application specific instruction set processor,ASIP),對OpenVX 規范1.3中58 個核函數分別構建圖執行模型,并映射到該架構上,通過微程序優化其計算流程,實現最終的硬件加速。結果表明,該架構可以隨著處理元件的數量實現線性加速。
PE(processing element)間的互聯網絡拓撲結構是并行處理系統的重要組成部分,由文獻[6]得出,如圖1 所示的分層交叉連接網絡(hierarchically crossconnected mesh,HCCM)在各方面性能均優于經典的2DMesh拓撲結構和以2DMesh為基礎擴展的Xmesh。

圖1 HCCM拓撲結構Fig. 1 HCCM topology
因此本文基于HCCM 結構,提出了HCCM-和HCCM+結構,如圖2 所示。對比表1 中這三種結構的參數,其中直徑(diameter)指任意兩結點之間最短路徑中路徑長度的最大值,直徑越短,通信時間越短,速度越快,對分寬度(bisection bandwidth)指將拓撲結構中所有結點分成數量相等的兩部分需要的最小鏈路數量,為拓撲結構的級數。HCCM-雖比HCCM 的直徑短,但其等分寬度僅為4,這限制了整個系統的通信容量,同時HCCM-的邊也比HCCM少,意味著其承載數據流量的能力更小。而HCCM+結構結合了HCCM 與HCCM-的優點,其直徑小于HCCM,對分寬度和邊數也大于HCCM 和HCCM-,在通信速度、容量和承載數據能力等方面都有更多的優勢,因此選擇HCCM+結構作為處理器的框架。

圖2 HCCM-和HCCM+拓撲網絡Fig. 2 HCCM-and HCCM+topology

表1 HCCM、HCCM-與HCCM+的參數Table 1 Parameters of HCCM,HCCM-and HCCM+
圖3為自主設計的16個PE互聯構成的OpenVX可編程并行處理器,主要由微程序控制器(micro controller)、PE、路由交叉開關(route)、共享存儲及訪存控制電路(memory access control)構成。

圖3 OpenVX可編程并行處理器Fig. 3 OpenVX programmable parallel processor
微程序控制器是各種操作的底層支撐部件,通過PE對應的寄存器向每個PE發送操作控制、取址控制、條件控制、轉移類型、下地址等指令,控制PE內部寄存器堆(register file)的取數地址、數據類型選擇模塊(data type selection)的取數方式、交叉電路(cross circuit)的走向以及PE內部運算單元的運算模式。也通過Route 控制PE 間數據的多通道傳輸。Route 是在XY 路由只有兩個方向通訊的基礎上,增加了PE之間對角線上的數據通路,支持一對一和一對多的傳輸方式,可以滿足OpenVX核函數多種類型的數據傳輸。
PE 間的緩沖由位寬32 bit、深度64 的存儲實現,具體通信方式由路由交叉開關根據OpenVX 核函數的需要控制。PE 結構如圖4,包括寄存器堆、譯碼電路(decode)、數據類型選擇電路、若干個ALU(arithmetic and logic unit)、除法器(DIV)、乘法器(MUL)、內部交叉電路、輸出選擇電路等。ALU 可以實現ADD(加)、SUB(減)、AND(與)、OR(或)、XOR(異或)、SLL(邏輯左移)、SRL(邏輯右移)和SRA(算術右移),內部包括多路選擇器和操作控制碼。乘法器和除法器均支持定浮點數據的運算。

圖4 PE結構Fig. 4 Structure of PE
PE內部交叉電路主要由多個57選1的選擇器構成,根據微程序控制器發送的指令控制多個數據的走向。其輸入包括數據類型選擇模塊和各個運算單元的輸出,即每個處理器既可以對圖像原始數據進行計算,其計算結果也可以返回處理器繼續執行后續操作。
寄存器堆通過識別微程序控制器發送的取址指令,取出運算單元需要的原始數據。數據類型選擇模塊接收到數據和取數類型指令后執行相應截位操作,向交叉電路對應的端口寫入數據,每次執行操作前,交叉電路會根據條件控制信號選擇兩個操作數送入運算單元。除了操作數,每個ALU 還有一個指令輸入端口,用來接收經過微程序控制器優化后的一系列操作控制指令,快速完成OpenVX 核函數的并行計算。根據核函數的不同,每個運算單元的輸出有寫入寄存器堆或送入交叉電路兩種選擇。整個PE 計算任務完成后由選擇輸出電路選擇當前PE 的輸出。
訪存控制電路采用突發讀寫的方式,通過AXI總線訪問DDR,根據圖像的處理方式,輸出對應的數據格式。圖像處理通常在以下級別完成:
(1)低級圖像處理:像素級操作。
(2)中級圖像處理:對圖像像素導出的抽象進行操作。
(3)高級圖像處理:從中級圖像處理操作中提取抽象內容,目的是生成更高層次的抽象。
OpenVX核函數均屬于低級圖像處理,可分為點處理、局部鄰域處理、遞歸鄰域處理和全局處理。訪存控制電路通過指令判斷圖像處理類別,選擇最優取數方式送入寄存器堆。
該并行處理器是為OpenVX 核函數設計的通用處理器,適用于所有OpenVX 核函數,支持單指令多數據(single instruction multiple data,SIMD)和多指令多數據(multiple instructions stream multiple data stream,MIMD)兩種編程模式,可以實現數據并行、任務并行、流水線的計算模式。SIMD模式下,16個PE執行微程序控制器發出的同一條操作指令,節省了代碼存儲;MIMD模式下,微程序控制器發送指令序列,多個PE可以同時完成不同核函數的操作。
OpenVX 主要由一個預先定義的包含58 個視覺函數的計算機視覺核函數庫、基于圖的執行模型和一組物理內存的抽象內存對象組成。其中的視覺函數既可以對兩幅圖像做算數和邏輯運算,如將兩幅圖像對應位置的像素加、減、與、或等,也可以對一幅圖像進行卷積、顏色轉換、仿射變換、濾波、縮放、通道提取/合并、形態學操作、直方圖均衡化和特征抽取等,滿足多樣化的計算機視覺需求。根據不同的計算機視覺應用,選擇一個核函數或將多個核函數組合,抽象為不同的有向無環圖(directed acyclic graph),也稱圖執行模型(graph execution model),進而將輸入圖像轉換為具有預期特性的另一幅圖像。圖5為一個對圖像進行縮放(scale image)的圖執行模型示例,這些有向無環圖的結點(node)即為OpenVX核函數,相鄰結點間存在數據依賴關系。圖5 中,輸入的彩色圖像數據經過Node1(顏色轉換)轉換為灰度圖像,此結果經Node2(雙邊濾波)對圖像進行平滑處理,得到的平滑圖像最終通過Node3(圖像縮放)得到結果圖像輸出。OpenVX 通過對其預定義的核函數加速,實現整個硬件算法的加速。

圖5 圖執行模型示例Fig. 5 Example of graph execution model
通過對OpenVX 規范1.3 的研究,對規范中提到的58 個核函數構建各自的圖執行模型,并映射在OpenVX 并行處理器上完成硬件結構上的并行加速。選取其中Harris Corners 和Canny Edge Detector兩個底層特征抽取函數詳細介紹其并行實現過程,因算法比較復雜,通過將其優化為幾個簡單結點進行加速。以下為構成其圖執行模型的核函數。
(1)Color Convert。將圖像從一種顏色空間轉換為另一種顏色空間,如彩色轉灰度的公式為:

(2)Control Flow。可以完成圖像多種數據格式的邏輯運算(與、或、異或、與非)、比較大小(等于、小于、小于等于、大于、大于等于)和算術運算(加、減、乘、除、取余、最大/最小值)。
此函數幾乎包含所有基本操作,這使其成為圖執行模型中利用率最高的結點。如Canny 邊緣檢測中通過比較、兩個方向的梯度值與給定值的大小判斷梯度方向,計算Sobel 算子結果的乘積等,均可用Control Flow實現。
(3)Gaussian Filter。對整幅圖像進行加權平均的過程。用一個掩膜掃描圖像中的每一個像素,用掩膜確定的鄰域內像素的加權平均灰度值去替代模板中心像素點的值。用到的掩膜為:

(4)Median Filter。一種線性濾波算法,目標像素本身與其周圍的8個像素構成一個3×3的濾波模板,求取模板內9個像素的均值代替目標像素。
(5)Non-Maxima Suppression。一種邊緣稀疏技術,在局部區域內保留最大值的像素,抑制非最大值的像素。如3×3區域的抑制條件為:

(6)Sobel 3×3。用不同的卷積核與原灰度圖像進行卷積,求取像素、方向的梯度幅值。、方向卷積核分別為:

(7)Thresholding:將輸入圖像與閾值相比,產生一幅二值圖像。
上述函數中的Gaussian Filter、Median Filter、Non-Maxima Suppression、Sobel 3×3都是對圖像像素級的局部處理,即輸出像素值由輸入像素及其鄰域像素值決定。以3×3模板為例,處理過程中需要同時得到圖像窗口內的9 個像素,文獻[13]中調用了2 個FIFO 行緩存(與Xilinx 的Shift IP 核,即行緩存IP 核同義)完成2 個行緩存,加上當前行得到3 行圖像數據,將這3 行數據分別打2 拍得到一個窗口9 個像素數據,其原理如圖6所示。這也是大多數FPGA進行圖像處理使用的典型方法。若待處理圖像大小為×,得到第一個×的矩陣需要(+1)×(-1)個時鐘,則此方法在640×480 的圖像中得到第一個3×3矩陣需要1 280個時鐘。

圖6 Xilinx Shift IP核原理Fig. 6 Principle of Shift IP core of Xilinx
本結構的訪存控制電路在讀取3×3 模板的數據時,采用突發讀寫的方式,通過三條通路分別訪問存儲的地址端,每條通路對應一行數據在存儲中的地址,取出的3 行數據分別發送至PE 內部3 個寄存器堆,微程序控制器根據核函數操作的速度控制訪存控制電路何時向寄存器堆送數。此方法可以在3 個時鐘內讀出9個像素數據,很大程度上為圖像的流水線處理節省了時間。
Median Filter需要得到3×3濾波窗口內像素的中值,傳統做法是依次比較9 個像素大小,效率較低。本文提出一種優化后的算法:如圖7,分別比較窗口內三行數并由大到小排序,則第一列為每行最大值,第二、三列分別為每行的中值和最小值。取第一列的最小值、第二列的中間值、第三列的最大值進行比較,中間值則為當前窗口中值。這種任務并行的算法減少了比較次數,提高了處理速度。

圖7 優化后的Median FilterFig. 7 Optimized Median Filter
以函數Gaussian Filter 為例,如圖8,將待處理圖像當前矩陣內的像素標號。其在PE內部的映射方式如圖9 所示,其中A11、A13、A31、A33 對應的掩膜系數為1,因此直接兩兩相加。A12、A21、A23、A32 和A22對應的系數為2和2,由于對FPGA來說,移位操作是0 開銷(不消耗時鐘周期),且本設計的ALU 將加法和移位合并,因此在微程序控制器配置此操作指令時,只需考慮將寄存器堆中的圖像數據和譯碼單元的立即數送入第一級ALU,單獨的移位操作不再消耗時鐘。前一級的結果作為下一級ALU的輸入繼續完成濾波操作。

圖8 當前矩陣像素標號Fig. 8 Label of current matrix pixel

圖9 Gaussian Filter在PE內的映射Fig. 9 Mapping of Gaussian Filter in PE
在圖形硬件系統中,有兩種主要的方法來進行快速處理,分別是流水線和并行化,通常需要將兩者結合使用才能達到較好的效果。本章介紹兩個核函數圖執行模型的設計及映射結構。
文獻[16]提出,對于同一個流水線處理結構,在一定范圍內圖像分塊越多,每塊圖像的像素總數越少,所需的處理時間則越短。本文綜合處理器的資源與文獻[16]的結論,將圖像分為四塊并行處理,每塊均進行流水線操作。坎尼邊緣檢測旨在通過像素梯度方向檢測出圖像邊緣,屬于局部鄰域處理,分塊易導致其分界處出現偽角點。因此對邊界采用邊界復制法,使分界處存在重疊部分(1 行/1 列像素)。將Canny Edge Detector 算法的每一步映射為一個簡單核函數,圖10 為優化后Canny Edge Detector 核函數的圖執行模型,具體步驟如下(括號內為映射的核函數):

圖10 優化的Canny Edge Detector圖執行模型Fig. 10 Optimized Canny Edge Detector graph execution model
(1)將彩色圖像轉換為灰度圖像(Color Convert)。
(2)對灰度圖像進行濾波處理(Median Filter)。
(3)利用Sobel 算子判斷圖像像素、方向的梯度正負性,并計算出其絕對值|G|、|G|和對應的梯度幅值=|G|+|G|(Sobel 3×3)。
(4)如圖11,將360°的梯度方向劃分為四個空間。原算法使用=arctan(G/G) 判斷梯度方向,OpenVX中沒有直接實現反三角函數的核函數,本文總結出近似方法判斷梯度方向(Control Flow):

圖11 梯度方向劃分Fig. 11 Gradient direction division
第①區域:比較G與G絕對值,符合G>G×2.5。
第③區域:比較G與G絕對值,符合G>G×2.5。
第②區域:不在①、③區域,G與G同號。
第④區域:不在①、③區域,G與G異號。
(5)將梯度方向與梯度幅值合成一幅圖像信息,以3×3為模板,若中心像素比其梯度方向上兩個像素的梯度幅值都大,則標記為真,否則標記為假(nonmaxima suppression)。
(6)用中心像素梯度幅值與設定的雙閾值比較:

其中,H、L分別為高低閾值(Thresholding)。
(7)將像素真假及變量合成一個新的圖像,像素為真時考察變量的值,像素為邊緣點應滿足為2′b10 或2′b01,同時在其八連通區域中存在像素的=2′b10(Control Flow)。
上述基于圖的執行模型中,每一級結點都有各自的任務,并且可以在同一時刻共同操作,構成了連續的流水線操作,如圖12所示。

圖12 Canny Edge Detector流水線設計Fig. 12 Canny Edge Detector pipeline design
圖13 為Canny Edge Detector 映 射到OpenVX 并行處理器上的結構。在兩個特征抽取函數的映射結構中Line1~Line4各自處理圖像的1/4,共同完成底層特征抽取。當第四列結點同時執行完成之后,其結果返回第一列PE,完成完整的圖執行模型。映射時用一條線路傳輸多路數據,將多個結點的工作分成多個時間段,各個工作的各個時間段交叉使用,充分利用了分時復用(time division multiplexing,TDM)的思想,提高了資源利用率。

圖13 Canny Edge Detector映射結構Fig. 13 Canny Edge Detector mapping structure
Harris 角點檢測的基本思想是使用一個固定窗口在圖像上進行任意方向上的滑動,比較滑動前與滑動后兩種情況,窗口中的像素灰度變化程度,如果存在任意方向上的滑動都有較大灰度變化,則認為該窗口中存在角點。圖14為優化后的Harris Corners基于圖的執行模型,具體步驟如下:

圖14 優化的Harris Corners圖執行模型Fig. 14 Optimized Harris Corners graph execution model
(1)將彩色圖像轉換為灰度圖像(Color Convert)。
(2)計算出灰度圖像每一個像素點方向、方向的梯度值I、I(Sobel 3×3)。
(3)計算I、I、II并緩存(Control Flow)。

(5)計算圖像中每一個像素點的響應值(Control Flow):

(6)將值與給定閾值比較,大于閾值的標記為候選點,否則不標記(Thresholding)。
(7)對上述結果進行非極大值抑制,輸出最終圖像(non-maxima suppression)。
圖14 中最左側的結點Control Flow 得到方向梯度值I后,計算其平方值,經過高斯窗口計算局部累加和,得到得分值所需的系數。中間和右側路徑分別計算系數、,三條路徑同時工作。Harris Corners的流水線設計如圖15所示。

圖15 Harris Corners流水線設計Fig. 15 Harris Corners pipeline design
圖14 的Harris Corners 圖執行模型中,同時計算梯度值乘積的3個結點Control Flow和同時計算得分值系數的3 個結點Gaussian Filter。分別被映射到2 個PE 上,如圖16 所示,使得16 個PE 可以同時處理1/4的圖像數據,每條處理路徑都支持任務并行。

圖16 Harris Corners映射結構Fig. 16 Harris Corners mapping structure
為驗證本結構對OpenVX 核函數的并行處理速度有所提升,使用Verilog 硬件描述語言,在Xilinx 公司的FPGA芯片xcvu440-flga-2892-2-e進行綜合。用單個基本核函數映射在一個和多個PE 上的加速比、兩個底層特征抽取函數串行與并行速度的對比來衡量本并行處理器的處理速度。圖17為單個基本核函數映射在1 個和多個PE 上的加速比,計算時統一將映射在1個PE上的速度歸一化。圖18為底層特征抽取核函數拆分之前分別與拆分后串行和并行的加速比,將拆分之前用一個PE實現的速度歸一化,分別計算2個、4個、8個和16個PE并行的加速比。

圖17 OpenVX基本核函數并行加速比Fig. 17 Parallel speedup of OpenVX basic kernel functions

圖18 OpenVX底層特征抽取函數加速比Fig. 18 Speedup of OpenVX underlying feature extraction functions
由圖中數據可知,將復雜特征抽取核函數拆分為多個結點,并將每個核函數映射到4個PE上,即圖像分為四塊并行處理可以在OpenVX 并行處理器上獲得最大的加速比。整個架構在Vivado 2020.1平臺上綜合后的資源利用率如圖19所示。

圖19 資源利用率Fig. 19 Resource utilization
如圖20所示,(a)為仿真的原始灰度圖像,(b)為Gaussian Filter核函數的運行結果,(c)、(d)為最終的特征抽取結果。

圖20 原始灰度圖及仿真結果Fig. 20 Original gray image and simulation results
本文介紹了一種用于OpenVX 加速的ASIP,并在硬件平臺上實現了部分核函數。硬件最高工作頻率可達125 MHz。這些實現以數據并行方法和流水線方法將OpenVX 1.3 核函數映射到ASIP 上。實驗證明了本結構具有線性加速比。當圖像分辨率為640×480 時,該結構的幀頻率約為66 frame/s。本文提出的計算機視覺函數的處理方法,在相關應用領域可以大大節省圖像處理時間,提高處理效率。例如,通過顯微圖像、血管造影圖像或超聲波圖像檢測腫瘤;在軍事領域檢測敵軍士兵或車輛等,具有廣闊的應用前景。