孫小堅(jiān),林瑞全,方子卿,馬 馳
(福州大學(xué) 電氣工程與自動化學(xué)院,福州 350000)
卷積神經(jīng)網(wǎng)絡(luò)善于從海量數(shù)據(jù)中提取目標(biāo)的特征,由于其出色的分類識別能力,已被廣泛的應(yīng)用于圖像分類、語音識別、醫(yī)療診斷、國防安全等領(lǐng)域。龐大的參數(shù)量使得卷積神經(jīng)網(wǎng)絡(luò)部署在資源有限的嵌入式設(shè)備上存在困難。輕量級網(wǎng)絡(luò)的誕生,很大程度上降低了網(wǎng)絡(luò)的參數(shù)量,適合部署在小容量的嵌入式設(shè)備上,應(yīng)用于目標(biāo)分類的場景[1-3],輕量級網(wǎng)絡(luò)如MobileNetV2[4],采用深度可分離的卷積結(jié)構(gòu),在減少了網(wǎng)絡(luò)參數(shù)量的同時(shí)又能保證識別精度。
目前將CNN部署在嵌入式設(shè)備上主要有幾種方式,如處理器CPU、GPU、專用集成電路(ASIC,application specific integrated circuit)和現(xiàn)場可編程門陣列(FPGA,field programmable gate array)等。將CNN部署于傳統(tǒng)的處理器CPU上,會帶來高延遲。若是使用并行計(jì)算GPU會存在較大的功耗。使用專用的集成電路ASIC雖然性能好,但是成本較高。FPGA具有實(shí)時(shí)性、低功耗、可重構(gòu)的優(yōu)點(diǎn),特別適用于作為CNN的硬件加速器。將AI領(lǐng)域主流的CNN網(wǎng)絡(luò)部署在FPGA上的工作仍然面臨著內(nèi)存帶寬不足和計(jì)算并行度低的限制。由于FPGA片內(nèi)存儲資源有限文獻(xiàn)[5]將卷積計(jì)算中間緩存放在了片外DDR上,文獻(xiàn)[6]則把DDR當(dāng)做權(quán)重?cái)?shù)據(jù)的存儲區(qū),這樣雖能緩解片內(nèi)存儲的壓力,但是片外的DDR存在帶寬的限制,同時(shí)也增加了額外的功耗。而文獻(xiàn)[7-8]將參數(shù)均存在片內(nèi)存儲資源上,無需訪問片外DDR,雖然降低了系統(tǒng)功耗,但是需要足夠大的片內(nèi)存儲資源。在探索提升計(jì)算并行度的方案上,文獻(xiàn)[9-11]采用單一的計(jì)算結(jié)構(gòu),不同的卷積層復(fù)用該計(jì)算結(jié)構(gòu),可以將大部分資源分配給該計(jì)算結(jié)構(gòu),最大程度提升該計(jì)算陣列的并行度,但是難以適應(yīng)不同卷積的計(jì)算方式,導(dǎo)致效率低下。文獻(xiàn)[12-13]以全流水線的形式將CNN網(wǎng)絡(luò)展開,層與層之間流水計(jì)算,每層分別占用不同的資源,資源消耗較大,適用于淺層次的網(wǎng)絡(luò),無法部署深層次的網(wǎng)絡(luò)。文獻(xiàn)[14]綜合了單一計(jì)算結(jié)構(gòu)與全流水線結(jié)構(gòu)的優(yōu)點(diǎn),針對MobileNetV2網(wǎng)絡(luò)提出了一種半流式結(jié)構(gòu),該結(jié)構(gòu)只針對專用的CNN設(shè)計(jì),結(jié)構(gòu)固定,通用性不強(qiáng)。
針對上述問題,本文采用量化感知訓(xùn)練的方式在量化的過程中對模型進(jìn)行二次訓(xùn)練將模型精度由靜態(tài)量化的73.33%提升到了93.89%,壓縮模型尺寸為原來的1/4,用8位定點(diǎn)整數(shù)表示權(quán)重與緩存。將壓縮后的權(quán)重參數(shù)全部存放在片內(nèi),克服了片外存儲帶寬限制的同時(shí),降低了功耗,硬件加速部分功耗僅為6.13 W;并且優(yōu)化了存儲器的存儲結(jié)構(gòu)與數(shù)據(jù)的讀取方式,根據(jù)不同層的卷積計(jì)算方式與并行度設(shè)計(jì)權(quán)重和輸入數(shù)據(jù)在BRAM中的排列方式,進(jìn)一步節(jié)約了內(nèi)存,卷積運(yùn)算中對輸入圖片數(shù)據(jù)進(jìn)行復(fù)用減少了對內(nèi)存的訪問次數(shù);提出了一種層內(nèi)、層間協(xié)同配合的流水線結(jié)構(gòu),在卷積層內(nèi),相鄰PW層間流水線展開,采用十二級流水線的設(shè)計(jì)方法,極大的提升了網(wǎng)絡(luò)的實(shí)時(shí)性,在短暫延時(shí)后,能夠?qū)崿F(xiàn)每0.64 ms推斷一張圖片。通過實(shí)驗(yàn)分析與對比,本文的方法在一定程度上解決了將CNN網(wǎng)絡(luò)部署在FPGA上時(shí)內(nèi)存帶寬不足和計(jì)算并行度低所帶來的限制,同時(shí)還降低了功耗。
MobileNetV2由gogle團(tuán)隊(duì)于2018年提出,采用深度可分離卷積,即將一個標(biāo)準(zhǔn)的卷積層拆分為逐層卷積(DW,depthwise convolution)與逐點(diǎn)卷積(PW,pointwise convolution)操作。使得網(wǎng)絡(luò)的參數(shù)量與計(jì)算量大為降低,但是卻能保持較高的準(zhǔn)確率,因此被廣泛的應(yīng)用于小容量嵌入式應(yīng)用場景。MobileNetV2的網(wǎng)絡(luò)結(jié)構(gòu)如表1所示,其中t代表著縮放系數(shù),c代表輸出通道數(shù),n代表重復(fù)次數(shù),s代表著步長。
表1 MobileNetV2網(wǎng)絡(luò)結(jié)構(gòu)
與MobileNetV1[15]相比MobileNetV2參數(shù)更少,準(zhǔn)確度卻更高,改進(jìn)的地方在于它采用了倒殘差瓶頸模塊(Inverted residual block)先用1×1 conv 將k維網(wǎng)絡(luò)進(jìn)行升維到tk維,后通過1×1 DW層進(jìn)行特征的提取,最后由1×1 conv操作重新降低為k維。倒殘差瓶頸模塊輸出部分借鑒了RseNet[16]的short-cut操作,當(dāng)中間DW層進(jìn)行下采樣時(shí)(stride=2)時(shí),直接輸出,當(dāng)中間DW層不進(jìn)行下采樣(stride=1)時(shí),瓶頸模塊輸入與輸出相加,具體操作如圖1所示。
圖1 倒殘差瓶頸模塊具體操作
通常PC端保存訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò)模型參數(shù)為32位的浮點(diǎn)數(shù)。MobileNetV2網(wǎng)絡(luò)的參數(shù)量為3.4 M,F(xiàn)PGA的片內(nèi)BRAM資源十分的有限,如果網(wǎng)絡(luò)的參數(shù)均采用32浮點(diǎn)數(shù)表示存入FPGA中,F(xiàn)PGA內(nèi)存將嚴(yán)重不足。這就需要對網(wǎng)絡(luò)模型進(jìn)行量化處理,壓縮模型參數(shù),緩解FPGA內(nèi)存不足的壓力。量化方式有靜態(tài)量化、動態(tài)量化、量化感知訓(xùn)練3種方式,前兩種方法是針對訓(xùn)練好的模型進(jìn)行量化,而量化感知訓(xùn)練則會對模型進(jìn)行二次訓(xùn)練。小型的網(wǎng)絡(luò),如果采用前兩種量化方式會帶來較大的精度損失[17],而量化感知訓(xùn)練不僅可以壓縮模型參數(shù),且模型的精度損失還較小,與此同時(shí)相較于浮點(diǎn)數(shù)運(yùn)算,F(xiàn)PGA更加擅長處理定點(diǎn)數(shù)運(yùn)算。因此本文采用量化感知訓(xùn)練的方式,將32位浮點(diǎn)數(shù)參數(shù)用INT8型表示。
假設(shè)卷積的權(quán)重參數(shù)為w,偏置為b,輸入為x,輸出激活值為a,卷積運(yùn)算可以表示為下式所示:
(1)
用Xfloat表示浮點(diǎn)實(shí)數(shù),q表示量化后的定點(diǎn)數(shù),S為量化的尺度因子,Z則表示0經(jīng)過量化后對應(yīng)的數(shù)值。則浮點(diǎn)數(shù)與定點(diǎn)數(shù)的轉(zhuǎn)化公式如公式(2)與公式(3)所示:
Xfloat=S(q-Z)
(2)
(3)
將公式(1)中的w、b、x分別用量化后的定點(diǎn)數(shù)表示,同時(shí)偏置的量化尺度因子取為Sb=SwSx就得到了公式(4)。
(4)
量化感知訓(xùn)練在對網(wǎng)絡(luò)進(jìn)行二次訓(xùn)練的過程中將式(2)加入到了它的前向傳播的訓(xùn)練過程,卷積計(jì)算時(shí)將浮點(diǎn)數(shù)轉(zhuǎn)化為定點(diǎn)數(shù)。計(jì)算完成后進(jìn)行反量化操作,通過式(3)將定點(diǎn)數(shù)重新轉(zhuǎn)化為浮點(diǎn)數(shù)。在網(wǎng)絡(luò)訓(xùn)練的反向傳播過程中則按浮點(diǎn)數(shù)的計(jì)算方式進(jìn)行,以此來提高模型對量化效應(yīng)的適應(yīng)度,最終提高量化后模型的精度每一層的量化操作按照式(5)進(jìn)行
(5)
其中:r代表要量化的實(shí)數(shù)值,a,b是該實(shí)數(shù)的量化范圍,即該層Tensor里的最小值與最大值,n則代表量化級數(shù),若最終需量化為8位則n=28=256。
在PyTorch框架下對東北大學(xué)發(fā)布的熱軋帶鋼表面缺陷數(shù)據(jù)集進(jìn)行試驗(yàn)測試,輸入圖片尺寸為96×96×3,運(yùn)用靜態(tài)量化將模型參數(shù)壓縮至INT8型后缺陷分類正確率下降到了73.33%,采用量化感知訓(xùn)練方式將模型參數(shù)壓縮至INT8型的同時(shí)進(jìn)行再次訓(xùn)練,在未采用按通道(per-channel)優(yōu)化的情況下8輪EPOCH后,正確率可以達(dá)到93.89%,如圖2所示。
圖2 熱軋帶鋼表面缺陷分類正確率
未量化前浮點(diǎn)數(shù)模型的精度為96.10%,量化后精度損失為2.21%,滿足精度要求。
系統(tǒng)的整體架構(gòu)如圖3所示,由Host上位機(jī)、硬件加速模塊(Accelerator)、顯示模塊(LCD)組成。其中網(wǎng)絡(luò)的權(quán)重,經(jīng)量化后根據(jù)DW、PW層的并行度以及數(shù)據(jù)讀取規(guī)則進(jìn)行有序排列,提前寫入On-chip Memory中。上位機(jī)只負(fù)責(zé)通過PCIE總線傳輸輸入圖片數(shù)據(jù)到Input-buffer中。硬件加速部分在監(jiān)測到圖片數(shù)據(jù)已經(jīng)加載完成后,從On-chip Memory讀入權(quán)重,即開始前向推理加速。硬件加速模塊對應(yīng)著MobileNetV2網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行部署,主要由Conv2d層、DW層、PW層、池化層(Pooling Layer)組成。最終分類結(jié)果顯示在Virtex-7 FPGA掛載的LCD上。
圖3 MobileNetV2網(wǎng)絡(luò)識別系統(tǒng)整體結(jié)構(gòu)
針對片內(nèi)資源短缺的問題,為了進(jìn)一步的節(jié)約片內(nèi)BRAM的存儲資源,本文提出了一種存儲器與數(shù)據(jù)讀取的優(yōu)化策略,優(yōu)化了權(quán)重與緩存的存儲結(jié)構(gòu)以及數(shù)據(jù)的讀取方式。
將一個最基本的卷積運(yùn)算展開,要做到多通道并行,最簡單的方法就是將每一路通道上的輸入圖片與權(quán)重?cái)?shù)據(jù),分別用一個BRAM存儲。這樣做程序?qū)崿F(xiàn)簡單,但由于MobileNetV2網(wǎng)絡(luò)輸入通道數(shù)量最多可達(dá)1 280,這樣的實(shí)現(xiàn)方法會造成片內(nèi)BRAM資源的嚴(yán)重浪費(fèi),本文根據(jù)FPGA片內(nèi)BRAM資源的構(gòu)成特點(diǎn),采用一個地址拼接多個通道數(shù)據(jù)的方式將卷積計(jì)算合理的在輸入、輸出通道進(jìn)行展開,根據(jù)卷積計(jì)算的特點(diǎn),上一層卷積的輸出通道并行度需與下一層輸入通道的并行度保持一致,且該數(shù)值應(yīng)為MobileNetV2網(wǎng)絡(luò)每層通道數(shù)的公因數(shù),18 K BRAM空間按512×36進(jìn)行配置則每層網(wǎng)絡(luò)中權(quán)重消耗的18 K BRAM資源與輸入通道、輸出通道并行度的關(guān)系如式(6)所示:
(6)
其中:Dataw表示權(quán)重?cái)?shù)據(jù)在BRAM中每個地址的數(shù)據(jù)位寬,Pin、Pout則表示卷積運(yùn)算輸入通道與輸出通道設(shè)置的并行度,nw代表量化的位寬,由于采用的是8位量化所以這里的nw=8。Depth表示BRAM的數(shù)據(jù)深度,Cin、Cout為本層網(wǎng)絡(luò)的輸入與輸出通道數(shù),卷積核的尺寸大小為K*K。最終可由Depth與Dataw的數(shù)值大小確定本層網(wǎng)絡(luò)消耗的18 K BRAM資源數(shù)。結(jié)合Virtex-7 FPGA片內(nèi)資源情況通過計(jì)算可知當(dāng)每層的Pin、Pout都取4時(shí),在兼顧網(wǎng)絡(luò)推理速度時(shí)能夠留有一定的存儲裕度,為了進(jìn)一步提升處理速度,在MobileNetV2網(wǎng)絡(luò)計(jì)算密集的層增大了輸入與輸出通道的并行度。每層網(wǎng)絡(luò)權(quán)重消耗的BRAM資源數(shù)值情況與并行度如表2所示。
表2 MobileNetV2每層網(wǎng)絡(luò)存儲資源消耗情況
以PW層為例,數(shù)據(jù)的存儲結(jié)構(gòu)與讀取方式如圖4所示。假設(shè)輸入圖片的尺寸為Map(k×k×n),權(quán)重則為Weight(n×m)。在PW層設(shè)計(jì)的并行度為16,即在一個時(shí)鐘周期完成16組的1×1的逐點(diǎn)卷積運(yùn)算。需要在一個周期內(nèi)讀入4個通道的輸入數(shù)據(jù),ram里的每個地址存入由4個通道拼接成的32位寬的數(shù)據(jù),同理Weight-rom中的每個地址拼接了4個通道的各4個權(quán)重,即一個地址存入128位寬的數(shù)據(jù)。
圖4 數(shù)據(jù)的存儲結(jié)構(gòu)與讀取方式
數(shù)據(jù)的讀取方式按輸入圖片尺寸大小進(jìn)行地址跳轉(zhuǎn)讀取,如輸入圖片的尺寸為(k×k×n)則每時(shí)鐘周期按addr0、addrk^2、…addr(n-1)k^2進(jìn)行跳轉(zhuǎn)讀取。頻繁的數(shù)據(jù)訪問會帶來額外的功耗,因此在卷積計(jì)算過程中應(yīng)加強(qiáng)數(shù)據(jù)的復(fù)用來減少訪問的次數(shù),降低功耗??刹捎枚鄠€卷積核共享輸入圖片數(shù)據(jù)的方法減少對內(nèi)存的訪問次數(shù)[10],具體實(shí)現(xiàn)如下:在第一個CLK讀入層間緩存中的M11~M14,同時(shí)讀入4個通道的各4個權(quán)重值,W11~W14、W21~W24、W31~W34、W41~W44進(jìn)行相乘后各自累加,n個通道累加完畢后,同時(shí)輸出4個輸出通道的同一位置的數(shù),拼接后存入一個地址。
量化模塊依據(jù)上文公式(4)進(jìn)行實(shí)現(xiàn),卷積計(jì)算累加的結(jié)果,需要乘上對應(yīng)的量化乘數(shù),量化乘數(shù)為浮點(diǎn)數(shù)的表示形式,要變成定點(diǎn)數(shù)的表示形式則需先進(jìn)行放大,找出誤差合適的M0乘數(shù)。使得乘法在定點(diǎn)數(shù)上進(jìn)行,乘法結(jié)果通過右移位進(jìn)行縮小還原,最終重新截成int8型數(shù)據(jù)輸出,整個過程流水線排開,具體實(shí)現(xiàn)過程如圖5所示。
圖5 量化模塊的硬件結(jié)構(gòu)
DW卷積不同于一般的常規(guī)卷積,它的一個卷積核只負(fù)責(zé)一個通道,輸入圖片的通道數(shù)經(jīng)過DW層后,通道數(shù)不變,在DW層并行度上,按4輸入通道與卷積核內(nèi)并行相結(jié)合的策略,DW層的卷積過程如圖6所示。
圖6 DW層并行結(jié)構(gòu)
DW層硬件架構(gòu)如圖7所示,在并行計(jì)算上,將卷積計(jì)算從輸入通道展開。每個輸入通道將3×3的窗口數(shù)據(jù)分別送入每組由9個乘法器組成的乘法陣列中,在下一個周期通過加法樹將乘結(jié)果累加起來,存入32位的Sum寄存器中,經(jīng)過量化單元量化及Relu后,截成8位的整型數(shù)據(jù)。最后對每個通道的卷積結(jié)果進(jìn)行拼接,存入BRAM的地址中。
圖7 DW層的硬件架構(gòu)
PW為點(diǎn)卷積操作,用于對上一層的輸出map在深度方向進(jìn)行加權(quán)組合。在PW層采取了4輸入通道與4輸出通道相結(jié)合的并行方式。在一個CLK同時(shí)讀取4輸入通道同一個位置的數(shù)據(jù)與4組通道上的權(quán)重進(jìn)行計(jì)算,依次按輸入通道方向讀取輸入Map數(shù)據(jù),經(jīng)過n個CLK后遍歷整個輸入通道,輸出4個輸出通道同一位置的數(shù)據(jù)。PW層的并行設(shè)計(jì)如圖8所示。
圖8 PW層并行結(jié)構(gòu)
每個時(shí)鐘周期輸入由4個輸入通道拼接而成的32位數(shù)據(jù)進(jìn)入乘累加陣列,當(dāng)前4通道累加結(jié)果存入Sum1_1寄存器中與先前通道的累加結(jié)果Sum1相加,1×1的點(diǎn)卷積將輸入通道遍歷后,輸出最終的累加結(jié)果給量化模塊,Relu操作后輸出8位整型數(shù),最后將4個輸出通道結(jié)果拼接成32位數(shù)存入Bram中,PW層的硬件實(shí)現(xiàn)如圖9所示。
圖9 PW層的硬件架構(gòu)
構(gòu)成MobileNetV2網(wǎng)絡(luò)的卷積層類型為標(biāo)準(zhǔn)卷積層、DW卷積層、PW卷積層,其中標(biāo)準(zhǔn)卷積層的計(jì)算量可由公式(7)得到,DW卷積層、PW卷積層的計(jì)算量可由公式(8)、(9)計(jì)算得出。
Osc=h*w*Cin*Cout*K*K
(7)
Odw=h*w*Cin*K*K
(8)
Opw=h*w*Cin*Cout
(9)
h和w分別為輸出特征圖的行數(shù)與列數(shù),Cin和Cout為輸入與輸出的通道數(shù),K為卷積核的尺寸。
當(dāng)輸入為96*96*3時(shí)可得MobileNetV2網(wǎng)絡(luò)各部分的計(jì)算量如表3所示。PW層的計(jì)算量占到了總網(wǎng)絡(luò)計(jì)算量的89.79%,因此在相鄰兩個PW層間設(shè)計(jì)層間流水計(jì)算結(jié)構(gòu)可以大幅度提升網(wǎng)絡(luò)的實(shí)時(shí)性。
表3 MobileNetV2網(wǎng)絡(luò)各部分計(jì)算量
本文在MobileNetV2網(wǎng)絡(luò)相鄰的PW層內(nèi)及層間以流水線的方式運(yùn)行計(jì)算,流水結(jié)構(gòu)如圖10所示。數(shù)據(jù)從PW1層輸入直到PW2層結(jié)果輸出,一共采用了十二級流水線的設(shè)計(jì)方式。
圖10 十二級流水線
在相鄰的PW層間流水線計(jì)算結(jié)構(gòu)設(shè)計(jì)如圖11所示,點(diǎn)卷積操作只需單個點(diǎn)的像素就能進(jìn)行卷積操作,但是完整輸出一次操作結(jié)果需要遍歷整個輸入通道。PW1的權(quán)重為(m,n)的二維數(shù)組形式,這里m為輸出通道數(shù),n為輸入通道數(shù)。PW層并行度設(shè)置為k=4,則PW1層在一個周期讀取前一層輸出的4張圖片的4個數(shù)據(jù)后,同時(shí)讀取4組n輸入通道上的4個數(shù),即4×4個權(quán)重?cái)?shù)據(jù),進(jìn)入PW1層計(jì)算。在下一個周期PW1模塊讀取下一組輸入數(shù)據(jù)后,權(quán)重則按輸入通道的方向讀取下一組4×4個權(quán)重?cái)?shù)據(jù),以此類推遍歷整個輸入通道完成一組運(yùn)算。PW1層的輸出圖片尺寸為(y,y,m),當(dāng)遍歷完整個輸出通道,m張圖片的首位數(shù)據(jù)全部寫入緩存時(shí),PW1層發(fā)給PW2一個start信號,PW2開始讀入數(shù)據(jù)進(jìn)行運(yùn)算,PW2層的權(quán)重讀取順序與PW1層一致。點(diǎn)卷積運(yùn)算不改變輸入圖片的尺寸大小,由于PW2的輸入、輸出通道數(shù)的乘積大于PW1,即x×m≥m×n,所以PW2遍歷完整個輸入、輸出通道的時(shí)間要大于等于PW1。PW2只需延遲等待PW1層寫入緩存的m張圖片的首位數(shù)據(jù)后啟動,PW1的寫和PW2讀就不會發(fā)生沖突,兩層就能以流水的計(jì)算方式同時(shí)運(yùn)行計(jì)算。
圖11 層間流水計(jì)算結(jié)構(gòu)
本文采用Xilinx Virtex-7 VC707開發(fā)板作為實(shí)驗(yàn)平臺,該開發(fā)板芯片具有485 760個邏輯單元、2 800 DSP、37.08 MB的Block RAM,所用開發(fā)工具為Vivado 2018.3,采用Verilog語言進(jìn)行編程,PC端網(wǎng)絡(luò)的訓(xùn)練與量化采用了基于Python的PyTorch框架,CPU型號為Inter Core i5 -6200U,主頻為2.3 GHz。下面討論實(shí)現(xiàn)的效果及性能比較。
主要資源消耗情況如表4所示,其中LUT資源表示查找表,BRAM代表片內(nèi)存儲資源,F(xiàn)F為觸發(fā)器資源,DSP為計(jì)算單元。LUT、FF、DSP資源主要用在了卷積功能模塊以及數(shù)據(jù)流的實(shí)現(xiàn)上,消耗量均不大。由于本文為了減少片外DDR的訪問降低系統(tǒng)功耗,將所有的權(quán)重及層間緩存都布置在了片內(nèi)BRAM中,所以片內(nèi)BRAM資源消耗較大。
表4 資源占用情況
整個系統(tǒng)的能耗如圖12所示,在200 MHz時(shí)鐘下整體功耗為8.24 W,扣除數(shù)據(jù)傳輸接口PCIE功耗2.108 W,整個硬件加速部分的功耗僅為6.13 W。
圖12 系統(tǒng)功耗
表5列出了本文實(shí)現(xiàn)與CPU、GPU平臺性能的對比。200 MHz時(shí)鐘下本文的硬件實(shí)處理單張圖片僅耗時(shí)0.64 ms,能耗比為27.74 GOP/s/W 是CPU平臺的92倍,GPU平臺的25倍??梢妼NN部署在FPGA上無論從推理時(shí)間還是功耗上都具有極大的優(yōu)勢。
表5 不同平臺性能對比
表6列出了在不同的FPGA平臺實(shí)現(xiàn)CNN的性能對比,可以看出本文較文獻(xiàn)[14]、[19]和文獻(xiàn)[20]在計(jì)算性能上存在一定的優(yōu)勢,雖然計(jì)算性能上較文獻(xiàn)[18]還有一定差距,但是在功耗上優(yōu)勢明顯,能效比(Gop/s/W)較高。在追求高計(jì)算性能的同時(shí)能夠兼顧功耗,達(dá)到計(jì)算性能與功耗兩者的平衡,更加適用于實(shí)際的應(yīng)用場景。
表6 不同F(xiàn)PGA實(shí)現(xiàn)性能對比
本文提出的基于FPGA加速的低功耗的MobileNetV2網(wǎng)絡(luò)識別系統(tǒng),將權(quán)重和緩存均放入片內(nèi)存儲,克服了片外存儲帶來的帶寬限制與額外的功耗,小型網(wǎng)絡(luò)量化會帶來較大的精度損失,因此采用量化感知訓(xùn)練的方式進(jìn)行二次訓(xùn)練提高網(wǎng)絡(luò)的精度。為了進(jìn)一步節(jié)約片內(nèi)存儲資源,優(yōu)化了數(shù)據(jù)存儲結(jié)構(gòu),復(fù)用了輸入特征圖。在相鄰的PW卷積層內(nèi)與層間以流水線的方式展開,極大的提升了網(wǎng)絡(luò)的實(shí)時(shí)性。
本文設(shè)計(jì)的MobileNetV2網(wǎng)絡(luò)雖然將權(quán)重和層間緩存均放入片內(nèi)存儲,在一定程度上克服了片外存儲帶來的帶寬限制,但是受限于片內(nèi)BRAM資源,每層的并行度并不能設(shè)計(jì)的足夠高,如何在有限的片內(nèi)BRAM資源下,進(jìn)一步提高網(wǎng)絡(luò)的并行度是需要在未來的研究中考慮的問題。