《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于SoC FPGA和CNN模型的動作識別系統(tǒng)設計
基于SoC FPGA和CNN模型的動作識別系統(tǒng)設計
2019年電子技術應用第2期
陳旭東1,周昱琪2,李夢杰1,陳章進1,3
1.上海大學 微電子研究與開發(fā)中心,,上海200444; 2.上海大學 納米科學與技術研究中心,,上海200444,;3.上海大學 計算中心,上海200444
摘要: 動作識別是重要的機器視覺研究領域之一,。設計實現(xiàn)基于SoC FPGA和CNN模型的動作識別系統(tǒng),。設計實現(xiàn)流水線型LK光流計算、基于HOG與SVM的行人檢測模塊,;設計實現(xiàn)動態(tài)行人檢測與靜態(tài)行人檢測結果的融合算法,,計算出目標人物所在區(qū)域;利用該區(qū)域的視頻圖像和光流場數據,,輸入CNN模型計算得到目標人物的動作識別結果; 設計指令集架構的NPU單元用于實現(xiàn)CNN模型計算,。整個系統(tǒng)基于DE10-Nano開發(fā)板進行軟硬件協(xié)同開發(fā),能夠識別“站立”,、“行走”,、“揮手”和“下蹲”等動作。該系統(tǒng)具有較高的識別率和較強的設計靈活性,,方便CNN模型的擴展與修改,。
中圖分類號: TN791;TP301
文獻標識碼: 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.
Design of an action recognition system based on SoC FPGA and CNN model
Chen Xudong1,Zhou Yuqi2,,Li Mengjie1,,Chen Zhangjin1,3
1.Microelectronic Research and Development Center,,Shanghai University,,Shanghai 200444,China,; 2.Research Center of Nano-Science and Nano-Technology,,Shanghai 200444,,China,; 3.Computer Center,Shanghai University,,Shanghai 200444,,China
Abstract: Action recognition is an important area in computer vision. An action recognition system based on SoC FPGA and CNN model is presented. A pipelined LK optical flow module and a pedestrian detection module based on HOG and SVM are realized. The results of detection of dynamic pedestrian and static pedestrian are merged to recognize the area where the person is. The image and optical flow in the area are both input into the CNN model, to recognize what action it is. An ISA-NPU is proposed to realize the computation of the CNN model. The system is realized in Altera DE10-Nano Kit. With the co-operation of hardware and software, the system can recognize actions such as stand, walk, wave and squat. The system is accurate in recognition and flexible for expansion and modification of the CNN model.
Key words : action recognition,;FPGA;CNN,;LK optical flow,;NPU

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],,光流場的計算滿足下列式子:

qrs2-gs1.gif

    求解上述優(yōu)化問題,可以得到其最優(yōu)解的形式如下:

qrs2-gs2.gif

1.2 基于HOG和SVM的行人檢測

    通常使用滑動窗口對原始圖像進行HOG特征提取,,再對HOG特征向量進行分類識別,達到行人檢測的目的,。圖像中(x,,y)坐標點的像素值為I(x,y),。該點的像素梯度的大小和方向可以計算為M(x,,y)和Θ(x,y),。將梯度的方向Θ(x,,y)劃分到N個區(qū)間,每個區(qū)間占據π/N角度值,,如圖1所示,。

qrs2-t1.gif

其中:

     qrs2-gs3-s1.gif

    將檢測窗口(window)劃分成數個元胞(cell)。在本設計中,,窗口尺寸設定為140×80,,可被劃分成14×8個10×10的元胞。首先,,對這14×8個10×10的元胞,,依次統(tǒng)計每個元胞里面的梯度直方圖,;將其通過規(guī)則化模塊,得到最終的cell特征,;通過組合2×2的元胞特征,,可以得到塊特征;最后,,將窗口中的塊特征依次排列,,得到最終的91×36=3 276維度的窗口特征,如圖2所示,。

qrs2-t2.gif

    在提取HOG特征后,,可以利用SVM進行分類識別。本文選擇使用線性SVM進行分類判別,。其判別的依據如式(3)所示,。

    qrs2-gs3.gif

其中,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所示,。

qrs2-t3.gif

    融合光流和行人檢測結果的窗口融合算法流程如下:

qrs2-t3-x1.gif

qrs2-t3-x2.gif

    通過上述窗口融合算法,,可以得到目標人物在視頻幀中的位置。針對這個區(qū)域的視頻圖像和光流數據進行采集,,對于不同的動作有不同的數據形態(tài),。如圖4所示,每個動作對應的四張圖分別是原始視頻圖像,、光流x軸分量,、光流y軸分量和顯著運動檢測掩膜。

qrs2-t4.gif

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所示。

qrs2-t5.gif

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所示,。

qrs2-t6.gif

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運算過程中的數據緩存,。

qrs2-t7.gif

    攝像頭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所示,。

qrs2-t8.gif

    每當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的乘法交叉項,。Ω域內乘法交叉項可以更新為:

qrs2-gs4.gif

    結合光流場計算式(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]用于表示運算參數,,如函數輸入矩陣尺寸、卷積核尺寸等,。

qrs2-t9.gif

qrs2-b1.gif

    比如全連接層的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)了下述功能模塊。

qrs2-t10.gif

    (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所示,。本文采用的動作識別方法能夠較好識別“揮手”,、“站立”和“行走”這三種姿勢;而對于“無人”,、“下蹲”這兩個情況檢出率較低,,但是誤報率也相對較低。

qrs2-b2.gif

3.2 硬件資源消耗與運行性能

    由于本文設計的LK光流模塊,、基于HOG和SVM的行人檢測模塊,、指令集架構NPU單元都是采用流水線處理,數據吞吐量極大,。各模塊的資源消耗與理論最大性能如表3所示,。

qrs2-b3.gif

    選擇DE10-Nano開發(fā)板作為軟硬件運行平臺,在Quartus II 14.0環(huán)境下對動作識別系統(tǒng)進行綜合,、布局布線,,工程消耗FPGA資源如表4所示。

qrs2-b4.gif

    布局布線后各模塊分布情況如圖11所示,。

qrs2-t11.gif

3.3 實際運行測試

    對本文提出的動作識別系統(tǒng)進行運行測試,。將開發(fā)板和攝像頭MT9D111、HDMI顯示器進行連接,,如圖12所示,。

qrs2-t12.gif

    針對“站立”、“行走”,、“下蹲”和“揮手”等不同的人物動作進行識別,,結果輸出到顯示器。其中,,左上角為原始視頻,;左下角為光流計算結果;右上角為行人加框結果;右下角為動作識別結果,。系統(tǒng)運行測試情況如圖13所示,。

qrs2-t13.gif

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)

此內容為AET網站原創(chuàng),未經授權禁止轉載,。