999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

卷積神經網絡并行化設計及FPGA實現

2022-12-11 02:37:48劉華陶冠男楊文清
制造業自動化 2022年11期
關鍵詞:特征設計

劉華,陶冠男,楊文清

(廣東電網有限責任公司廣州供電局,廣州 510000)

0 引言

近年來,人工智能技術飛速發展,越來越多的智能化產品開始在日常生活中嶄露頭角,尤其是以卷積神經網絡(Convolutional Neural Network,CNN)[1]為基礎的深度學習技術。卷積神經網絡以獨特的局部感知和權值共享結構能夠更好地進行特征提取,其所帶來的實際應用價值不斷地凸顯,在圖像分類[2]、目標檢測[3]、語義分割[4]以及語音識別[5]等領域都有著十分重要的應用。

GPU是專用的圖像處理單元,擁有大量的計算資源,隨著NVIDIA推出統一計算設備架構(Compute Unified Device Architecture,CUDA),結合cuDNN[6]深度神經網絡的GPU加速庫,GPU已經成為主流的硬件計算平臺,但GPU功耗較高、體積較大,難以應用到對體積與功耗要求較高的嵌入式移動與邊緣設備當中。專用集成電路(Application Specific Integrated Circuit,ASIC)在嵌入式平臺的卷積神經網絡硬件加速上具有絕對的優勢,但ASIC需要較長的研發周期,一旦流片完成便不可進行更改,難以應對復雜多變的算法結構,成本高、靈活性差。現場可編程門陣列(Field Programmable Gate Array,FPGA)是一種半定制、可重構的專用集成電路,即彌補了ASIC靈活性差的不足又克服了GPU高功耗的缺點,使用FPGA作為卷積神經網絡硬件加速平臺逐漸成為研究熱點[7]。

使用FPGA進行網絡相關模型的加速由來已久,早在1996年,Cloutier等[8]開始研究使用FPGA進行卷積神經網絡的加速,其在FPGA上實現了手寫字母識別的相關設計,受制于當時芯片的制造工藝,FPGA片上資源密度很低,其對卷積神經網絡的并行性沒有充分展開設計。2015年,Zhang等[9]使用HLS的設計方法,針對CNN在FPGA上的部署,提出了基于Roofline的模型分析方法,通過對數據吞吐率以及系統存儲帶寬的量化分析,得到了模型部署的最小資源消耗與最佳性能方案,該方案消耗了較多的硬件資源,難以應用在低成本的嵌入式場合。2016年,Qiu等[10]基于VGG網絡,通過對卷積神經網絡各層的計算資源消耗、內存需求的分析,采用動態數據量化方法,實現了與浮點型數據十分接近的網絡分類精度。同年,Ghaffari等[11]提出一種通用卷積神經網絡加速框架,該設計中對網絡中的每類網絡層設計專用的計算單元,并使用統一的邏輯控制單元進行調度,使用LeNet5對設計架構進行測試。

并行化設計是卷積神經網絡加速方法的核心方法之一,網絡并行化的設計主要是針對卷積層,通常根據卷積層的計算特征,使用循環分塊、循環展開等方法進行優化。文獻[12]在特征圖的輸入與輸出層面進行并行化設計,以此提升卷積層的計算速度,然而并未充分利用卷積計算的內在并行性。文獻[13]則提出了一種5層并行化結構,詳細分析了卷積神經網絡的內部并行性,設計了一種可配置的CNN并行計算單元,但并未給出硬件資源受限情況下的卷積復用設計。

基于以上分析,使用FPGA進行卷積神經網絡硬件加速設計能夠在低功耗的同時滿足對高效性能與靈活性的要求,符合嵌入式應用場景。本文使用設計一種卷積神經網絡加速器,旨在為基于FPGA的卷積神經網絡工程化實現提供一種設計方案,研究提出一種低功耗、可擴展、高性能的卷積神經網絡并行化框架,從而實現面向嵌入式場景的卷積神經網絡部署。

1 基本理論及設計方法

1.1 神經網絡基本模型

神經網絡的基本組成單位是神經元,研究人員通過對人腦結構的模擬,對神經元進行數學建模,構成人工神經網絡[14]。一個神經元的組成結構可用圖1表示。該神經元接收上一級n個神經元(x1,x2,...,xn)的輸出,并將其與對應的權重w(w1,w2,...,wn)相乘,進而決定不同輸入信號的作用強度,通過求和單元將n個輸入信號與偏置b混合,最終通過一個激活函數f將該節點的運算結果輸出。

圖1 神經元的組成結構圖

則單個神經元的計算可用式(1)表示:

偏置能夠使激活函數平移,進而增強網絡的魯棒性。激活函數的作用在于對神經元的輸出進行非線性變換,使網絡模型具有良好的非線性模擬能力,并限定神經元的輸出范圍,提高模型的表達能力。常見的激活函數有sigmoid、tanh以及relu等。

1.2 卷積計算原理

卷積層是卷積神經網絡的主要組成部分,一個卷積層由多個特征面組成,每個特征面由多個神經元組成,每個神經元通過卷積核與上一層特征面的局部區域相連,卷積核是一個權值矩陣,卷積層通過卷積運算提取不同的特征。

如圖2所示,一個5×5的輸入特征圖與一個3×3的卷積核進行卷積計算,使用Xx,j表示輸入特征圖的第i行的第j個元素;使用wm,n表示卷積核第m行的第n個列權重,用wb示卷積核的偏置項;使用Yi,j表示輸出特征圖的第i行的第j個元素;用f(x)表示激活函數。則根據式(1)可得:

圖2 單輸入通道卷積計算示意圖

實際上卷積層通常是多輸入通道,圖3展示了多輸入通道卷積計算的過程,圖中M表示卷積核個數,N表示輸入特征圖個數,H和W分別表示特征圖尺寸,K表示卷積核尺寸。每組卷積核與對應輸入通道的特征圖進行單通道的卷積計算,然后將各個通道的計算結果進行累加,再加上偏置wb就到了一個輸出特征圖上的結果輸出。

圖3 多輸入通道卷積計算示意圖

1.3 卷積層并行性分析

文獻[13]對卷積神經網絡中的并行性做了詳細介紹,本文在此基礎上對并行性進行簡單分析。卷積神經網絡的前向推理過程中具有不同維度的并行性,其中卷積的運算是網絡計算中的主要計算單元,因此對并行性的分析主要針對卷積計算單元。

1)卷積核間并行性

卷積核間并行是指每個卷積計算的卷積核是相互獨立的,所有的卷積核共享輸入特征圖,因此卷積核間的計算是不存在相互依賴的關系,我們可以通過圖4來描述這種卷積核間的并行性。

圖4 卷積核間并行性

可以發現M個卷積核的計算可以同時進行,彼此相互獨立,可以將此過程展開,使得M個卷積核同時進行計算,但要求系統加速器的設計有較高的數據吞吐量,對數據帶寬的要求極高。

2)特征圖間并行性

特征圖間的并行性是指對于N個輸入特征圖來說,每一組卷積核都有N卷積核與之對應。當進行卷積計算時,每個卷積核與對應的輸入特征圖進行乘加計算。特征圖間并行性如圖5所示,實際計算時可將每個特征圖與對應卷積核進行并行計算,然后將計算得到的結果相加即可得到輸出特征圖。

圖5 特征圖間并行性

特征圖間并行性對系統帶寬與吞吐率的要求相對較小,可通過一定的設計充分利用特征圖間的并行,但對于大多數的片上嵌入式系統來說,資源需求量還是稍高,實際使用時可以使用循環分塊等方法降低系統對帶寬的要求。

3)特征圖內并行性

一個特征圖共享一個卷積核,因此可以將特征圖上的卷積滑窗同時進行運算。特征圖內并行運算方式如圖6所示,在一個特征圖上的不同位置使用共享的卷積核進行并行運算,可減少循環的次數。

圖6 特征圖內并行性

特征圖內的并行性相對容易實現,其對系統的帶寬與吞吐率要求不高,可以使用循環切片實現特征圖內的并行性,但會消耗較多的片上存儲資源且數據復用度較低。

4)卷積核內并行性

卷積核內的并行性是整個卷積計算過程中最基本的計算單元。k*k的卷積核與特征圖上k*k的滑窗進行卷積計算,通常需要進行k*k次乘法運算與k*k-1次加法運算。以圖7中3*3的卷積核為例,整個計算過程需要進行9次乘法與8次加法運算,如果使用串行計算共需要循環9次,每一次循環需要進行一次乘法與加法運算;如果將卷積核與特征圖滑窗展開為圖7中的向量形式,可同時進行9次乘法運算,然后在進行1次加法運算即可完成整個計算,卷積核的并行性可通過循環展開的形式實現。

圖7 卷積核并行性

2 并行化設計

卷積層的計算占據整個網絡中的大量計算資源,因此對卷積層的加速能夠大幅提高網絡的前向推理時間。通過對卷積層并行性的分析可知,卷積層存在大量的并行性,針對標準卷積并行性的分析,我們提出一種標準卷積加速器設計思路,加速器的設計核心內容是以減少數據的重復傳輸為目的,在此基礎上盡可能地將標準卷積計算的并行度與數據復用度最大化。

2.1 循環分塊

卷積計算中的并行性貫穿于整個卷積層的計算過程。通常情況下,由于硬件計算資源的限制,難以將計算過程中的所有循環都展開。因此,在實際設計過程中,采取循環分塊技術以降低加速器對硬件資源的消耗。所謂循環分塊技術是指對于一個較大的循環體可以將其拆分為幾個較小的循環體,以此實現對代碼的優化,降低循環體對硬件資源的消耗。

如圖8所示,對于輸出通道來說,可將M個卷積核分割為M/p份,通過M/p次循環完成整個卷積核的并行計算,則此時卷積核的并行度為p,即一次進行p個卷積核的計算。同樣,如圖9所示,對于輸入通道來說,可以將N個輸入通道分為N/q份,通過N/q次循環完成整個輸出通道數據的遍歷,則此時特征圖間的并行性為q,即一次進行q個輸入特征圖的計算。每完成一次循環,需要將本次循環的計算結果與之前所有的卷積計算結果相加,作為本次循環的最終輸出結果,當進行最后一次循環時,將本次循環的最終計算結果與偏置相加,然后通過激活函數輸出,得到一個卷積核的最終輸出特征圖。

圖8 輸出通道遍歷循環分塊示意圖

圖9 輸入通道遍歷循環分塊示意圖

我們將輸出通道的p和輸入通道的q稱為循環分塊因子,可使用圖10中的代碼表示上述卷積計算過程。循環分塊因子的選擇對系統并行性的影響至關重要,如何確定循環分塊因子需要根據具體的網絡模型以及具體的硬件加速平臺,當硬件加速平臺資源較多時,可以適當的增大循環分塊因子,反之使用較小的循環分塊因子。此外,并不是分塊因子越大越好,當系統的資源較為豐富時,循環分塊因子不再是限制系統性能的主要原因,此時系統的加速性能與系統數據傳輸帶寬有關。

圖10 輸入、輸出通道遍歷循環分塊代碼

2.2 循環展開及調整

循環展開是一種最直接的并行化加速方法,采用循環展開的方法能夠大幅地提高并行運算的速度,當硬件加速平臺的資源充足時,可將計算過程沒有依賴關系的循環進行展開。對于整個卷積層的計算來說,僅對卷積計算過程中循環最內層的計算單元進行展開難以達到理想的加速效果,因此需要根據實際的硬件資源對其他的循環進行展開。為了便于進行循環展開的設計,我們將卷積層計算的代碼調整為圖11中的形式。

圖11 改變循環次序的代碼

對調整后的代碼進行循環編號,從外層到內層分別編號為1~8,此時循環1和循環2是對輸入、輸出通道的循環分塊,循環分塊的目的是為了減少加速器對硬件資源的要求,增大加速器的并行性,因此將循環分塊置于最外層。循環3和循環4是輸入對特征圖尺寸的遍歷,對于不同的卷積核其共用同一個輸入特征圖,因此對輸入特征圖的遍歷存在一定的數據復用度,可充分利用這一特點減少加速器對數據通信帶寬的要求,降低輸入數據的反復讀取。循環5和循環6是對輸入、輸出通道循環分塊因子的遍歷,為了能夠充分利用卷積計算的并行性,可在循環分塊因子的尺度進行循環展開設計,能夠大幅提高對硬件資源的利用率以及卷積層計算的速度,使用循環展開技術能夠有效地增加卷積運算的并行性,并行計算的大小由循環分塊因子決定。

2.3 片上存儲設計

片上存儲設計是卷積層加速器的核心設計內容之一,加速器性能的好壞和片上存儲設計有直接聯系,FPGA的片上存儲資源十分有限,因此難以進行大規模的數據存儲。對于FPGA來說,塊隨機存取存儲器(Block Random Access Memory,BRAM)和觸發器(Flip Flop,FF)均可作為片上存儲器,通常使用FF構成寄存器存儲需要進行反復讀取的數據,FF的讀取速度大于BRAM,但能存儲的數據量遠小于BRAM。

卷積加速器片上存儲的設計主要包括權重偏置數據緩存、特征圖輸入緩存以及卷積計算結果輸出緩存三個層面,下面分別對其進行分析,并給出可行的設計方案。

1)權重偏置數據緩存

對于一個未進行剪枝、壓縮等優化的j卷積神經網絡模型來說,模型的參數量遠大于多數FPGA內部的BRAM資源。因此,難以一次性將模型的全部參數部署到FPGA內部,此時需要合理的設計片上存儲使加速器能夠具有較高的性能。對于一層卷積的計算,只需在卷積計算之前將本層的權重偏置數據傳輸到FPGA內部的BRAM上,雖然會導致一定的數據傳輸與計算延時,但能夠大幅降低加速器對片上存儲資源的要求。

從循環展開的設計中可知,加速器一次計算需要完成p個卷積核對q個的輸入特征圖的遍歷。因此,對于片上存儲設計來說只需在卷積計算之前將p*q*k*k個權重參數傳輸到FPGA內部的BRAM上即可,這樣能夠進一步降低對片上存儲資源的消耗,但會增加加速器的延時。

2)特征圖輸入緩存

卷積層的計算過程中通常難以將參與計算的輸入特征圖一次傳輸至加速器的片內存儲。因此,需要設計輸入特征圖的緩存結構,使得加速器能夠滿足并行化計算。由卷積計算的原理可知,卷積的計算過程可描述為卷積核在特征圖上的滑動,不同的卷積核共享同一個輸入特征圖,可以將特征圖輸入緩存設計成行緩存的結構,需要緩存的行數與卷積核的尺寸k有關。

為了兼顧卷積計算的并行性、數據復用度以及FPGA的片上資源,采用圖12所示的行緩存結構,交替地將特征圖的數據傳輸至FPGA內部。該緩存結構可以實現特征圖間的并行性以及卷積核間的并行性。當進行卷積計算時,q個不同的卷積核共享對應的p個輸入特征圖行緩存,將p個輸入特征圖的卷積計算結果疊加即可得到一個卷積核的計算輸出。行緩存結構相對復雜,但計算效率較高,能夠在有限的片上資源實現較大的并行性,此外引入多通道輸入特征圖的緩存能夠有效地降低臨時數據存儲。

圖12 特征圖行緩存結構圖

當進行卷積計算時,特征圖的數據通過AXI[15]總線串行的傳輸至FPGA內部,如圖13所示。以4*4的輸入特征圖和3*3的卷積核為例進行行緩存內部結構的介紹(表示緩存器當前位置),行緩存尺寸為3*4,一次緩存的最大尺寸為3行。

圖13 行緩存器內部結構圖

假設AXI總線每個時鐘周期傳輸一位輸入特征圖數據,行緩存每個時鐘周期就能獲取一個數。每個時鐘周期下緩存器將當前列的數據向上移動,然后將新的數據讀入緩存器的當前位置。下一個時鐘周期到來時緩存器將當前位置向右移動一個位置,然后將當前列的數據向上移動,再將新的數據讀入緩存器的當前位置,以此類推不斷重復這個過程,直到緩存器當前位置移動到最后一列,在下個時鐘周期時再從第一列重復之前的過程。

3)特征圖輸出緩存

由卷積層的計算過程可知,一個完整的輸出特征圖與所有的輸入特征圖有關。因此,在引入循環分塊的加速器設計中,只有當一組卷積核將所有的輸入通道遍歷完成后,才能得到對應的輸出特征圖。無論是最終的輸出特征圖還是一組循環中的中間計算結果,都需要在完成q個卷積核對應的p個輸入特征圖的卷積計算后,才將計算結果通過AXI總線傳輸至片外存儲。卷積層的計算中通常輸入特征圖的通道數小于輸出特征圖。因此,當進行卷積計算時,AXI總線對輸入特征圖的數據讀取次數就小于對輸出特征圖的數據寫入次數,這樣會造成讀取與寫入數據的不平衡,影響系統的數據吞吐率。為了提高加速器的整體數據吞吐量,我們在卷積的計算中引入FIFO的輸出緩存設計,通過FIFO緩存卷積計算結果。

假設卷積的計算有4個輸入通道和8個輸出通道,AXI總線一次能夠傳輸2個通道的數據,因此對于輸入通道來說需要2個時鐘周期進行數據的讀取,對于輸出通道來說需要4個時鐘周期進行數據的輸出。

圖14是無FIFO的輸出緩存結構圖,從圖中可知,由于沒有引入FIFO的結構,當完成兩個輸入通道的數據讀取后,卷積開始產生計算結果的輸出,此時需要將部分計算結果傳輸至片外存儲。當完成整個輸入通道的讀取后,卷積計算完成,而輸出通道的數據大于輸入通道,因此還需額外的時鐘周期將剩下的輸出通道數據傳輸至片外存儲,整個數據傳輸需要消耗5個時鐘周期。

圖14 無FIFO輸出緩存結構圖

圖15是有FIFO的輸出緩存結構圖,FIFO的深度為2,每進行一次輸入數據的讀取則進行兩次輸出數據的寫入,完成卷積計算時需要進行FIFO狀態的判斷,當FIFO非滿狀態下進行FIFO的數據寫入,將當前的計算結果緩存至FIFO中。同樣當進行數據讀取時需要判斷FIFO是否為空,當FIFO狀態非空時進行數據的讀取,將卷積計算結果輸出至片外存儲器。從圖中可知,由于引入FIFO的結構設計,當完成兩個輸入通道的數據讀取后,卷積開始產生計算結果的輸出,此時需要將本次的計算結果寫入到片內的FIFO緩存中,在進行數據讀取的同時將上一次計算的結果從FIFO中讀取出來,通過AXI總線傳輸至片外存儲。

圖15 有FIFO輸出緩存結構圖

兩種結構對比可知,從單次計算的時鐘周期來說,沒有引入FIFO的結構中完成一次完整的卷積計算所需要的時鐘周期是5,引入FIFO所需要的時鐘周期是4。從數據吞吐量來說,沒有引入FIFO的結構中,12個時鐘周期內完成了3次輸入數據的讀取與2次輸出數據的寫入,引入FIFO的設計中12個時鐘周期內完成了4次輸入數據的讀取與2次輸出數據的寫入,一定程度上提高了數據的吞吐率。

2.4 Padding控制器設計

為了保證卷積計算前后特征圖的尺寸不發生變化,通常在卷積計算時引入補“0”技術。此外,補“0”后的特征圖在進行卷積計算時,其邊緣的特征值也能多次參與卷積計算,從而達到減少特征圖邊緣信息丟失的作用。因此,補“0”對卷積計算十分重要。特征圖補“0”的方法有多種形式,本文僅以較為常用的邊緣均勻補“0”進行具體設計的介紹。

如圖16所示,輸入特征圖數據以數據流的形式傳輸至FPGA內部,數據在進入FPGA的片上行緩存之前需要經過片內的Padding控制器,Padding控制器根據特征圖當前傳輸的數據狀態決定是否進行補“0”。在進行特征圖數據傳輸之前,首先將特征圖原本的行數與列數傳輸至Padding控制器內部,以此作為行、列控制器判斷補“0”個數與位置的依據。每次將AXI總線上的數據傳輸至行緩存內部之前,Padding控制器中的行、列控制器會記錄當前數據所處的位置,并根據當前位置對行緩存數據流進行補“0”。具體的做法是:當行控制器檢測到當前行位于第一行或最后一行時,則在讀取特征圖數據之前將行緩存數據流中的所有列數據全部置為“0”。當行控制器檢測到當前行位于第一行與最后一行之間時,則在讀取特征圖數據之前將行緩存數據流中的第一列與最后一列數據全部置為“0”。當列控制器檢測到當前列為最后一列時則進行換行,以此對數據流中的數據進行分行處理。

圖16 Padding 控制器結構圖

2.5 卷積復用

網絡中的卷積核通常有3*3與1*1兩種尺寸,為了降低硬件資源的消耗,提升資源利用率,我們設計了一種卷積復用的方法。如圖17,我們首先對1*1的卷積核進行擴充,使其轉換為3*3的卷積計算,然后將其送入3*3的卷積計算單元,即可完成卷積計算。擴充的方法是,將原始1*1卷積的權重放置3*3卷積核權重的第5位,3*3卷積核剩余8位權重均置0。根據圖17可知,擴充前后1*1卷積的計算結果相同,無需對3*3卷積計算單元做出更改,因此復用設計正確。卷積計算單元的復用沒有使用額外的硬件資源,極大地提高了硬件的利用率,但會造成1*1卷積計算效率的下降以及一定的無效數據傳輸,每傳輸一個權重需傳輸8個無效的數據,此外還會增加一定的片外存儲空間用以存放擴充的“0”。總的來說,當硬件資源較為緊張時,計算復用帶來的優勢遠大于劣勢。

圖17 卷積復用轉換示意圖

2.6 設計優化

設計優化主要是使用高層次綜合(High-level Synthesis,HLS)[16]工具的Directive指令對卷積計算單元的延時進行優化,優化的目標是以較小的資源消耗換取最大的計算效率,HLS工具會自動進行設計優化,但需指定采用何種優化方法 。我們的優化對象主要有兩個:循環以及片上存儲結構即數組。

1)循環優化

卷積的計算中存在多層循環,我們使用“PIPELINE”對循環進行優化,多層循環嵌套的情況下,“PIPELINE”指令會對內層循環進行展開,因此僅需在外層循環應用“PIPLINE”即可。卷積計算單元一個時鐘周期能夠傳輸64位數據即4個輸入通道的數據,則輸入通道最大循環次數為q/4,一次數據傳輸需完成p個卷積的計算。通常卷積層的最小輸入通道數為3,最大輸入通道數為可達1024,我們將卷積輸入通道的并行度設置為可變值,最大為q,并在此循環上使用“PIPLINE”進行優化,由于循環次數q/4不固定,因此該循環并不被展開,該循環內部即為卷積計算過程:行緩存、卷積滑窗、卷積計算、數據累加以及計算輸出,將該循環內的循環均設為定值,則一次循環可完成p個輸出通道的計算,即輸出通道的并行度固定為p。

2)數組優化

數組優化的指令為“ARRAY_PARTITION”,通常是為了提升“PIPLINE”的性能。數組存儲在片上的BRAM中,BRAM的最大讀取端口數量為2,數據訪存速度較慢,為了提升吞吐量,通常將一個大的數組分割為幾個小的數組,這樣就能對數組進行并行訪存,提高數據吞吐量。HLS提供block、cyclic、complete三種數組分割方法,如圖18所示。對于block和cyclic指令,可使用factor指定將原始數組分割為多少個小數組,圖中factor等于2。對于complete指令,其直接對數組中的每個存儲單元進行完全分割,使其成為寄存器級接口,訪存速度最快。

圖18 數組分割示意圖

網絡模型中需要進行數組優化的有權重、偏置、輸入行緩存、數據累加緩存以及輸出數據緩存,可分別使用Weight[p][q][k2]、Bias[p]、LineBuffer[q]、AccumulationBuffer[p]、OutputBuffer[p]表示。權重數組Weight[p][q][k2]是一個三維數組,通過以上分析可知對于權重數組的第一維參數p與第三維參數k2需使用complete對其進行優化,而對于第二維參數q則將其分割為q/4個block。行緩存數組LineBuffer[q]一個時鐘周期只需進行4個輸入通道數據的寫入,因此將其拆分為4個block即可。對于Bias[p]、AccumulationBuffer[p]和Output-Buffer[p],由于輸出通道并行度p為固定值,因此需使用complete對其進行優化。

我們以3*3的卷積計算為例,并其在外層加上一個不定循環,使用“PIPLINE”與“ARRAY_PARTITION”對計算進行優化。

優化前后的資源消耗及計算延時如圖19所示。從圖中可以看出,使用“PIPLINE”與“ARRAY_PARTITION”能夠大幅提高計算單元的速度,但會消耗一定的硬件資源。

圖19 卷積運算優化前后性能對比圖

3 實驗結果分析

實驗平臺使用Z-turn Board開發板,Z-turn Board是深圳市米爾科技有限公司推出的一款以Xilinx Zynq作為主處理器的嵌入式開發板,核心芯片為Zynq7020,板上配備兩片512MB的DDR3、一個16MB的SPI Flash、千兆以太網接口、USB接口等外部資源,這里我們不作出具體介紹。

我們使用Vivado軟件對卷積計算單元的IP進行綜合設計,生成比特流文件,然后在SDK環境下進行實驗測試。實驗平臺的資源配置如表1所示,實驗設計分為兩部分,首先是對不引入加速器僅使用Z-turn Board的PS端進行性能測試,然后是使用加速器的性能測試。測試所用的卷積層為YoloV3-tiny[17]網絡的第一層,輸入特征圖參數為416*416*3,輸出特征圖參數為416*416*16,使用16位定點數進行計算。我們將從資源消耗、計算延時、功耗、三個角度對實驗結果進行分析。

表1 實驗平臺資源配置表

實驗測試結果如表2所示。從表中可以看出,對于資源消耗,由于使用PS(ARM A9)端進行模型推理不涉及到PL(FPGA)端的資源消耗,因此資源消耗為0,使用FPGA進行計算加速,消耗量了一定的計算資源,其中主要消耗了大量的DSP48E與BRAM_18K。對于計算延時,使用并行加速的設計大幅提高了卷積的計算速度,相較于未并行化的方案加速比可達216.91,且功率僅增加0.569W。因此,本設計能夠在較小的資源消耗小取得較大的計算性能,能夠為面向嵌入式的卷積神經網絡加速提供一定的設計參考。

表2 加速前后資源消耗對比

4 結語

近些年來,人工智能技術快速發展,模型所需的算力不斷攀升。盡管服務器級CPU或GPU能夠提供強大的計算力,但其單位算力下的功耗,使其難以應用在功耗敏感的嵌入式領域。FPGA能夠在保持低功耗的同時,提供強大的并行計算能力。本文通過對卷積神經網絡計算特性的分析,使用循環分塊、循環展開等技術,完成了一種具有通用性能的卷積神經網絡加速器架構設計。引入了輸入、輸出通道兩個維度的并行化因子,分別設計了可擴展的卷積硬件計算單元以及資源受限情況下的卷積復用結構。此外,針對片上硬件結構,分別設計了權重偏置存儲結構、特征圖行緩存結構、多級輸出緩存結構,并使用數組分割進行設計優化。

猜你喜歡
特征設計
抓住特征巧觀察
何為設計的守護之道?
現代裝飾(2020年7期)2020-07-27 01:27:42
新型冠狀病毒及其流行病學特征認識
《豐收的喜悅展示設計》
流行色(2020年1期)2020-04-28 11:16:38
如何表達“特征”
不忠誠的四個特征
當代陜西(2019年10期)2019-06-03 10:12:04
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
抓住特征巧觀察
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
主站蜘蛛池模板: 性视频一区| a级毛片毛片免费观看久潮| 国产毛片基地| 欧美h在线观看| 亚洲v日韩v欧美在线观看| 中文字幕在线一区二区在线| 欧美精品二区| 婷婷综合在线观看丁香| 久久综合色视频| 伊人久久婷婷五月综合97色| aaa国产一级毛片| 欧美色视频在线| 高清精品美女在线播放| 国产chinese男男gay视频网| 久久精品视频亚洲| 久久天天躁狠狠躁夜夜2020一| 人人妻人人澡人人爽欧美一区| 久久综合国产乱子免费| 国产视频a| 91精品综合| 日韩国产无码一区| 超碰91免费人妻| 日韩精品久久无码中文字幕色欲| 成人一区专区在线观看| 国产91特黄特色A级毛片| 国产精品免费久久久久影院无码| 久久91精品牛牛| 日韩毛片基地| 国产男女免费视频| 97视频精品全国免费观看| 女同久久精品国产99国| av尤物免费在线观看| 波多野结衣在线se| 成AV人片一区二区三区久久| 免费一级成人毛片| 114级毛片免费观看| 欧类av怡春院| 极品尤物av美乳在线观看| 欧美a网站| 欧美视频在线不卡| 好紧好深好大乳无码中文字幕| 国产综合精品一区二区| 2021国产精品自拍| www精品久久| 2022国产无码在线| 亚洲国产成人麻豆精品| 精品无码国产自产野外拍在线| 日韩av在线直播| 风韵丰满熟妇啪啪区老熟熟女| 国产精品永久久久久| 国产一二三区在线| 一区二区三区国产精品视频| 亚洲天堂2014| 日本午夜在线视频| 高清无码一本到东京热| 国产18在线播放| 亚洲精品免费网站| 国产精品免费p区| 亚洲中文字幕无码爆乳| 97超级碰碰碰碰精品| 99视频在线观看免费| 亚洲第一成年人网站| 人人澡人人爽欧美一区| 亚洲伊人电影| 国产激情无码一区二区三区免费| 国产视频入口| 色综合五月婷婷| 亚洲色偷偷偷鲁综合| 欧美国产精品不卡在线观看| 在线综合亚洲欧美网站| 中文字幕永久在线观看| 精品国产香蕉伊思人在线| 日韩第八页| 国产三级韩国三级理| 在线播放91| 成人精品午夜福利在线播放| 国产精品lululu在线观看| 成人蜜桃网| 97视频免费在线观看| 国产特一级毛片| 国产偷国产偷在线高清| 久青草免费在线视频|