胡龍寶 李丕丁
摘 要:隨著人工智能的不斷發(fā)展,云計(jì)算面臨數(shù)據(jù)量大、實(shí)時(shí)性低等問題。為了解決該問題,一種新的計(jì)算方式——邊緣計(jì)算進(jìn)入了人們的視野。邊緣計(jì)算推動(dòng)人工智能走向嵌入式系統(tǒng),與傳統(tǒng)嵌入系統(tǒng)相比,邊緣人工智能要復(fù)雜得多,傳統(tǒng)嵌入式設(shè)備計(jì)算能力弱、效率低的問題更為突出?;赬ilinx公司Zynq-7000系列的全可編程SOC完成系統(tǒng)設(shè)計(jì),實(shí)現(xiàn)對(duì)視頻的邊緣檢測(cè)。測(cè)試結(jié)果顯示,硬件邊緣檢測(cè)速度比純軟件邊緣檢測(cè)速度快10倍,為邊緣人工智能在嵌入式應(yīng)用方面提供了可行方向。
關(guān)鍵詞:邊緣人工智能;邊緣計(jì)算;可編程SOC;軟硬件協(xié)同;邊緣檢測(cè);嵌入式應(yīng)用
DOI:10. 11907/rjdk. 191606
中圖分類號(hào):TP317.4?? 文獻(xiàn)標(biāo)識(shí)碼:A??????????????? 文章編號(hào):1672-7800(2020)003-0244-04
Image Edge Detection System Based on Programmable SOC
HU Long-bao, LI Pi-ding
(School of Medical Devices and Food Engineering, University of Shanghai for Science and Technology, Shanghai 200093, China)
Abstract: With the continuous development of artificial intelligence, cloud computing is facing the problems of large amount of data and low real-time. To solve this problem, a new computing method, edge computing, has come into peoples vision. Edge computing drives AI to embedded systems. Compared with traditional embedded systems, edge AI is much more complex. Traditional embedded devices have weak computing power and low efficiency. In this paper, based on Xilinx Zynq-7000 series of fully programmable SOC to complete the system design, to achieve video edge detection. The test results show that the speed of hardware edge detection is 10 times faster than that of software edge detection, which provides a feasible direction for the application of edge artificial intelligence in embedded system.
Key Words: edge artificial intelligence; edge computing; programmable SOC; software and hardware cooperation; edge detection; embedded applications
0 引言
云計(jì)算技術(shù)能夠?qū)⒋罅坑?jì)算資源、存儲(chǔ)資源與軟件資源鏈接在一起, 形成巨大規(guī)模的共享虛擬IT資源池, 為遠(yuǎn)程計(jì)算機(jī)用戶提供強(qiáng)大的計(jì)算能力和大量存儲(chǔ)空間[1-2],但隨著網(wǎng)絡(luò)邊緣檢測(cè)設(shè)備的迅速增加,云計(jì)算很難實(shí)現(xiàn)如此龐大規(guī)模數(shù)量的即時(shí)計(jì)算,無(wú)法保證應(yīng)用的實(shí)時(shí)性[3]。如一輛自動(dòng)駕駛的汽車每秒會(huì)產(chǎn)生1GB以上的數(shù)據(jù)[4],并且還要求對(duì)這些數(shù)據(jù)進(jìn)行實(shí)時(shí)處理。大量自動(dòng)駕駛的汽車同時(shí)向云服務(wù)器請(qǐng)求計(jì)算會(huì)占用大量?jī)?nèi)存、計(jì)算資源和帶寬[5],而且在數(shù)據(jù)傳輸過程中任何延時(shí)都可能導(dǎo)致車禍發(fā)生。
因此,邊緣計(jì)算的重要性尤為突出。邊緣計(jì)算是指將計(jì)算任務(wù)在接近本地?cái)?shù)據(jù)源的計(jì)算資源上運(yùn)行, 實(shí)現(xiàn)數(shù)據(jù)就近處理[6-7]。邊緣計(jì)算有以下3個(gè)優(yōu)點(diǎn):①減輕了網(wǎng)絡(luò)帶寬和數(shù)據(jù)中心功耗的壓力;②更快的傳輸和響應(yīng)速度;③擺脫了網(wǎng)絡(luò)環(huán)境制約,也更加安全[8-9]。
邊緣計(jì)算使用的嵌入式處理器大致分為ARM、FPGA、DSP和GPU。4種嵌入式處理器優(yōu)缺點(diǎn)如表1所示。
面向視頻監(jiān)控、汽車駕駛輔助、航空與國(guó)防等市場(chǎng)領(lǐng)域的新型應(yīng)用,ARM具有比較強(qiáng)的事務(wù)管理功能,可以用于運(yùn)行界面及應(yīng)用程序等,其優(yōu)勢(shì)主要體現(xiàn)在控制方面,但在計(jì)算方面比較吃力;DSP主要是用來(lái)計(jì)算,比如進(jìn)行加密解密、調(diào)制解調(diào)等,優(yōu)勢(shì)是強(qiáng)大的數(shù)據(jù)處理能力和較高的運(yùn)行速度;FPGA適合于控制功能算法簡(jiǎn)單且含有大量重復(fù)計(jì)算的工程使用,面對(duì)復(fù)雜控制實(shí)現(xiàn)難度大;GPU主要用于圖像處理,不適用于控制。單一種類處理器的嵌入式方案已無(wú)法滿足邊緣人工智能計(jì)算量大、低延時(shí)的要求。
針對(duì)以上問題,本文采用Zynq-7000系列的全可編程SOC芯片完成軟硬件協(xié)同設(shè)計(jì)[10],以雙核ARM為核心 ,高性能FPGA為外設(shè),將復(fù)雜算法通過Vivado高層次綜合(High-level Synthesis,HLS)工具優(yōu)化,將優(yōu)化后的算法生成硬件模塊在ARM上加載,通過AXI4總線實(shí)現(xiàn)兩者數(shù)據(jù)交互[11-12]。
1 系統(tǒng)硬件結(jié)構(gòu)設(shè)計(jì)
本系統(tǒng)在ARM處理器上搭建Linux系統(tǒng),使用AXI4總線實(shí)現(xiàn)Zynq的可編程邏輯(Progarmmable Logic,PL)和處理器系統(tǒng)(Processing System,PS)之間的大量數(shù)據(jù)傳輸[13]。使用Xilinx公司的FPGA開發(fā)工具Vivado2017.4設(shè)計(jì)硬件模塊并搭建系統(tǒng)。系統(tǒng)硬件結(jié)構(gòu)如圖1所示。
其中,PL部分負(fù)責(zé)圖像采集、邊緣檢測(cè)、圖像顯示,PS部分負(fù)責(zé)內(nèi)存單元DDR3的數(shù)據(jù)存取和人機(jī)交互界面。
硬件系統(tǒng)包括3個(gè)模塊:圖像采集模塊、邊緣檢測(cè)模塊、圖像顯示模塊。
1.1 圖像采集模塊
圖像采集模塊包括OV7725攝像頭及其周圍電路。OV7725攝像頭通過CEP(Cmos Expand Port)與ZYNQ-7000系列的開發(fā)板連接,可輸出640×480分辨率、16位色彩深度的圖像信息[14];OV7725攝像頭一個(gè)時(shí)鐘周期只能寫入8位數(shù)據(jù),因此在視頻格式轉(zhuǎn)換IP中將前后兩個(gè)8位數(shù)據(jù)合并成16位數(shù)據(jù),得到RGB565類型數(shù)據(jù),再將數(shù)據(jù)擴(kuò)充為RGB888格式方便轉(zhuǎn)成AXI4-Stream協(xié)議,最后通過VDMA1模塊通過AXI_HP接口將數(shù)據(jù)存入PS端的DDR3緩存。
1.2 基于HLS的邊緣檢測(cè)模塊
Vivado HLS工具是Xilinx推出的高層次綜合工具,能夠?qū)、C++、System C代碼綜合成硬件電路,支持浮點(diǎn)運(yùn)算,并封裝多種圖像處理函數(shù)核數(shù)學(xué)運(yùn)算函數(shù),相對(duì)于Verilog實(shí)現(xiàn)硬件邊緣檢測(cè)模塊,開發(fā)過程更簡(jiǎn)單[15-16]。HLS工具還提供了OpenCV的函數(shù)庫(kù),可以直接調(diào)用其中的圖像處理函數(shù)[17]。
邊緣檢測(cè)模塊的工作流程如圖2所示。
在邊緣檢測(cè)IP 中,將數(shù)據(jù)轉(zhuǎn)換成Mat格式,將圖像灰度化后調(diào)用hls::Duplicate函數(shù)將灰度圖復(fù)制成兩路圖像,對(duì)兩路圖像分別進(jìn)行橫向和縱向Sobel邊緣檢測(cè),將兩路圖像結(jié)果相加,得到更加明顯的邊緣檢測(cè)圖像。
Sobel算子根據(jù)像素點(diǎn)上、下、左、右鄰點(diǎn)灰度加權(quán)差,在邊緣處達(dá)到極值這一現(xiàn)象時(shí)檢測(cè)邊緣。它對(duì)噪聲具有平滑作用,能提供較為精確的邊緣方向信息,但邊緣定位精度不夠高。當(dāng)對(duì)精度要求不是很高時(shí),是一種較為常用的邊緣檢測(cè)方法。
1.3 圖像顯示模塊
該部分包括HDMI輸出模塊和相應(yīng)輸出時(shí)序控制模塊。輸出時(shí)序控制模塊由Vivado自帶的IP核VTC(Video Timing Controller)實(shí)現(xiàn),通過配置VTC的輸出視頻分辨率和時(shí)鐘,可以輸出行同步信號(hào)和場(chǎng)同步信號(hào),輸出模塊按照同步信號(hào)將視頻傳輸?shù)紿DMI顯示器上。
2 軟件系統(tǒng)設(shè)計(jì)
2.1 嵌入式Linux系統(tǒng)搭建
為了在ARM處理器上進(jìn)行人機(jī)交互界面程序開發(fā)以及其它邏輯控制,需要在ARM上移植嵌入式Linux系統(tǒng)和QT函數(shù)庫(kù)[18]。
系統(tǒng)移植包含以下7個(gè)步驟:①搭建編譯環(huán)境;②編譯u-boot啟動(dòng)引導(dǎo)文件;③配置設(shè)備樹文件;④編譯內(nèi)核;⑤制作文件系統(tǒng);⑥生成BOOT.bin文件;⑦編譯Qt庫(kù),生成Qt鏡像文件;⑧將BOOT.bin、uImage、devicetree.dtb、uramdisk.image.gz、Qt.img文件拷貝至啟動(dòng)SD卡。
設(shè)置開發(fā)板為SD卡啟動(dòng)模式,啟動(dòng)開發(fā)板可以看到Linux啟動(dòng)界面,完成嵌入式系統(tǒng)移植。
2.2 圖像采集驅(qū)動(dòng)
圖像采集驅(qū)動(dòng)主要功能是通過SCCB協(xié)議初始化OV7725攝像頭,通過GPIO接口對(duì)圖像采集模塊寄存器進(jìn)行配置。系統(tǒng)中采用Platform驅(qū)動(dòng)模型,Platform總線是虛擬平臺(tái)總線,是Linux設(shè)備驅(qū)動(dòng)模型為了保持設(shè)備驅(qū)動(dòng)的統(tǒng)一性而虛擬出來(lái)的總線。
總線將設(shè)備和驅(qū)動(dòng)綁定,系統(tǒng)每注冊(cè)一個(gè)設(shè)備時(shí),會(huì)尋找與之匹配的驅(qū)動(dòng);相應(yīng)地,系統(tǒng)每注冊(cè)一個(gè)驅(qū)動(dòng)時(shí),會(huì)尋找與之匹配的設(shè)備,而匹配由總線完成。驅(qū)動(dòng)包含以下幾個(gè)主要函數(shù):①probe函數(shù):也被稱為探針函數(shù),用于檢測(cè)總線上該驅(qū)動(dòng)對(duì)應(yīng)的設(shè)備;②remove函數(shù):用于移除總線上驅(qū)動(dòng);③read函數(shù):從模塊寄存器讀取數(shù)據(jù);④write函數(shù):向模塊寄存器寫入數(shù)據(jù)。
2.3 邊緣檢測(cè)模塊驅(qū)動(dòng)
用戶空間I/O框架(Userspace I/O Framework)可直接映射物理地址,文中圖像預(yù)處理模塊驅(qū)動(dòng)將模塊的AXI Lite寄存器基地址映射出來(lái),對(duì)寄存器進(jìn)行操作;通過Vivado HLS綜合的IP,會(huì)自動(dòng)生成Linux下UIO用戶端的驅(qū)動(dòng)代碼,可以直接使用。
邊緣檢測(cè)模塊驅(qū)動(dòng)主要包括幾個(gè)函數(shù):①XEdge_detection_Initialize:初始化模塊,從/dev下找到邊緣檢測(cè)模塊對(duì)應(yīng)設(shè)備,并獲得句柄,將模塊的寄存器地址映射到內(nèi)存;②XEdge_detection_Release:釋放句柄和取消內(nèi)存映射;③XEdge_detection_IsReady:檢測(cè)模塊是否準(zhǔn)備好處理下一張圖片;④XEdge_detection_SetRows:設(shè)置圖像高度;⑤XEdge_detection_SetCols:設(shè)置圖像寬度;⑥XEdge_detection_Start:開始運(yùn)行邊緣檢測(cè)模塊。
2.4 VDMA Framebuffer驅(qū)動(dòng)
AXI VDMA是Xilinx提供的IP,用于將AXI Stream格式數(shù)據(jù)流轉(zhuǎn)換為Memory Map格式,或?qū)emory Map格式的數(shù)據(jù)轉(zhuǎn)換為AXI Stream數(shù)據(jù)流,從而實(shí)現(xiàn)與DDR3通信[19]。AXI VDMA結(jié)構(gòu)框架如圖3所示。
可以看出,VDMA的主要接口有3個(gè),分別為AXI4 Memory Map、AXI4-Lite、AXI4-Stream。
AXI4-Lite:用于讀寫VDMA內(nèi)部寄存器,從而實(shí)現(xiàn)對(duì)VDMA的控制和狀態(tài)獲取。
AXI4-Stream:寫通道(s2mm):VDMA獲取來(lái)自axis接口的數(shù)據(jù)并將之寫入幀存;讀通道(mm2s):VDMA從幀存讀取數(shù)據(jù),然后送至axis接口輸出。
AXI4 Memory Map:用于操作DDR,通過互聯(lián)模塊連接至Zynq的HP接口[20]。
本系統(tǒng)通過VDMA3實(shí)現(xiàn)Framebuffer的顯示功能,因此需要VDMA3從DDR3中讀取數(shù)據(jù),輸出到HDMI顯示器上。
3 系統(tǒng)測(cè)試及結(jié)果分析
為了對(duì)搭建的視頻處理系統(tǒng)進(jìn)行功能及性能測(cè)試,對(duì)采集到的視頻圖像分別用純軟件和軟硬件結(jié)合的方式進(jìn)行邊緣檢測(cè)處理。邊緣檢測(cè)是圖像處理和計(jì)算機(jī)視覺中,尤其是特征提取中的一個(gè)研究領(lǐng)域[21]。Soble邊緣檢測(cè)算法比較簡(jiǎn)單,雖然Soble邊緣檢測(cè)準(zhǔn)確度低于Canny邊緣檢測(cè),但是實(shí)際應(yīng)用中,Sobel邊緣效率比Canny邊緣檢測(cè)效率要高。在要求效率、忽視細(xì)節(jié)紋理時(shí),Sobel邊緣檢測(cè)成為首選。
系統(tǒng)實(shí)現(xiàn)Sobel邊緣檢測(cè)算法,效果對(duì)比如圖4所示。
圖4(a)為純軟件使用OpenCV庫(kù)實(shí)現(xiàn)邊緣檢測(cè)算法效果,圖4(b)為使用HLS工具實(shí)現(xiàn)邊緣檢測(cè)算法效果。
軟硬件兩種邊緣檢測(cè)方式處理所需時(shí)間如表2所示。
從圖4和表2可以看出,軟硬件結(jié)合方法實(shí)現(xiàn)邊緣檢測(cè)算法,與純ARM實(shí)現(xiàn)圖像處理算法效果基本相同,但處理速度方面有很大提升。本次邊緣檢測(cè)實(shí)驗(yàn)中軟硬件協(xié)同處理比純軟件處理速度提高10.89倍。
4 結(jié)語(yǔ)
本文設(shè)計(jì)并實(shí)現(xiàn)了基于可編程SOC的邊緣檢測(cè)系統(tǒng),在系統(tǒng)中使用HLS工具生成一個(gè)基于ZYNQ PL部分的硬件Sobel邊緣檢測(cè)IP核,并與軟件邊緣檢測(cè)進(jìn)行了比較。結(jié)果表明,硬件邊緣檢測(cè)與軟件邊緣檢測(cè)效果基本相同,但在耗時(shí)上,前者只需要后者的1/10。這使得基于嵌入式系統(tǒng)的圖像處理實(shí)時(shí)性大幅度提升,為邊緣人工智能中邊緣設(shè)備處理數(shù)據(jù)量大、時(shí)間長(zhǎng)的問題提供新的方向。該設(shè)計(jì)方案可應(yīng)用于自動(dòng)駕駛、機(jī)器人以及智能監(jiān)控等場(chǎng)景,減少嵌入式系統(tǒng)計(jì)算耗時(shí)、增強(qiáng)系統(tǒng)運(yùn)行可靠性、提高數(shù)據(jù)隱私性,同時(shí)可以通過網(wǎng)絡(luò)將結(jié)果傳輸至云服務(wù)器進(jìn)行大數(shù)據(jù)分析。
參考文獻(xiàn):
[1]張玉. 虛擬化技術(shù)在智慧城市建設(shè)中的應(yīng)用[J]. 中國(guó)高新技術(shù)企業(yè), 2014, (34): 43-44.
[2]馮登國(guó), 張敏, 張妍,等. 云計(jì)算安全研究[J]. 軟件學(xué)報(bào),2011,22(1): 71-83.
[3]CHANDRA S R,YAFENG W. Cloud things construction - the integration of Internet of things and cloud computing[J]. Future Generation Computer Systems,2016,56(C):684-700.
[4]STAUDENMAIER M, HERRMANN S. 基于視覺的駕駛員輔助嵌入式系統(tǒng)[J]. 中國(guó)電子商情:基礎(chǔ)電子,2014(9): 38-43.
[5]施巍松,孫輝,陳彥明. 基于邊緣計(jì)算的新型視頻監(jiān)控系統(tǒng)展望[J]. 自動(dòng)化博覽,2018,35(12):60-63.
[6]徐恩慶,董恩然. 云計(jì)算與邊緣計(jì)算協(xié)同發(fā)展的探索與實(shí)踐[J].? 通信世界,2019(9): 46-47.
[7]SHARMAN R,BIOOKAGHAZADEH S,LI BAOXIN, et al. Are existing knowledge transfer techniques effective for deep learning with edge devices?[C]. IEEE International Conference on Edge Computing,2018:42-49.
[8]施巍松,張星洲,王一帆,等. 邊緣計(jì)算:現(xiàn)狀與展望[J]. 計(jì)算機(jī)研究與發(fā)展, 2019,56(1): 69-89.
[9]周知,于帥,陳旭. 邊緣智能:邊緣計(jì)算與人工智能融合的新范式[J]. 大數(shù)據(jù),2019,5(2): 53-63.
[10]李朗,張索非,楊浩. 基于Zynq-7000的視頻處理系統(tǒng)框架設(shè)計(jì)[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2017,27(5):192-195.
[11]XILINX. Vivado design suite tutorial high-level synthesis[EB/OL]. https://www.xilinx.com/support/doc-umentation/sw_manuals/xilinx 2017_1/ug871-vivado-high-level-synthesis-tutorial.pdf.
[12]XILINX. Vivado design suite user guide high-level synthesis[EB/OL]. https://www.xilinx.com/support/doc-umentation/sw_manuals/xilinx 2017_1/ug902-vivado-high-level-synthesis.pdf.
[13]鄧健峰,謝云. 基于FPGA+ARM的視頻采集平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[J]. 工業(yè)控制計(jì)算機(jī),2017,30(12): 97-98.
[14]曾永西,黃梅紅,陳偉豪. 基于FPGA+OV7725的視頻監(jiān)控系統(tǒng)[J]. 福建電腦, 2015, 31(09): 8-9,39.
[15]黨宏社,王黎,王曉倩. 基于Vivado HLS的FPGA開發(fā)與應(yīng)用研究[J]. 陜西科技大學(xué)學(xué)報(bào):自然科學(xué)版,2015,33(1):155-159.
[16]郭豐收. Xilinx FPGA/Zynq設(shè)計(jì)中使用HLS實(shí)現(xiàn)OpenCV的開發(fā)流程[J]. 電子產(chǎn)品世界,2014,21(Z1):50-52.
[17]趙睿. 基于Xilinx的HLS實(shí)現(xiàn)OpenCV的研究與設(shè)計(jì)[J]. 科技創(chuàng)新與應(yīng)用, 2016(21): 56-57.
[18]賀丹丹,張帆,劉峰. 嵌入式Linux系統(tǒng)開發(fā)教程[M]. 北京: 清華大學(xué)出版社,2010.
[19]Xilinx. Zynq-7000 SoC Technical reference manual[EB/OL]. https://www.xilinx.com/support/doc-umentation/user_guides/ug585-Zynq- 7000-TRM.pdf.
[20]陸佳華,潘祖龍,彭競(jìng)宇. 嵌入式系統(tǒng)軟硬件協(xié)同設(shè)計(jì)實(shí)戰(zhàn)指南[M]. 北京:機(jī)械工業(yè)出版社, 2014.
[21]溫建飛,岳鳳英,李永紅. 基于FPGA硬件架構(gòu)的實(shí)時(shí)高速圖像特征檢測(cè)系統(tǒng)[J]. 電子世界,2015(21):124-125.
(責(zé)任編輯:孫 娟)
收稿日期:2019-05-09
作者簡(jiǎn)介:胡龍寶(1996-),男,上海理工大學(xué)醫(yī)療器械與食品學(xué)院碩士研究生,研究方向?yàn)獒t(yī)療電子儀器;李丕丁(1973-),男,博士,上海理工大學(xué)醫(yī)療器械與食品學(xué)院講師、碩士生導(dǎo)師,研究方向?yàn)樯镝t(yī)學(xué)信號(hào)處理、醫(yī)療電子儀器。