• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于FPGA 的Winograd 算法卷積神經(jīng)網(wǎng)絡(luò)加速器設(shè)計(jì)與實(shí)現(xiàn)

    2023-11-18 12:12:58牛朝旭孫海江
    液晶與顯示 2023年11期
    關(guān)鍵詞:加速器乘法卷積

    牛朝旭,孫海江*

    (1.中國(guó)科學(xué)院 長(zhǎng)春光學(xué)精密機(jī)械與物理研究所,吉林 長(zhǎng)春 130033;2.中國(guó)科學(xué)院大學(xué),北京 100049)

    1 引 言

    卷積神經(jīng)網(wǎng)絡(luò)被廣泛應(yīng)用于許多深度學(xué)習(xí)系統(tǒng)中,并在全息圖像重建[1]、光學(xué)計(jì)量[2]和自動(dòng)駕駛[3]等多種計(jì)算機(jī)視覺任務(wù)中取得了顯著的成效。為了達(dá)到更高的精度,一些研究引入了多尺度特征增強(qiáng)[4]、弱光照?qǐng)D像增強(qiáng)[5]以及RGB-D 特征融合[6]等更為復(fù)雜的算法,使得網(wǎng)絡(luò)計(jì)算復(fù)雜度和模型規(guī)模也更為龐大,進(jìn)而導(dǎo)致了計(jì)算功耗的提升[7]。在一些低功耗的應(yīng)用場(chǎng)景中,如星上AI 計(jì)算、遙感圖像在軌處理等,常規(guī)的硬件平臺(tái)部署卷積神經(jīng)網(wǎng)絡(luò)十分困難[8]:通用的中央處理器(Central Processing Unit,CPU)無(wú)法滿足卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算需求;圖形處理器(Graphic Processing Units,GPU)功耗太高,無(wú)法應(yīng)用于嵌入式環(huán)境;專用集成電路(Application Specific Integrated Circuit,ASIC)成本高昂且通用性差。與之相比,計(jì)算并行度高、功耗低、可重復(fù)編程的現(xiàn)場(chǎng)可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)更適合應(yīng)用于星上智能計(jì)算、在軌目標(biāo)識(shí)別等低功耗環(huán)境下的卷積神經(jīng)網(wǎng)絡(luò)的硬件加速中。

    傳統(tǒng)的空間卷積算法通過循環(huán)展開、并行計(jì)算的方法進(jìn)行加速計(jì)算,在早期被人們廣泛使用,如脈動(dòng)陣列[9]、層集群并行映射方法[10]等加速方法被先后提出。隨著卷積神經(jīng)網(wǎng)絡(luò)的層次變深、卷積核尺寸變小,傳統(tǒng)的卷積方法在卷積效率上已經(jīng)逐漸落后,快速卷積算法顯現(xiàn)出它的優(yōu)勢(shì)。文獻(xiàn)[11]將快速傅里葉變換FFT 算法應(yīng)用于卷積中以加速計(jì)算,但此方法只對(duì)大尺寸卷積核具有良好的加速效果,否則其轉(zhuǎn)換過程會(huì)引入大量補(bǔ)零操作,得不償失。文獻(xiàn)[12]提出在卷積計(jì)算中使用Winograd 算法降低計(jì)算復(fù)雜度。Winograd 算法是通過對(duì)輸入特征矩陣和權(quán)重矩陣做線性變換后再求哈達(dá)瑪積,減少了乘法次數(shù),實(shí)現(xiàn)了硬件上計(jì)算效率的提升。文獻(xiàn)[13]提出在FPGA 上使用行緩存結(jié)構(gòu)提高Winograd 算法切片之間的行數(shù)據(jù)重用。文獻(xiàn)[14]提出雙緩沖區(qū)5×5 流水線卷積方法。但是上述文獻(xiàn)并沒有充分復(fù)用重疊數(shù)據(jù),也沒有在目前使用廣泛的小卷積核網(wǎng)絡(luò)上充分發(fā)揮FPGA 低功耗的特性。

    本文設(shè)計(jì)了一種Winograd 算法卷積神經(jīng)網(wǎng)絡(luò)加速器。首先設(shè)計(jì)了輸入數(shù)據(jù)緩存復(fù)用模塊,結(jié)合行緩存和列緩存重疊數(shù)據(jù),最大化重用了片上數(shù)據(jù),減少了頻繁數(shù)據(jù)搬運(yùn)的開銷。針對(duì)FPGA并行運(yùn)算特性,設(shè)計(jì)多通道并行Winograd 卷積運(yùn)算陣列,并將卷積過程分解為六級(jí)流水線,提高了運(yùn)算效率和吞吐量。為了提升計(jì)算速度和數(shù)據(jù)傳輸速度,使用權(quán)重8 位定點(diǎn)數(shù)(INT8)量化的方式來(lái)壓縮模型,數(shù)據(jù)量減少到1/4。最后針對(duì)遙感圖像分類數(shù)據(jù)集修改VGG16 網(wǎng)絡(luò),將加速器部署至ZCU104 平臺(tái)進(jìn)行實(shí)驗(yàn)驗(yàn)證。實(shí)驗(yàn)結(jié)果表明,本設(shè)計(jì)相比其他FPGA 設(shè)計(jì)方案在功耗和計(jì)算效率上都有一定的提升。

    2 Winograd 算法

    文獻(xiàn)[15]提出的Winograd 算法可以用于減少有限脈沖響應(yīng)(Finite Impulse Response,F(xiàn)IR)濾波器的乘法次數(shù),之后被應(yīng)用于卷積神經(jīng)網(wǎng)絡(luò)加速中以減少乘法數(shù)量的方式來(lái)提升計(jì)算速度。在一維Winograd 卷積計(jì)算中,設(shè)卷積核尺寸為r,卷積結(jié)果輸出長(zhǎng)度為m,則一維Winograd 卷積計(jì)算公式F(m,r)需要的乘法數(shù)量為m+r-1,而傳統(tǒng)卷積為m×r??梢钥闯觯?dāng)r和m都大于1時(shí),Winograd 卷積乘法數(shù)量更少。

    以F(2,3)為例,用d=[d0d1d2d3]T表示輸入向量,g=[g0g1g2]T表示卷積核,r=[r0r1]T表示輸出向量,其計(jì)算過程可以表示為:

    因此可知,普通卷積需要6 次乘法和4 次加法,即:

    而F(2,3)的Winograd 卷積可寫成如下矩陣乘法形式:

    其中m0、m1、m2、m3計(jì)算如下:

    其中,輸入信號(hào)d的變換需要4 次加法。而對(duì)于卷積神經(jīng)網(wǎng)絡(luò)推理階段的卷積核g,其數(shù)值是固定的,其變換可以預(yù)先計(jì)算好進(jìn)行存儲(chǔ),同時(shí)其中的除2 操作可以用位移代替,所以計(jì)算需求可以忽略。輸出項(xiàng)r還需要中間項(xiàng)m進(jìn)行4 次乘法和4 次加法,所以F(2,3)的Winograd 乘法數(shù)量為4 次、加法數(shù)量為8 次。相較于傳統(tǒng)卷積,以加法為代價(jià),節(jié)省了33%的乘法數(shù),考慮到在硬件實(shí)現(xiàn)的乘法的實(shí)現(xiàn)成本遠(yuǎn)高于加法。因此使用Winograd 算法能夠提升運(yùn)算速度。

    上述計(jì)算可以整理為如下的矩陣形式:

    一維Winograd 卷積推廣到二維Winograd 卷積,可得到如下矩陣形式:

    其中W和In 是輸入數(shù)據(jù),Out 是輸出結(jié)果。AT、G、BT都是常數(shù)矩陣,在F(22,32)時(shí)為:

    Winograd 卷積計(jì)算F(22,32)的過程如圖1 所示。一次F(22,32)卷積計(jì)算可以將乘法數(shù)從36次降低為16 次,計(jì)算效率提升了2.25 倍。

    圖1 Winograd 卷積過程示意圖Fig.1 Schematic diagram of Winograd convolution process

    3 卷積神經(jīng)網(wǎng)絡(luò)加速器的構(gòu)成

    卷積神經(jīng)網(wǎng)絡(luò)加速器的整體架構(gòu)如圖2 所示。因?yàn)榛赯YNQ 平臺(tái),所以分為可編程邏輯(Progarmmable Logic,PL)端和處 理系統(tǒng)(Processing System,PS)端兩部分。PL 端負(fù)責(zé)計(jì)算卷積神經(jīng)網(wǎng)絡(luò)的卷積、池化、全連接等相關(guān)層,PS 端負(fù)責(zé)控制PL 端的運(yùn)行以及傳輸數(shù)據(jù)。兩部分主要通過AXI-DMA 進(jìn)行數(shù)據(jù)交互,并使用AXI-FIFO起到對(duì)數(shù)據(jù)流緩沖的作用,防止數(shù)據(jù)接收不及時(shí)造成的數(shù)據(jù)丟失。

    圖2 卷積神經(jīng)網(wǎng)絡(luò)加速器硬件架構(gòu)圖Fig.2 Hardware architecture diagram of convolutional neural network accelerator

    PS 端讀取SD 卡中的權(quán)重?cái)?shù)據(jù)和特征數(shù)據(jù)到DDR 內(nèi)存,通過寫寄存器控制當(dāng)前PL 端運(yùn)行網(wǎng)絡(luò)的層數(shù)。之后開始計(jì)算,通過AXI-DMA 使用AXI-Stream 總線向PL 端寫入DDR 上的數(shù)據(jù),緩存至特征數(shù)據(jù)緩存模塊或權(quán)重?cái)?shù)據(jù)緩存模塊。在卷積層中,將卷積計(jì)算按照并行計(jì)算方式循環(huán)展開,之后根據(jù)計(jì)算窗口位置的不同,輸出數(shù)據(jù)到六級(jí)流水線卷積層,得到中間計(jì)算結(jié)果后累加緩存,完成整幅輸出通道的計(jì)算后經(jīng)AXI-DMA輸出數(shù)據(jù)到DDR 上,作為下一層特征數(shù)據(jù)存儲(chǔ)。依此類推,直至完成網(wǎng)絡(luò)全部層的計(jì)算,得到輸出結(jié)果。

    4 卷積神經(jīng)網(wǎng)絡(luò)加速器設(shè)計(jì)

    4.1 硬件8 位定點(diǎn)數(shù)量化

    32 位浮點(diǎn)數(shù)在FPGA 上進(jìn)行乘加運(yùn)算時(shí)會(huì)消耗更多的片上資源,占用更多的位寬。為了提高數(shù)據(jù)吞吐速率和加速器計(jì)算效率,可以使用量化后的8 位定點(diǎn)數(shù),在精度損失不大的情況下達(dá)到壓縮模型的目的。為了更適合FPGA 硬件電路實(shí)現(xiàn),本文選擇了線性對(duì)稱且逐層的量化方式。

    量化的過程就是放縮的過程。將32 位浮點(diǎn)數(shù)的數(shù)值范圍線性縮小到8 位定點(diǎn)數(shù)的數(shù)值范圍,就得到了INT8 的權(quán)重?cái)?shù)據(jù)。其量化公式如式(11)所示:其中:x表示32 位浮點(diǎn)數(shù)據(jù),scale 表示縮放比例,zero_point 表示映射零點(diǎn)偏移,round 表示四舍五入的取整操作。因?yàn)椴捎脤?duì)稱式量化,所以zero_point 為0。通過KL 散度校準(zhǔn)訓(xùn)練可以得到最優(yōu)縮放比例,提升量化后精度。VGG16 網(wǎng)絡(luò)逐層量化后的部分結(jié)果如表1 所示,可以看到量化后結(jié)果全部為整數(shù),且縮放比例均為2 的整數(shù)冪,可以通過移位實(shí)現(xiàn)縮放,易于在硬件上實(shí)現(xiàn)8 位定點(diǎn)數(shù)量化。

    表1 VGG-16 網(wǎng)絡(luò)量化后的部分結(jié)果Tab.1 Partial results after quantification of VGG-16 network

    硬件量化流程如圖3 所示。將32 位浮點(diǎn)數(shù)權(quán)重經(jīng)過訓(xùn)練后量化,可以得到8 位定點(diǎn)權(quán)重,與8 位定點(diǎn)特征數(shù)據(jù)卷積后,擴(kuò)展位寬到16 位。經(jīng)過多通道累加,輸出數(shù)據(jù)位寬擴(kuò)展到32 位。之后累加上偏置,利用移位量化得到下一層計(jì)算所需的8 位定點(diǎn)特征數(shù)據(jù)。為減小誤差,移位量化時(shí)對(duì)需要舍去的小數(shù)位采用向偶數(shù)進(jìn)位的模式。

    圖3 硬件量化流程圖Fig.3 Diagram of hardware quantification flow

    4.2 輸入數(shù)據(jù)緩存復(fù)用模塊

    FPGA 的存儲(chǔ)資源可以分為片上存儲(chǔ)和片外存儲(chǔ)兩種。片上存儲(chǔ)主要是Block RAM,它存儲(chǔ)和讀取的速度快,但是容量小,無(wú)法將網(wǎng)絡(luò)權(quán)重?cái)?shù)據(jù)全部保存在片上,只能夠?qū)⑵浯嬗谄獯鎯?chǔ)DDR 中,再分批輸入到片上進(jìn)行計(jì)算。

    卷積計(jì)算時(shí)一個(gè)輸出通道的結(jié)果需要累加全部輸入通道的中間計(jì)算結(jié)果。為了減少片上緩存的占用,采用輸入通道切片的方式處理特征數(shù)據(jù)。計(jì)算完成一組輸出通道對(duì)應(yīng)的全部輸入通道切片后,再切換到下一組輸出通道。

    切片卷積的整體流程如圖4 所示。開始某一卷積層計(jì)算后,循環(huán)完成部分卷積核的切片卷積計(jì)算。待部分卷積核的全部層卷積完成后,更換卷積核繼續(xù)進(jìn)行循環(huán)卷積,直至全部卷積核都已運(yùn)算完成,結(jié)束當(dāng)前卷積層運(yùn)算。

    圖4 切片卷積流程圖Fig.4 Slice convolution flow chart

    為了便于不同輸入通道同時(shí)計(jì)算,使用特征數(shù)據(jù)融合設(shè)計(jì)。原輸入順序是輸入第一通道后再輸入下一通道,這種方式需要將全部數(shù)據(jù)輸入完成后才可開始計(jì)算,占用較多的存儲(chǔ)空間。而經(jīng)過數(shù)據(jù)融合,可以將同一位置的4 個(gè)輸入通道數(shù)據(jù)組合傳輸,如圖5 所示。這種設(shè)計(jì)可以充分利用輸入數(shù)據(jù)位寬,在得到中間結(jié)果后,不需要暫存中間數(shù)據(jù)就可以完成結(jié)果累加,減少了片上緩存的占用。

    圖5 特征數(shù)據(jù)融合設(shè)計(jì)圖Fig.5 Design drawing of feature data fusion

    在輸入數(shù)據(jù)緩存復(fù)用模塊中,因?yàn)閃inograd卷積的特殊性,輸出窗口大小為4×4,步長(zhǎng)為2。這就導(dǎo)致相鄰窗口間有步長(zhǎng)為2 的數(shù)據(jù)重疊。為了復(fù)用行重疊數(shù)據(jù),本文設(shè)計(jì)了循環(huán)復(fù)用的輸入數(shù)據(jù)緩存模塊,如圖6 所示。設(shè)置6 個(gè)Block RAM,每個(gè)存儲(chǔ)一行特征數(shù)據(jù)。數(shù)據(jù)以128 bit 位寬順序?qū)懭?,?dāng)寫入完成前4 個(gè)Block RAM 后,在寫入第5 個(gè)Block RAM 的同時(shí),并行輸出前4 個(gè)Block RAM。當(dāng)Block RAM 數(shù)據(jù)全部輸出后,第5、6 個(gè)Block RAM 也完成寫入,此時(shí)在寫入第1 個(gè)Block RAM 的同時(shí),復(fù)用第3、4 個(gè)Block RAM 數(shù)據(jù),并行輸出后4 個(gè)Block RAM。依此交替,3 個(gè)狀態(tài)構(gòu)成循環(huán)的一個(gè)周期。在降低片上存儲(chǔ)占用的同時(shí),實(shí)現(xiàn)了串并轉(zhuǎn)換和行數(shù)據(jù)復(fù)用。

    圖6 輸入數(shù)據(jù)緩存復(fù)用模塊示意圖Fig.6 Schematic diagram of input data buffer reuse module

    4.3 Winograd 流水線卷積模塊

    卷積計(jì)算存在內(nèi)部的并行性,分別是行并行、列并行、輸入通道并行、輸出通道并行和核內(nèi)并行。從算法層面看,這5 種并行方式可以任意組合先后順序。但從硬件實(shí)現(xiàn)的角度,合理的并行計(jì)算方式可以節(jié)省片上資源,提高計(jì)算效率。經(jīng)分析,本文選擇使用4 輸入通道并行、8 輸出通道并行、核內(nèi)16 并行度的方式進(jìn)行卷積計(jì)算。

    Winograd 卷積需要逐步計(jì)算完成,采用流水線的設(shè)計(jì)方式可以提高計(jì)算效率。卷積模塊共分為六級(jí)流水線,其結(jié)構(gòu)如圖7 所示。

    圖7 六級(jí)流水線卷積設(shè)計(jì)圖Fig.7 Convolution design drawing of six stage assembly line

    第一級(jí)是列數(shù)據(jù)復(fù)用組合輸出。模塊接收并暫存輸入數(shù)據(jù)緩存模塊輸出的4×2 數(shù)據(jù),即圖中的灰色數(shù)據(jù)塊。等下一周期橙色數(shù)據(jù)塊輸入后,組合為4×4 窗口大小輸出到第二級(jí),便于下一級(jí)進(jìn)行Winograd 矩陣變換。暫存數(shù)據(jù)也替換為橙色數(shù)據(jù)塊。下一周期綠色數(shù)據(jù)塊輸入后再次組合輸出,如此循環(huán)往復(fù)。緩存的4 行2 列數(shù)據(jù)每周期切換,實(shí)現(xiàn)了相鄰窗口之間的列重疊數(shù)據(jù)復(fù)用,提高了數(shù)據(jù)利用效率。

    第二級(jí)和第三級(jí)是矩陣變換。特征矩陣和權(quán)重矩陣都需要進(jìn)行變換。由于權(quán)重是預(yù)先訓(xùn)練完成的,可以提前變換后保存在DDR 上直接輸入,降低片上資源的占用。因此只需要對(duì)特征矩陣乘上常數(shù)矩陣進(jìn)行變換。

    第四級(jí)是多通道并行乘加。多輸入通道和多輸出通道可以并行相乘,這也是計(jì)算最為集中的環(huán)節(jié)。不同輸入通道的中間結(jié)果累加后才可以得到輸出數(shù)據(jù),為了優(yōu)化時(shí)序,使用加法樹的方式進(jìn)行累加。

    最后經(jīng)過第五級(jí)和第六級(jí)矩陣變換之后,就可以得到8 個(gè)輸出通道的2×2 輸出數(shù)據(jù)。作為中間結(jié)果輸出到緩存模塊暫存。

    以VGG-16 網(wǎng)絡(luò)的第一層卷積為例,當(dāng)輸入圖像為圖8 時(shí),可以得到輸出前8 個(gè)輸出通道結(jié)果以灰度圖展示如圖9。

    圖8 河流圖的遙感圖像Fig.8 Remote sensing image of river map

    圖9 卷積輸出灰度圖Fig.9 Grayscale image of convolution output

    4.4 數(shù)據(jù)累加輸出模塊

    數(shù)據(jù)累加輸出模塊(圖10)獲取到卷積模塊的輸出數(shù)據(jù)后,按照輸出通道不同,暫存在緩存A 的不同Block RAM 中。當(dāng)存儲(chǔ)完一組卷積核的一組輸出結(jié)果后,在下一組結(jié)果輸入前依次讀出,一起輸入加法樹累加后再次存入Block RAM,覆蓋之前的結(jié)果。當(dāng)這組卷積核的全部結(jié)果計(jì)算完成后,切換緩存,使緩存B 繼續(xù)存儲(chǔ)結(jié)果,緩存A 則輸出所有計(jì)算結(jié)果到DDR 中。這種設(shè)計(jì)可以在不中斷數(shù)據(jù)輸入和計(jì)算的同時(shí)輸出結(jié)果,減少了數(shù)據(jù)輸出時(shí)的阻塞時(shí)間。

    圖10 數(shù)據(jù)累加輸出模塊狀態(tài)圖Fig.10 Status diagram of data accumulation output module

    在卷積計(jì)算之后,裁剪了邊緣處的數(shù)據(jù),輸出特征圖像的尺寸會(huì)減小。隨著網(wǎng)絡(luò)層數(shù)的加深,如果不做處理,特征圖像尺寸會(huì)越來(lái)越小,造成信息的丟失。為了防止這一現(xiàn)象,在一層數(shù)據(jù)輸出時(shí)進(jìn)行padding 填充,即對(duì)特征圖像周圍補(bǔ)0。為了減少數(shù)據(jù)傳輸時(shí)間、節(jié)省存儲(chǔ)資源,在設(shè)計(jì)中省略了第一行和最后一行全部數(shù)據(jù)為0 的值,只在中間行的首尾列補(bǔ)0,在特征數(shù)據(jù)窗口讀取時(shí)再補(bǔ)首末行的0。

    5 實(shí)驗(yàn)結(jié)果及分析

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

    本文的實(shí)驗(yàn)平臺(tái)為Xilinx 公司的ZCU104 開發(fā)板,芯片型號(hào)為XCZU7EV-2FFVC1156。PS 端片外存儲(chǔ)為2 GB 大小的DDR4,PL 端片上存儲(chǔ)為38 Mb 的Block RAM 和Ultra RAM,可以滿足實(shí)驗(yàn)需求。在RTL 代碼編寫完成后,使用Vivado 2018.3 進(jìn)行仿真測(cè)試。在綜合實(shí)現(xiàn)完成后,編寫SDK 程序,燒錄上板進(jìn)行實(shí)驗(yàn)。

    本文基于經(jīng)典的VGG-16 網(wǎng)絡(luò)進(jìn)行了改進(jìn)。VGG-16 網(wǎng)絡(luò)具有提取特征能力強(qiáng),結(jié)構(gòu)清晰簡(jiǎn)單、易于修改的特點(diǎn),且其卷積核尺寸小,全部為3×3,更便于Winograd 算法的應(yīng)用。但是VGG-16 網(wǎng)絡(luò)主 要針對(duì)ImageNet ILSVRC2012 數(shù)據(jù)集進(jìn)行1 000 種標(biāo)簽的分類,為了將其適用于遙感圖像分類的任務(wù)中,使用NWPU-RESISC45 數(shù)據(jù)集對(duì)其進(jìn)行遷移學(xué)習(xí),并修改最后的全連接層輸出為45,對(duì)應(yīng)數(shù)據(jù)集的飛機(jī)、機(jī)場(chǎng)、棒球場(chǎng)、籃球場(chǎng)、沙灘等45 種標(biāo)簽。修改后的VGG-16 網(wǎng)絡(luò)結(jié)構(gòu)如表2 所示。

    表2 修改后的VGG-16 的網(wǎng)絡(luò)結(jié)構(gòu)Tab.2 Revised VGG-16 network structure table

    5.2 性能分析

    設(shè)定加速器時(shí)鐘頻率為200 MHz,經(jīng)綜合實(shí)現(xiàn)后硬件資源占用情況如表3 所示。其中LUT表示片上所有查找表;LUTRAM 表示作為存儲(chǔ)資源使用的查找表;BRAM 和URAM 表示片上的專用塊RAM 存儲(chǔ)器;DSP 則表示片上運(yùn)算單元,主要用于乘法運(yùn)算當(dāng)中。

    表3 硬件資源占用情況Tab.3 Hardware resource usage

    可以看出,加速器使用DSP 資源比例相較LUT 和BRAM 等資源比例較低,原因在于數(shù)據(jù)帶寬限制了數(shù)據(jù)傳輸速度。如果通過提高DSP 使用量的方式繼續(xù)提升加速效果,可以更換硬件資源更豐富、帶寬更大的開發(fā)板平臺(tái)或者使用PL 端的DDR 存儲(chǔ)圖像和權(quán)重?cái)?shù)據(jù)。在時(shí)序穩(wěn)定的前提下,也可以通過提高時(shí)鐘頻率來(lái)獲得更快的加速效果。

    實(shí)驗(yàn)時(shí),首先讀取SD 卡中的權(quán)重?cái)?shù)據(jù)和圖像數(shù)據(jù)到DDR 內(nèi)存上,讀取后的圖像數(shù)據(jù)如圖11所示,位于DDR內(nèi)存的0×1 000 000地址處。

    圖11 圖像數(shù)據(jù)存入DDR 內(nèi)存展示圖Fig.11 Display diagram of image data stored in DDR memory

    硬件實(shí)驗(yàn)平臺(tái)如圖12 所示。讀取圖8 所示圖像后完成計(jì)算,通過串口輸出到上位機(jī)得到圖像分類的標(biāo)簽與分類概率,如圖13 所示。

    圖12 ZCU104 硬件平臺(tái)測(cè)試圖Fig.12 ZCU104 hardware platform test diagram

    在NWPU-RESISC45 數(shù)據(jù)集上驗(yàn)證后得到FPGA 實(shí)現(xiàn)遙感圖像分類的TOP-1 準(zhǔn)確率,與GPU 實(shí)現(xiàn)的準(zhǔn)確率對(duì)比如表4 所示。在精度損失不超過1%的情況下,將網(wǎng)絡(luò)大小壓縮為原大小的28.6%,效果顯著。

    表4 硬件實(shí)現(xiàn)后網(wǎng)絡(luò)精度對(duì)比Tab.4 Comparison of network accuracy after hardware implementation

    將加速器與其他方案的實(shí)驗(yàn)結(jié)果進(jìn)行對(duì)比,如表5 所示。由于不同的設(shè)計(jì)方案采用的FPGA平臺(tái)不同,因此將計(jì)算效率和能效作為主要性能指標(biāo)進(jìn)行分析。本文提出的加速器與文獻(xiàn)[16]的Caffeine 結(jié)構(gòu)、文獻(xiàn)[17]的Angel-Eye 結(jié)構(gòu)相比,使用了更少的硬件DSP 資源,實(shí)現(xiàn)了更高的計(jì)算吞吐量。與文獻(xiàn)[18]中提出的將乘加樹與脈動(dòng)陣列相結(jié)合的乘加陣列相比,雖然由于硬件規(guī)模不同,在卷積層計(jì)算性能方面存在差距,但是本設(shè)計(jì)在能效比上較為接近,且DSP 計(jì)算效率提升為1.635 倍。

    表5 與現(xiàn)有FPGA 加速方案的對(duì)比Tab.5 Comparison with existing FPGA acceleration schemes

    6 結(jié) 論

    本文提出了一種基于FPGA 的Winograd 算法卷積神經(jīng)網(wǎng)絡(luò)加速器。在卷積算法方面,采用Winograd算法減少乘法運(yùn)算量,并設(shè)計(jì)了輸入數(shù)據(jù)緩存復(fù)用和流水線相結(jié)合的方式,充分復(fù)用了行列間的重疊數(shù)據(jù),提高了傳輸效率。使用8 位定點(diǎn)數(shù)對(duì)權(quán)重和數(shù)據(jù)量化,提高數(shù)據(jù)吞吐速率和加速器計(jì)算效率。經(jīng)過六級(jí)流水線并行卷積計(jì)算之后,得到的數(shù)據(jù)分組循環(huán)累加,降低了片上緩存的占用。在ZCU104開發(fā)板上的實(shí)驗(yàn)表明,加速器卷積層計(jì)算性能達(dá)到了354.5 GOPS,片上DSP 計(jì)算效率達(dá)到0.69,與相關(guān)研究相比,實(shí)現(xiàn)了1.6 倍以上的提升。本設(shè)計(jì)在計(jì)算效率上優(yōu)于其他FPGA加速器設(shè)計(jì)方案,能夠以較高能效完成遙感圖像分類任務(wù)中的硬件加速計(jì)算。

    猜你喜歡
    加速器乘法卷積
    輪滑加速器
    化學(xué)工業(yè)的“加速器”
    算乘法
    我們一起來(lái)學(xué)習(xí)“乘法的初步認(rèn)識(shí)”
    基于3D-Winograd的快速卷積算法設(shè)計(jì)及FPGA實(shí)現(xiàn)
    全民小康路上的“加速器”
    《整式的乘法與因式分解》鞏固練習(xí)
    把加法變成乘法
    從濾波器理解卷積
    電子制作(2019年11期)2019-07-04 00:34:38
    基于傅里葉域卷積表示的目標(biāo)跟蹤算法
    库伦旗| 大埔县| 哈巴河县| 浙江省| 襄垣县| 伊川县| 大宁县| 唐河县| 商水县| 宾川县| 洪湖市| 蛟河市| 青阳县| 方山县| 河津市| 铁岭市| 穆棱市| 元江| 永寿县| 白朗县| 乐至县| 嘉鱼县| 乌兰县| 林州市| 毕节市| 封开县| 新宾| 城步| 葫芦岛市| 磐安县| 平定县| 岳普湖县| 普定县| 灌南县| 九龙城区| 东方市| 永康市| 文水县| 海伦市| 金沙县| 梧州市|