這些“視頻幀隊(duì)列 API”功能加上視頻端口 ISR 和視頻輸入輸出端口讓設(shè)計(jì)中的視頻處理流水線的構(gòu)造更加完善。圖 4 所示的是使用 FPGA 上的本視頻流水線采集、處理和顯示實(shí)際的視頻幀。它還顯示了通過計(jì)算出的運(yùn)動向量縮小視圖實(shí)現(xiàn)的畫中畫功能。
?
圖 4:右下被運(yùn)動向量網(wǎng)格覆蓋的、經(jīng)過 FPGA 處理后的實(shí)際幀
基于 Vivado HLS 的硬件加速器
在前文介紹的人群運(yùn)動分類算法中,最為耗時(shí)、計(jì)算最密集的工作是計(jì)算運(yùn)動向量。另一項(xiàng)系統(tǒng)工作——進(jìn)行分類——因不涉及像素級的處理,非常簡單而且易于實(shí)現(xiàn)。注意到設(shè)計(jì)的這個(gè)方面,我們?yōu)橛?jì)算運(yùn)動向量構(gòu)建了一個(gè)硬件加速器。我們借助賽靈思 Vivado HLS,用 C/C++ 語言在 RTL 中對該加速器進(jìn)行了設(shè)計(jì)、測試和綜合。
Vivado 生成的 RTL 代碼的關(guān)鍵特征之一是其在很大程度上已經(jīng)過了精心優(yōu)化。Vivado HSL 把陣列存?。ɡ绱鎯υ陉嚵兄械南袼?cái)?shù)據(jù))綜合到存儲器接口中,通過分析代碼自動生成所需的地址。Vivado HSL 還可分析預(yù)先計(jì)算好的偏移和常量,從而非常快速地執(zhí)行所謂的“跨步式”存儲器訪問??绮绞酱鎯ζ髟L問從圖像的多行數(shù)據(jù)訪問開始(就如同在 2D 卷積中)。
設(shè)計(jì)基于 Vivado 的加速器的主要考慮因素是并行處理運(yùn)動向量的計(jì)算,最大限度地提高從主存儲器中的數(shù)據(jù)讀取。為此目的,我們使用八個(gè) Block RAM 并行加載和存儲視頻幀數(shù)據(jù)。硬件加速器的內(nèi)核能夠并行計(jì)算四個(gè)運(yùn)動向量,而且在計(jì)算中它會用到所有八個(gè) Block RAM。從主存儲器傳輸?shù)竭@些 Block RAM 的數(shù)據(jù)由 MicroBlaze 通過 DMA 加以控制。
Vivado HLS 生成的硬件加速器具有部分自動生成的握手信號,這些信號對于啟停硬件加速器必不可少。 這些握手信號包含“啟動”、“繁忙”、“閑置”、“完成”等標(biāo)志。這些標(biāo)志通過 GPIO 傳送到 MicroBlaze 處理器以完成握手。圖 5 所示為該硬件加速器、八個(gè) Block RAM 和 MicroBlaze 處理器主外設(shè)總線之間的互聯(lián)。
?
圖 5:基于 Vivado HLS 的硬件加速器及其互聯(lián)
圖 5 中分別被命名為 SA1、TA1 到 SA4、TA4 的這些 Block RAM,每個(gè)的容量為 16KB。每對 SA1、TA1 到 SA4、TA4 能夠保存計(jì)算一個(gè)完整行的運(yùn)動向量所需的數(shù)據(jù)。因此硬件加速器在完成運(yùn)行后,會輸出四行運(yùn)動向量寫回到相同的 Block RAM 存儲器中。這些計(jì)算完的運(yùn)動向量隨即由 MicroBlaze 處理器讀回,然后把結(jié)果以運(yùn)動向量網(wǎng)格的形式復(fù)制到自己的主存儲器中。(圖 4 所示的是被硬件加速器計(jì)算出的運(yùn)動向量網(wǎng)格覆蓋的實(shí)際幀)
該硬件加速器在 200MHz 頻率下工作,計(jì)算整個(gè)圖像的運(yùn)動向量所需的全部處理任務(wù)能夠在不足 10 毫秒內(nèi)完成,包括與存儲器之間的所有數(shù)據(jù)往來傳輸。
算法控制和數(shù)據(jù)流
在視頻流水線和硬件加速器開發(fā)就緒后,完成該系統(tǒng)的最后一步是把這兩個(gè)單元與 MicroBlaze 主機(jī)處理器集成,并使用賽靈思軟件開發(fā)套件 (SDK_,用 C/C++ 實(shí)現(xiàn)用戶層應(yīng)用的算法控制和數(shù)據(jù)流。 在賽靈思 SDK 中實(shí)現(xiàn)算法控制和數(shù)據(jù)流能為設(shè)計(jì)帶來極大的靈活性。這是因?yàn)橛脩艨梢杂孟嗤姆绞皆O(shè)計(jì)和集成新的硬件加速器,同時(shí)還可以修改必要的控制和數(shù)據(jù)流以集成新的硬件加速器。最終得到的就是一種軟件控制、硬件加速的設(shè)計(jì),其靈活度可媲美純軟件實(shí)現(xiàn)方案,同時(shí)其性能可媲美純硬件實(shí)現(xiàn)方案。
本文介紹的人群運(yùn)動分類算法的控制和數(shù)據(jù)流從通過視頻幀隊(duì)列 API 功能采集視頻幀開始。當(dāng)視頻幀獲取完畢,用戶應(yīng)用把當(dāng)前的和之前的視頻幀數(shù)據(jù)傳輸?shù)接布铀倨?,完成運(yùn)動向量的計(jì)算。
此時(shí)系統(tǒng)在軟件中計(jì)算運(yùn)動向量的統(tǒng)計(jì)屬性和分類結(jié)果。這樣做的原因是這些步驟不涉及任何像素級處理,只會增加很少的處理開銷。當(dāng)分類結(jié)果計(jì)算完成時(shí),用屏幕顯示(OSD)功能把結(jié)果和運(yùn)動向量顯示在處理后的幀上。這些屏幕顯示功能也是在賽靈思 SDK 中用 C/C++ 語言實(shí)現(xiàn)的。
這些構(gòu)建模塊(實(shí)時(shí)視頻流水線、硬件加速器和算法控制/數(shù)據(jù)流)全部就緒后,總體系統(tǒng)設(shè)計(jì)即告完成。隨后我們對基于 FPGA 的實(shí)現(xiàn)方案進(jìn)行了測試,并與之前的桌面 PC 型實(shí)現(xiàn)方案比較結(jié)果的準(zhǔn)確性。兩個(gè)結(jié)果是完全一致的。我們使用來自明尼蘇達(dá)大學(xué)數(shù)據(jù)庫( ml )和來自 的各種測試視頻對本系統(tǒng)進(jìn)行了測試。
實(shí)現(xiàn)方案結(jié)果
整個(gè)設(shè)計(jì)只使用了 Spartan-6-LX45 FPGA 上 30% 的Slice LUT、60% 的 BRAM 和12% 的 DSP48E 乘法器資源。圖 6 所示是硬件設(shè)置(上)和實(shí)際系統(tǒng)輸出。硬件設(shè)置由 Digilent Atlys Spartan 6 FPGA 板和定制視頻接口卡組成,利用視頻 ADC 和 DAC 可為 FPGA 提供視頻輸入/輸出功能。如欲觀看該系統(tǒng)的詳細(xì)演示視頻,敬請?jiān)L問下列 Web 鏈接:
?
?
圖 6:硬件設(shè)置(上)和把場景分類為驚恐的實(shí)際 FPGA 處理后的幀
巨大的未來潛力
FPGA 是面向?qū)崟r(shí)視頻處理等需要高性能的應(yīng)用的理想平臺。開發(fā)這種應(yīng)用要求進(jìn)行一定的架構(gòu)考量,以充分發(fā)揮所選 FPGA 的性能優(yōu)勢。此外使用 EDK 和 Vivado HLS 等先進(jìn)工具,能夠以比過去高得多的效率和更短的開發(fā)時(shí)間實(shí)現(xiàn)總體系統(tǒng)設(shè)計(jì)。
因此正如我們在本文中所展示的,利用上述工具在 FPGA 上實(shí)現(xiàn)性能關(guān)鍵型應(yīng)用有著巨大的潛力。有這樣成功運(yùn)行的平臺作為先例,我們期望把這一成果推廣用于解決更多的技術(shù)問題,例如自動化交通監(jiān)測、醫(yī)院中的自動病患觀察等更多的應(yīng)用。
參考資料
1. Ramin Mehran、Mubarak Shah,《使用社會力模型檢測異常人群行為》,IEEE 計(jì)算機(jī)視覺與模式識別 (CVPR) 國際會議,邁阿密,2009年
2. Duan-Yu Chen、Po-Chung Huang,《基于運(yùn)動的人群異常事件檢測》,《視覺計(jì)算和圖像顯示期刊(Journal of Visual Computation and Image Representation)》,2011 年第 2 期第 22 卷,第 178-186 頁
3. OmniTek OSVP: default/files/OSVP.pdf
鳴謝
作者在此鳴謝合著者 Shoab A. Khan 教授貢獻(xiàn)的偉大創(chuàng)意以及 Darshika G. Parera 博士和 Umair Ahsun 博士給予的杰出靈感。
?
評論