文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.182476
中文引用格式: 陳旭東,,周昱琪,,李夢杰,等. 基于SoC FPGA和CNN模型的動作識別系統(tǒng)設計[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]、基于關節(jié)信息和流形學習的方法[4],、基于HMM的復雜動作建模[5]等,;其二是采用深度網絡的方法,比如基于空時卷積神經網絡[6],、Two-stream卷積網絡[7-8],、基于關節(jié)信息和LSTM的空時注意力模型[9]等。雖然使用深度學習可以減少人工設計特征的工作量,,且在圖像識別等領域有極佳的表現(xiàn)[10],,但是卻有運算量大的問題。對此,,可以通過模型改進[11-12],、壓縮[13]、量化[14]等方式減少運算量,,也可以使用GPU[15],、ASIC[16]和FPGA[17-18]等硬件系統(tǒng)進行加速運算,。
本文采用CNN模型對視頻流中的目標任務進行動作識別。為了減少運算量,,首先利用基于光流信息和靜態(tài)圖像處理的行人檢測方案定位場景中的目標,,而后使用CNN網絡對目標區(qū)域的圖像和光流進行處理,最終給出動作識別結果,。該系統(tǒng)在DE10-Nano開發(fā)板上進行開發(fā)與驗證,,在FPGA端實現(xiàn)流水線型LK光流計算、基于HOG和SVM的行人檢測,、指令集架構的NPU處理單元,,在HPS端實現(xiàn)目標區(qū)域融合求解、NPU單元調用,,兩者共享DDR內存,,采用AXI總線實現(xiàn)片內通信。
1 動作識別原理
1.1 LK光流法
I(x,,y,,t)表示時刻t拍攝下的視頻圖像中坐標(x,y)點的灰度值,,根據LK光流約束[19],,光流場的計算滿足下列式子:
求解上述優(yōu)化問題,可以得到其最優(yōu)解的形式如下:
1.2 基于HOG和SVM的行人檢測
通常使用滑動窗口對原始圖像進行HOG特征提取,,再對HOG特征向量進行分類識別,達到行人檢測的目的,。圖像中(x,,y)坐標點的像素值為I(x,y),。該點的像素梯度的大小和方向可以計算為M(x,,y)和Θ(x,y),。將梯度的方向Θ(x,,y)劃分到N個區(qū)間,每個區(qū)間占據π/N角度值,,如圖1所示,。
其中:
將檢測窗口(window)劃分成數個元胞(cell)。在本設計中,,窗口尺寸設定為140×80,,可被劃分成14×8個10×10的元胞。首先,,對這14×8個10×10的元胞,,依次統(tǒng)計每個元胞里面的梯度直方圖,;將其通過規(guī)則化模塊,得到最終的cell特征,;通過組合2×2的元胞特征,,可以得到塊特征;最后,,將窗口中的塊特征依次排列,,得到最終的91×36=3 276維度的窗口特征,如圖2所示,。
在提取HOG特征后,,可以利用SVM進行分類識別。本文選擇使用線性SVM進行分類判別,。其判別的依據如式(3)所示,。
其中,w和b分別是SVM的權值和偏置,,x則是輸入的HOG特征,。最后輸出y=+1說明是正樣本(即行人);輸出y=-1則說明是負樣本(即非行人),。
1.3 動態(tài)窗口與靜態(tài)窗口的融合
使用光流信息和靜態(tài)圖像信息都可以對視頻流中的行人進行檢測[20-21],。通過實驗發(fā)現(xiàn),使用基于HOG和SVM的靜態(tài)圖像檢測方法不易受到物體運動影響,,但是誤檢率較高,;而基于光流信息的動態(tài)檢測方法誤檢率較低,但是一旦物體長時間靜止或者緩慢運動就難以定位目標,。因此,,本文提出將兩種檢測方法相融合的方案,如圖3所示,。
融合光流和行人檢測結果的窗口融合算法流程如下:
通過上述窗口融合算法,,可以得到目標人物在視頻幀中的位置。針對這個區(qū)域的視頻圖像和光流數據進行采集,,對于不同的動作有不同的數據形態(tài),。如圖4所示,每個動作對應的四張圖分別是原始視頻圖像,、光流x軸分量,、光流y軸分量和顯著運動檢測掩膜。
1.4 基于CNN的動作識別
計算每一幀視頻的光流,,提取行人存在區(qū)域的視頻圖像,、光流場x軸分量、y軸分量以及顯著運動檢測掩膜,。將這四類圖像信息統(tǒng)一形變到94×94大小,,并作為CNN的輸入通道,,交由CNN進行卷積層和池化層運算;最后的結果經過全連接層計算得到姿勢識別結果,。其中,,卷積核的尺寸統(tǒng)一設置為3×3大小,池化核的尺寸統(tǒng)一為2×2,;而為了提高CNN的泛化性能,,在全連接層使用了dropout,并對CNN中的卷積核,、全連接權值都添加L2正則化,。使用CNN模型識別目標人物的動作如圖5所示。
2 動作識別系統(tǒng)的設計與實現(xiàn)
2.1 軟硬件協(xié)同開發(fā)示意圖
本文提出的動作識別系統(tǒng)發(fā)揮了SoC FPGA的軟硬件協(xié)同處理能力,。
將運算量巨大的光流計算,、靜態(tài)行人檢測和CNN運算放置在FPGA端,充分發(fā)揮其并行計算,、流水線型處理的運算能力,;而將運算需求較低的窗口融合算法在HPS端實現(xiàn),使其發(fā)揮C語言程序設計的便捷性,。HPS和FPGA之間通過AXI橋實現(xiàn)通信,。而為了訓練CNN模型,在HPS端增加數據采樣模塊,,將樣本保存到ima文件,,通過網絡傳輸到PC。針對站立,、揮手,、下蹲和行走四種姿勢分別采樣,其中存在一定數量的“離群值”,,為了更好地訓練CNN,在MATLAB上實現(xiàn)了可視化樣本篩選程序,。所有樣本和標簽代入TensorFlow框架,,進行CNN模型訓練;將訓練得到的CNN模型參數和CNN模型結構傳輸到HPS端,,HPS會將CNN參數加載到DDR內存,,并將CNN模型對應的NPU指令發(fā)送到FPGA端的指令集架構NPU單元的指令Cache中。一旦HPS將目標窗口融合完成,,可以發(fā)送一次CNN運算啟動的指令,,等待FPGA端NPU運算完成,讀取DDR中的判別結果,。動作識別系統(tǒng)框架圖如圖6所示,。
2.2 硬件系統(tǒng)框架
整個動作識別系統(tǒng)的硬件部分框架的細節(jié)圖如圖7所示,。DDR存儲空間為1 GB,被劃分為7個部分,。其中,,Linux操作系統(tǒng)占用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的讀寫優(yōu)先級較高,,且占用DDR帶寬較大,,使用FPGA-to-SDRAM(F2S)接口直接和HPS上的SDRAM控制器交互。
HPS端的C程序需讀取行人檢測結果,,并使用NMS算法對行人檢測的框進行聚合,、優(yōu)化。調用memcpy()將原始視頻復制到加框視頻的內存空間,,并加上打框的結果,;同時使用通過HPS-to-FPGA(H2F)接口傳輸指令,啟動FPGA端NPU的運算,,并讀取NPU運算狀態(tài),。
NPU運算時會對DDR進行讀寫訪問,該訪問通過FPGA-to-HPS(F2H)接口和L3互聯(lián)網絡實現(xiàn),。NPU單元可以計量指令執(zhí)行時間,,將運算狀態(tài)與執(zhí)行時間寫入到狀態(tài)寄存器中,隨后HPS可以通過Light Weight HPS-to-FPGA(H2F-LW)接口獲取NPU運行狀態(tài)信息,。
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光流法計算區(qū)域,即Ω域,。使用互乘矩陣模塊,,分別計算寄存器陣列中previous對應數據Ix,prev,,Iy,,prev和It,prev的乘法交叉項,;同理,,計算出current對應數據Ix,curr,,Iy,curr和It,,curr的乘法交叉項,。Ω域內乘法交叉項可以更新為:
結合光流場計算式(2),可以通過流水線型除法器實現(xiàn)光流場的計算,。最后將運算結果回寫到DDR中的480 MB~512 MB空間,。
2.4 指令集架構NPU設計
為了便于實現(xiàn),、修改CNN架構,本文設計了基于指令集架構的NPU處理單元,,能夠執(zhí)行矩陣運算(如ADD,、SUB、MULT,、DOT等),、立即數運算(ADDi、MULTi等),、2-D圖像處理(如卷積CONV,、池化POOL等)、激活函數(如SIGM,、TANH,、ReLU等)。指令集架構NPU結構框圖如圖9所示,。通過不同NPU指令組合,,能夠實現(xiàn)不同CNN結構。NPU指令設計參考RISC格式,,如表1所示,,每條指令是128 bit長度,其中高4 bit區(qū)分指令類型,,[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指令實現(xiàn)非線性映射,,結果保存到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接口協(xié)議,。由*_addr給出讀寫地址,*_req給出讀寫請求,,對于DDR寫入使用ddr_write_data表示寫入數據,。讀寫過程中信號都要保持穩(wěn)定,直到DDR控制器給出*_ready讀寫請求完成信號,。對于DDR讀取,,ddr_read_data表示讀取的數據,而ddr_read_data_valid則表示DDR讀取數據有效,。
2.5 軟件設計架構
HPS中的軟件程序框架圖如圖10所示,。其中分別實現(xiàn)了下述功能模塊。
(1)初始化接口,,使用mmap()函數將HPS-to-FPGA接口和DDR物理內存映射到Linux用戶空間,,方便其他模塊訪問、讀寫FPGA和DDR內的數據,;
(2)按鍵響應模塊,,一旦用戶按下鍵盤上的按鍵,程序能夠及時響應,;
(3)目標窗口生成模塊,,加載光流數據和靜態(tài)圖像行人檢測結果,生成動態(tài)窗口和靜態(tài)窗口,,并通過窗口融合算法對其進行融合,,確定目標所在的位置;
(4)數據采集模塊,,從DDR中采集視頻,、光流等數據,并保存到相應的文件中,,用于CNN的離線學習使用,;
(5)NPU指令傳輸和狀態(tài)監(jiān)控模塊,能夠通過HPS-to-FPGA接口傳輸NPU指令到FPGA端的指令cache中,;并且能夠啟動NPU的運算,、監(jiān)控NPU的指令執(zhí)行情況;
(6)繪圖模塊,,能夠將窗口融合結果保存到DDR中的內存區(qū)間,,便于HDMI輸出顯示。
3 動作識別系統(tǒng)測試
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開發(fā)板作為軟硬件運行平臺,在Quartus II 14.0環(huán)境下對動作識別系統(tǒng)進行綜合,、布局布線,,工程消耗FPGA資源如表4所示。
布局布線后各模塊分布情況如圖11所示,。
3.3 實際運行測試
對本文提出的動作識別系統(tǒng)進行運行測試,。將開發(fā)板和攝像頭MT9D111、HDMI顯示器進行連接,,如圖12所示,。
針對“站立”、“行走”,、“下蹲”和“揮手”等不同的人物動作進行識別,,結果輸出到顯示器。其中,,左上角為原始視頻,;左下角為光流計算結果;右上角為行人加框結果;右下角為動作識別結果,。系統(tǒng)運行測試情況如圖13所示,。
4 結論
本文提出并實現(xiàn)了一種基于SoC FPGA和CNN模型的動作識別系統(tǒng)。該系統(tǒng)具有流水線型運算結構,,能快速地執(zhí)行光流計算和靜態(tài)的行人檢測,;同時,指令集架構NPU的設計可以很方便地適應于多種CNN模型結構,;該姿勢識別系統(tǒng)在訓練和實際識別測試中都表現(xiàn)出較高的準確率,。
參考文獻
[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] 戰(zhàn)青卓,王大東.基于深度神經網絡的人體動作識別研究[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].哈爾濱:哈爾濱工業(yè)大學,,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].北京:北京工業(yè)大學,,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,,F(xiàn)LEET 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.上海大學 微電子研究與開發(fā)中心,,上海200444,;
2.上海大學 納米科學與技術研究中心,上海200444,;3.上海大學 計算中心,,上海200444)