王維高,劉朝輝
(西安石油大學電子工程學院,西安710065)
人體行為識別是計算機視覺與模式識別學科中最熱門的研究主題之一,已被成功應用于智能監(jiān)控、人機交互、虛擬現實等眾多領域[1-2]。隨著科學技術的不斷發(fā)展,其研究對象由傳統攝像機拍攝的RGB 圖像逐漸轉變?yōu)樯疃葌鞲衅鞑杉纳疃葓D像[3]。因為深度圖像與RGB 圖像相比,可以不受光照環(huán)境影響,同時還具有提供人體三維空間信息的優(yōu)勢。
對于深度圖像的人體行為識別,Li 等人[4]將深度圖像序列進行三維點云(Bag of 3D Points)建模,然后采樣其邊緣輪廓三維點來表示行為姿態(tài);Yang 等人[5]利用深度運動圖(DMM)捕獲時間上疊加的運動能量,并通過梯度直方圖(HOG)提取行為特征;Chen 等人[6]提出局部二值模式(LBP)算法來獲得緊湊的運動特征表示,同時討論了特征級融合和決策級融合對分類結果的影響。
然而以上研究都是人為提前構建特征向量,其性能依賴研究對象的特征設計,不能很好地體現方法的魯棒性,因此可以將行為數據直接作為輸入的深度學習方法成為眾多學者關注的重點。對于深度學習的人體行為識別,Simonyan 等人[7]提出一種雙流卷積神經網絡(CNN)模型,利用幀圖像和光流圖像作為二通道CNN 的輸入,最終得到了很好的識別效果;Du 等人[8]構建了一個八層的CNN 模型,將多通道表面肌電信號圖像作為模型的輸入,對預先定義的八種行為進行分類識別。
在上述研究的基礎上,本文提出一種基于深度圖像的人體行為識別改進算法。該算法將深度圖像投影到三個正交的笛卡爾平面坐標系上獲得DMM,然后在DMM 上構建三個子通道的CNN 模型用于圖像數據的訓練,最終把測試集DMM 的識別概率進行平均值輸出。
(1)求取深度圖像序列的最大像素值為Max=max(Mapa*b*n),其中a*b為幀尺寸,n為幀數;
(2)確定三個投影視圖的尺寸,分別為Size(Mapf)=a*b,Size(Maps)=a*Max,Size(Mapt)=Max*b;
(3)若Mapf(x, y)代表Mapf的第x行第y列像素,當Mapf(x,y)≠0 時,則該點在Maps上的投影公式為Maps(x, Mapf(x, y))=y,在Mapt上的投影公式為Mapt(Mapf(x,y),y)=x。
對于含有N幀的深度圖像序列,其深度運動圖DMMv(v∈(f,s,t))的計算方法為:
然后去除DMMv中像素值為零的部分,從而得到人體行為的有效區(qū)域(見圖1)。
圖1 行為識別算法流程
CNN 是一種帶有多層次結構的深度神經網絡,它主要由卷積層(Conv)、池化層(Pooling)和全連接層(FC)組成。其中卷積層用于收集圖像的局部特征,池化層用于篩選圖像的有效特征,全連接層用于傳輸綜合特征到分類器進行分類識別。CNN 的基本原理就是通過構建多層次網絡來獲得目標的高層次特征,從而表示數據的抽象語義信息,以期獲得更好的特征魯棒性[9]。
本文構建的CNN 模型如圖1 所示,單通道的CNN擁有十二層,包含1 個輸入層、4 個卷積層、4 個池化層、2 個全連接層和1 個分類層:第一層為輸入層,輸入的是縮至224×224 的DMMv。中間十層為訓練層:其中有四層為卷積層(Conv1~Conv4),卷積核(kernel)的大小和數量依次為7×7×32、5×5×64、3×3×128、3×3×256,卷積層步長(stride)都為1,采用填充(padding)算法,目的是不丟棄卷積過程中的特征圖(feature map)信息;并在每一個卷積層后面都連接一個池化層,選擇2×2 的池化核進行最大池化,池化層步長都為2,以避免平均池化的模糊化效果;后兩層為全連接層,第一個全連接層產生1024 個神經元節(jié)點(FC-1024)輸出,第二個全連接層產生20 個神經元節(jié)點(FC-20)輸出;同時卷積層和全連接層都采用修正線性單元:ReLU 激活函數f(x)=max(0,x)來加速網絡訓練,以提高CNN 特征學習能力;并在第一個全連接層的ReLU 函數后面采用Dropout 技術,以概率0.5 移除一些神經元節(jié)點和相應的輸入輸出連接,進而增強模型泛化能力,防止過擬合。最后一層為分類層,選用Softmax 分類器,利用它可以得到輸入數據對已知類別的最大概率標簽,公式如下:
其中x為最后一個全連接層的輸出,j為預測類別,w是神經元的權值,k是分類的類別數,P為預測類j的概率。
在測試階段,將三個通道CNN 測試得到的每類行為DMMv的識別概率進行平均值輸出,并將其作為該類的識別結果。
本文使用微軟公開的MSR Action 3D 數據庫進行實驗。該數據庫是由Kinect 深度傳感器采集而成,它包括10 個受試者面向攝像機時執(zhí)行的20 個動作,這20 個動作分別是:高揮手(high wave)、橫揮手(horizon?tal wave)、錘擊(hammer)、接球(hand catch)、前沖(for?ward punch)、高拋(high throw)、劃X(draw X)、劃勾(draw tick)、劃圈(draw circle)、拍手(hand clap)、兩手揮拍(two hand wave)、側拳(side boxing)、彎腰(bend)、前踢(forward kick)、側踢(side kick)、慢跑(jogging)、網球揮桿(tennis swing)、網球發(fā)球(tennis serve)、高爾夫揮桿(golf swing)、接球和投擲(pick up and throw)。每一個受試者執(zhí)行每個動作2 到3 次,共包含567 個人體行為深度圖像序列,深度圖像分辨率為320×240。
采用和Li 等人[4]一樣的實驗設置,將20 個動作分成三個子集(AS1、AS2、AS3),每個子集有8 種行為,如表1 所示。在每個子集中,受試者1、3、5、7、9 的動作當作訓練數據,受試者2、4、6、8、10 的動作當作測試數據,即使用交叉驗證的方法進行實驗。
表1 動作子集的設置
本實驗的硬件平臺為Intel Core i5-4210U 雙核CPU,NVIDIA GeForce 820M 顯卡,64 位Windows 10 系統;軟件平臺為MATLAB 2019b。在CNN 模型訓練之前,對DMMv行歸一化處理,將其統一調整為224×224。CNN 模型的訓練步驟如下:
(1)網絡模型初始化:初始化各層網絡權值和濾波器;
(2)訓練參數初始化:每個CNN 的初始學習率(Initial Learn Rate)設置為0.001,優(yōu)化算法選擇Adam,迭代次數(Max Epoch)設置為20,樣本容量(Mini-Batch Size)設置為256,訓練環(huán)境設置為默認(默認的情況是先測試GPU,如果不可用再測試CPU);
(3)將DMMv作為輸入,經過前向傳遞,進入各卷積層、池化層、全連接層和分類器,輸出一個包含各類預測的概率值;
(4)計算標定好的數據與通過網絡計算出的數據的誤差;
(5)經過反向傳遞,調整訓練參數。該過程采用Adam 優(yōu)化算法,它相對于梯度下降法可以解決稀疏梯度和噪聲問題,并能自動調整學習率[10],從而更好地更新網絡權值,減小代價函數(Cost Function);
(6)對訓練集中的所有DMMv重復步驟(3-5),直到訓練次數滿足設定值。
經過上述訓練步驟,三通道CNN 模型的所有網絡權重和結構參數都已得到優(yōu)化,可正確分類訓練集中的人體行為深度圖像。當測試集DMMv輸入到訓練好的模型時,經過前向傳遞可以得到三個輸出概率,取三個概率的平均值即為每個待識別行為對應的輸出概率。
實驗結果表明:本文所提算法在MSR Action 3D 數據庫上的平均識別率達到了97.2%,進一步驗證了該算法模型的有效性。本文算法與其他文獻算法的實驗結果對比如表2 所示。
表2 在MSR Action 3D 數據庫上的實驗結果
為了提高人體行為識別率,更好地體現方法的魯棒性,本文提出一種基于深度圖像的人體行為識別改進算法。該算法使用人體行為深度運動圖DMMv作為輸入,通過構建三通道的卷積神經網絡模型進行識別。實驗結果表明該算法在MSR Action 3D 數據庫上有著較高的識別率,證明了該算法模型的有效性。在接下來的研究中,將結合人體骨骼數據對CNN 模型進一步改進,從而達到更好的行為識別效果。