吳宇航 何軍
人體行為識(shí)別(Human Activity Recognition,HAR)[1]是人工智能和模式識(shí)別[2]的重點(diǎn)研究方向之一,廣泛應(yīng)用于智能家居[3]、老人護(hù)理[4]和軌跡追蹤[5]等領(lǐng)域.當(dāng)前基于人體行為識(shí)別的研究方法主要分為基于計(jì)算機(jī)視覺(jué)[6]和基于可穿戴傳感器[7]兩大類(lèi).基于計(jì)算機(jī)視覺(jué)的研究方法是通過(guò)外部設(shè)備采集的圖像、視頻等信息進(jìn)行檢測(cè)識(shí)別,該方法存在功耗高、可持續(xù)性差、無(wú)法應(yīng)用于非固定場(chǎng)景等不足.基于可穿戴傳感器的研究方法是通過(guò)收集智能移動(dòng)設(shè)備上的傳感器數(shù)據(jù)實(shí)現(xiàn)行為識(shí)別[8],雖然相比于前一種解決方案,該方法使用便捷、抗干擾能力強(qiáng),可以應(yīng)對(duì)不同的使用場(chǎng)景,但推斷計(jì)算過(guò)程大多基于云端或者CPU,功耗高、延時(shí)大.而FPGA以其強(qiáng)大的并行計(jì)算能力、靈活的可配置性和超低功耗,是邊緣端理想的計(jì)算平臺(tái).
可穿戴傳感器采集的大多為序列數(shù)據(jù),當(dāng)前,主要以基于循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)[9]和卷積神經(jīng)網(wǎng)絡(luò)(CNN)的模型對(duì)序列數(shù)據(jù)進(jìn)行預(yù)測(cè)和識(shí)別.雖然基于RNN的識(shí)別模型的精度略高于基于CNN的模型精度,但是RNN模型的循環(huán)性質(zhì)和數(shù)據(jù)依賴(lài)特性,使得該模型的運(yùn)算難以在硬件上實(shí)現(xiàn)高度并行化,從而導(dǎo)致在邊緣端硬件平臺(tái)計(jì)算效率低,而CNN的優(yōu)勢(shì)在于可以實(shí)現(xiàn)更高的并行度,計(jì)算性能高,適合部署在FPGA上,因此本文選用基于CNN的模型作為系統(tǒng)的識(shí)別模型.
目前已經(jīng)有許多研究人員開(kāi)展關(guān)于使用FPGA 實(shí)現(xiàn)CNN加速的研究[10-11].文獻(xiàn)[12-13]使用了流水線和循環(huán)展開(kāi)等方法優(yōu)化卷積計(jì)算過(guò)程;文獻(xiàn)[14]提出了參數(shù)化架構(gòu)設(shè)計(jì)并在卷積運(yùn)算中四個(gè)維度方向?qū)崿F(xiàn)了并行化計(jì)算;文獻(xiàn)[15]提出了層間計(jì)算融合的模式以減少片內(nèi)外的數(shù)據(jù)傳輸帶來(lái)的時(shí)間消耗;文獻(xiàn)[16]設(shè)計(jì)出基于CPU-FPGA的軟硬件協(xié)同系統(tǒng)來(lái)加速CNN網(wǎng)絡(luò)計(jì)算.上述方法通過(guò)提高計(jì)算單元的利用率、提升卷積計(jì)算并行度和優(yōu)化系統(tǒng)與內(nèi)存之間數(shù)據(jù)傳輸?shù)韧緩?,?shí)現(xiàn)加速器計(jì)算性能的提升.本文使用直接內(nèi)存讀取(Direct Memory Access,DMA)進(jìn)行高速數(shù)據(jù)傳輸,同時(shí)使用定點(diǎn)化[17-18]、多通道并行和流水線等方法提升計(jì)算效率,最后在PYNQ框架下進(jìn)行軟硬件協(xié)同處理并輸出識(shí)別結(jié)果.實(shí)驗(yàn)結(jié)果表明,在識(shí)別準(zhǔn)確率達(dá)到91.80%的情況下,系統(tǒng)的計(jì)算性能高于CPU,功耗僅為CPU的1/10,能耗比相對(duì)于GPU提升了91%.
人體行為識(shí)別模型如圖1所示.HAR-CNN識(shí)別模型由1個(gè)輸入層、4個(gè)卷積層、2個(gè)池化層、2個(gè)全連接層和1個(gè)Softmax層組成,Softmax層用于輸出識(shí)別結(jié)果.選用RELU作為激活函數(shù)引入非線性.表1給出了各級(jí)卷積層和全連接層的權(quán)重參數(shù)個(gè)數(shù)以及各層的計(jì)算次數(shù).從表1中可知模型中絕大部分計(jì)算都集中于卷積層,因此對(duì)于卷積計(jì)算的加速很有必要.
表1 各級(jí)參數(shù)量
通常,在CPU或是GPU上訓(xùn)練的模型參數(shù)類(lèi)型均為浮點(diǎn)數(shù),而FPGA僅支持定點(diǎn)數(shù)計(jì)算,因此本文首先對(duì)權(quán)重?cái)?shù)據(jù)和特征數(shù)據(jù)進(jìn)行定點(diǎn)化處理:一方面使用低精度的定點(diǎn)數(shù)(16 bit、8 bit)來(lái)取代浮點(diǎn)數(shù),模型準(zhǔn)確率的下降可以控制在預(yù)期范圍之內(nèi);另一方面,定點(diǎn)數(shù)計(jì)算會(huì)節(jié)約大量的BRAM存儲(chǔ)資源和DSP計(jì)算資源,減少數(shù)據(jù)的傳輸時(shí)間從而提升計(jì)算效率.
卷積計(jì)算的核心是乘累加操作,假設(shè)輸入數(shù)據(jù)為一個(gè)單通道的二維矩陣,卷積核尺寸為3×3,則第2層中第i行第j列的特征值可以用式(1)計(jì)算:
fi,j=b+w00pi-1,j-1+w01pi-1,j+w02pi-1,j+1+
w10pi,j-1+w11pi,j+w12pi,j+1+w20pi+1,j-1+
w21pi+1,j+w22pi+1,j+1.
(1)
權(quán)重W和偏置項(xiàng)b是已知的,可以計(jì)算得出每一層特征圖和權(quán)重參數(shù)的最大值(hx)和最小值(hn),取h=max(|hx|,|hn|),取整數(shù)點(diǎn)位為大于以2為底,h的對(duì)數(shù)的最小整數(shù)加1,其中第1位為符號(hào)位.假設(shè)權(quán)重參數(shù)的最大值和最小值分別為7.8、-8.1,則h為8.1,大于以2為底,h的對(duì)數(shù)的最小整數(shù)為4,加上一位符號(hào)位,整數(shù)點(diǎn)位數(shù)為第5位.取n位定點(diǎn)數(shù)取代32位浮點(diǎn)數(shù)計(jì)算,n減去整數(shù)點(diǎn)數(shù)為小數(shù)點(diǎn)數(shù)位,浮點(diǎn)數(shù)剩余(32-n)的位數(shù)由四舍五入法舍去.
由于不同卷積層的權(quán)重參數(shù)處于動(dòng)態(tài)范圍,故本文采用動(dòng)態(tài)指數(shù)量化的方式對(duì)每層權(quán)重參數(shù)進(jìn)行定點(diǎn)化.每個(gè)網(wǎng)絡(luò)層的輸入特征矩陣參數(shù)、輸出特征矩陣參數(shù)和權(quán)重參數(shù)分別根據(jù)上文方法確定整數(shù)位和小數(shù)位.
卷積計(jì)算采用定點(diǎn)化后的CNN模型,對(duì)每層的輸入特征矩陣和權(quán)重參數(shù)進(jìn)行乘累加操作,計(jì)算結(jié)果根據(jù)每層的量化尺度進(jìn)行量化,然后進(jìn)行下一層的運(yùn)算,以此延續(xù)完成整個(gè)卷積計(jì)算過(guò)程.
由于使用DMA搬運(yùn)的數(shù)據(jù)位寬必須為8的整數(shù)倍,考慮到模型識(shí)別精度和定點(diǎn)資源消耗的情況,選用8 bit、16 bit和32 bit的數(shù)據(jù)位寬作為模型運(yùn)算的數(shù)據(jù)精度,并對(duì)比不同數(shù)據(jù)位寬的模型精度和計(jì)算性能.
人體行為識(shí)別軟硬件協(xié)同加速系統(tǒng)整體框架如圖2所示,整個(gè)系統(tǒng)設(shè)計(jì)由采集并制作數(shù)據(jù)集、模型訓(xùn)練及優(yōu)化、IP核設(shè)計(jì)、FPGA驗(yàn)證以及終端顯示等模塊組成.模型開(kāi)發(fā)階段,對(duì)識(shí)別模型進(jìn)行訓(xùn)練和優(yōu)化,并將量化后的權(quán)重參數(shù)和傳感器數(shù)據(jù)存入SD卡.模型驗(yàn)證階段,首先設(shè)計(jì)出卷積和池化IP核,并采取流水線和并行化處理等方法進(jìn)行加速計(jì)算,最后在PYNQ框架中的PS(Processing System)端使用高級(jí)語(yǔ)言映射CNN模型,對(duì)輸入的傳感器數(shù)據(jù)進(jìn)行識(shí)別.
圖2 軟硬件協(xié)同加速系統(tǒng)設(shè)計(jì)框圖Fig.2 System architecture of hardware & software co-acceleration
傳感器采集到的數(shù)據(jù)首先傳入PS端數(shù)據(jù)預(yù)處理模塊,經(jīng)過(guò)降噪、標(biāo)準(zhǔn)化處理后將數(shù)據(jù)傳入PL(Programmable Logic)端硬件加速模塊,PS端 CPU負(fù)責(zé)根據(jù)模型運(yùn)算的過(guò)程分別調(diào)用卷積核和池化核進(jìn)行計(jì)算.經(jīng)過(guò)模型計(jì)算后的識(shí)別結(jié)果通過(guò)HDMI-out接口輸出到終端顯示.
CNN加速器的運(yùn)行架構(gòu)如圖3所示.卷積模塊和池化模塊分別負(fù)責(zé)運(yùn)算模型中的卷積計(jì)算和池化計(jì)算.PS端的CPU控制端負(fù)責(zé)控制調(diào)用計(jì)算模塊并配置計(jì)算參數(shù).DMA模塊負(fù)責(zé)數(shù)據(jù)在內(nèi)部存儲(chǔ)器和外部雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(Double Data Rate,DDR)之間的傳輸.CPU通過(guò)控制信號(hào)調(diào)用卷積模塊和池化模塊再進(jìn)行不同的排列組合可以實(shí)現(xiàn)不同網(wǎng)絡(luò)的卷積神經(jīng)網(wǎng)絡(luò)模型.本文設(shè)計(jì)的IP核都是復(fù)用的,通過(guò)對(duì)計(jì)算參數(shù)的配置,可以支持不同尺寸、不同模式下的卷積運(yùn)算.卷積啟動(dòng)信號(hào)啟動(dòng)卷積計(jì)算之后,此時(shí)特征圖數(shù)據(jù)和權(quán)重?cái)?shù)據(jù)存入到片上存儲(chǔ)中,經(jīng)過(guò)卷積和RELU計(jì)算后,將計(jì)算結(jié)果通過(guò)DMA傳回外部存儲(chǔ)器.池化啟動(dòng)信號(hào)負(fù)責(zé)將經(jīng)過(guò)卷積和RELU計(jì)算后的特征信號(hào)進(jìn)行池化計(jì)算,計(jì)算結(jié)果最終存入外部空間.
圖3 加速計(jì)算架構(gòu)Fig.3 Accelerator’s computing architecture
加速計(jì)算架構(gòu)的運(yùn)算流程如下:
1)PYNQ框架下,CPU在外部存儲(chǔ)器DDR上開(kāi)辟空間,將量化后的權(quán)重參數(shù)從SD卡存入到FPGA中的DDR中.
2)PS端CPU啟動(dòng)加速器之后,首先通過(guò)S-AXI接口將計(jì)算參數(shù)和控制信號(hào)寫(xiě)入隨機(jī)存取存儲(chǔ)器RAM中,然后DMA將特征數(shù)據(jù)搬運(yùn)到片上BRAM中,將權(quán)重?cái)?shù)據(jù)搬運(yùn)到權(quán)重buffer.
3)卷積運(yùn)算模塊得到指令后,同時(shí)獲取權(quán)重?cái)?shù)據(jù)和特征圖數(shù)據(jù),并且進(jìn)行卷積和RELU計(jì)算,計(jì)算后的結(jié)果存入片上BRAM中,最后通過(guò)DMA存入DDR中.
4)池化運(yùn)算模塊得到指令后,將經(jīng)過(guò)卷積模塊計(jì)算后的特征圖數(shù)據(jù)根據(jù)CPU配置的池化參數(shù)進(jìn)行計(jì)算,將計(jì)算中間數(shù)據(jù)存入BRAM中,將最終結(jié)果直接通過(guò)DMA傳入到DDR中.
5)根據(jù)模型設(shè)計(jì),重復(fù)執(zhí)行上述3)和4),直到完成整個(gè)推斷過(guò)程,將最終的識(shí)別結(jié)果通過(guò)HDMI輸出到終端顯示.
卷積運(yùn)算模塊如圖4所示.受限于硬件資源,本文使用HLS設(shè)計(jì)了2個(gè)處理單元(PE),并使用Dataflow約束條件使2個(gè)PE模塊并行計(jì)算.PE模塊主要負(fù)責(zé)卷積的乘加運(yùn)算,并將計(jì)算結(jié)果儲(chǔ)存到BRAM中.
圖4 卷積運(yùn)算模塊Fig.4 Convolution operation module
PE模塊核心計(jì)算單元的設(shè)計(jì)如圖5所示,PE模塊內(nèi)部都開(kāi)辟了緩存用來(lái)存儲(chǔ)權(quán)重?cái)?shù)據(jù),模塊內(nèi)具體的計(jì)算流程如下:取N個(gè)對(duì)應(yīng)的位寬為16 bit的特征數(shù)據(jù)和權(quán)重參數(shù),將對(duì)應(yīng)的N個(gè)數(shù)據(jù)相乘,再將相乘的N個(gè)結(jié)果累加.
圖5 PE模塊核心計(jì)算單元Fig.5 PE module core computing unit
卷積計(jì)算是CNN模型中最大的計(jì)算部分,為了提升卷積計(jì)算的運(yùn)算效率,本設(shè)計(jì)采取了多channel和多filter并行的方法進(jìn)行加速計(jì)算.具體過(guò)程如圖6所示.圖6中輸入特征圖尺寸為Hin×Win,卷積核尺寸為Kx×Ky,輸入通道為CHin,卷積核個(gè)數(shù)為K,N為通道并行度.
多channel并行是將特征圖和每個(gè)權(quán)重?cái)?shù)據(jù)沿著輸入方向切成多個(gè)子塊,每個(gè)子塊的輸入通道維度均為N,分別從特征圖子塊和權(quán)重子塊中取出N個(gè)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行計(jì)算.多filter并行是將輸入權(quán)重和多個(gè)卷積核同時(shí)進(jìn)行計(jì)算.圖6為子塊進(jìn)行卷積運(yùn)算的流程,具體的計(jì)算流程如下:
1)如圖6a所示,2個(gè)PE單元同時(shí)取出特征圖和2個(gè)卷積核的N個(gè)通道方向上的第1個(gè)數(shù)據(jù),將分別取出的對(duì)應(yīng)數(shù)據(jù)相乘,然后在通道方向上累加,輸出結(jié)果.
2)如圖6b所示,PE模塊中的權(quán)重不變,滑動(dòng)特征圖,使得權(quán)重N個(gè)通道上第1個(gè)數(shù)據(jù)與部分特征圖數(shù)據(jù)相乘并在通道方向上累加.
圖6 卷積計(jì)算流程Fig.6 Convolution operation process
3)如圖6c所示,改變PE中的權(quán)重?cái)?shù)據(jù),使得計(jì)算可以覆蓋子塊的全部特征數(shù)據(jù)和權(quán)重?cái)?shù)據(jù),得到N個(gè)通道上3×3卷積核所有數(shù)據(jù)與整幅特征圖計(jì)算中,完成與3×3卷積核9個(gè)權(quán)重?cái)?shù)據(jù)相對(duì)應(yīng)的特征圖相乘并在通道方向累加的結(jié)果.
4)沿通道方向取出下一個(gè)N通道子塊重復(fù)上述計(jì)算,將最終得到的結(jié)果累加輸出特征圖.
為了驗(yàn)證卷積加速設(shè)計(jì)的有效性,選取N分別為16、32、64時(shí)進(jìn)行多通道加速設(shè)計(jì),并與未加速的設(shè)計(jì)進(jìn)行比較.本文選取數(shù)據(jù)位寬為16 bit,尺寸為32×32×64輸入特征數(shù)據(jù)和尺寸為64×3×3×64的權(quán)重?cái)?shù)據(jù)進(jìn)行卷積計(jì)算,加速對(duì)比如表2所示.表2中的實(shí)驗(yàn)都進(jìn)行了定點(diǎn)化和流水線優(yōu)化,但對(duì)比實(shí)驗(yàn)未進(jìn)行多channel并行和多filter并行設(shè)計(jì)加速.實(shí)驗(yàn)結(jié)果表明,最優(yōu)設(shè)計(jì)(本設(shè)計(jì))的計(jì)算性能是未進(jìn)行多channel并行和多filter并行加速設(shè)計(jì)的95.46倍.
為了驗(yàn)證量化設(shè)計(jì)對(duì)計(jì)算性能加速的有效性,選取數(shù)據(jù)位寬分別為8 bit、16 bit和32 bit,在PE=2,N=32的條件下進(jìn)行卷積加速設(shè)計(jì).選取和表2尺寸相同的特征數(shù)據(jù)和權(quán)重?cái)?shù)據(jù)進(jìn)行卷積計(jì)算,加速對(duì)比如表3所示.實(shí)驗(yàn)結(jié)果表明,數(shù)據(jù)位寬為8 bit、16 bit量化設(shè)計(jì)的計(jì)算性能分別是數(shù)據(jù)位寬為32 bit的1.38倍和1.21倍.
表2 不同卷積加速方案的性能對(duì)比
表3 不同數(shù)據(jù)位寬的卷積性能對(duì)比
最大值池化計(jì)算如圖7所示.將特征圖沿著長(zhǎng)度和寬度分成多個(gè)n×n的子塊,在每個(gè)子塊內(nèi)取最大值,輸出的特征圖的長(zhǎng)度和寬度分別為原特征圖長(zhǎng)度和寬度的1/n.
圖7 最大值池化計(jì)算Fig.7 Maxpooling calculation
如圖8所示,為了提升池化模塊的計(jì)算效率,本文設(shè)計(jì)了橫向池化和縱向池化兩個(gè)子函數(shù),并利用流水線并行計(jì)算得到輸出結(jié)果,同時(shí)對(duì)每個(gè)子函數(shù)進(jìn)行多通道并行加速.
圖8 池化流程Fig.8 Pooling flowchart
假設(shè)對(duì)輸入特征數(shù)據(jù)進(jìn)行n×n的最大值池化,步長(zhǎng)也為n,其具體計(jì)算流程如下:
1)如圖8a所示,輸入特征進(jìn)入橫向池化模塊,第1個(gè)數(shù)據(jù)寄存在寄存器中,與后續(xù)輸入的n-1個(gè)數(shù)據(jù)相互比較,將最大值存在寄存器中.以輸入的n個(gè)數(shù)據(jù)為一組,反復(fù)執(zhí)行上述的操作,得到橫向池化的結(jié)果,此時(shí)的中間數(shù)據(jù)高不變,寬度為原先寬度的1/n.
2)如圖8b所示,首先將中間特征輸入的前Wout個(gè)數(shù)據(jù)存入buffer中,后面輸入的n-1組Wout個(gè)數(shù)據(jù)與第1組數(shù)據(jù)在對(duì)應(yīng)的位置上相互比較得到最大值,輸出結(jié)果.以輸入的n組Wout個(gè)數(shù)據(jù)為一組,反復(fù)執(zhí)行上述的操作,得到縱向池化的結(jié)果,此時(shí)輸出特征的高度、寬度均分別為原先高度和寬度的1/n.
為了驗(yàn)證池化加速設(shè)計(jì)的有效性,選取尺寸為100×100×64輸入特征數(shù)據(jù)進(jìn)行最大值池化運(yùn)算,在N=16的條件下進(jìn)行多通道加速設(shè)計(jì),同時(shí)應(yīng)用定點(diǎn)化和流水線優(yōu)化加速.不同的是方案1使用的傳統(tǒng)的設(shè)計(jì)方案,方案2使用的是橫向池化和縱向池化并行加速的設(shè)計(jì)方案.加速對(duì)比結(jié)果如表4所示,本文設(shè)計(jì)為傳統(tǒng)的方案計(jì)算性能的1.91倍.
為了驗(yàn)證量化設(shè)計(jì)對(duì)池化計(jì)算性能加速的有效性,選取數(shù)據(jù)位寬為8 bit、16 bit和32 bit使用方案2進(jìn)行卷積加速設(shè)計(jì).選取和表4尺寸相同的特征數(shù)據(jù)和權(quán)重?cái)?shù)據(jù)進(jìn)行卷積計(jì)算,加速對(duì)比如表5所示.
表4 不同池化加速方案的性能對(duì)比
表5 不同數(shù)據(jù)位寬的池化性能對(duì)比
實(shí)驗(yàn)結(jié)果表明,數(shù)據(jù)位寬為8 bit、16 bit量化設(shè)計(jì)的計(jì)算性能分別是數(shù)據(jù)位寬為32 bit的1.22倍和1.12倍.
CPU通過(guò)不斷調(diào)用卷積和池化兩個(gè)子函數(shù)對(duì)輸入特征進(jìn)行卷積計(jì)算和池化計(jì)算,最終在FPGA上搭建行為識(shí)別的CNN網(wǎng)絡(luò)結(jié)構(gòu).利用時(shí)分復(fù)用技術(shù),節(jié)省硬件資源開(kāi)銷(xiāo),時(shí)分復(fù)用結(jié)構(gòu)如圖9所示.當(dāng)人體行為數(shù)據(jù)傳輸?shù)缴窠?jīng)網(wǎng)絡(luò)之后,卷積層L1、L2、L3、L4、L5和L6由卷積核計(jì)算,池化層分別為P1和P2,由池化核進(jìn)行最大值池化計(jì)算. 另外,全連接層也使用卷積核進(jìn)行計(jì)算.
圖9 時(shí)分復(fù)用技術(shù)Fig.9 Time division multiplexing technology
本文使用UCI_HAR數(shù)據(jù)集和自制HAR數(shù)據(jù)集進(jìn)行實(shí)驗(yàn).UCI_HAR數(shù)據(jù)集可在https:∥ucihar-data-analysis.readthedocs.io/en/latest/處進(jìn)行下載,自建HAR數(shù)據(jù)集可在https:∥github.com/nuisyaya/HAR_Dataset處下載,也可向本文通信作者(jhe@nuist.edu.cn)申請(qǐng)使用.
1)UCI_HAR數(shù)據(jù)集:為了驗(yàn)證模型對(duì)傳感器數(shù)據(jù)進(jìn)行識(shí)別的有效性,本文使用已公開(kāi)的UCI_HAR 標(biāo)準(zhǔn)數(shù)據(jù)集進(jìn)行驗(yàn)證.該數(shù)據(jù)集包括12個(gè)日?;顒?dòng),即3個(gè)靜態(tài)活動(dòng)(站立、坐、躺)、3個(gè)動(dòng)態(tài)活動(dòng)(步行、上樓、下樓)和3個(gè)靜態(tài)活動(dòng)的轉(zhuǎn)換(站坐、坐站、站躺、躺站、坐躺、躺坐).這些數(shù)據(jù)由三星智能手機(jī)記錄,該智能手機(jī)使用嵌入式加速度計(jì)和陀螺儀,以50 Hz的恒定速度收集三軸線性加速度和三軸角速度.采集者利用錄制視頻手動(dòng)標(biāo)記數(shù)據(jù),然后隨機(jī)分為兩組,選用70%作為訓(xùn)練集,30%作為測(cè)試集.應(yīng)用噪聲濾波器對(duì)傳感器數(shù)據(jù)進(jìn)行預(yù)處理之后,在2.56 s和50%重疊的固定寬度滑動(dòng)窗口中采樣(窗口寬度為128).如表6所示,利用這個(gè)數(shù)據(jù)集的6個(gè)活動(dòng),包括3個(gè)靜態(tài)活動(dòng)和3個(gè)動(dòng)態(tài)活動(dòng)進(jìn)行實(shí)驗(yàn),每條傳感器數(shù)據(jù)的尺寸為128×6.
表6 UCI_HAR 數(shù)據(jù)集
2)自制HAR數(shù)據(jù)集:選取SparkFun公司的慣性測(cè)量單元(Inertial Measurement Unit,IMU)傳感器采集人體行為數(shù)據(jù)制作數(shù)據(jù)集.傳感器實(shí)物圖如圖10所示.采集的數(shù)據(jù)包括陀螺儀測(cè)量的X、Y、Z三軸的角速度,加速度計(jì)測(cè)量的X、Y、Z三軸的加速度,共6個(gè)輸入通道,設(shè)置采樣率為50 Hz,要求10個(gè)志愿者分別采集兩組行為,共計(jì)20組,每組行為包括行走、上樓梯、下樓梯、跑步和跳躍,分別對(duì)應(yīng)標(biāo)簽0到4.然后在2.56 s和50%重疊的固定寬度滑動(dòng)窗口中采樣,每條樣本包括128個(gè)采樣點(diǎn),每條數(shù)據(jù)尺寸為128×6.表7展示5種行為樣本個(gè)數(shù)統(tǒng)計(jì)結(jié)果.自制的HAR數(shù)據(jù)集按照7比3的比例劃分為訓(xùn)練集和測(cè)試集.在測(cè)試集選取500個(gè)樣本存入SD卡中用于FPGA端驗(yàn)證.
表7 各行為樣本數(shù)據(jù)統(tǒng)計(jì)
圖10 IMU傳感器實(shí)物Fig.10 Picture of IMU sensor
由于傳感器在數(shù)據(jù)采集過(guò)程中會(huì)由于志愿者的主觀能動(dòng)性產(chǎn)生額外的動(dòng)作,使原始數(shù)據(jù)中夾雜背景噪聲,因此本文在數(shù)據(jù)預(yù)處理階段使用中值濾波對(duì)數(shù)據(jù)進(jìn)行降噪處理.
模型開(kāi)發(fā)階段,使用TensorFlow深度學(xué)習(xí)框架
進(jìn)行網(wǎng)絡(luò)訓(xùn)練,設(shè)置學(xué)習(xí)率為0.000 1,使用Adam優(yōu)化器進(jìn)行優(yōu)化,使用如圖1所示的CNN模型架構(gòu)對(duì)傳統(tǒng)的UCI_HAR數(shù)據(jù)集和自制的數(shù)據(jù)集進(jìn)行訓(xùn)練優(yōu)化.如圖11所示,本文設(shè)計(jì)的模型在傳統(tǒng)UCI數(shù)據(jù)集上準(zhǔn)確率為91.23%,驗(yàn)證了模型的可靠性.在自制的HAR數(shù)據(jù)集上準(zhǔn)確率達(dá)到93.61%.
圖11 模型性能曲線Fig.11 Model performance curve
本文使用Xilinx公司的Vivado HLS進(jìn)行開(kāi)發(fā).FPGA選用的是Avnet公司的Ultra96-V2,工作頻率為200 MHz.實(shí)驗(yàn)數(shù)據(jù)類(lèi)型為16位定點(diǎn)數(shù).CPU采用主頻為3 GHz的i7-9700處理器,GPU采用英偉達(dá)公司的GTX1080Ti顯卡.
隨機(jī)選取每種行為各100條數(shù)據(jù)存入SD卡,用于驗(yàn)證部署在FPGA端系統(tǒng)的準(zhǔn)確率.如表8所示,選取量化后數(shù)據(jù)位寬為8 bit、16 bit和32 bit的模型在FPGA端進(jìn)行模型精度的驗(yàn)證,經(jīng)過(guò)500次迭代,數(shù)據(jù)位寬為8 bit、16 bit和32 bit的模型驗(yàn)證準(zhǔn)確率分別為84.40%、91.80%和93.20%.數(shù)據(jù)量化導(dǎo)致的精度損失,模型精度均低于軟件平臺(tái)準(zhǔn)確率93.61%.考慮到資源消耗和模型精度的情況,最終選用16 bit的數(shù)據(jù)位寬作為模型運(yùn)算的數(shù)據(jù)精度,同時(shí)也將其他兩種精度的模型部署在FPGA上用于測(cè)試計(jì)算性能和功耗.
表8 不同數(shù)據(jù)位寬模型準(zhǔn)確率對(duì)比
本文選取數(shù)據(jù)位寬為16 bit,N分別為16、32、64三個(gè)通道并行參數(shù)進(jìn)行架構(gòu)設(shè)計(jì).FPGA硬件資源消耗如表9所示.
FPGA的資源占用率如圖12所示.在數(shù)據(jù)位寬為16 bit,N分別為16、32、64的條件下,BRAM的資源占用率均為80%,DSP資源占用率分別為39%、47%和60%,觸發(fā)器(Flip-Flop,F(xiàn)F)的占用率分別為40%、58%和78%,查找表(Look-Up-Table,LUT)占用率分別為53%、70%和99%.
圖12 FPGA資源占用率Fig.12 FPGA resource utilization
表10中列舉了不同計(jì)算平臺(tái)的計(jì)算性能和功耗的對(duì)比.不同設(shè)計(jì)方案之間功耗對(duì)比可由各方案的迭代一次平均耗時(shí)與功耗的乘積的倒數(shù)相除獲得.從表10中可以看出,本文設(shè)計(jì)的數(shù)據(jù)位寬為16 bit、通道并行參數(shù)N=64的人體識(shí)別系統(tǒng)識(shí)別速度高于CPU,而功耗僅為CPU的1/10,能耗比是GPU的1.91倍.除此之外,本文還設(shè)計(jì)數(shù)據(jù)位寬為8 bit和32 bit的模型并部署在FPGA上,數(shù)據(jù)位寬為8 bit、通道并行參數(shù)N=64的系統(tǒng)識(shí)別速度是CPU的1.34倍,能耗比是GPU的3.02倍.實(shí)驗(yàn)結(jié)果表明,使用FPGA作為邊緣計(jì)算平臺(tái)搭建人體行為識(shí)別系統(tǒng),達(dá)到了低功耗、低延時(shí)的設(shè)計(jì)要求.
本文設(shè)計(jì)了基于FPGA和CNN的人體行為快速識(shí)別系統(tǒng).通過(guò)數(shù)據(jù)定點(diǎn)化,并行處理數(shù)據(jù)和流水線等方法提升計(jì)算速度.使用UCI_HAR數(shù)據(jù)集和自制的HAR數(shù)據(jù)集進(jìn)行了實(shí)驗(yàn),并與CPU和GPU在計(jì)算性能和功耗方面進(jìn)行對(duì)比,實(shí)驗(yàn)結(jié)果表明,本設(shè)計(jì)在識(shí)別準(zhǔn)確率達(dá)到91.80%的情況下,計(jì)算速度優(yōu)于CPU,能耗比相比于GPU提升91%,達(dá)到了低功耗、低延時(shí)的設(shè)計(jì)要求,驗(yàn)證了FPGA作為邊緣計(jì)算平臺(tái)進(jìn)行人體行為系統(tǒng)識(shí)別的可行性和優(yōu)越性.在未來(lái)工作中,我們將進(jìn)一步優(yōu)化該系統(tǒng),例如增加人體行為種類(lèi)、識(shí)別不同行為之間的切換和改進(jìn)神經(jīng)網(wǎng)絡(luò)模型等.