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