劉冬生 魏 來* 鄒雪城 陸家昊 成 軒 胡 昂李德建 趙 旭 蔣曲明
①(華中科技大學(xué)光學(xué)與電子信息學(xué)院 武漢 430074)
②(國家電網(wǎng)電力工業(yè)芯片設(shè)計(jì)與分析技術(shù)重點(diǎn)實(shí)驗(yàn)室,北京智芯微電子科技有限公司 北京 100000)
③(楚天龍股份有限公司 東莞 523000)
目前,心血管疾病已成為全球致死人數(shù)最高的疾病,據(jù)世界衛(wèi)生組織統(tǒng)計(jì),2019年全球約有1790萬人因心血管疾病致死,該類疾病已經(jīng)嚴(yán)重威脅到人類的身體健康[1]。對(duì)心血管類疾病患者進(jìn)行實(shí)時(shí)監(jiān)控以及干預(yù)可以有效地降低心血管疾病的危害,而隨著嵌入式技術(shù)發(fā)展以及人工智能算法的成熟,通過可穿戴設(shè)備完成心電信號(hào)的實(shí)時(shí)分析變?yōu)榭赡?。?dāng)前大部分的可穿戴醫(yī)療設(shè)備僅具有采集人體生理信息的功能,通常將醫(yī)療診斷算法部署在云端完成數(shù)據(jù)分析,該方式會(huì)加劇云端中心的數(shù)據(jù)壓力,并導(dǎo)致設(shè)備的實(shí)時(shí)監(jiān)控性較差[2],因此研究專用于醫(yī)療診斷和分析的可穿戴設(shè)備是具有重大研究和應(yīng)用價(jià)值的。
心電圖(ElectroCardioGram, ECG)分類算法主要分為傳統(tǒng)機(jī)器學(xué)習(xí)算法與深度學(xué)習(xí)算法,傳統(tǒng)機(jī)器學(xué)習(xí)算法分為信號(hào)預(yù)處理、特征提取和篩選以及分類算法3個(gè)步驟完成,而ECG信號(hào)的特征提取和篩選需要大量的先驗(yàn)知識(shí)[3]。深度學(xué)習(xí)算法能自動(dòng)提取和篩選ECG信號(hào)特征并具有極高的預(yù)測(cè)精度,已成為ECG分類算法的主流方法,其中卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)算法由于其對(duì)信號(hào)噪聲具有出色的魯棒性以及較強(qiáng)的泛化能力[4],被廣泛應(yīng)用于ECG分類算法中。隨著CNN算法的不斷更新與迭代,網(wǎng)絡(luò)模型不斷增加,諸多CNN模型需要大量的運(yùn)算和存儲(chǔ)資源完成推理預(yù)測(cè),而部署在嵌入式設(shè)備場(chǎng)景的CNN模型算法需要在有限的硬件資源完成高性能需求。專用的CNN加速器與傳統(tǒng)CPU+GPU協(xié)同處理方式相比,雖犧牲了部分通用性,但能以極低的功耗和硬件資源完成CNN模型加速[5]。因此針對(duì)嵌入式場(chǎng)景,使用專用的CNN加速器完成CNN模型的預(yù)測(cè)已成為目前的研究熱點(diǎn)之一。
目前對(duì)卷積神經(jīng)網(wǎng)絡(luò)加速器的研究主要集中在以下3個(gè)方面:
(1) 循環(huán)展開、平鋪與交換提高運(yùn)算效率:通過對(duì)CNN多級(jí)循環(huán)進(jìn)行深入研究,使用循環(huán)展開、平鋪和交換操作對(duì)卷積循環(huán)進(jìn)行優(yōu)化與加速,隨后根據(jù)采取的循環(huán)操作策略設(shè)計(jì)核心運(yùn)算單元完成卷積運(yùn)算,這種空間并行的結(jié)構(gòu)能實(shí)現(xiàn)各類數(shù)據(jù)復(fù)用以及運(yùn)算并行度的提升[6,7]。
(2) 高效的數(shù)據(jù)流減少數(shù)據(jù)通信:通過輸入固定[8](Input Stationary, IS)、輸出固定[9](Output Stationary, OS)和權(quán)重固定[10](Weight Stationary,WS)等數(shù)據(jù)流方式完成對(duì)片內(nèi)各類數(shù)據(jù)的高效復(fù)用,降低額外訪存次數(shù)所帶來的時(shí)延和功耗開銷。
(3) 高效的處理單元(Processing Element,PE)陣列設(shè)計(jì)提高硬件資源效率:通過采用卷積加速算法設(shè)計(jì)高效的PE單元,有效地提高數(shù)字信號(hào)處理器(Digital Signal Processor, DSP)的運(yùn)算效率[11];通過對(duì)PE陣列結(jié)構(gòu)的可重構(gòu)設(shè)計(jì),提升整體硬件的能效比[12]。
本文對(duì)卷積循環(huán)原理和多種數(shù)據(jù)流進(jìn)行了深入研究,對(duì)先前的工作[13]進(jìn)行了優(yōu)化設(shè)計(jì),設(shè)計(jì)了一種面向心電檢測(cè)的混合多模卷積神經(jīng)網(wǎng)絡(luò)加速器。本文首先介紹了心電信號(hào)(ECG)以及卷積循環(huán)原理,隨后介紹了用于ECG分類的1維卷積神經(jīng)網(wǎng)絡(luò)(One-Dimensional Convolutional Neural Network,1D-CNN)模型,并根據(jù)該模型完成了卷積神經(jīng)網(wǎng)絡(luò)加速器的硬件設(shè)計(jì)。該設(shè)計(jì)采用了多并行展開策略以及多數(shù)據(jù)流的運(yùn)算模式完成了卷積循環(huán)的加速和優(yōu)化,并設(shè)計(jì)了相應(yīng)的3D-PE陣列可以在時(shí)間和空間上高度復(fù)用運(yùn)算數(shù)據(jù),最后給出了硬件設(shè)計(jì)的實(shí)現(xiàn)結(jié)果,并與其他文獻(xiàn)進(jìn)行比較與分析。
ECG信號(hào)記錄了人體心臟活動(dòng)的生理信息,是心血管疾病臨床診斷和治療的重要依據(jù)。麻省理工學(xué)院所提供的MIT-BIH心率失常數(shù)據(jù)庫記錄了大量的ECG信號(hào),是目前使用最廣泛的數(shù)據(jù)庫之一。該數(shù)據(jù)庫記錄了48條采樣頻率為320 Hz且持續(xù)時(shí)間長達(dá)30 min的ECG數(shù)據(jù)文件,采集對(duì)象來自47位心血管病患者,這些ECG數(shù)據(jù)文件均標(biāo)注了心拍類別、R峰位置等診斷信息。本文選取了MIT-BIH數(shù)據(jù)庫中MLII導(dǎo)聯(lián)通道的ECG數(shù)據(jù)作為數(shù)據(jù)集,將30 min的ECG數(shù)據(jù)段分割為多個(gè)以R峰為中心且序列長度為256的單周期心拍,隨后采用Z-Score標(biāo)準(zhǔn)化對(duì)單周期心拍數(shù)據(jù)完成歸一化處理。本文隨機(jī)選取了70%的ECG數(shù)據(jù)作為模型的訓(xùn)練集,剩余30%數(shù)據(jù)均分為模型的驗(yàn)證集與測(cè)試集。
ECG信號(hào)是周期性的1維時(shí)間序列信號(hào),單個(gè)周期的ECG信號(hào)對(duì)應(yīng)了人體一次完整的心臟激動(dòng)過程,該信號(hào)通常由P波、T波以及QRS波段組成,每個(gè)波段的形態(tài)特征均能表征被采集者心臟活動(dòng)的生理信息。如圖1所示,ECG信號(hào)通??梢苑譃榉啃栽绮?Atrial Premature Beat, APB)、正常(Normal, N)、室性早搏(Premature Ventricular Contractions, PVC)、左束支傳導(dǎo)阻滯(Left Bundle Branch Block, LBBB)、右束支傳導(dǎo)阻滯(Right Bundle Branch Block, RBBB)。
圖1 各類型ECG信號(hào)的波形特征
1維CNN模型相比2維模型規(guī)模和參數(shù)量更小,并能深度挖掘ECG信號(hào)的特征信息以及精確分類,因此本文采用1維CNN模型對(duì)ECG信號(hào)進(jìn)行分類預(yù)測(cè)。常規(guī)的1維CNN模型由卷積層、池化層以及全連接層構(gòu)建。其中卷積層和全連接層包含了CNN模型90%以上的運(yùn)算處理,因此在CNN模型的硬件加速中,主要是針對(duì)卷積層和全連接層進(jìn)行優(yōu)化完成運(yùn)算加速。
1維CNN模型的卷積層(Convolution, Conv)運(yùn)算流程如圖2所示,其中H,R分別為輸出特征圖和卷積核的長度,C,M分別為輸入和輸出特征圖的維度數(shù),S為卷積核的步幅。卷積層運(yùn)算包含了4重循環(huán)運(yùn)算分別為:Loop1:卷積核內(nèi)方向循環(huán);Loop2:輸入通道方向循環(huán);Loop3:輸入特征圖上方向循環(huán);Loop4:輸出通道方向循環(huán)。在卷積層運(yùn)算的4級(jí)循環(huán)運(yùn)算中,各循環(huán)方向均能并行運(yùn)算且不互相影響,通過循環(huán)展開的方式能有效地提升卷積層的運(yùn)算并行度,從而加速卷積層運(yùn)算。
圖2 卷積層運(yùn)算的4級(jí)循環(huán)
1維CNN模型的全連接層(Fully Connected,FC)運(yùn)算流程如圖3所示,其中M, L分別為輸入和輸出特征圖的長度。卷積層運(yùn)算包含了4重循環(huán)運(yùn)算分別為:LoopA:輸入特征圖上方向循環(huán);LoopB:輸出特征圖上方向循環(huán)。在全連接層運(yùn)算的兩級(jí)循環(huán)運(yùn)算中,各循環(huán)方向也可以進(jìn)行并行運(yùn)算,通過循環(huán)展開的方式能完成全連接層運(yùn)算的加速。
圖3 全連接層運(yùn)算的兩級(jí)循環(huán)
本文采用了先前工作所構(gòu)建的1D-CNN模型[13],如圖4所示為1D-CNN模型的結(jié)構(gòu)。本模型由8層Conv層、4層最大池化(Max Pooling, MP)層、1層全局平均池化(Global Average Pooling, GAP)層以及2層FC層組成。尺寸為256×1的1維輸入序列為ZScore標(biāo)準(zhǔn)化預(yù)處理的原始ECG信號(hào),輸出為NOR,LBBB, RBBB, PVC, APB 5種心拍類型的預(yù)測(cè)概率。其中卷積核的尺寸設(shè)置為5×1,步長設(shè)置為1,零填充設(shè)置為2。本模型參考于網(wǎng)絡(luò)模型VGG-16,在兩次Conv層提取特征后,采用1層MP層進(jìn)行下采樣,舍棄特征圖中1/2的序列信息。1D-CNN展平通道采用了GAP層完成,簡化了CNN模型,適用于可穿戴設(shè)備,F(xiàn)C層放置最后兩層,用于對(duì)提取的特征進(jìn)行綜合以及分類。
圖4 1D-CNN模型結(jié)構(gòu)圖[13]
不同的并行展開策略以及數(shù)據(jù)流會(huì)對(duì)硬件加速器的運(yùn)算性能、運(yùn)算效率以及數(shù)據(jù)復(fù)用率造成一定影響,所設(shè)計(jì)的CNN加速器采用了一種多并行展開策略和多數(shù)據(jù)流的運(yùn)算模式來完成1D-CNN模型的硬件實(shí)現(xiàn)。該模式根據(jù)1D-CNN模型各層運(yùn)算特征所設(shè)計(jì),包含了3種不同的運(yùn)算模式,能最大化各層運(yùn)算的計(jì)算效率以及數(shù)據(jù)復(fù)用。
目前CNN加速方案中常用的數(shù)據(jù)流為WS,IS和OS數(shù)據(jù)流,其中WS數(shù)據(jù)流類型適用于規(guī)模較小的網(wǎng)絡(luò)模型,能在時(shí)間上充分復(fù)用權(quán)重?cái)?shù)據(jù),減少權(quán)重?cái)?shù)據(jù)的訪存次數(shù),因此該CNN加速方案在卷積層運(yùn)算中采用了WS數(shù)據(jù)流類型,為使權(quán)重?cái)?shù)據(jù)在最大程度完成復(fù)用,將循環(huán)執(zhí)行順序更改為Loop4,Loop2, Loop3, Loop1。而在全連接層的運(yùn)算中,由于全連接層的運(yùn)算不具備權(quán)值共享、局部連接的特性,導(dǎo)致WS數(shù)據(jù)流無法在時(shí)間上復(fù)用權(quán)重?cái)?shù)據(jù),因此在全連接層的計(jì)算中采用了IS數(shù)據(jù)流類型,為使像素?cái)?shù)據(jù)在時(shí)間上最大程度完成復(fù)用,將循環(huán)執(zhí)行順序更改為LoopA, LoopB。
在主流的CNN方案中,卷積層的并行展開策略可分為以下4種:
(1) 展開Loop1, Loop2, Loop4[10];
(2) 展開Loop1, Loop3, Loop4[14];
(3) 展開Loop3, Loop4[15];
(4) 展開Loop2, Loop4[16]。
其中策略(1)與策略(2)由于展開了卷積核方向常常由于不同層的卷積核尺寸發(fā)生變化,導(dǎo)致運(yùn)算陣列需要重新配置增加了控制復(fù)雜度,但策略(1)、策略(2)的并行度提升可在3個(gè)維度上進(jìn)行展開,因此不需要對(duì)Loop2, Loop4進(jìn)行充分展開而導(dǎo)致部分層的運(yùn)算資源浪費(fèi),適用于規(guī)模較小的網(wǎng)絡(luò)模型中使用。而對(duì)于策略(3)和策略(4),只在兩個(gè)方向進(jìn)行循環(huán)展開,提升運(yùn)算并行度需要對(duì)兩級(jí)循環(huán)進(jìn)行充分展開,導(dǎo)致運(yùn)算陣列在淺層卷積層的運(yùn)算效率較低,但該方案控制復(fù)雜度較低,無需根據(jù)不同層進(jìn)行重新配置。而需要實(shí)現(xiàn)的1D-CNN的模型結(jié)構(gòu)精簡并且規(guī)模較小,卷積核尺寸固定,因此策略(1)與策略(2)適用于1D-CNN的硬件實(shí)現(xiàn)。在卷積層的運(yùn)算中,展開Loop2能減小中間計(jì)算值的訪存次數(shù),而展開Loop3能復(fù)用權(quán)重?cái)?shù)據(jù),但由于已采用WS數(shù)據(jù)流充分復(fù)用權(quán)重?cái)?shù)據(jù),因此采用策略(1)完成卷積層能有效減少數(shù)據(jù)通信。對(duì)于Conv-1層運(yùn)算中由于其輸入通道維度為1,而策略(1)需要在Loop2展開,導(dǎo)致設(shè)計(jì)的運(yùn)算陣列部分硬件資源不參與運(yùn)算,因此采用策略(2)對(duì)Conv-1層進(jìn)行并行展開,能提升運(yùn)算并行度以及硬件資源利用率。
如圖5所示為該CNN模型各層計(jì)算所對(duì)應(yīng)的運(yùn)算模式,包含3種運(yùn)算模式,分別對(duì)應(yīng)了Conv-1層、Conv-2~Conv-8層、FC-1~FC-2層的運(yùn)算,這3種運(yùn)算模式的整體運(yùn)算并行度均設(shè)置為80。
圖5 各層計(jì)算對(duì)應(yīng)的運(yùn)算模式
(1) 運(yùn)算模式1:Conv-1層運(yùn)算中采用展開策略(2)完成并行展開以及采用了WS的數(shù)據(jù)流,其中Loop1, Loop3, Loop4的并行度分別設(shè)置為5,4,4。該運(yùn)算模式能在時(shí)間和空間上充分復(fù)用權(quán)重?cái)?shù)據(jù),并能在空間上充分復(fù)用像素?cái)?shù)據(jù)。
(2) 運(yùn)算模式2:Conv-2~Conv-8層運(yùn)算中采用展開策略(1)完成并行展開以及采用了WS的數(shù)據(jù)流,其中Loop1, Loop2, Loop4的并行度分別設(shè)置為5,4,4。該運(yùn)算模式能在時(shí)間上充分復(fù)用權(quán)重?cái)?shù)據(jù),并能在空間上充分復(fù)用像素?cái)?shù)據(jù)。
(3) 運(yùn)算模式3:FC層運(yùn)算中對(duì)LoopA和LoopB進(jìn)行展開并采用了IS數(shù)據(jù)流,其中LoopA, LoopB的并行度分別設(shè)置為20,4。該運(yùn)算模式能在時(shí)間和空間上充分復(fù)用像素?cái)?shù)據(jù)。
根據(jù)多運(yùn)算模式所設(shè)計(jì)的3D-PE陣列模塊架構(gòu)如圖6,該陣列由80個(gè)PE單元在x,y,z 3個(gè)方向堆疊而成。在運(yùn)算模式1中,方向x的PE單元用于Loop4的并行運(yùn)算,方向y為Loop1的并行運(yùn)算,方向z為Loop3的并行運(yùn)算;在運(yùn)算模式2中,方向x與方向y的PE單元仍執(zhí)行Loop4和Loop1的并行運(yùn)算,方向z更改為Loop2的并行運(yùn)算;在運(yùn)算模式3中,方向y與方向z為全連接層中LoopA的并行運(yùn)算,方向x為LoopB的并行運(yùn)算。
圖6 3D-PE陣列結(jié)構(gòu)
在3D-PE陣列中,每個(gè)PE單元由乘法器、加法器、反相器以及選擇器所構(gòu)建,每個(gè)PE單元在1個(gè)時(shí)鐘周期可以完成1次加法運(yùn)算以及1次乘法運(yùn)算。PE單元可通過輸入的像素?cái)?shù)據(jù)符號(hào)位對(duì)運(yùn)算器進(jìn)行動(dòng)態(tài)激活,在針對(duì)為負(fù)值和零值的像素?cái)?shù)據(jù)的計(jì)算時(shí),PE單元對(duì)加法器以及乘法器關(guān)閉并直接選通輸入的中間計(jì)算值作為PE單元的輸出。PE單元能完成ReLU函數(shù)的實(shí)現(xiàn)并有效地去除冗余的運(yùn)算操作,進(jìn)一步降低了整體電路的功耗開銷。
整個(gè)3D-PE陣列采用多級(jí)流水線的方式完成卷積運(yùn)算,陣列中的每個(gè)PE單元會(huì)沿著方向y進(jìn)行級(jí)聯(lián),即上一級(jí)PE單元將運(yùn)算結(jié)果輸入至下一級(jí)PE單元中完成加和操作。其中前3列PE單元進(jìn)行級(jí)聯(lián)將運(yùn)算結(jié)果輸入至加法樹模塊中,而后兩級(jí)PE單元同樣進(jìn)行級(jí)聯(lián)將運(yùn)算結(jié)果輸入至加法樹模塊中,其中FIFO中存儲(chǔ)的中間計(jì)算值以及偏置數(shù)據(jù)會(huì)傳輸至第4列的PE單元中進(jìn)行加和操作。方向x與方向z映射的PE單元不進(jìn)行互聯(lián),而是與該方向的其他PE單元并行完成卷積循環(huán)運(yùn)算。
數(shù)據(jù)路由模塊將相應(yīng)的權(quán)重、偏置以及像素?cái)?shù)據(jù)廣播至各個(gè)緩沖器中。其中在卷積層的運(yùn)算中,由于采用WS數(shù)據(jù)流模式,權(quán)重緩沖器在完成了1次Loop3循環(huán)后,對(duì)PE單元中所固定的權(quán)重?cái)?shù)據(jù)進(jìn)行更新,并將更新的權(quán)重?cái)?shù)據(jù)廣播至各個(gè)PE單元,此時(shí)權(quán)重?cái)?shù)據(jù)在時(shí)間上完成了復(fù)用;而在全連接層的運(yùn)算中,權(quán)重緩沖器每個(gè)時(shí)鐘周期都會(huì)對(duì)權(quán)重?cái)?shù)據(jù)進(jìn)行更新。像素緩沖器由5組級(jí)聯(lián)的寄存器組成,在卷積層的運(yùn)算中,每個(gè)時(shí)鐘周期寄存器中的像素?cái)?shù)據(jù)更新為上一級(jí)寄存器存儲(chǔ)的數(shù)據(jù),并同時(shí)將更新的像素?cái)?shù)據(jù)廣播至每一個(gè)PE單元中,此時(shí)由于展開了Loop1, Loop4,像素?cái)?shù)據(jù)可在空間上完成復(fù)用;而在全連接層的運(yùn)算中,采用了IS數(shù)據(jù)流類型,寄存器中的像素?cái)?shù)據(jù)廣播至PE單元后,對(duì)下一組像素?cái)?shù)據(jù)進(jìn)行預(yù)裝載,待完成一次LoopB循環(huán)后,對(duì)PE單元中所固定的像素?cái)?shù)據(jù)進(jìn)行更新,此時(shí)由于展開了LoopB并采用了IS數(shù)據(jù)流,像素?cái)?shù)據(jù)可在時(shí)間和空間上同時(shí)完成復(fù)用。
池化處理模塊用于完成最大池化層以及全局平均池化層的處理。最大池化層是通過將內(nèi)核窗口中的像素?cái)?shù)據(jù)替換為窗口中最大值來降低特征圖長度,由3D-PE陣列輸出的卷積層運(yùn)算結(jié)果傳輸至池化處理模塊的緩沖區(qū)域中,最大池化操作僅需直接從像素緩沖區(qū)域讀取數(shù)據(jù)即可,無需額外的RAM訪存操作。全局平均池化層用于展平通道維度,對(duì)各維度的輸入特征圖求平均值,在Conv-8層中最大池化操作完成后將結(jié)果輸入至累加器中,并使用移位操作完成除法操作獲得平均值。
可穿戴設(shè)備場(chǎng)景對(duì)硬件的存儲(chǔ)、運(yùn)算和能耗資源有較為苛刻的要求,所設(shè)計(jì)的CNN加速器運(yùn)算精度設(shè)置為16 bit定點(diǎn)數(shù),能有效提升整體電路的資源效率。網(wǎng)絡(luò)模型訓(xùn)練的權(quán)重參數(shù)和ECG訓(xùn)練全部量化為16 bit的定點(diǎn)數(shù),每層運(yùn)算結(jié)果采取了動(dòng)態(tài)的數(shù)據(jù)格式來提升量化精度。本文首先在軟件端對(duì)1D-CNN模型每層運(yùn)算數(shù)據(jù)的整數(shù)位寬進(jìn)行統(tǒng)計(jì)與分析,隨后根據(jù)每層數(shù)據(jù)位寬的統(tǒng)計(jì)結(jié)果,給每層數(shù)據(jù)選擇不同定點(diǎn)數(shù)據(jù)格式。池化處理完成后的數(shù)據(jù)結(jié)果輸入到輸出緩沖器中完成數(shù)據(jù)的位寬轉(zhuǎn)換,位寬轉(zhuǎn)換采用了飽和截位的操作來完成,截位操作改變運(yùn)算結(jié)果的數(shù)據(jù)格式,針對(duì)溢出的運(yùn)算結(jié)果進(jìn)行飽和處理。
CNN加速器的總體硬件架構(gòu)如圖7所示,所設(shè)計(jì)的CNN加速器由中央控制模塊、數(shù)據(jù)路由模塊、3D-PE陣列模塊、池化處理模塊、輸出緩沖器、直接存儲(chǔ)器訪問模塊、I/O模塊以及片上RAM組成。中央控制模塊可以根據(jù)運(yùn)算層數(shù)以及卷積循環(huán)次數(shù)來生成相應(yīng)的控制信號(hào)和地址信號(hào),確保各模塊工作正常;3D-PE陣列模塊和池化處理模塊用于完成卷積層與池化層的運(yùn)算;數(shù)據(jù)路由模塊可根據(jù)運(yùn)算模式以不同的數(shù)據(jù)流傳輸數(shù)據(jù);輸出緩沖器用于結(jié)果位寬轉(zhuǎn)換;DMA和I/O模塊負(fù)責(zé)與外部進(jìn)行通信;片上RAM總大小為32 kB,用于存儲(chǔ)權(quán)重、偏置以及像素?cái)?shù)據(jù)。該設(shè)計(jì)的輸入數(shù)據(jù)設(shè)置了多級(jí)緩沖,其中DMA模塊、數(shù)據(jù)路由模塊、3D-PE陣列模塊均內(nèi)置了緩沖單元分別作為數(shù)據(jù)的1,2,3級(jí)緩沖,確保整體系統(tǒng)能高速全流水線地完成前向推理,由于每層運(yùn)算結(jié)果存儲(chǔ)在片上RAM中,輸出數(shù)據(jù)僅設(shè)置一級(jí)緩沖即輸出緩沖器。
圖7 CNN加速器的總體硬件架構(gòu)
用于評(píng)估1D-CNN模型的性能評(píng)估指標(biāo)分別為總體準(zhǔn)確率(Accuracy, Acc)、敏感性(Sensitivity, Sen)、特異性(Specificity, Spec)、陽性預(yù)測(cè)率(Positive predictive rate, Ppr)。這些指標(biāo)使用真陽性(Ture Positive, TP)、真陰性(Ture Negative, TN)、假陽性(False Positive, FP)、假陰性(False Negative, FN)所計(jì)算,計(jì)算公式為
本文使用了Xilinx的ZYNQ ZC706完成了CNN加速器的FPGA原型驗(yàn)證,采用軟件平臺(tái)Intel Core i5-10400中1D-CNN模型使用的測(cè)試集對(duì)硬件加速器進(jìn)行了測(cè)試。硬件分類的混淆矩陣如圖8所示,其中N, LBBB, RBBB類型的心拍預(yù)測(cè)精度均大于99%,而PVC, APB由于數(shù)據(jù)集較少導(dǎo)致預(yù)測(cè)精度與其他3種類型的心拍相比稍低。表1為軟硬件平臺(tái)測(cè)試集的性能指標(biāo)結(jié)果,其中Acc, Sen指標(biāo)僅有0.01%和0.05%的精度損失,而Spec和Ppr指標(biāo)與軟件平臺(tái)結(jié)果一致。
表1 軟硬件平臺(tái)測(cè)試集的性能指標(biāo)(%)
圖8 FPGA硬件分類結(jié)果的混淆矩陣
表2為本文硬件實(shí)現(xiàn)的性能比較,目前基于FPGA實(shí)現(xiàn)的1D-CNN模型加速器的文獻(xiàn)與研究較少,并且相關(guān)硬件參數(shù)結(jié)果不夠詳細(xì),因此本設(shè)計(jì)與基于2D-CNN模型VGG-16的CNN加速器進(jìn)行性能比較。由于采取網(wǎng)絡(luò)模型不同導(dǎo)致了硬件的吞吐性能存在一定差異,為使性能比較更為直觀,本文使用硬件效率(Efficiency)和DSP效率(DSP Efficiency)作為CNN加速器的性能評(píng)估指標(biāo),可以客觀地評(píng)價(jià)CNN加速器的單位硬件資源所實(shí)現(xiàn)的性能。
表2 CNN加速器性能比較
文獻(xiàn)[7]充分分析了卷積循環(huán)原理,提出了一種特定的CNN加速數(shù)據(jù)流來達(dá)到最小化數(shù)據(jù)通信和提高硬件效率的目的,實(shí)現(xiàn)了較高的運(yùn)算性能;文獻(xiàn)[18]采用了一種稀疏數(shù)據(jù)流可以跳過零權(quán)重乘加運(yùn)算的周期,并對(duì)加速器架構(gòu)和循環(huán)平鋪進(jìn)行了共同設(shè)計(jì),最大限度地減少了片外存儲(chǔ)訪問,同時(shí)提升了整體性能,該加速器在所列出的文獻(xiàn)中達(dá)到了第2高的DSP效率;文獻(xiàn)[19]基于有效脈沖響應(yīng)算法提出了一種快速卷積單元(FCU),有效地提升運(yùn)算單元的硬件效率,其DSP效率為所列出的文獻(xiàn)中最高。本設(shè)計(jì)消耗的資源為2247個(gè)LUT、1472個(gè)FF、907片Slice、15塊BRAM以及80個(gè)DSP單元,并能在36.58 μs完成單次心拍預(yù)測(cè),所設(shè)計(jì)的CNN硬件加速器與列出的文獻(xiàn)相比,達(dá)到了第3高的DSP效率,并且硬件效率達(dá)到了12.82 GOPS/kLUT,是文獻(xiàn)[19]的2.39倍。
為了降低心血管疾病對(duì)人類健康的威脅,針對(duì)可穿戴設(shè)備應(yīng)用場(chǎng)景,本文設(shè)計(jì)了一種面向心電檢測(cè)的混合多模卷積神經(jīng)網(wǎng)絡(luò)加速器。該加速器采取了一種多并行展開策略和多數(shù)據(jù)流的運(yùn)算模式完成了卷積循環(huán)的加速和優(yōu)化,設(shè)計(jì)了相應(yīng)的3D-PE陣列能在時(shí)間和空間上高度復(fù)用運(yùn)算數(shù)據(jù),并在Xilinx ZYNQ FPGA平臺(tái)進(jìn)行原型驗(yàn)證。本設(shè)計(jì)的工作頻率為200MHz,能在36.58 μs完成單次心拍預(yù)測(cè),并且該CNN加速器的硬件效率達(dá)到了12.82 GOPS/kLUT,與同類文獻(xiàn)比較,該設(shè)計(jì)硬件效率以及資源開銷表現(xiàn)出色,在可穿戴設(shè)備場(chǎng)景具有一定的應(yīng)用價(jià)值。