史佳成,陳 志,胡 宸,王仁杰,葉科淮
(1.南京郵電大學(xué)計算機學(xué)院,江蘇 南京 210023;2.南京郵電大學(xué)通信與信息工程學(xué)院,江蘇南京 210003)
視頻中的人物動作識別分為兩個部分:①對于類似背景之類的靜態(tài)信息處理;②對于動態(tài)對象的跟蹤和識別。如何使視頻中的靜態(tài)信息和動態(tài)信息在互不影響特征提取的同時又能保持兩者相互結(jié)合,需要確定結(jié)合過程中的動態(tài)特征向量和靜態(tài)特征向量貢獻率。
跟蹤方法主要有光流法,常用的神經(jīng)網(wǎng)絡(luò)包括RNN神經(jīng)網(wǎng)絡(luò)、LSTM 神經(jīng)網(wǎng)絡(luò)等。光流法優(yōu)點是在不知道任何場景信息情況下檢測出運動目標(biāo),但是計算復(fù)雜度高、實時性差,對硬件有較高要求,而訓(xùn)練標(biāo)準(zhǔn)的RNN 需要解決長時間學(xué)習(xí)依賴問題。
在計算機視覺領(lǐng)域,研究重點是如何對一個圖片序列或由圖片幀組成的視頻進行識別。按照拓撲結(jié)構(gòu),CNN 分為多個學(xué)習(xí)階段,由卷積層、非線性處理單元和采樣層組合組成[1]。CNN 在圖像識別領(lǐng)域表現(xiàn)很好,廣泛運用于圖像識別領(lǐng)域中的特征提取、目標(biāo)檢測、圖像分類等。文獻[2]提出Two_Stream 的動作識別方法,將視頻分為一連串的圖片幀作為CNN 輸入,將其分為時域光流和空間域的靜態(tài)視頻幀,其中空間流對各個視頻幀進行操作,對靜止圖像進行有效識別。而靜態(tài)外觀是一個有用線索,因為某些動作與特定對象密切相關(guān);光流模型輸入通過在幾個連續(xù)幀之間堆疊光流位移場而形成,輸入明確描述視頻幀之間的運動,使識別更加容易。在經(jīng)過大量圖像識別數(shù)據(jù)集[3]訓(xùn)練之后,利用Softmax 函數(shù)對動作進行分類,提高模型精度,但訓(xùn)練該模型需要經(jīng)過預(yù)處理階段,空間池化層沒有考慮目標(biāo)軌跡。
在目前人物動作識別算法中,文獻[4]提出的LRCN算法十分獨特且高效,受到廣泛認可。LRCN 神經(jīng)網(wǎng)絡(luò)模型是一種結(jié)合CNN、RNN 各種優(yōu)點于一身的數(shù)學(xué)模型,對視頻中的每一個圖片幀利用CNN 算法對人眼可見的特征進行提取,再結(jié)合RNN 中的分支LSTM 對圖像序列進行學(xué)習(xí),可有效解決RNN 梯度下降問題,在時域和空間域都達到很深層次,并且不需要人的干預(yù),幾乎不需要進行輸入預(yù)處理。
本文在LRCN 基礎(chǔ)上提出LRDCN 模型,利用雙流模型與CNN 結(jié)合提取視頻特征,利用GRU 對前后特征進行關(guān)聯(lián),采用編碼—譯碼與極大似然估計法,從已知的動作序列推出新的人物動作,從而在有限的運算速度條件下更快地更新網(wǎng)絡(luò)參數(shù),增加網(wǎng)絡(luò)深度。在不同訓(xùn)練集上進行訓(xùn)練,使模型精度更高、泛化能力更強。
為捕捉每一幀靜態(tài)特征與相鄰兩幀之間表現(xiàn)出的動作,構(gòu)造一個層次更深的卷積神經(jīng)網(wǎng)絡(luò)模塊,提升網(wǎng)絡(luò)模型精確度,達到手工提取特征的最高水平,對視頻動作特征提取算法描述如下:
(1)分別在時間和空間上建立TWO-STREAM 模型,在時間上從單獨的幀中提取出場景和目標(biāo)信息,空間上提取人物和相機的運動信息。
(2)將時間流信息分為x方向與y方向?qū)ζ溥M行光流堆疊,將不同幀對同一位置的位移信息進行采樣,軌跡堆疊沿著人物運動的軌跡對位移信息進行采樣。
一個密集的光流場可以由t與t+1 時刻的兩個連續(xù)幀之間的矢量場dt表示,在t時刻取一點pk,假設(shè)其位置為(u,v),而每個點經(jīng)過矢量場作用后對應(yīng)的時刻為t+1,對應(yīng)的坐標(biāo)為,如圖1 所示。
Fig.1 Optical flow field圖1 光流場
神經(jīng)網(wǎng)絡(luò)輸入由w×h× 2L的三維矩陣構(gòu)成,假設(shè)輸入視頻從第τ幀開始提取,則每一幀的光流可由式(1)、式(2)表示。
其中,Iτ(u,v,a),a∈[1,2L]可看作是對L 幀中一個點進行的編碼。
(3)第(2)步提取的是方向向前的單向光流,其中式(1)表示x軸方向的光流,式(2)表示y軸方向的光流,通過相反方向上的另一組位移場形成雙向光流。對模型進行擴展,將時間間隔τ從時刻T-τ/2 到T+τ/2 單向流分割為兩個時間間隔為方向相反的單向流,開始時間、結(jié)束時間分別從T-τ/2 時刻到T時刻和從T時刻到T+τ/2 時刻,最終得到雙向光流。
(4)正常情況下可采取零中心化使CNN 模型更好地利用整流非線性。文獻[5]描述由于攝像機移動,第(3)步得到的視頻輸入所有向量有可能都被加上一個特殊值,使整個視頻幀呈現(xiàn)運動趨勢。為防止這種情況發(fā)生,將輸入到卷積神經(jīng)網(wǎng)絡(luò)中的每個向量減去它們的平均值。
(5)將每一幀的RGB 圖像組合成一個w×h× 3L的三維矩陣Iτ2(u,v,a),a∈[1,3L],其中3 個大小為w×h×L的子矩陣分別代表圖像的R,G,B值。
(6)將基于特征編碼的時間矩陣Iτ(u,v,a) 與RGB 圖像組成的三維矩陣Iτ2(u,v,a) 分別作為時空卷積神經(jīng)網(wǎng)絡(luò)輸入,其中時間域上的神經(jīng)網(wǎng)絡(luò)多次經(jīng)過方向敏感的卷積神經(jīng)網(wǎng)絡(luò)層、整流層和池化層迭代,其散度、卷曲和剪切力可通過光流梯度計算,而RGB 圖像組成的那部分三維矩陣只需通過正常CNN 的多次卷積池化濾波層迭代,最終得到在時間和空間上幀與幀之間的相互獨立的特征向量。
將時間和空間分量分開的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)有助于抑制過擬合現(xiàn)象,同時不會減少表達式所承載的信息量,因為僅僅通過減少參數(shù)的數(shù)量并不能優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)模型性能[6]。
傳統(tǒng)的遞歸神經(jīng)網(wǎng)絡(luò)(見圖2)將輸入序列<x1,x2,…,xT>映射到隱藏狀態(tài)<h1,h2,…,hT>,并通過式(3)、式(4)將隱藏狀態(tài)映射到輸出狀態(tài)。
Fig.2 Recursive neural network圖2 遞歸神經(jīng)網(wǎng)絡(luò)
其中f為非線性激活函數(shù),如Sigmoid函數(shù),用于連接輸入層和輸出層。對于長度為T的輸入序列<x1,x2,…,xT>,先后依次計算更新h1,y1,h2,y2,…,hT,zT。
雖然純粹的RNN 在語音識別和文本生成方面性能極佳,但是RNN 很難用于學(xué)習(xí)一個長期動態(tài)變化的數(shù)據(jù),在深層次的遞歸網(wǎng)絡(luò)中梯度反向傳播時,會引起梯度下降或梯度爆炸問題[7]。本文引入門循環(huán)神經(jīng)網(wǎng)絡(luò),其結(jié)構(gòu)類似LSTM,如圖3 所示。
Fig.3 GRU helped internal structure圖3 GRU 內(nèi)部結(jié)構(gòu)
2014 年Cho 等[8]提出門循環(huán)神經(jīng)網(wǎng)絡(luò)GRU 對RNN進行改進,解決梯度爆炸和梯度消失現(xiàn)象。GRU 內(nèi)部由更新門與重置門組成,在第t時刻輸入xt,并且一組重置門rt用于控制ht-1,再與xt進行拼接,在雙取正切激活函數(shù)作用下,將結(jié)果h't縮放至-1~1 之間,如式(7)所示,其中?表示兩個矩陣對應(yīng)元素的乘積,σ表示Sigmoid 函數(shù),rt更新如公式(5)所示。最終利用一個更新門zt將遺忘和記憶兩步進行合并,其中(1-zt)ht-1表示對之前的狀態(tài)進行選擇性遺忘,zt h't表示對當(dāng)前節(jié)點信息進行記憶,最終輸出ht,如公式(6)所示。
根據(jù)文獻[9],GRU 和LSTM 的主要區(qū)別在于LSTM中的記憶門。LSTM 由輸入門、遺忘門和輸出門3 個門控和一個記憶單元組成,其中記憶單元用于統(tǒng)計上一個隱藏層的信息與當(dāng)前時刻的輸入信息,輸入門、遺忘門和輸出門的激活與當(dāng)前輸入之前的記憶及上一層的輸入有關(guān)。但在GRU 中,門控數(shù)量比LSTM 少一個。GRU 中門控的更新只與當(dāng)前層的輸入和之前的輸出有關(guān)。由于GRU 參數(shù)減少,所以GRU 更新速度更快、計算代價更小。
一般長效遞歸深度卷積神經(jīng)網(wǎng)絡(luò)模型(RNN)將深度分層的視覺特征提取器(如CNN)與訓(xùn)練好的模型進行結(jié)合,這些模型能綜合時間上的動態(tài)特征進行學(xué)習(xí)。RNN 主要用于序列數(shù)據(jù)<x1,x2,…xT>如文字、多個幀組成的視頻等。
LRDCN 中的CNN 將序列中的每個元素輸入到一個元素-特征轉(zhuǎn)換器φv(.) 中,得到一個定長的輸出特征序列φv(xt),然后再將其輸入到遞歸序列學(xué)習(xí)模塊。
通常情況下,遞歸神經(jīng)網(wǎng)絡(luò)模型有一個參數(shù)W,用于將輸入xt和前一層的隱藏狀態(tài)ht-1映射為輸出ht。因此,序列的推理必須自上而下進行,先計算h1=fw(x1,h0),再依次計算h2=fw(x2,h1),h3=fw(x2,h1),以此類推。
對于輸入yt∈C,C是一個離散值的集合,RNN 計算出的概率P(yt)和序列模型每一層單獨的輸出yt有關(guān),其預(yù)測值可用公式(8)表示:
式(8)中,Wtt與bt來自于模型通過學(xué)習(xí)最終得到的結(jié)果。利用Softmax 函數(shù),輸出結(jié)果為x的概率如公式(9)所示。
須指出,GRU 某一時刻所預(yù)測到的動作為動作備選集合中最可能發(fā)生的那個動作,即。
文獻[10-12]指出,當(dāng)層數(shù)增多時,使用非線性函數(shù)對于感知類問題有很大幫助。對于更大的時間跨度T,遞歸神經(jīng)網(wǎng)絡(luò)能夠得到層次更深的非線性函數(shù),并且其冪次與T成某種正相關(guān)聯(lián)系。而線性網(wǎng)絡(luò)經(jīng)過多層更新迭代,序列模型的參數(shù)W得到復(fù)用,使最終的輸出永遠是輸入的線性組合,與輸入的時間跨度T無關(guān)。
Softmax 函數(shù)的優(yōu)點在于得出的所有可能結(jié)果概率之和為1,符合概率特性,且Softmax 是非線性函數(shù),能夠使得遞歸神經(jīng)網(wǎng)絡(luò)訓(xùn)練后的輸出隨著時間跨度T變化而變化。
本文結(jié)合GRU 模型實現(xiàn)實時人物動作識別,將基于GRU 的RNN 分為暫態(tài)RNN 與譯碼RNN。與GRU 模型不同的是,暫態(tài)RNN 組件輸入為經(jīng)過CNN 處理后的特征序列,在得到每一時刻的暫態(tài)序列輸出<y'1,y'2,…,y'n>(如圖2 所示)后,根據(jù)文獻[8]提出的編碼—解碼方法,對暫態(tài)RNN 組件進行改進:編碼器將輸入的暫態(tài)序列<y'1,y'2,…,y'n>映射為一個單個的值y1,隨后通過梯度下降算法,在計算暫態(tài)序列與從y1到暫態(tài)序列<y'1,y'2,…,y'n>的映射匹配程度后,對暫態(tài)RNN 組件進行更新。其中每一階段的y't為之前所有輸入特征xt的一個總結(jié),如公式(10)所示。
譯碼器將這個序列輸出為一個長度為T'的另一個序列。在前n個時間單位,編碼器處理輸入暫態(tài)序列<y'1,y'2,…,y'n>,隨后將其輸出y1放入譯碼器,在后m-1個時間單位中,譯碼器利用前面所有的輸入推出<y2,…,ym>,即推出人物每個時刻最有可能的動作yt。
在對yt進行極大似然估計過程中,算法更新譯碼RNN組件參數(shù)。基于輸入序列和之前得到的動作序列組合<x1,x2,…,xt,y1,y2,…,yt-1>得到y(tǒng)t的條件分布,如公式(11)所示。
若將序列<x1,x2,…,xt,y1,y2,…,yt-1>合并為矩陣xk,則LRDCN 中的編碼譯碼器組件的學(xué)習(xí)目標(biāo)是最大化yt的條件概率,如公式(12)所示。
為提升系統(tǒng)端到端更新參數(shù)能力,更好地在特征序列與最終動作預(yù)測序列之間建立聯(lián)系,利用反向傳播法與隨機梯度下降法訓(xùn)練LRDCN 參數(shù)?h,t g(ht-1,xt-1)。這種方法與單純的Softmax 函數(shù)模型相比,能將時刻t的動作與之前預(yù)測動作結(jié)合,增加動作識別的精度與泛化性能。
將測試集輸入TWO-STREAM 算法,時間流Iτ(u,v,a),a∈[1,2L]和Iτ2(u,v,a),a∈[1,3L]分別輸入到時間域CNN與空間域CNN,得到長度分別為L 和2L 的特征序列;通過極大似然估計法得出每一時刻對應(yīng)的最有可能產(chǎn)生的動作;通過在UCF-101 與Weizman 測試集上訓(xùn)練LRDCN,找到每個特征對于特定動作最精確的貢獻率。
為驗證LRDCN 識別算法的準(zhǔn)確性及實時性,實驗過程分為兩步:①在UCF-101 數(shù)據(jù)集上進行測試,將實驗結(jié)果 與Resnet-18算法、Resnet-30算法、Resnet-50算法、Resnet-101算法、Densenet-152 算法以及Densenet-201 算法進行對比;②測試人物動作識別算法的實時性,將包含一系列人物動作序列的視頻(待定)作為輸入,經(jīng)處理得到人物動作序列,再將每一類動作視頻放在對應(yīng)文件夾中,將文件名用于標(biāo)注每一動作類別,最終形成包含訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)的Trainlist 文件與Testlist 文件。在動作識別實驗中LRDCN 使用CNN 參考文獻[13]提出的模型Caffenet(Alexnet[14]的變種),使用Imagenet數(shù)據(jù)集子集ILSVRC-2012 對模型進行訓(xùn)練。
數(shù)據(jù)集包含101 類來自YouTube 的人物動作視頻,其中每個視頻包含的幀長度不等,每幀的像素為320 × 240。動作類別可分為人與物體互動、僅身體動作、人與人互動、演奏樂器以及體育運動等,其中動作包括眼部化妝、涂口紅、射箭、漂流、攀巖、室內(nèi)攀繩、劃船、刮胡子、鉛球運動、滑板、滑雪、跳傘、足球、吊環(huán)、相撲、沖浪、秋千、乒乓球、太極拳、網(wǎng)球擺、擲鐵餅、跳蹦蹦床、打字、俯臥撐、板書等。所有實驗均采用TensorFlow 開發(fā),運行于Windows 平臺。
實驗采用UCF-101 數(shù)據(jù)集,使用每一類視頻中的前2/3 進行訓(xùn)練,后1/3 視頻進行測試。實驗將Batch_size 設(shè)為15,輸入長度為T,圖片按照R,G,B 分為3 個通道,將輸出動作序列的時間長度暫定為1(僅識別一個動作),最終將測試結(jié)果正確的視頻數(shù)量除以測試集總視頻數(shù)量乘以100,得到精確度的百分比數(shù)值;隨后在Weizmann 數(shù)據(jù)集通過LRDCN 進行數(shù)據(jù)集訓(xùn)練,測試模型動作序列識別的精確程度,最終得到誤差矩陣(見表1)。Weizmann 由9個人分別執(zhí)行10個不同的動作視頻(bend,jack,jump,pjump,run,side,skip,walk,wave1,wave2),視頻中的背景、視角都是靜止的。由于skip 動作會影響其它動作識別,因此在實驗過程中舍棄skip 這一動作識別。
如圖4 所示,LRDCN 算法在人物動作識別精確度上優(yōu)于上述6 種算法。相對于其它算法,LRDCN 算法的個人動作語義準(zhǔn)確率較高。當(dāng)進一步獲得時間和空間上的人物運動軌跡后,依靠精準(zhǔn)的人物追蹤,LRDCN 算法特征提取能力得到進一步增強。通過在RNN 中引入GRU,可提高長視頻序列動作識別精確度,避免梯度下降和梯度爆炸情況。在去除skip 動作之后,得到的動作序列識別平均正確率為93.8%,如表1 所示。由于跑步與走路的動作特征十分相似,加上之前動作序列干擾,算法容易將跑步動作誤認為走路。
Fig.4 Accuracy comparison among LRDCN algorithm and others on the data set UCF-01圖4 LRDCN 算法與各算法在數(shù)據(jù)集UCF-01 的準(zhǔn)確性比較
Table 1 Action LRDCN algorithm error matrix(remove the skip action)表1 LRDCN 算法動作誤差矩陣(去除skip 動作)
LRDCN 通過在編碼—譯碼RNN 中增加GRU,避免了梯度下降和梯度爆炸等現(xiàn)象;將RGB 圖像與光流圖像結(jié)合作為網(wǎng)絡(luò)輸入得到光流圖,以更精確地反映時空動作特征;在UCF-101 和Weizman 數(shù)據(jù)集上訓(xùn)練LRDCN,找到最佳的人物動作行為模式識別貢獻率;對單個物體進行跟蹤分析,采用極大似然估計法以及譯碼RNN 實現(xiàn)實時動作識別;不僅提高了LRDCN 模型精度,而且泛化能力也得到了提升。
但是,本算法步驟過于繁瑣,對計算機性能要求偏高,識別單個動作比普通算法更加耗時。在后續(xù)的研究中將減少算法步驟,如減少卷積池化步驟,犧牲一部分算法精確度以提升算法效率等,并對算法進行拓展,對視頻中多個個體進行群體動作語義分析。