亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        面向硬件加速的通用圖像卷積實(shí)驗(yàn)平臺①

        2021-02-23 06:29:56闞保強(qiáng)
        關(guān)鍵詞:設(shè)計(jì)

        闞保強(qiáng)

        (福建師范大學(xué) 協(xié)和學(xué)院 信息技術(shù)系,福州 350003)

        隨著計(jì)算技術(shù)的發(fā)展,數(shù)字圖像處理技術(shù)的使用越來越普遍,在醫(yī)學(xué)工程、計(jì)算機(jī)工程、宇航制導(dǎo)、航空航天等研究領(lǐng)域都有大量數(shù)字圖像處理技術(shù)的使用[1].在數(shù)字圖像處理中,要進(jìn)行圖像的匯聚、模糊處理、邊緣增強(qiáng)和邊緣檢測等典型算法中都要使用卷積作為核心運(yùn)算單元.隨著近年來深度學(xué)習(xí)技術(shù)在圖像識別領(lǐng)域的極大成功,卷積神經(jīng)網(wǎng)絡(luò)(CNN)受到越來越多的關(guān)注.而要提高CNN 的計(jì)算性能,就需要高效的卷積實(shí)現(xiàn).基于現(xiàn)場可編程門陣列(FPGA)實(shí)現(xiàn)高速圖像處理系統(tǒng)一直是一個非?;钴S的研究領(lǐng)域,這主要得益于FPGA 的位級并行計(jì)算能力、像素級處理以及鄰域級與任務(wù)級的處理能力,可使得計(jì)算和速度達(dá)到更好的性能.另外,FPGA是可重配置的,從而能夠更好的滿足神經(jīng)網(wǎng)絡(luò)的靈活性需求.正是FPGA 這種兼具靈活性與并行處理的能力,使其成為開發(fā)神經(jīng)網(wǎng)絡(luò)硬件加速計(jì)算領(lǐng)域的首選平臺[2].

        針對圖像卷積實(shí)現(xiàn)的問題,有不少學(xué)者進(jìn)行了研究,大部分工作集中在高性能、低資源以及FPGA 面積使用效率上.正如文獻(xiàn)[3]所指出的,塊隨機(jī)存取存儲器(BRAM)是經(jīng)常使用的一種解決方案,但這種方案是以較高的能耗為代價的.為了降低能耗,在結(jié)構(gòu)設(shè)計(jì)上,可以通過圖像部分性存儲或完全存儲來減少BRAM的使用.對于完全性圖像存儲,主要通過應(yīng)用并行化提高處理能力,并通過資源重用降低復(fù)雜性.對于部分存儲架構(gòu),則是將圖像分割成與使用的卷積器一樣多.這些方案的缺點(diǎn)是模塊化設(shè)計(jì)不夠,使得難以簡單通過增加并行度來提高工作效率[4–6].

        為此,本文提出了一種基于動態(tài)重用BRAM 的圖像卷積模塊化實(shí)現(xiàn)架構(gòu),并給出了并行結(jié)構(gòu)實(shí)現(xiàn)中的復(fù)雜度.實(shí)驗(yàn)表明,當(dāng)并行度提高時,BRAM 的復(fù)雜度只是線性增加,這無疑會極大降低系統(tǒng)功耗和復(fù)雜度.

        本文安排如下:第2 部分簡要介紹圖像卷積算法及設(shè)計(jì)流程.第3 部分介紹了模塊化設(shè)計(jì)架構(gòu)及各模塊的組成.在第4 部分,給出了硬件實(shí)現(xiàn)和實(shí)驗(yàn)結(jié)果.最后,給出本文結(jié)論.

        1 圖像卷積算法

        得益于卷積固有的局部提取和二維特性,在圖像處理算法中,圖像卷積運(yùn)算是經(jīng)常使用的.由文獻(xiàn)[3]知,圖像卷積的定義為:

        其中,I(x,y)是大小為(m×n)的圖像在(x,y)處的像素值,w(i,j)大小為(k×k)的卷積核,由一組系數(shù)構(gòu)成,而I′(x,y)為有效卷積結(jié)果,大小為(m–2)×(n–2).

        由于圖像卷積算法的并行性非常適于FPGA 實(shí)現(xiàn),從而提高計(jì)算性能,所以本文將重點(diǎn)研究如何更有效進(jìn)行二維卷積設(shè)計(jì),以減少FPGA 資源的使用.

        為了便于硬件實(shí)現(xiàn),這里主要采用圖像的灰度值.考慮到每個通道可以視為獨(dú)立的灰度圖像,所以本文方法易于推廣到具有多個通道的圖像上.

        對于圖像像素I(x,y)的灰度值動態(tài)范圍一般在[0,255],卷積核w(x,y)可以為負(fù)或正.這里把像素灰度值做歸一化處理,也就是轉(zhuǎn)換像素值為T[I(x,y)] =IT(x,y),其范圍為[0,1].對于卷積核系數(shù)經(jīng)極大范數(shù)化轉(zhuǎn)換為M[w(x,y)]=w′(x,y),其范圍限制為[?1,1].因此,可以將上述公式變換為:

        其中,T?1(.)表示歸一化處理的逆變換,其范圍為[0,255].圖1給出了整個數(shù)據(jù)映射過程,先對輸入圖像進(jìn)行歸一化,然后將其與內(nèi)核進(jìn)行卷積,最后將計(jì)算結(jié)果進(jìn)行逆變換以重新映射到標(biāo)準(zhǔn)灰度值.

        圖1 圖像處理映射關(guān)系圖

        對于硬件運(yùn)算,有浮點(diǎn)表示和定點(diǎn)表示[3].浮點(diǎn)表示以尾數(shù)和指數(shù)形式存儲數(shù)字,支持浮點(diǎn)格式的硬件在每次執(zhí)行計(jì)算后會自動縮減尾數(shù)并更新指數(shù),以使結(jié)果與設(shè)定的位數(shù)相對應(yīng),這些操作使支持浮點(diǎn)的硬件在面積和功耗方面犧牲較多.一種替代方法就是定點(diǎn)表示.定點(diǎn)表示主要存儲和處理具有固定位的數(shù)據(jù).這意味著在計(jì)算之后,不遵循小數(shù)點(diǎn)的位置,小數(shù)點(diǎn),無論是否冗余,對于每個變量都是固定的,并且是預(yù)定義的.這種設(shè)置在資源利用方面具有優(yōu)勢,但如果計(jì)算結(jié)果超出范圍,發(fā)生溢出,需要根據(jù)系統(tǒng)選擇適當(dāng)?shù)谋硎拘问?

        為了以最小位數(shù)表示用于圖像像素和內(nèi)核值,需要研究具有可接受的信息損失下的最小分辨率位數(shù).如前所述,像素的值在0 到255 的范圍內(nèi),通過歸一化,限定為0 到1 的范圍.卷積核既可以是正數(shù),也可以是負(fù)數(shù),使用極大范數(shù)化使卷積核限制在?1 到1 的范圍.為了以8 位表示上述值范圍,這里采用有符號定點(diǎn)表示S(8,7).假定圖像以K3×3進(jìn)行卷積會產(chǎn)生20 位輸出,對于每個乘積結(jié)果乘以S(16,14),9 個元素的總和為S(20,14),經(jīng)過處理后,將結(jié)果取正并截斷,去掉小數(shù)部分,用S(13,8)表示.

        2 通用卷積平臺設(shè)計(jì)架構(gòu)

        2.1 設(shè)計(jì)流程

        為了便于系統(tǒng)化和模塊設(shè)計(jì),采取系統(tǒng)級軟硬件協(xié)同設(shè)計(jì)方法,整個設(shè)計(jì)流程圖如圖2所示.首先,基于設(shè)計(jì)規(guī)范,進(jìn)行軟硬件劃分;在軟件開發(fā)部分,先通過上位機(jī)(采用Python 語言)進(jìn)行浮點(diǎn)計(jì)算的模擬,然后,在軟件層面分析定點(diǎn)運(yùn)算實(shí)現(xiàn)系統(tǒng)的結(jié)果,驗(yàn)證所描述的硬件模擬器產(chǎn)生的位是否與浮點(diǎn)運(yùn)算模擬器的位相匹配,然后在FPGA 中進(jìn)行硬件設(shè)計(jì).在FPGA 硬件設(shè)計(jì)中,通過軟硬件協(xié)同驗(yàn)證,再次檢查硬件驗(yàn)證的結(jié)果與模擬結(jié)果是否相同,不同的話再進(jìn)行定點(diǎn)位數(shù)的調(diào)整,直到滿足設(shè)計(jì)要求,最后完成設(shè)計(jì).

        將整個設(shè)計(jì)流程分成以下幾個階段:

        (1)預(yù)處理階段:通過上位機(jī)使用Python 腳本利用第2 節(jié)中提到的轉(zhuǎn)換來獲取圖像.上位機(jī)腳本程序可將映射圖分成幾批進(jìn)行處理,然后分批通過端口(UART)將其發(fā)送到下位機(jī)FPGA.單個批次的連續(xù)像素大小由使用的MAC 單元數(shù)量決定.

        (2)處理階段:將批處理圖像與卷積核進(jìn)行卷積操作.所述卷積核是可配置的,用戶可以通過GPIO 加載相同的系數(shù).卷積操作完成后,數(shù)據(jù)發(fā)送到FPGA 中的微處理器,并給出恢復(fù)批處理的順序,以便將其返回到上位機(jī).

        (3)后處理階段:在后處理中,上位機(jī)使用Python腳本組合上傳來的一個或多個批次圖像像素,并通過逆變換恢復(fù)為標(biāo)準(zhǔn)灰度值.

        2.2 系統(tǒng)狀態(tài)及流程圖

        整個系統(tǒng)設(shè)計(jì)分成8 個處理過程,如圖3所示.啟動后,系統(tǒng)必須初始化,通過接收初始化信號以使自身進(jìn)入該狀態(tài),等待配置.接收到相應(yīng)的指令后,系統(tǒng)將進(jìn)入卷積核系數(shù)裝載狀態(tài),即將卷積核系數(shù)加載到系統(tǒng)中.緊接著進(jìn)行待分批處理像素大小設(shè)置,即圖像的大小,這決定了最后一個數(shù)據(jù)在內(nèi)存中的位置.狀態(tài)的轉(zhuǎn)換通過指令碼的方式進(jìn)行控制,未收到指令碼時,系統(tǒng)保持狀態(tài)不變.批次存儲后,將進(jìn)入卷積運(yùn)算狀態(tài),在此狀態(tài)下完成批次卷積處理.一個批次的圖像處理完成后,將發(fā)出通知,并將批處理完的結(jié)果返回到上位機(jī).

        圖2 系統(tǒng)設(shè)計(jì)架構(gòu)圖

        圖3 系統(tǒng)處理流程圖

        2.3 卷積模塊結(jié)構(gòu)設(shè)計(jì)

        為了實(shí)現(xiàn)內(nèi)存的動態(tài)復(fù)用,即在每次批處理中重復(fù)使用內(nèi)存加載的數(shù)據(jù),整個卷積實(shí)現(xiàn)系統(tǒng)采用圖4所示的模塊化設(shè)計(jì).主要包括接口控制單元:負(fù)責(zé)卷積處理模塊與嵌入式內(nèi)核MCU 之間的通信;地址管理器(AMU):用于生成待讀取或?qū)懭霐?shù)據(jù)的存儲地址;數(shù)據(jù)存儲管理單元(DMU):用于管理待寫入或讀取數(shù)據(jù)的存儲空間;乘累加器(MAC)單元:執(zhí)行卷積核系數(shù)和圖像像素之間乘積累加和操作;存儲單元,由FPGA的BRAM 組成的一組存儲單元,大小取決于實(shí)例化的MAC 數(shù)量,即系統(tǒng)所需的卷積并行處理要求.

        接下來,具體闡述各個功能模塊的具體實(shí)現(xiàn)方法.

        2.3.1 存儲單元

        為了批量存儲,采用BRAM 列排的形式,每一列對應(yīng)于一個批次中的一欄.批處理的大小由圖像的高度和實(shí)例化內(nèi)存數(shù)確定.因此,圖像的最大高度(以像素為單位)必須小于或等于實(shí)例化內(nèi)存的地址數(shù).在批處理期間,每個像素只能讀取一次,從而可以更有效地使用內(nèi)存.已讀取的批處理像素將被處理后的像素覆蓋,這樣可以減少所需的內(nèi)存量.對于存儲單元有兩個數(shù)據(jù)端口,一個用于輸入數(shù)據(jù),一個用于輸出數(shù)據(jù),還有一個讀寫控制信號.

        圖4 卷積部分實(shí)現(xiàn)結(jié)構(gòu)

        2.3.2 接口控制單元

        接口控制單元模塊負(fù)責(zé)模塊與FPGA 中的處理器之間的接口.為此,它具有兩個32 位端口,分別連接到處理器的內(nèi)部和外部的GPIO.該單元主要通過接收指令完成以下控制功能:加載卷積核,用于加載卷積核系數(shù),每個系數(shù)設(shè)為8 位;配置圖像尺寸,必須與圖像的高度(以像素為單位)一起使用,使用10 位,因此最大尺寸為1024 px;圖像批處理加載,一個批次的像素加載;批處理完成,表示正在加載的像素是批處理中的最后一個像素,一旦收到此指令,模塊將進(jìn)入運(yùn)行狀態(tài),在該狀態(tài)下執(zhí)行處理;恢復(fù)數(shù)據(jù),要求模塊提供下一個已處理的像素.

        2.3.3 地址管理單元(AMU)

        AMU 負(fù)責(zé)生成DMU 占用的內(nèi)存地址.在圖像加載狀態(tài)期間,AGU 負(fù)責(zé)生成寫入此數(shù)據(jù)的地址,為此,它具有一個計(jì)數(shù)器,該計(jì)數(shù)器隨控制單元輸入遞增.AMU 通過比較圖像的高度,向DMU 發(fā)送指示信號,表明接下來接收到的像素屬于批次的新列.在運(yùn)行階段,AMU 必須產(chǎn)生兩個不同的地址,一個指向DMU傳送到MAC 單元的數(shù)據(jù)地址,另一個指向DMU 存儲MAC 處理后數(shù)據(jù)的地址.兩個地址每個時鐘周期增加一次,因?yàn)镸AC 生成每個周期處理的數(shù)據(jù).讀地址和寫地址之間的差等于從將第一個像素傳送到MAC單元到準(zhǔn)備好存儲第一個已處理像素為止的等待時間.

        2.3.4 乘法累加器單元(MAC)

        MAC是并行實(shí)例化的單元,它們負(fù)責(zé)進(jìn)行乘加計(jì)算以執(zhí)行卷積.對于卷積核(3 ×3)的卷積運(yùn)算需要9 條記錄存儲系數(shù)以及9 條記錄存儲當(dāng)前正在處理的批次像素值.MAC 具有單個數(shù)據(jù)輸入端口,其中輸入了3 個系數(shù)(對應(yīng)于一行)的卷積核或批處理部分(如來自控制單元的信號所示),此外還有另一個控制信號,用于指示應(yīng)修改記錄還是保持.

        對于大小為(k×k)的內(nèi)核,加載每列的k個像素,在其中保留(k×k)個像素,然后,將像素乘以核系數(shù),將每個項(xiàng)相加.對于最終求和結(jié)果,送出前,會做截斷處理.處理完像素后,將存儲批次像素的記錄進(jìn)行移位,即新的一行,它等效于FIFO 結(jié)構(gòu).該操作的硬件實(shí)現(xiàn)如圖5所示.

        圖5 基于MAC 的卷積硬件實(shí)現(xiàn)結(jié)構(gòu)圖

        2.3.5 數(shù)據(jù)存儲管理單元(DMU)

        為了有效利用存儲器,必須考慮并行度.DMU 的作用就在于建立存儲器和其余單元之間的接口,從而獨(dú)立于并行處理需求而降低其復(fù)雜性.對于k×k的卷積核,需要使用k列作為輸入以在MAC 中生成處理后的列.因此,對于兩個MAC 需要2k列.對于卷積運(yùn)算,要得到連續(xù)的列,必須將輸入列移位一次.那么對于MAC 輸入的相鄰列就有可能存在重復(fù),所以可通過共享來降低開銷.

        這樣的好處是,與每個MAC 單元都使用獨(dú)立的存儲器列相比,在不同的MAC 之間共享信息可以極大節(jié)省所需的BRAM,而循環(huán)移位可以節(jié)省傳輸?shù)男畔⒘?

        為了實(shí)現(xiàn)以上功能,該模塊在內(nèi)部由兩部分組成:一個數(shù)據(jù)多路復(fù)用器模塊,用于傳遞存儲器和MAC 的信息;一個基于有限狀態(tài)機(jī)(FSM)的控制部分,用于處理存儲器的控制信號(寫使能)和數(shù)據(jù)多路復(fù)用器的控制信號.

        3 FPGA 實(shí)現(xiàn)與結(jié)果分析

        3.1 實(shí)驗(yàn)環(huán)境

        為了在FPGA 中實(shí)現(xiàn)該設(shè)計(jì),本文選擇使用了Vivado 環(huán)境.預(yù)處理(浮點(diǎn)模擬和圖像歸一化)和后處理(圖像標(biāo)準(zhǔn)灰度值轉(zhuǎn)換)均在上位機(jī)實(shí)現(xiàn).卷積核系數(shù)和相應(yīng)的圖像批處理都通過串口加載到FPGA上.在FPGA 的運(yùn)算使用定點(diǎn)表示,對輸入和輸出圖像(處理后的圖像)的分辨率設(shè)定為8 位.綜合后的系統(tǒng)級模塊圖如圖6所示.

        3.2 實(shí)驗(yàn)結(jié)果

        通過上位機(jī)利用Python 腳本構(gòu)建不同的卷積核,使用的卷積核包括:[0,0,0;0,1,0;0,0,0],[0,?1,0;?1,5,?1;0,?1,0]和[?2,?1,0;?1,0,1;0,1,2],并在上位機(jī)對圖像進(jìn)行卷積處理.然后,采用相同的卷積核使用FPGA 對圖像進(jìn)行卷積處理.圖7給出了上位機(jī)模擬結(jié)果和FPGA 實(shí)現(xiàn)結(jié)果的比較.

        圖6 系統(tǒng)功能單元圖

        圖7 上位機(jī)模擬效果與FPGA 實(shí)現(xiàn)效果比較圖

        3.3 資源使用情況分析

        該設(shè)計(jì)針對不同程度的并行性需求進(jìn)行了綜合.圖8(a)分別給出了2 個實(shí)例并行化至24 個實(shí)例并行化的資源使用情況,根據(jù)系統(tǒng)中的并行度,可以看到復(fù)雜度呈線性增加.圖8(b)、圖8(c)分別給出了8 個實(shí)例并行化和24 個實(shí)例并行化的資源使用詳細(xì)分布.圖9給出了存儲開銷使用情況,傳統(tǒng)的圖像卷積實(shí)現(xiàn),BRAM 基本是隨著卷積單元數(shù)以1:1的比例增長,本文的方法可以使得存儲開銷顯著的下降.

        圖8 資源占有情況分析

        圖9 資源占有情況分析

        4 結(jié)論

        本文主要研究了如何在FPGA 中模塊化實(shí)現(xiàn)圖像卷積運(yùn)算.在具體實(shí)現(xiàn)上,主要采用了圖像按列批次處理,分批加載到FPGA 上,然后進(jìn)行卷積運(yùn)算,在設(shè)計(jì)中利用臨近批次數(shù)據(jù)重復(fù)性這一特征,運(yùn)用內(nèi)存共享機(jī)制,有效降低了BRAM 的使用,實(shí)驗(yàn)表明并行度的提高僅線性增加BRAM;整個系統(tǒng)設(shè)計(jì)基于裝載、處理、輸出的流程機(jī)制,可實(shí)現(xiàn)(k×k)卷積核的重配置,具有較好的擴(kuò)展性.

        猜你喜歡
        設(shè)計(jì)
        二十四節(jié)氣在平面廣告設(shè)計(jì)中的應(yīng)用
        河北畫報(2020年8期)2020-10-27 02:54:06
        何為設(shè)計(jì)的守護(hù)之道?
        《豐收的喜悅展示設(shè)計(jì)》
        流行色(2020年1期)2020-04-28 11:16:38
        基于PWM的伺服控制系統(tǒng)設(shè)計(jì)
        電子制作(2019年19期)2019-11-23 08:41:36
        基于89C52的32只三色LED搖搖棒設(shè)計(jì)
        電子制作(2019年15期)2019-08-27 01:11:50
        基于ICL8038的波形發(fā)生器仿真設(shè)計(jì)
        電子制作(2019年7期)2019-04-25 13:18:16
        瞞天過海——仿生設(shè)計(jì)萌到家
        設(shè)計(jì)秀
        海峽姐妹(2017年7期)2017-07-31 19:08:17
        有種設(shè)計(jì)叫而專
        Coco薇(2017年5期)2017-06-05 08:53:16
        從平面設(shè)計(jì)到“設(shè)計(jì)健康”
        商周刊(2017年26期)2017-04-25 08:13:04
        99精品国产一区二区三区| 青青草视频免费在线播放| 精品日本一区二区三区| 亚洲av首页在线| 午夜福利电影| 五月天无码| 成人水蜜桃视频在线观看| 国产亚洲综合一区二区三区| 亚洲精品综合欧美一区二区三区| AV无码中文字幕不卡一二三区| 偷柏自拍亚洲综合在线| 插入日本少妇一区二区三区 | 狠狠狠色丁香婷婷综合激情| 三级黄色片一区二区三区| 开心久久综合婷婷九月| 国产午夜精品一区二区| av鲁丝一区鲁丝二区| 人妻熟女中文字幕在线视频| 白白在线视频免费观看嘛| 狠狠做深爱婷婷久久综合一区| 国产91福利在线精品剧情尤物| 亚洲国产线茬精品成av | 特级精品毛片免费观看| 无码a级毛片免费视频内谢5j| 精品水蜜桃久久久久久久| 久久狠狠高潮亚洲精品暴力打| 91中文字幕精品一区二区| 麻豆国产一区二区三区四区| 丰满多毛的大隂户视频| 国产v精品成人免费视频400条 | 97色偷偷色噜噜狠狠爱网站97| 中文字幕av一区二区三区诱惑| 性高朝久久久久久久3小时| 亚洲综合色自拍一区| 亚洲av午夜成人片精品| 国产女优一区在线观看| 国产农村妇女精品一二区| 欧美精品一级| 国产精品日本一区二区三区在线| 三个男吃我奶头一边一个视频| 国产精品国产三级国av|