• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      面向ZYNQ SoC的卷積神經網絡加速器研究

      2022-12-06 11:05:28武世雄尹震宇張飛青徐福龍
      小型微型計算機系統(tǒng) 2022年12期
      關鍵詞:加速器運算卷積

      武世雄,高 巍,尹震宇,張飛青,徐福龍

      1(沈陽化工大學 計算機科學與技術學院,沈陽 110000)

      2(中國科學院 沈陽計算技術研究所,沈陽 110168)

      3(遼寧省國產基礎軟硬件工控平臺技術研究重點實驗室,沈陽 110168)

      1 概 述

      近年來,卷積神經網絡(Convolutional Neural Network,CNN)能夠實現圖像識別、目標檢測和自動翻譯等任務,已經被廣泛應用于智能制造、自動駕駛和航天航空等領域[1-5].由于神經網絡模型層數的不斷加深以及結構復雜度的不斷提高,使用中央處理器(Central Processing Unit,CPU)或者圖像處理器(Graphics Processing Unit,GPU)通常會遇到功耗較高、便攜性不足等問題.為有效緩解這些問題,在網絡層面上提出了很多減少模型參數的方法,如參數量化[6]、網絡剪枝[7]等;在硬件層面上,由于嚴格的計算、存儲和能耗等資源的限制,現場可編程門陣列(Field Programmable Gate Array,FPGA)成為CPU和GPU的可替代方案,利用其并行性[8]和可靈活配置[9]等特點加速卷積神經網絡,可以大大提高計算的性能并降低功耗.

      由于FPGA片上資源有限,如何提高計算的并行度并降低片上存儲資源成為當前卷積神經網絡加速器面臨的主要問題.通常卷積運算由乘法器和加法器構成,但是使用FPGA實現乘加運算需要更多的硬件資源.Zhang等人提出了Roofline模型以優(yōu)化資源利用率,有效的提高了循環(huán)流水的性能[10].Ma等人提出一種從輸出特征圖數、高度和寬度展開的架構,并且優(yōu)化循環(huán)操作和數據流操作進行卷積神經網絡加速,但該文將輸入特征圖和權重參數都緩存在片上,很難在低端FPGA上運行[11].Han等人提出,在不損失準確率或準確率損失較小的情況下,用位數較低的數據如4-8位的數據代替全精度浮點數是可行的[12,13].Qiu等人提出了參數重排及數據量化的方法,并設計了一種在卷積核長寬二維展開的加速器架構,但建模時沒有考慮傳輸時延,導致實際性能與理論相差較大[14].上述研究提出各種方法通過并行計算和內存優(yōu)化,以達到計算單元利用率和緩存數據復用率的最大化,進而實現計算性能的提高和片上內存的優(yōu)化.

      本文在前人的研究基礎上,針對目前卷積神經網絡結構復雜、參數較多導致硬件資源消耗較大等問題,設計了面向ZYNQ SoC的卷積神經網絡加速器,包括:

      1)通過軟硬件協同配合,能夠對圖像進行識別分類,采用滑動窗口間并行策略提高了并行計算能力;

      2)該加速器進行了參數量化,在精度損失很小的情況下,大大節(jié)省了片上存儲資源;

      3)同時進行了權重參數的重排序,能夠以較大的突發(fā)長度進行傳輸,有效的減少了訪存次數,提高了帶寬的利用率.

      2 卷積神經網絡

      卷積神經網絡通常以反饋的方式訓練,以前饋方式進行圖像分類,而FPGA更適合神經網絡算法的推理階段,其工作流程為逐層提取輸入圖像的特征,最終通過分類器得到所需要的結果,CNN主要有卷積計算、全連接計算、批歸一化(Batch Normalization)計算、激活函數處理和池化計算.

      卷積神經網絡主要由多個卷積層組成,整個神經網絡百分之九十以上的計算量來源于卷積層,卷積層是整個神經網絡的主體部分,其主要作用是對輸入的圖像數據進行特征提取,其計算公式如下:

      (1)

      公式(1)中:Qn(i,j)為第n張輸出圖像上(i,j)處的輸出特征;wmn(x,y)為卷積核(x,y)處的權重值;gm(s0i+x,s0j+y)為第m張輸入圖像在(s0i+x,s0j+y)處的特征值;bn為第n張輸出特征的偏置值;Mn為輸入圖像的通道數,Xn和Yn為卷積核的長寬,S0為步長.

      卷積層輸出的結果需要經過批量歸一化和激活函數處理.批量歸一化處理可以有效避免數據在激活之前被轉化成相似的模式,從而使得非線性特征分布趨于同化,可以解決梯度爆炸的問題,加速網絡的收斂;激活函數的作用是將特征保留并映射出來,用來增強卷積神經網絡的非線性,本文選擇ReLU函數作為非線性激活函數.除此之外,還需要經過池化層進行特征選擇和信息過濾,池化層包括最大池化和平均池化,本文選擇最大池化來降低數據的維度,防止圖像過擬合.

      最后進入全連接層,該層將特征圖進行整合和分類以得到整個圖像的信息,該層權重參數較多,訪存較頻繁,可以看作特征圖與卷積核在做1×1的卷積操作,以實現特征分類.最后經過Softmax邏輯回歸函數得到分類結果,其計算公式如下:

      (2)

      公式(2)中w為神經元的權值,K為要分類的類別數,T為轉置,x為上一層的輸出平鋪后的結果,i為預測的類別,p為當輸入為x預測類別為i的概率.

      VGG-16網絡是一種典型的深度CNN模型,由Simonyan和Zisserman在2014年提出的,在ImageNet2014分類大賽中Top-5錯誤率僅為7.4%[15],僅次于GoogleNet的6.7%,是一種非常強大的深度卷積神經網路,能夠提取圖像中的更深層特征,分類能力突出.在此之后,不斷出現層數更多的網絡結構,如VGG-19,是通過加深網絡結構來提高網絡分類的性能.因為網絡越深,梯度退化阻礙了網絡的收斂.所以,本文采用VGG-16,標準的VGG-16網絡包含13個卷積層和3個全連接層,使用3×3的卷積核,并通過2×2最大池化來減小運算規(guī)格.其網絡結構如圖1所示.

      圖1 VGG-16卷積神經網絡結構

      3 硬件系統(tǒng)設計

      3.1 總體設計框架

      本文所提出的系統(tǒng)整體硬件架構如圖2所示,卷積神經網絡加速器在PS(Processor System)端對整個加速器進行控制操作,在PL(Programmable Logic)端進行卷積神經網絡的并行計算.PS端主要包含串口控制模塊、流程控制模塊和存儲控制模塊;PL端主要包含直接內存存取(Direct Memory Access,DMA)模塊、卷積運算模塊、特征增強模塊、全連接模塊、邏輯回歸模塊和中斷模塊.

      圖2 系統(tǒng)整體硬件架構圖

      串口控制模塊主要用于接收運算結果并打印結果信息;流程控制模塊是ARM處理器對整體系統(tǒng)進行控制;存儲控制模塊主要用于對動態(tài)隨機存儲器(Double Data Rate,DDR)的控制操作;DMA用于DDR與片上緩存器之間數據傳輸;卷積運算模塊用于對CNN中卷積層進行運算操作;特征增強模塊進行非線性處理運算,用于實現參數的量化操作、反量化操作、ReLU運算、批量歸一化(Batch Normalization,BN)運算和池化運算;全連接模塊用于實現圖像分類;回歸模塊用于完成回歸模塊概率運算并且給出預測結果最大的前五個概率和標號;中斷模塊為全局中斷控制模塊,負責接收卷積運算模塊、特征增強模塊、全連接模塊和邏輯回歸模塊相對應的中斷,并對接收到的中斷進行整合操作.

      本文所設計的卷積神經網絡硬件加速器運算流程圖如圖3所示,首先需要對神經網絡圖像數據和權重參數進行量化處理,接著將權重數據和圖像數據加載到DDR中,并且分別對卷積模塊、特征增強模塊、全連接模塊和回歸模塊的寄存器進行配置.

      圖3 運算流程圖

      然后,使用DMA將部分圖像數據和權重參數寫入片上緩存,通過中斷模塊對卷積、池化和全連接運算進行控制,直到整個卷積神經網絡中所有層運算完成之后,將運算的結果通過DMA寫回到DDR;最后,進行Softmax運算,通過寄存器的方式將預測結果傳回串口并打印.

      3.2 數據預處理模塊設計

      3.2.1 感知量化前向傳播過程

      CNN訓練過程通常會采用多種方法來提高訓練結果的準確度,在進行模型前向推理的過程中,會對卷積神經網絡的參數進行預處理,可以減少前向推理的計算量,有利于對模型進行量化處理,提高運算的速度.

      卷積神經網絡計算涉及的操作數一般默認是32位或者是64位的浮點數,但是Han等人的相關實驗證實,在不損失準確率或者準確率損失較小的情況下,對于卷積神經網絡的乘加運算,用定點數代替浮點數進行運算是可行的,而且將定點數的數據位寬調整到16位或8位[12].相比于浮點數,使用位數相對較少的定點數,可以有效減少數據帶寬,增加FPGA片上存儲的數據,減少訪問DDR的次數,同時還可以增加吞吐量和計算的性能.

      本文對權重參數和輸入特征圖進行8位定點量化,如下以一層卷積運算進行ReLU和全連接運算為例.一個浮點數f需要量化到(0,N-1)的范圍內,本文采用的量化位寬為8,那么N為256.f表示浮點數,q表示量化后的定點數,浮點數和量化后定點數轉換公式如下:

      f=S(q-Z)

      (3)

      (4)

      其中S表示縮放系數,為任意大于0的浮點數;Z表示零點,當Z為0時,f為q的量化值.其公式如下:

      (5)

      (6)

      其中fmax和fmin分別表示浮點矩陣的最大值和最小值,qmax和qmin分別表示量化后定點數矩陣的最大值和最小值.

      (7)

      假設第1層卷積的中間結果為a1,經過ReLU之后的結果為a2,卷積運算公式如下:

      (8)

      (9)

      (10)

      M≈(int)(2-n×M0)

      (11)

      其中M0為[0.5,1)之間的定點數;n是正整數,為乘以2的次數.

      對于ReLU來說,計算公式不再是qa2=max(qa1,0),而是qa2=max(qa1,Za1),并且Sa1=Sa2,Za1=Za2.量化后的全連接層為如下公式:

      (12)

      通過上述過程的量化中間結果,可以用定點數的移位和乘加來擬合浮點數的乘加運算,除了推理過程中的預處理和后處理外,在FPGA端使用量化后的定點數進行計算和傳輸,這將會大大提高傳輸速度和計算速度.

      3.2.2 參數重排

      對于權重參數,在本文的加速器中,將預先訓練好的權重參數加載到DDR.在未排序的情況下如圖4(a)所示,將分配64個長度為900的緩存區(qū),在進行卷積層的計算時,權重參數會逐個填充到緩沖區(qū),導致DMA頻繁讀取DDR中的權重參數,為了減少DMA頻繁啟動和在進行全連接層的計算時,讀取數據保持較長的突發(fā)長度,將在DDR中進行權重數據的重排.Qiu等人采用參數排序方式如圖4(b)所示,該排序是將整個矩陣分成64個9×100的塊,需要按箭頭的順序從DDR讀取100×9大小的權重參數64次,但是由于參數不連續(xù),需要訪存100×64次,每次的突發(fā)長度為9[14];而本文采用的排序方式如圖4(c)所示,由于每次讀取的參數的存放是連續(xù)的,只需要訪存64次,每次傳輸的突發(fā)長度為100×9.采取本文所述的參數重新排序后,增大了突發(fā)長度并且減少了大量的訪存次數,保證帶寬有較高的利用率,減少了數據傳輸帶來的開銷.在DMA讀取DDR的權重參數到片上緩存時,設置了片上雙緩存,利用“乒乓”數據傳輸機制,可以有效的用計算時間掩蓋數據的傳輸時間,減少了程序整體的執(zhí)行時間.

      圖4 DDR中權重參數排序

      3.2.3 滑動窗口間并行

      本文加速器中卷積部分的運算數據流,采用滑動窗口間并行策略.首先進行圖像的預處理,該預處理模塊與徐欣等人[16]采用的結構相似,對圖像數據進行重組和對齊,實現圖像數據的高度并行傳輸和計算.文中使用W表示圖像的寬度,M表示數據傳輸的并行度,即一個時鐘周期內并行傳輸的數據個數;N表示數據計算的并行度,為一個卷積核在圖像上可同時計算的結果個數;K為卷積核的大小.預處理單元由3個先進先出線性緩存器(FIFO)組成,目的是緩存圖像數據,使得輸入數據為行對齊結構,滿足卷積運算對數據格式的要求.

      為實現并行計算,輸入圖像的寬度W應為數據傳輸并行度M的整數倍,如果不滿足整數倍需要做Padding操作擴充輸入圖像,以在W/M個時鐘周期內完成輸入圖像每行數據的傳輸.這樣圖像數據就可以以行對齊的方式存儲在線性FIFO中,不會產生行錯位.然后,行對齊輸出要求對FIFO進行同時讀取,使不同行的輸入位置的數據一起輸出.最后,將讀取的圖像數據組合成卷積矩陣,輸入到計算模塊,與系數進行卷積運算.

      如圖5所示的輸入圖像為8×8,卷積核大小為3×3,其中原始圖像大小為6×6,因為要使輸出特征圖和原始圖像一樣大,通過padding操作進行像素填充,DMA將輸入特征圖搬運到片上緩存,首先經過FIFO進行緩存,解決外部圖像輸入與內部計算電路時鐘域異步問題.按行優(yōu)先的順序對輸入圖像進行讀取,數據傳輸的并行度M設置為8,滑動步長為1.圖像的邊長正好為數據傳輸并行度的整數倍,所以無需在FIFO中補充無效數據.該例中使用3個FIFO緩存三行輸入數據,實現行對齊輸出,如圖5(b)所示.當卷積核的滑動步長為1時,每個卷積操作的輸入矩陣之間有重疊區(qū)域,故按照如圖5(c)的方式進行組合可得到6個卷積矩陣.然后復用如圖5(d)的卷積核與每個輸入矩陣進行乘加運算,這樣一個時鐘周期就可以得到如圖5(e)中6×6的輸出圖像.

      圖5 滑動窗口間并行

      綜上所述,雖然卷積層的原始計算模式是計算完一個滑動窗口,再向右移動一個步長,計算新的窗口.本文可以先連續(xù)從輸入特征圖中提取多個相鄰的滑動窗口,不同的滑動窗口使用相同的卷積核,大大降低了卷積核的讀取次數,并且增加了計算的并行度.

      3.3 卷積加速器模塊設計

      3.3.1 卷積整體架構

      卷積模塊的整體架構如圖6所示,處理單元(Processing Element,PE)主要負責卷積運算過程的乘加運算,數據重組模塊對圖像數據進行Padding操作和重組對齊.卷積模塊的運算過程為:卷積運算模塊接收控制模塊發(fā)送讀取數據指令,按照指令進行相關寄存器的配置,并且根據指令要求從卷積權重緩存中讀取權重參數傳給各個PE模塊,同時從圖像數據緩存中讀取圖像數據到數據重組模塊,數據重組模塊進行圖像數據的Padding操作和重組對齊,然后將圖像數據傳給每個PE模塊進行卷積運算.卷積運算完成后,將卷積運算結果通過DMA發(fā)送到特征增強模塊,進行ReLU運算或者池化運算.

      圖6 卷積運算模塊整體架構

      由于不同卷積核對同一輸入數據的卷積操作在一個PE中進行計算,因此輸入數據只需要從DDR中讀取一次便可以在片上多次使用,這有效的提高了片上數據的使用率,一定程度上減少了訪存次數.

      3.3.2 計算核心單元設計

      本文加速器計算核心單元的具體實現細節(jié)如圖7所示,該加速器是由Poy×Pox×Pkx×Pkx個乘累加(Multiply-Accumulation,MAC)單元組成,每個MAC由一個乘法器和一個加法器組成,從輸入數據緩存區(qū)讀取圖像數據由Pox×Pkx×Pkx個MAC單元共享,滑動窗口重疊的數據可以被重用;從權重緩存區(qū)中讀取的權重參數由Poy×Pkx×Pkx共享.等待權重數據和圖像數據進入MAC單元之后,一個時鐘周期可以完成2×Poy×Pox×Pkx×Pkx次乘法和加法運算,即MAC單元的并行度為Poy×Pox×Pkx×Pkx.每個MAC將計算結果輸出到加法樹中進行累加操作,最后加入偏置,輸出到輸出緩存.

      圖7 卷積計算核心單元

      3.4 控制調度流設計

      本文網絡的不同卷積層之間參數不同,圖像的尺寸、通道數和卷積核的數量也不相同,每一次卷積計算的循環(huán)次數和相關寄存器的配置由控制器進行控制與調度,該控制器通過AXI總線控制計算核心單元有序執(zhí)行,控制DMA將DDR中的數據搬運到片上緩存,從而對不同卷積層進行計算.

      如圖8所示為本文控制流的處理:將從DDR中讀取的權重數據和圖像數據寫入到片上緩存,卷積模塊讀取相關數據進行卷積運算,然后交給特征增強模塊進行BN運算、ReLU運算和池化運算,最后將運算結果寫回到輸出緩存,等全部運算結束后將得到的最終結果寫回到DDR.

      圖8 控制調度流

      4 實驗結果分析

      4.1 實驗平臺

      本實驗使用的FPGA芯片為Xilinx ZYNQ XC7Z100-2FFG900I(Kintex-7架構).采用的卷積神經網絡模型為VGG-16,數據集為ImageNet數據集.本文加速器工作頻率為100MHz,使用Xilinx公司的Vivado 2019.1軟件進行綜合和布局布線,使用Modelsim SE-64 10.7進行仿真.

      4.2 SoC系統(tǒng)設計與驗證

      本文通過Verilog HDL語言完成各個IP核的設計,然后將各個IP核進行配置和連線,完成Block Design設計.在設計輸入之后、設計綜合之前進行功能仿真,使用Vivado和Modelsim進行聯合仿真對電路設計進行驗證.對完成的電路添加約束并進行綜合,進一步布局布線之后可以得到時序分析報告和資源使用率報告.設計完成后加入調試所需要的集成邏輯分析器(Integrated Logic Analyzer,ILA)進行時序仿真,該仿真可以真實的反映邏輯的時延和功能,綜合考慮電路各個路徑延遲與門延遲的影響,驗證電路能否在一定時序條件下滿足設計構想和是否存在時序違規(guī).經過調試驗證之后,得到滿足時序要求的SoC系統(tǒng)設計.最后將綜合后的Bitstream文件導入Vivado SDK中進行軟件層面的開發(fā)和驗證.如表1所示為本文FPGA資源的使用情況.

      表1 FPGA資源利用情況

      在FPGA中采用32位浮點數進行運算時,需要3個DSP資源才能實現一次乘累加運算;而使用8位定點數進行運算時,只需要一個DSP就可以實現一次乘累加運算.本文實現了8位定點精度的卷積神經網絡加速器,相對于32位浮點數,用8位定點數來實現卷積神經網絡對網絡整體的精度影響較小,如表2所示,采用8位定點數的模型參數量較32位浮點數的參數量減少了75%,大大減少了數據的傳輸時間和存儲資源,同時減少了邏輯資源的使用,進而提升了加速器的性能和運算的速度.

      表2 網絡參數

      本文采用軟硬件協同配和的方式對卷積神經網絡進行加速,FPGA對卷積神經網絡中大量的乘法和加法進行運算,ARM處理器用于初始化卷積神經網絡加速過程中各層參數的配置和對FPGA的各個IP核進行調度.如表3所示為本文神經網絡加速器與其他加速器在加速VGG-16的性能比較.該加速器工作頻率在100MHz下,處理一張224×224的圖片所需要的時間為15.10ms(66.21幀/s),功率為2.47W,能耗為0.16KJ,本文功率相比于文獻[17]降低了69.13%,較文獻[18]降低了74.35%;本文卷積運算的性能為99.5GOPS,峰值性能能夠達到306.24GOPS,整個加速過程中的平均性能為80.88GOPS,平均性能較文獻[19]提升了0.29倍;性能密度較文獻[18]提升了1.76倍,較文獻[19]提升了1.14倍;使用的DSP的數量僅為文獻[18]的22.05%和文獻[19]的59.72%.

      表3 相關工作對比

      5 結束語

      本文通過對卷積神經網絡的參數及網絡結構進行分析,提出了一種面向ZYNQ SoC的卷積神經網絡加速器,對參數進行了8位定點量化和重新排序,使用了滑動窗口并行策略進行加速.實驗表明量化后的VGG-16網絡參數量減少的同時,該加速器性能有明顯的提升.下一步的工作中,將增大硬件加速VGG-16的并行度,靈活使用LUT來代替部分DSP資源,盡可能的去發(fā)揮FPGA的并行計算能力.

      猜你喜歡
      加速器運算卷積
      輪滑加速器
      化學工業(yè)的“加速器”
      高中數理化(2024年8期)2024-04-24 16:58:14
      重視運算與推理,解決數列求和題
      基于3D-Winograd的快速卷積算法設計及FPGA實現
      全民小康路上的“加速器”
      少先隊活動(2021年6期)2021-07-22 08:44:24
      有趣的運算
      從濾波器理解卷積
      電子制作(2019年11期)2019-07-04 00:34:38
      基于傅里葉域卷積表示的目標跟蹤算法
      “整式的乘法與因式分解”知識歸納
      撥云去“誤”學乘除運算
      塔城市| 芜湖市| 绥宁县| 左权县| 洛阳市| 莱芜市| 阳东县| 无棣县| 灵璧县| 民和| 大埔区| 灵川县| 永兴县| 罗源县| 阿坝| 潼南县| 彭泽县| 高台县| 锦州市| 永修县| 黄平县| 丰台区| 卢氏县| 河津市| 舟曲县| 通辽市| 通海县| 清丰县| 天全县| 安岳县| 康定县| 南通市| 延川县| 华池县| 大厂| 陇西县| 横山县| 宁夏| 满城县| 永定县| 三都|