文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.182476
中文引用格式: 陳旭東,周昱琪,李夢杰,等. 基于SoC FPGA和CNN模型的動作識別系統設計[J].電子技術應用,2019,45(2):97-104,108.
英文引用格式: Chen Xudong,Zhou Yuqi,Li Mengjie,et al. Design of an action recognition system based on SoC FPGA and CNN model[J]. Application of Electronic Technique,2019,45(2):97-104,108.
0 引言
基于視覺的動作識別方法可以分為兩大類[1],其一是采用人工設計的特征進行識別的方法,比如基于密集軌跡[2]、基于空時濾波器與圖模型[3]、基于關節信息和流形學習的方法[4]、基于HMM的復雜動作建模[5]等;其二是采用深度網絡的方法,比如基于空時卷積神經網絡[6]、Two-stream卷積網絡[7-8]、基于關節信息和LSTM的空時注意力模型[9]等。雖然使用深度學習可以減少人工設計特征的工作量,且在圖像識別等領域有極佳的表現[10],但是卻有運算量大的問題。對此,可以通過模型改進[11-12]、壓縮[13]、量化[14]等方式減少運算量,也可以使用GPU[15]、ASIC[16]和FPGA[17-18]等硬件系統進行加速運算。
本文采用CNN模型對視頻流中的目標任務進行動作識別。為了減少運算量,首先利用基于光流信息和靜態圖像處理的行人檢測方案定位場景中的目標,而后使用CNN網絡對目標區域的圖像和光流進行處理,最終給出動作識別結果。該系統在DE10-Nano開發板上進行開發與驗證,在FPGA端實現流水線型LK光流計算、基于HOG和SVM的行人檢測、指令集架構的NPU處理單元,在HPS端實現目標區域融合求解、NPU單元調用,兩者共享DDR內存,采用AXI總線實現片內通信。
1 動作識別原理
1.1 LK光流法
I(x,y,t)表示時刻t拍攝下的視頻圖像中坐標(x,y)點的灰度值,根據LK光流約束[19],光流場的計算滿足下列式子:
求解上述優化問題,可以得到其最優解的形式如下:
1.2 基于HOG和SVM的行人檢測
通常使用滑動窗口對原始圖像進行HOG特征提取,再對HOG特征向量進行分類識別,達到行人檢測的目的。圖像中(x,y)坐標點的像素值為I(x,y)。該點的像素梯度的大小和方向可以計算為M(x,y)和Θ(x,y)。將梯度的方向Θ(x,y)劃分到N個區間,每個區間占據π/N角度值,如圖1所示。
其中:
將檢測窗口(window)劃分成數個元胞(cell)。在本設計中,窗口尺寸設定為140×80,可被劃分成14×8個10×10的元胞。首先,對這14×8個10×10的元胞,依次統計每個元胞里面的梯度直方圖;將其通過規則化模塊,得到最終的cell特征;通過組合2×2的元胞特征,可以得到塊特征;最后,將窗口中的塊特征依次排列,得到最終的91×36=3 276維度的窗口特征,如圖2所示。
在提取HOG特征后,可以利用SVM進行分類識別。本文選擇使用線性SVM進行分類判別。其判別的依據如式(3)所示。
其中,w和b分別是SVM的權值和偏置,x則是輸入的HOG特征。最后輸出y=+1說明是正樣本(即行人);輸出y=-1則說明是負樣本(即非行人)。
1.3 動態窗口與靜態窗口的融合
使用光流信息和靜態圖像信息都可以對視頻流中的行人進行檢測[20-21]。通過實驗發現,使用基于HOG和SVM的靜態圖像檢測方法不易受到物體運動影響,但是誤檢率較高;而基于光流信息的動態檢測方法誤檢率較低,但是一旦物體長時間靜止或者緩慢運動就難以定位目標。因此,本文提出將兩種檢測方法相融合的方案,如圖3所示。
融合光流和行人檢測結果的窗口融合算法流程如下:
通過上述窗口融合算法,可以得到目標人物在視頻幀中的位置。針對這個區域的視頻圖像和光流數據進行采集,對于不同的動作有不同的數據形態。如圖4所示,每個動作對應的四張圖分別是原始視頻圖像、光流x軸分量、光流y軸分量和顯著運動檢測掩膜。
1.4 基于CNN的動作識別
計算每一幀視頻的光流,提取行人存在區域的視頻圖像、光流場x軸分量、y軸分量以及顯著運動檢測掩膜。將這四類圖像信息統一形變到94×94大小,并作為CNN的輸入通道,交由CNN進行卷積層和池化層運算;最后的結果經過全連接層計算得到姿勢識別結果。其中,卷積核的尺寸統一設置為3×3大小,池化核的尺寸統一為2×2;而為了提高CNN的泛化性能,在全連接層使用了dropout,并對CNN中的卷積核、全連接權值都添加L2正則化。使用CNN模型識別目標人物的動作如圖5所示。
2 動作識別系統的設計與實現
2.1 軟硬件協同開發示意圖
本文提出的動作識別系統發揮了SoC FPGA的軟硬件協同處理能力。
將運算量巨大的光流計算、靜態行人檢測和CNN運算放置在FPGA端,充分發揮其并行計算、流水線型處理的運算能力;而將運算需求較低的窗口融合算法在HPS端實現,使其發揮C語言程序設計的便捷性。HPS和FPGA之間通過AXI橋實現通信。而為了訓練CNN模型,在HPS端增加數據采樣模塊,將樣本保存到ima文件,通過網絡傳輸到PC。針對站立、揮手、下蹲和行走四種姿勢分別采樣,其中存在一定數量的“離群值”,為了更好地訓練CNN,在MATLAB上實現了可視化樣本篩選程序。所有樣本和標簽代入TensorFlow框架,進行CNN模型訓練;將訓練得到的CNN模型參數和CNN模型結構傳輸到HPS端,HPS會將CNN參數加載到DDR內存,并將CNN模型對應的NPU指令發送到FPGA端的指令集架構NPU單元的指令Cache中。一旦HPS將目標窗口融合完成,可以發送一次CNN運算啟動的指令,等待FPGA端NPU運算完成,讀取DDR中的判別結果。動作識別系統框架圖如圖6所示。
2.2 硬件系統框架
整個動作識別系統的硬件部分框架的細節圖如圖7所示。DDR存儲空間為1 GB,被劃分為7個部分。其中,Linux操作系統占用0~480 MB空間;光流計算結果占用480 MB~512 MB這32 MB空間;原始視頻流數據占用512 MB~544 MB空間;行人檢測的結果占用576 MB~608 MB空間;行人加框視頻占用608 MB~640 MB空間;而將640 MB~1 024 MB空間用于NPU運算過程中的數據緩存。
攝像頭MT9D111的數據進入FPGA后,會同時傳輸到LK光流計算模塊、行人檢測模塊,計算結果會緩存到DDR中;而通過視頻緩存與顯示模塊,原始視頻可以存儲到DDR中,同時HDMI視頻輸出所需的數據從DDR中獲取。這些模塊對DDR的讀寫優先級較高,且占用DDR帶寬較大,使用FPGA-to-SDRAM(F2S)接口直接和HPS上的SDRAM控制器交互。
HPS端的C程序需讀取行人檢測結果,并使用NMS算法對行人檢測的框進行聚合、優化。調用memcpy()將原始視頻復制到加框視頻的內存空間,并加上打框的結果;同時使用通過HPS-to-FPGA(H2F)接口傳輸指令,啟動FPGA端NPU的運算,并讀取NPU運算狀態。
NPU運算時會對DDR進行讀寫訪問,該訪問通過FPGA-to-HPS(F2H)接口和L3互聯網絡實現。NPU單元可以計量指令執行時間,將運算狀態與執行時間寫入到狀態寄存器中,隨后HPS可以通過Light Weight HPS-to-FPGA(H2F-LW)接口獲取NPU運行狀態信息。
2.3 流水線LK光流計算模塊設計
本文設計的流水線LK光流計算框架如圖8所示。
每當MT9D111完成一幀圖像傳輸(VSYNC下降),或者一行傳輸完成(HSYNC下降),都會啟動從DDR中讀取一行的視頻數據緩存到FIFO內,生成I(x,y,t-1);而后,MT9D111輸出的像素點分別進入長度為一行像素點數量和長度為1的移位寄存器,得到I(x,y-1,t)和I(x-1,y,t);將I(x,y,t),I(x-1,y,t),I(x,y-1,t)和I(x,y,t-1)輸入到梯度計算模塊,得到在x,y和t方向上的一階差分為Ix,Iy和It;使用4個長度一致為一幀圖像一行像素點數量的移位寄存器,以及5×6個寄存器陣列構造LK光流法計算區域,即Ω域。使用互乘矩陣模塊,分別計算寄存器陣列中previous對應數據Ix,prev,Iy,prev和It,prev的乘法交叉項;同理,計算出current對應數據Ix,curr,Iy,curr和It,curr的乘法交叉項。Ω域內乘法交叉項可以更新為:
結合光流場計算式(2),可以通過流水線型除法器實現光流場的計算。最后將運算結果回寫到DDR中的480 MB~512 MB空間。
2.4 指令集架構NPU設計
為了便于實現、修改CNN架構,本文設計了基于指令集架構的NPU處理單元,能夠執行矩陣運算(如ADD、SUB、MULT、DOT等)、立即數運算(ADDi、MULTi等)、2-D圖像處理(如卷積CONV、池化POOL等)、激活函數(如SIGM、TANH、ReLU等)。指令集架構NPU結構框圖如圖9所示。通過不同NPU指令組合,能夠實現不同CNN結構。NPU指令設計參考RISC格式,如表1所示,每條指令是128 bit長度,其中高4 bit區分指令類型,[123:92]表示參數$1內存首地址,[91:60]表示參數$2的內存首地址或者立即數IMM,[59:28]表示運算結果$3的內存首地址,[27:0]用于表示運算參數,如函數輸入矩陣尺寸、卷積核尺寸等。
比如全連接層的NPU指令可以表述如下。將存儲在首地址0x0F000000的輸入矩陣$1(尺寸為1×112)與存儲在0x0A6B0000的權值矩陣$2(尺寸為112×32)相乘,結果緩存在0x0C000000;而后加上存儲在0x0A6C0000的偏置(尺寸為1×32),緩存到0x0C010000;最后通過SIGM指令實現非線性映射,結果保存到0x0E000000。
Layer 6: fully_connection
MULT, @0F000000, @0A6B0000, @0C000000,M=1,N=112, P=32
inst=40F0000000A6B00000C0000000170200
ADD, @0C000000, @0A6C0000, @0C010000, M=1, N=32
inst=00C0000000A6C00000C0100000120000
SIGM, @0C010000, xx, @0E000000, M=1, N=32
inst=90C010000000000000E0000000120000
整個NPU劃分成FSM控制邏輯、NPU指令解析邏輯、NPU指令運算邏輯和DDR讀寫接口邏輯四個部分。
如果NPU就緒,那么會給出cnn_inst_ready信號,表示可以接收運算指令;cnn_inst信號則是外部控制邏輯給出的運算指令;cnn_inst_en信號則表示cnn_inst指令有效使能。
DDR讀寫接口由ddr_write_*和ddr_read_*兩組信號構成,且都符合Avalon-MM接口協議。由*_addr給出讀寫地址,*_req給出讀寫請求,對于DDR寫入使用ddr_write_data表示寫入數據。讀寫過程中信號都要保持穩定,直到DDR控制器給出*_ready讀寫請求完成信號。對于DDR讀取,ddr_read_data表示讀取的數據,而ddr_read_data_valid則表示DDR讀取數據有效。
2.5 軟件設計架構
HPS中的軟件程序框架圖如圖10所示。其中分別實現了下述功能模塊。
(1)初始化接口,使用mmap()函數將HPS-to-FPGA接口和DDR物理內存映射到Linux用戶空間,方便其他模塊訪問、讀寫FPGA和DDR內的數據;
(2)按鍵響應模塊,一旦用戶按下鍵盤上的按鍵,程序能夠及時響應;
(3)目標窗口生成模塊,加載光流數據和靜態圖像行人檢測結果,生成動態窗口和靜態窗口,并通過窗口融合算法對其進行融合,確定目標所在的位置;
(4)數據采集模塊,從DDR中采集視頻、光流等數據,并保存到相應的文件中,用于CNN的離線學習使用;
(5)NPU指令傳輸和狀態監控模塊,能夠通過HPS-to-FPGA接口傳輸NPU指令到FPGA端的指令cache中;并且能夠啟動NPU的運算、監控NPU的指令執行情況;
(6)繪圖模塊,能夠將窗口融合結果保存到DDR中的內存區間,便于HDMI輸出顯示。
3 動作識別系統測試
3.1 CNN參數訓練
為了訓練本文的CNN模型,對于“無人”、“揮手”、“下蹲”、“站立”和“行走”這5種情況分別采集600個訓練樣本,共計3 000個樣本。采用深度學習框架TensorFlow對CNN模型參數進行訓練[22]。整個訓練過程在Nvidia GeForce 940M顯卡進行,大約消耗3小時,識別精度可以在訓練集達到90%,在測試集達到88%。對于不同的動作,訓練結果如表2所示。本文采用的動作識別方法能夠較好識別“揮手”、“站立”和“行走”這三種姿勢;而對于“無人”、“下蹲”這兩個情況檢出率較低,但是誤報率也相對較低。
3.2 硬件資源消耗與運行性能
由于本文設計的LK光流模塊、基于HOG和SVM的行人檢測模塊、指令集架構NPU單元都是采用流水線處理,數據吞吐量極大。各模塊的資源消耗與理論最大性能如表3所示。
選擇DE10-Nano開發板作為軟硬件運行平臺,在Quartus II 14.0環境下對動作識別系統進行綜合、布局布線,工程消耗FPGA資源如表4所示。
布局布線后各模塊分布情況如圖11所示。
3.3 實際運行測試
對本文提出的動作識別系統進行運行測試。將開發板和攝像頭MT9D111、HDMI顯示器進行連接,如圖12所示。
針對“站立”、“行走”、“下蹲”和“揮手”等不同的人物動作進行識別,結果輸出到顯示器。其中,左上角為原始視頻;左下角為光流計算結果;右上角為行人加框結果;右下角為動作識別結果。系統運行測試情況如圖13所示。
4 結論
本文提出并實現了一種基于SoC FPGA和CNN模型的動作識別系統。該系統具有流水線型運算結構,能快速地執行光流計算和靜態的行人檢測;同時,指令集架構NPU的設計可以很方便地適應于多種CNN模型結構;該姿勢識別系統在訓練和實際識別測試中都表現出較高的準確率。
參考文獻
[1] 范嘉義.基于骨架信息的人體動作識別[D].合肥:中國科學技術大學,2017.
[2] WANG H,KLASER A,SCHMID C,et al.Action recognition by dense trajectories[C].IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society,2011:3169-3176.
[3] TURAGA P,CHELLAPPA R,SUBRAHMANIAN V S,et al.Machine recognition of human activities:a survey[J].IEEE Transactions on Circuits & Systems for Video Technology,2008,18(11):1473-1488.
[4] 王鑫,沃波海,管秋,等.基于流形學習的人體動作識別[J].中國圖象圖形學報,2014,19(6):914-923.
[5] 戰青卓,王大東.基于深度神經網絡的人體動作識別研究[J].智能計算機與應用,2018,8(2):151-154.
[6] VAROL G,LAPTEV I,SCHMID C.Long-term temporal convolutions for action recognition[J].IEEE Trans on Pattern Anal & Mach Intell,2015,PP(99):1-1.
[7] SILVA V D O,VIDAL F D B,ROMARIZ A R S.Human action recognition based on a two-stream convolutional network classifier[C].IEEE International Conference on Machine Learning and Applications.IEEE,2017:774-778.
[8] 王亮亮. 基于視覺的人體動作識別研究[D].哈爾濱:哈爾濱工業大學,2017.
[9] SONG S,LAN C,XING J,et al.An end-to-end spatiotemporal attention model for human action recognition from skeleton data[J].arXiv:1611.06067,2016.
[10] 周凱龍.基于深度學習的圖像識別應用研究[D].北京:北京工業大學,2016.
[11] GIRSHICK R.Fast R-CNN[J].Computer Science,2015.
[12] REN S,HE K,GIRSHICK R,et al.Faster R-CNN:towards real-time object detection with region proposal networks[C].International Conference on Neural Information Processing Systems.MIT Press,2015:91-99.
[13] HAN S,KANG J,MAO H,et al.ESE:efficient speech recognition engine with sparse LSTM on FPGA[J].arXiv:1612.00694,2017.
[14] COURBARIAUX M,HUBARA I,SOUDRY D,et al.Binarized neural networks: training deep neural networks with weights and activations constrained to +1 or -1[J].arXiv:1602.02830,2016.
[15] ABADI M,AGARWAL A,BARHAM P,et al.TensorFlow:large-scale machine learning on heterogeneous distributed systems[J].arXiv:1603.04467,2016.
[16] LIU S,DU Z,TAO J,et al.Cambricon:an instruction set architecture for neural networks[C].International Symposium on Computer Architecture.IEEE Press,2016:393-405.
[17] 王思陽.基于FPGA的卷積神經網絡加速器設計[D].成都:電子科技大學,2017.
[18] GUO K,SUI L,QIU J,et al.Angel-Eye:a complete design flow for mapping CNN onto embedded FPGA[J].IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems,2017,PP(99):1-1.
[19] BARRON J L,FLEET D J,BEAUCHEMIN S S,et al.Performance of optical flow techniques[J].International Journal of Computer Vision,1994,12(1):43-77.
[20] 謝紅,原博,解武.LK光流法和三幀差分法的運動目標檢測算法[J].應用科技,2016,43(3):23-27,33.
[21] LI J,YIN Y,LIU X,et al.12,000-fps Multi-object detection using HOG descriptor and SVM classifier[C].IEEE/RSJ International Conference on Intelligent Robots and Systems.IEEE,2017:5928-5933.
[22] ZHANG M,XU H,WANG X,et al.Application of Google TensorFlow machine learning framework[J].Microcomputer & Its Applications,2017.
作者信息:
陳旭東1,周昱琪2,李夢杰1,陳章進1,3
(1.上海大學 微電子研究與開發中心,上海200444;
2.上海大學 納米科學與技術研究中心,上海200444;3.上海大學 計算中心,上海200444)