張遠(yuǎn)輝, 許璐鈞, 徐柏銳, 何雨辰
(中國計(jì)量大學(xué)機(jī)電工程學(xué)院,浙江 杭州 310018)
人體動(dòng)作識別技術(shù)已經(jīng)應(yīng)用在視覺監(jiān)視、自動(dòng)駕駛汽車、娛樂和視頻檢索等方面[1]。隨著卷積神經(jīng)網(wǎng)絡(luò)(convolutional nerural network,CNN)的快速發(fā)展,網(wǎng)絡(luò)的深度和結(jié)構(gòu)越來越多樣化,大量的卷積網(wǎng)絡(luò)結(jié)構(gòu)被提出,如3D-CNN[2],LSTM(long-short term memory)[3],雙流網(wǎng)絡(luò)(two-stream networks)[4],DBNs(deep belief networks)[5]等。這些方法都是采用傳統(tǒng)相機(jī)或是深度相機(jī)進(jìn)行采集后再利用卷積神經(jīng)進(jìn)行處理。若在兩幀曝光時(shí)間之內(nèi)人體在快速移動(dòng),則會(huì)產(chǎn)生運(yùn)動(dòng)模糊,這在動(dòng)態(tài)人體動(dòng)作識別中是一個(gè)難點(diǎn)[6]。一般情況下,通過增加幀率來解決,但是處理這些包含大量冗余信息的連續(xù)圖像幀會(huì)極大地浪費(fèi)計(jì)算能力、內(nèi)存空間和時(shí)間。
近年來,一種事件相機(jī)應(yīng)運(yùn)而生,能夠高效地異步記錄像素亮度變化[7],每個(gè)變化被稱為一個(gè)“事件”,記為e=(x,y,t,p),(x,y)為位置坐標(biāo),t為瞬時(shí)時(shí)間,極性p∈(0,1)(0表示亮度變暗,1表示亮度變亮)。圖1是傳統(tǒng)相機(jī)與事件相機(jī)輸出形式的對比,圖1左圖是一個(gè)黑點(diǎn)隨著圓盤轉(zhuǎn)動(dòng),右圖1(a)是傳統(tǒng)相機(jī)以固定幀率獲取的連續(xù)圖像,每個(gè)圖像中都記錄了完整的場景信息;圖1(b)是事件相機(jī)只輸出快速運(yùn)動(dòng)目標(biāo)(黑點(diǎn))的強(qiáng)度變化信息,不記錄靜止物體(中心點(diǎn)和圓盤背景)的信息。
圖1 傳統(tǒng)相機(jī)與事件相機(jī)輸出形式的對比Fig.1 Comparison of different output forms
事件相機(jī)與傳統(tǒng)的基于幀的相機(jī)相比,一是具有高動(dòng)態(tài)范圍、高時(shí)間分辨率(μs級),更容易獲取運(yùn)動(dòng)特征的優(yōu)點(diǎn);二是只輸出局部發(fā)生光強(qiáng)變化的像素,可以節(jié)省大量的計(jì)算資源和能耗[8]。王含宇等[9]利用高斯跟蹤器和地址查找表,實(shí)現(xiàn)基于事件的多方向識別。Baby S A等[10]結(jié)合3種投影圖(如x-y,x-t,y-t)和運(yùn)動(dòng)邊界直方圖MBH(motion boundary histogram)的方法對人體手勢進(jìn)行識別,但其計(jì)算量大、運(yùn)算時(shí)間長。Ramesh B等[11]提出一種事件信息的DART(distribution aware retinal transform)描述子,但該描述子在設(shè)計(jì)原理上未考慮旋轉(zhuǎn)、尺度、視角的不變性。Bi Y等[12]提出一種基于圖形的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)用于分類事件相機(jī)目標(biāo)。Gehrig D等[13]提出通過可微操作將事件流轉(zhuǎn)換為網(wǎng)格表示的通用框架。Ramesh B等[14]利用低維度來實(shí)現(xiàn)特征的匹配,提出一種無回溯的KD樹機(jī)制。以上的方法都是以固定的時(shí)間間隔分割事件流從而形成虛擬幀,再用傳統(tǒng)圖像識別模型進(jìn)行分類學(xué)習(xí)。
然而,將事件流看作虛擬幀序列并不能充分利用事件數(shù)據(jù)的時(shí)空稀疏性,同時(shí),經(jīng)過時(shí)間積累得到的虛擬幀失去了每個(gè)時(shí)間間隔內(nèi)的空間結(jié)構(gòu)。為了解決這些不足,本文利用卷積神經(jīng)網(wǎng)絡(luò)提出一種直接處理事件數(shù)據(jù)的方法。將事件流等效成三維空間(x,y,t),對其空間結(jié)構(gòu)和時(shí)間特征進(jìn)行分層分析,獲取每種動(dòng)作的基本時(shí)空結(jié)構(gòu),然后利用學(xué)習(xí)到的特征進(jìn)行分類。針對卷積神經(jīng)網(wǎng)絡(luò)存在模型參數(shù)量大、訓(xùn)練速度慢的問題,采用共享卷積核的方式,且對卷積層中每個(gè)事件進(jìn)行并行卷積操作,為事件相機(jī)在動(dòng)作識別中的應(yīng)用提供了一種高效的網(wǎng)絡(luò)構(gòu)架,具有訓(xùn)練時(shí)間短、參數(shù)量小、識別率高等優(yōu)點(diǎn)。
利用事件相機(jī)進(jìn)行動(dòng)態(tài)人體動(dòng)作識別方法的流程如圖2所示,包括事件流采集、數(shù)據(jù)預(yù)處理、神經(jīng)網(wǎng)絡(luò)訓(xùn)練和識別3個(gè)部分。
圖2 動(dòng)作識別方法流程Fig.2 Action recognition method flow
目前由于受到硬件技術(shù)和成本的限制,沒有關(guān)于使用事件相機(jī)拍攝的人體動(dòng)作數(shù)據(jù)集。故在實(shí)驗(yàn)中自行建立了一個(gè)動(dòng)作數(shù)據(jù)集,用于驗(yàn)證該算法的可行性??紤]9種常見的人體動(dòng)作(動(dòng)作過程持續(xù)時(shí)間約為2 s),分別是行走、跳躍、奔跑、揮手、轉(zhuǎn)身、拾取、坐下、踢腳、喝水。圖3為用事件相機(jī)拍攝的動(dòng)作示例圖像,其中二維圖是時(shí)間間隔為30 ms的事件流顯示(紅色點(diǎn)表示極性為1,綠色點(diǎn)表示極性為0),三維圖是在(x,y,t)空間下發(fā)生一個(gè)動(dòng)作的所有事件的三維顯示。
圖3 事件相機(jī)記錄的9種行為Fig.3 Nine behaviors recorded by the event camera
事件相機(jī)對環(huán)境中的光強(qiáng)變化非常敏感,不可避免地易受到光學(xué)硬件電路和環(huán)境因素影響,在輸出動(dòng)作信息的同時(shí)夾雜著大量的噪聲[15],從而影響后續(xù)的神經(jīng)網(wǎng)絡(luò)訓(xùn)練精度等問題。因此,事件流的數(shù)據(jù)預(yù)處理非常必要[16]。由于事件流與圖像幀的輸出方式上有明顯地差異,基于幀的傳統(tǒng)視覺處理算法不能直接應(yīng)用于事件數(shù)據(jù)中。針對這一特性,本文直接對事件流序列進(jìn)行處理,采用濾波和降采樣的方法來達(dá)到用更少的事件數(shù)量表示一個(gè)相對完整的動(dòng)作。
(1)
在事件相機(jī)中,某一位置的像素被激活時(shí),輸出由這些像素組成的事件,反之則不會(huì)輸出。因此,可以將發(fā)生“事件”這一動(dòng)態(tài)過程表示成階躍函數(shù)ε(x,y,t)的形式。
ei=(xi,yi,ti)?ε(x-xi,y-yi,t-ti)
(2)
那么,N個(gè)事件組成的事件流可以寫為
(3)
有效事件是由物體的運(yùn)動(dòng)或是光強(qiáng)度的變換真實(shí)產(chǎn)生的,一個(gè)有效事件通常不會(huì)單獨(dú)產(chǎn)生,而會(huì)激活周圍位置的像素。所以,有效事件的密度值通常是大于無效事件的密度。在時(shí)空鄰域U(x,y,t)內(nèi),輸入事件e(x,y,t)的密度計(jì)算如下公式(4)。如果事件密度小于C,則該事件為無效事件并濾除;反之則為有效事件并保留。
(4)
通過設(shè)定閾值C,濾去大量的無效事件。但在2 s的時(shí)間內(nèi)仍有約20 000個(gè)事件,為加快神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度和減小運(yùn)行占用的內(nèi)存,采用三維網(wǎng)格采樣的方法將事件數(shù)目減少至n(n一般取1 000~5 000)。具體步驟為
(1) 計(jì)算出某一動(dòng)作的三維點(diǎn)重心(xc,yc,tc):
(5)
(2) 以重心為中心,畫a×a×a的三維網(wǎng)格。由于事件相機(jī)的像素為128×128,a取4。
(3) 以重心為中心的8×8×8網(wǎng)格范圍內(nèi),每一個(gè)網(wǎng)格取a個(gè)點(diǎn)數(shù);其余的每一個(gè)網(wǎng)格取a/2個(gè)點(diǎn),直到取到規(guī)定的點(diǎn)數(shù)n。
圖4是以揮手動(dòng)作為例的事件流的三維對比圖,完整動(dòng)作時(shí)間為1.739 8 s,記錄了N=27 833個(gè)事件,經(jīng)過數(shù)據(jù)預(yù)處理后事件數(shù)量n=4 096。圖4(a)是事件相機(jī)采集到的事件流三維圖,圖4(b)是經(jīng)過濾波后的事件流圖,圖4(c)是采用網(wǎng)格降采樣后的事件空間位置圖。
圖4 事件流的三維對比圖Fig.4 3D comparison diagram of event flow
卷積神經(jīng)網(wǎng)絡(luò)對信息的特征提取主要依靠卷積和池化操作[17]。卷積操作依靠卷積核尺寸將低維感受野中的特征提取到高維中,通過控制卷積核的數(shù)量達(dá)到通道數(shù)大小的放縮。而池化操作只能改變高度和寬度,無法改變通道數(shù)。
圖5為本文采用的神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu),由多個(gè)卷積層、池化層和全連接層構(gòu)成。
圖5 網(wǎng)絡(luò)模型結(jié)構(gòu)圖Fig.5 Network model structure diagram
圖5中“Conv”,“GAP”分別是“Convolutional layer”,“Global Average Pooling”的簡寫,“@”符號之前的數(shù)字表示卷積核大小,之后的數(shù)字表示卷積層的通道數(shù)。n的大小取決于數(shù)據(jù)預(yù)處理中降采樣后的事件數(shù)量,分別取1 024、2 048、4 096進(jìn)行試驗(yàn)。
為了減少模型對輸入事件流數(shù)量的依賴,需要采取一種具有對稱性的函數(shù)來處理事件,使得不論如何變化事件的輸入順序(比如人體跳躍過程中,向上起跳或是下落都是跳躍動(dòng)作)都不會(huì)對結(jié)果產(chǎn)生影響。首先,從樣本集中隨機(jī)選取組成訓(xùn)練集,作為神經(jīng)網(wǎng)絡(luò)的輸入;再使用不同數(shù)量和尺寸的卷積核對每一個(gè)事件ei進(jìn)行特征提取,將其維度擴(kuò)充至高維;然后,在池化層中對特征維進(jìn)行對稱操作,使得網(wǎng)絡(luò)對不同數(shù)量的事件流輸入都可以產(chǎn)生相同維度的特征向量;再利用卷積層降維之后,和全連接層相連,最終輸入到softmax分類層中進(jìn)行動(dòng)作識別。
Y=σ(XW+B)
(6)
式中:W∈R9×64和B∈R9×1分別表示相鄰層之間神經(jīng)元連接的權(quán)重和該神經(jīng)元的偏置值;σ(*)是某一種非線性激活函數(shù),激活函數(shù)采用Relu來增加神經(jīng)網(wǎng)絡(luò)各層之間的非線性關(guān)系。
模型的最后是輸出層,采用Softmax分類器得到九種人體動(dòng)作的分類結(jié)果。使用Softmax函數(shù)可以將向量Y∈R9×1擬合為[0,1]范圍內(nèi)的實(shí)數(shù),且所有實(shí)數(shù)之和為1。Softmax函數(shù)如下:
(7)
式中:zi表示第i個(gè)節(jié)點(diǎn)對應(yīng)的輸出值,Cz為總類別數(shù),本實(shí)驗(yàn)中Cz=9。
訓(xùn)練過程中采用交叉熵?fù)p失函數(shù),F(xiàn)Loss可表示為
(8)
實(shí)驗(yàn)在Window10系統(tǒng)下,利用Python語言,pytorch深度學(xué)習(xí)框架完成。硬件環(huán)境為CPU Intel i7-8750H,內(nèi)存8 GB,顯卡NVIDIA GeForce GTX 1060。使用的事件相機(jī)是iniVation公司生產(chǎn)的eDVS型號相機(jī),并基于caer庫自行開發(fā)了軟件并進(jìn)行了數(shù)據(jù)采集。
采集了20個(gè)人的9種人體常見的動(dòng)作數(shù)據(jù),分別是行走、跳躍、奔跑、揮手、轉(zhuǎn)身、拾取、坐下、踢腳、喝水。每人每種動(dòng)作依次在室外空曠環(huán)境下各采集20次,除了坐下這一動(dòng)作其余都是站立完成,拾取、喝水等動(dòng)作根據(jù)測試者習(xí)慣左手或是右手進(jìn)行實(shí)驗(yàn)。每次數(shù)據(jù)采集以一個(gè)完整動(dòng)作執(zhí)行結(jié)束為限,下次開始前動(dòng)作復(fù)位,以便采集下一次完整的動(dòng)作。
實(shí)驗(yàn)前將采集到的所有文件按照“動(dòng)作名稱_序列號”命名,隨機(jī)取出80%為訓(xùn)練集,剩余部分作為測試集。讀入事件流數(shù)據(jù)后采用批訓(xùn)練的方式進(jìn)行訓(xùn)練,即在實(shí)驗(yàn)過程中一次性輸入一批訓(xùn)練數(shù)據(jù),可以加快動(dòng)作識別網(wǎng)絡(luò)的訓(xùn)練過程。經(jīng)過多次實(shí)驗(yàn)比較,在表1所示設(shè)置的參數(shù)下,模型的收斂速度較快且準(zhǔn)確率也較高。其中帶*的參數(shù)為本文模型特有的參數(shù)選擇。
表1 動(dòng)作識別神經(jīng)網(wǎng)絡(luò)模型的參數(shù)設(shè)置Tab.1 Parameter setting of action recognitionneural network model
實(shí)驗(yàn)結(jié)果如圖6所示,圖中橫坐標(biāo)為迭代時(shí)期數(shù),縱坐標(biāo)為訓(xùn)練數(shù)據(jù)的準(zhǔn)確率、交叉熵。
圖6 3種n取值對應(yīng)的變化過程Fig.6 corresponding to three n values
圖6(a)中表示3種n的取值在訓(xùn)練過程中準(zhǔn)確率的變換過程。隨著迭代次數(shù)的增加,模型在訓(xùn)練集上的準(zhǔn)確率整體呈上升趨勢,直到迭代到一定的次數(shù)之后結(jié)果基本趨于穩(wěn)定。同時(shí)可以看出n為2 048時(shí)較快趨于穩(wěn)定且準(zhǔn)確率最高。圖6(b)中表示3種n的取值在訓(xùn)練過程中交叉熵值的變換過程。由圖7(b)可知穩(wěn)定時(shí),n=1 024的交叉熵值為0.294,n=2 048的交叉熵值為0.204,n=4 096的交叉熵值為0.319。
表2 3種n值的準(zhǔn)確率對比Tab.2 Accuracy comparison of three n values
考慮到模型的參數(shù)優(yōu)化和運(yùn)算時(shí)間,同時(shí)盡量遵循用較少的事件來描述一個(gè)完整動(dòng)作過程的原則。如圖7所示,選取n為2 048時(shí)論文方法在測試集中各類動(dòng)作的準(zhǔn)確率均在87%以上,平均準(zhǔn)確率為91.3%。
圖7 行為識別結(jié)果的混淆矩陣Fig.7 Confusion matrix of behavior recognition results
相機(jī)作為一種光學(xué)傳感器,容易受到光照的影響,為了測試本文行為識別方法的魯棒性[18]和事件相機(jī)的優(yōu)勢,分別在一般光照、強(qiáng)逆光和暗光下采集數(shù)據(jù)。每次采集時(shí),傳統(tǒng)相機(jī)和事件相機(jī)同時(shí)記錄,分別保存為視頻和自定義的二進(jìn)制文件。
自定義的二進(jìn)制文件具體格式為: 事件位置坐標(biāo)(x,y)采用short數(shù)據(jù)類型(占用2字節(jié)), 時(shí)間戳t(單位:s)采用double64數(shù)據(jù)類型(占用8字節(jié)),極性不記錄(背景光強(qiáng)相反會(huì)引起極性相反,故不在本實(shí)驗(yàn)考慮范圍),以一個(gè)揮手動(dòng)作為例,二進(jìn)制文件共記錄了27 833個(gè)事件,總字節(jié)數(shù)為27 833×(2+2+8)=333 996;而對應(yīng)的彩色視頻記錄為 128×128 pixels,幀率為60幀/s,時(shí)長2 s,總字節(jié)數(shù)為5 898 240,由此可知二進(jìn)制文件的字節(jié)數(shù)約為視頻文件的1/17,故采用二進(jìn)制文件可以節(jié)省大量內(nèi)存空間。
圖8為不同光照下采集動(dòng)作數(shù)據(jù)的圖像。
圖8 不同光照下采集動(dòng)作數(shù)據(jù)的圖像Fig.8 Images of action data are collected under different light
如圖8(a)、8(b)、8(c)的左圖是用OpenCV顯示得到的傳統(tǒng)幀圖像,右圖是事件幀圖像??梢悦黠@看出,圖8(a)中的左圖所示,傳統(tǒng)相機(jī)記錄時(shí)存在地面反光;圖8(b)中的左圖所示,在強(qiáng)逆光下傳統(tǒng)相機(jī)存在曝光過度的問題;圖8(c)中的左圖中出現(xiàn)較多模糊和光線較暗;而事件相機(jī)都未出現(xiàn)這些問題。
從表3中可以看出,一般光照下基于事件相機(jī)的識別準(zhǔn)確率可以達(dá)到91.3%,可滿足實(shí)際使用的要求;在強(qiáng)逆光和暗光的環(huán)境對準(zhǔn)確率的影響也較小。但不同光照條件對基于傳統(tǒng)相機(jī)的識別準(zhǔn)確率存在嚴(yán)重的影響。這說明本文的行為識別方法具有良好的魯棒性。
表3 不同光照下傳統(tǒng)相機(jī)和事件相機(jī)的識別準(zhǔn)確率Tab.3 The recognition accuracy of traditional camera and event camera under different light (%)
為了進(jìn)一步驗(yàn)證本文方法的有效性,在一般光照下與文獻(xiàn)[10,13]的行為識別方法進(jìn)行對比,對比實(shí)驗(yàn)結(jié)果如表4所示。
表4 不同方法對比的實(shí)驗(yàn)結(jié)果Tab.4 The experimental results were compared by different methods
從表4中可以看出,本文與文獻(xiàn)[10,13]的識別方法相比:1) 文獻(xiàn)[10]采用的方法是通過提取x-y,x-t,y-t等人工特征,識別步驟繁瑣;而本文利用卷積神經(jīng)網(wǎng)絡(luò)可以自動(dòng)提取行為特征,端到端的方式輸出識別結(jié)果,為事件相機(jī)識別方法提供了新的思路。2) 本文在輸入網(wǎng)絡(luò)前進(jìn)行數(shù)據(jù)的預(yù)處理,將事件流數(shù)據(jù)看作為三維數(shù)組直接進(jìn)行噪聲去除,比文獻(xiàn)[10,13]提高了動(dòng)作識別模型的準(zhǔn)確率。3) 在訓(xùn)練時(shí)間上,得益于事件數(shù)據(jù)的預(yù)處理步驟和模型中共享的卷積核來減少參數(shù),大大減少了模型參數(shù)量和訓(xùn)練時(shí)間。
在不同光照條件下,利用事件相機(jī)采集9種常見人體動(dòng)作數(shù)據(jù)集,對原始數(shù)據(jù)進(jìn)行濾波、空間降采樣預(yù)處理后作為網(wǎng)絡(luò)的輸入,再利用神經(jīng)網(wǎng)絡(luò)通過訓(xùn)練自動(dòng)學(xué)習(xí)事件流空間中的動(dòng)作特征,最后使用分類器對每一種動(dòng)作進(jìn)行識別分類。該方法省去了提取人工特征的步驟,實(shí)現(xiàn)了端到端的處理數(shù)據(jù)輸入。實(shí)驗(yàn)表明動(dòng)作識別方法的有效性和可靠性,在一般光照下識別的準(zhǔn)確率達(dá)到91.3%,不同光照條件對所提出的識別方法影響較小。