楊海紅
(山西旅游職業(yè)學院 計算機科學系,山西 太原 030031)
隨著計算機視覺技術(shù)的迅速發(fā)展,如何從包含視覺混亂和多人的復雜場景中提取有用的信息顯得尤為重要。然而,遮擋和形變的物體以及分散注意力的運動線索使語義信息提取變得十分困難。對于大多數(shù)應用來說,低層級信號的大多數(shù)細節(jié)都是不相關(guān)的,重要的信息通常出現(xiàn)在圖像或視頻的顯著部分。這就需要能夠從復雜和有噪聲的視覺數(shù)據(jù)中可靠地提取出有用的信息。常用的特征提取網(wǎng)絡之一是卷積神經(jīng)網(wǎng)絡[1]。它們能夠從復雜的視覺數(shù)據(jù)中進行歸納,適合于現(xiàn)實場景中的視覺應用。本文率先分析了使用神經(jīng)網(wǎng)絡定位多人場景中顯著人體運動的潛力,因為這種場景對于真實環(huán)境中的視覺應用是比較典型的。本文通過對某個場景進行深入對比研究,從一個典型的單人實驗擴展到包含多人的情況。其中一個人做了一個動態(tài)的人體手勢,而其他人則是被動的旁觀者,只執(zhí)行一些細微且與任務無關(guān)的動作。卷積神經(jīng)網(wǎng)絡的目的是從圖像序列中檢測和定位出手勢的執(zhí)行人,并忽略其他的非手勢運動。為實現(xiàn)這一目的,本文提出一種三維卷機神經(jīng)網(wǎng)絡結(jié)構(gòu),該結(jié)構(gòu)將來自Kinetic設(shè)備采集的包含RGB-D信息的幀序列作為其輸入。它經(jīng)過端到端的訓練以產(chǎn)生具有明亮像素的二維輸出,亮的像素代表手勢執(zhí)行者的空間位置。我們使用3D的卷積核,它允許網(wǎng)絡輸入固定大小的圖片序列。
在視覺數(shù)據(jù)中的檢測和定位任務上,傳統(tǒng)方法是通過使用Haar小波模板[2],方向梯度直方圖(HoG)[3],或者光流直方圖(HoF)與方向梯度直方圖(HoG)相結(jié)合[4]來實現(xiàn)的。輸入來自微軟Kinect等設(shè)備的RGB-D數(shù)據(jù),這些特征也被擴展到深度通道,例如定向深度直方圖(HoD)[5]。為在圖像中定位一個人,許多研究使用了滑動窗口的方法[6]。隨著卷積神經(jīng)網(wǎng)絡[7]取得了極大的進展,它們也開始被廣泛應用于行人檢測任務,并展示出與早期基于特征工程的方法相比更先進的性能[8]。常見的數(shù)據(jù)集[9]由包含了機動車和行人的交通場景圖像組成。然而,行人檢測任務只是簡單地檢測和定位人,它沒有考慮一個人是否正在執(zhí)行特定的動作。
在動作識別和手勢識別的領(lǐng)域中通常更加關(guān)注執(zhí)行人的實際運動。傳統(tǒng)的特征工程方法通常使用手工提取的特征,包括膚色建模[10]或運動分析[11]。最近,各種深度學習特征提取方法也被廣泛應用于手勢識別[12]和動作識別[13-14]的任務。雖然這些研究旨在區(qū)分不同類型的運動并進行分類,但它們只針對單人的場景。一些廣泛使用的數(shù)據(jù)集[15]大都包含單人的場景,研究結(jié)果也隱式地假設(shè)系統(tǒng)的輸入只包含一個人。然而在實際機器人應用中,例如在辦公室[16]或博物館[17],選擇一個人作為機器人的交互伙伴是很重要的。在這些研究中,計算了場景中關(guān)于人的高層級知識,例如,臉的位置和大小,到機器人的距離,以及人最后一次說話后經(jīng)過的時間?;谶@一知識,使用一些啟發(fā)式方法來對活躍的人進行決策,例如社會距離分數(shù)來執(zhí)行[18]。本文方法側(cè)重于定位出主動處理傳感器的人。此外,我們的評估直接基于低層級信號,并使用定量指標來評估系統(tǒng)性能。
在關(guān)于顯著性的研究中,我們調(diào)研一些相關(guān)工作,它們直接在低層級信號上來確定視覺數(shù)據(jù)中的相關(guān)部分。顯著性描述某些數(shù)據(jù)中與其他數(shù)據(jù)顯著不同的獨特元素。許多顯著性研究著眼于人眼跟蹤數(shù)據(jù),以比較計算系統(tǒng)的結(jié)果[5]。傳統(tǒng)的顯著性和視覺注意力模型通常直接使用從實際人類視覺系統(tǒng)的神經(jīng)學研究中已知的特征。根據(jù)Bylinskii等人[5]的說法,目前最準確的顯著性計算模型是基于深度學習的網(wǎng)絡結(jié)構(gòu),例如Kruthiventi等人[19]所使用的方法。然而,我們所經(jīng)歷的世界并不是靜止的,事實上運動已經(jīng)顯示出顯著的影響來吸引我們的注意力。然而,Gullberg和Holmqvist等人[20]對這一事實提出異議,并將Nobe等人[21]的觀察結(jié)果歸因于特定的實驗裝置。他們認為人類處理手勢的方式受到他們所處的社會環(huán)境的嚴重影響。Riche等人[22]根據(jù)RGB-D數(shù)據(jù)計算了光流特征,并識別了與場景中其他運動不同的圖像區(qū)域。這些現(xiàn)象即被解釋為突出的運動。相比之下,本文的方法直接使用低層級的深度數(shù)據(jù)作為信號,并且直接針對多人場景進行設(shè)計。
為評估一個包含顯著運動的多人場景,本文設(shè)計一個實驗,在一個有人的場景,其中一個人做一個動態(tài)的人體姿勢。這個活躍的人被隨機安排在房間的任意位置。對于有監(jiān)督學習的神經(jīng)網(wǎng)絡,我們需要一個具有足夠樣本的大數(shù)據(jù)集來讓網(wǎng)絡進行任務的學習。每個樣本是代表這種多人場景的幀序列。此外,每個序列還需要一個標注來編碼執(zhí)行人的位置。在本節(jié)中,我們將描述如何制作這樣的數(shù)據(jù)集。然后,本文針對該數(shù)據(jù)集提出一個三維卷積神經(jīng)網(wǎng)絡結(jié)構(gòu),以在該數(shù)據(jù)集上執(zhí)行檢測和定位任務的訓練及測試。
由于卷積神經(jīng)系統(tǒng)通常需要大量準備充分的數(shù)據(jù)集來獲得良好的結(jié)果[17],本文通過將一個人的標注片段系統(tǒng)地組合成多人序列。利用微軟Kinect設(shè)備來采集RGB-D數(shù)據(jù),并人工地使用其深度通道創(chuàng)建多人場景。
使用RGB-D傳感器的優(yōu)點是可以獲得深度信號。信號中的值越大意味著與傳感器的距離更大。這使我們能夠方便地組合多個標注記錄,使結(jié)果看起來像真實的標注序列。
在數(shù)據(jù)收集過程中,本文記錄手勢執(zhí)行者和被動人的身體姿勢。在這些記錄中,一個人被放在一個大房間中央的Kinect傳感器前面,使得這個人可以很容易地被裁剪,而不會有任何家具遮擋等問題,便于數(shù)據(jù)采集。此外,本文記錄大量的空房間場景,用作生成序列的背景幀。
執(zhí)行者主要執(zhí)行八個類似命令的身體手勢。這些手勢分別代表不同的手臂運動(見圖1)。執(zhí)行者也進行一些隨機的身體姿勢,比如以不同的視角面對傳感器,同時垂下手臂,交叉手臂或稍微移動腿部,但不要明顯地移動手臂。
圖1 手勢數(shù)據(jù)集
雖然同一個人的每個手勢執(zhí)行都不同(受試者內(nèi)部的可變性),但多人之間動作執(zhí)行的差異要更大(受試者之間的多樣性)。為了保證在記錄的手勢執(zhí)行樣本中有足夠的多樣性,讓6個受試者分別執(zhí)行圖1中列出的手勢。其中女性1人,男性5人,年齡在25~34歲之間。每一個手勢都被重復執(zhí)行多次。所有受試者總共執(zhí)行了568個手勢實例,得到共計42 000幀圖像可用于數(shù)據(jù)集生成。使用Vatic視頻標注工具,對這些幀標記了行人包圍框以及人頭部的邊界框(見圖2)。
圖2 幀標注示意圖
獲得幀數(shù)據(jù)和標記之后,就可以根據(jù)任何期望的場景描述來生成序列。除這些序列之外,本文還額外生成一個教師幀(用作數(shù)據(jù)標簽)。這個二維的幀代表了場景中人的位置,并以白色顯示動作執(zhí)行人。生成序列的基本策略是將人的輪廓從記錄的深度通道中分離出來,并將其放置在背景記錄中頂部的隨機位置,如圖3所示。
圖3 多人序列生成過程示意圖
本文根據(jù)多個場景設(shè)置將多個人進行了隨機放置,從而生成包含多人場景的數(shù)據(jù)集。主要包括以下五種場景:
(1)沒有人的空房間:占比為所有序列的10%;
(2)一個人做一個手勢:占比為所有序列的20%;
(3)一個人不做手勢:占比為所有序列的20%;
(4)兩個人,其中一個人執(zhí)行手勢:占比為所有序列的30%;
(5)三個人,其中一個人執(zhí)行手勢:占比為所有序列的20%。
2.1.1 序列長度
本文將數(shù)據(jù)集的每個樣本分別生成為15個連續(xù)幀的序列。幀率為30幀/秒,即這個長度相當于記錄的手勢表演的半秒鐘。手勢序列長度分布見表1。
表1 手勢數(shù)據(jù)集統(tǒng)計分布
2.1.2 訓練、驗證和測試集
我們以一種易于分離的方式將記錄的手勢劃分成訓練、驗證和測試的三個子集,為實現(xiàn)這種分離方式,數(shù)據(jù)集在生成的過程中會產(chǎn)生5個不同的小子集。每個子集使用完全不同的記錄幀集合,因此這5個子集之間沒有重疊。網(wǎng)絡然后可以使用三個子集作為訓練集來訓練,剩下的兩個子集分別用于驗證和測試。每個子集至少包含512個序列。
2.1.3 移除地平面
當在Kinect數(shù)據(jù)的深度通道中分離一個人的輪廓時,我們發(fā)現(xiàn)在將人從其周圍切開之前移除地平面是有必要的,如圖4所示。這有利于產(chǎn)生了更干凈的輪廓。我們可以假設(shè)一個地面的直線方位和相機的直線方位,使得地面在深度信號中表現(xiàn)為線性梯度。為去除地平面,我們假設(shè)在這個梯度附近的所有像素都屬于地板,并屏蔽掉匹配的值。這個簡單的步驟極大地改善我們的方法對于輪廓的提取,無論是在拼接多個記錄幀或者是生成教師幀時。
圖4 幀中提取人物輪廓示意圖
2.1.4 數(shù)據(jù)擴充
為進一步豐富數(shù)據(jù)的多樣性。將每個人放入場景之前,改變了其亮度值。亮度的變化模擬離傳感器更近或更遠的不同位置,并且是從高斯分布中采樣的。
2.1.5 教師幀生成
它顯示場景中所有人的位置,并對執(zhí)行者進行了編碼。每個人都用他們的輪廓進行標記。每個輪廓都被涂上白色(執(zhí)行者)或更深的灰色(旁觀者)。由于生成該幀的目的是用于網(wǎng)絡的訓練,所以它被稱為教師幀,如圖5和圖6所示。每個輪廓內(nèi)部的細節(jié)都被忽略。幀的每個像素都應該編碼像素的內(nèi)容(即執(zhí)行者、旁觀者、背景)。輪廓的亮度可以有兩個不同的值,這取決于在場景中人的扮演角色。執(zhí)行者被分配全亮度(灰度值255),被動的人被分配全亮度的30%(0.3×255≈76)。背景像素則被生成為黑色。
圖5 單人手勢序列
圖6 多人手勢序列
本節(jié)將描述兩種不同的網(wǎng)絡體系結(jié)構(gòu)。一種使用3D卷積,另一種使用標準的2D卷積,用于在評估階段的性能比較。
2.2.1 網(wǎng)絡輸入
我們的3D卷積網(wǎng)絡接收15幀固定長度的序列作為其輸入。每幀寬160像素,高120像素,可以清楚地看到單個身體部分和演員的運動。我們用作對比的2D卷積網(wǎng)絡結(jié)構(gòu)也使用相同的幀格式,但只接收單幀作為其輸入。在將幀傳遞給網(wǎng)絡之前,我們將所有深度值標準化到-1到1的范圍,以統(tǒng)一激活,使得他們集中在零附近。
2.2.2 網(wǎng)絡輸出
兩種結(jié)構(gòu)最終都產(chǎn)生了一個二維幀作為它們的輸出,低值代表背景,高值代表場景中的人。輸出層的單元產(chǎn)生該輸出幀的單個像素。選擇輸出層的大小意味著在輸出的視覺描述能力和訓練網(wǎng)絡的計算成本之間進行權(quán)衡。我們決定輸出尺寸為,寬32像素,高24像素,結(jié)果輸出層為768個單位。
2.2.3 回歸任務
為從提取的特征中產(chǎn)生2D的空間定位結(jié)果,我們采用包含一個隱藏層的多層感知器。它的輸出層中每個像素都需要一個神經(jīng)元,即768個單元。
2.2.4 訓練
通過最小化均方誤差損失函數(shù)來訓練網(wǎng)絡的回歸任務。并使用Adam優(yōu)化算法的梯度下降策略進行權(quán)重更新[15]。為防止過擬合,我們在多層感知器的隱藏層之后使用Dropout正則化策略。
2.2.5 3 D網(wǎng)絡結(jié)構(gòu)
我們的主網(wǎng)絡有三個帶有3D卷積的卷積層。每個卷積之后是ReLU激活層和最大池化層。特征提取塊后接著多層感知器執(zhí)行回歸任務。
2.2.6 2D網(wǎng)絡結(jié)構(gòu)
作為性能比較,我們同樣選取神經(jīng)網(wǎng)絡結(jié)構(gòu),該結(jié)構(gòu)沒有考慮時序信息,只處理單幀輸入。從總體結(jié)構(gòu)來看,它與前面描述的3D網(wǎng)絡相同,主要區(qū)別在于它使用2D卷積而不是3D卷積。因此,第一層的輸入不是序列幀。相反,只有每個序列的最后一幀被認為是網(wǎng)絡的輸入。
網(wǎng)絡實現(xiàn)和依賴庫。我們使用OpenNI 1.5.x來收集Kinect記錄。使用開源工具oni2avi將這些視頻轉(zhuǎn)換為常規(guī)視頻,并使用Vatic提供的瀏覽器界面對這些視頻進行標注。幀序列和教師幀是通過自定義Python腳本使用多個開源庫生成的,例如:OpenCV、Numpy和SciPy。我們使用TensorFlow實現(xiàn)不同的網(wǎng)絡結(jié)構(gòu),并在英偉達GTX 1080Ti上進行訓練。
為評估所提出的網(wǎng)絡結(jié)構(gòu)是否能夠很好地學習到期望的顯著性機制,我們進行一系列實驗。我們用生成的多人數(shù)據(jù)集訓練這兩種網(wǎng)絡結(jié)構(gòu),并對來自該數(shù)據(jù)集的測試樣本進行評估。
無論是2D網(wǎng)絡還是3D網(wǎng)絡,在結(jié)構(gòu)上都十分相似,主要區(qū)別是使用2D或者3D卷積,網(wǎng)絡結(jié)構(gòu)的對比如表2所示。
表2 網(wǎng)絡結(jié)構(gòu)對比
3.1.1 3D網(wǎng)絡
如圖7所示,3D網(wǎng)絡包含三個卷積層,分別包含8、16和32個3×3×3的濾波核,帶有ReLU激活層,多層感知器中的隱藏層中包含了384個隱藏單元,在訓練階段以2×2×2的步長使用3×3×3最大池化和Dropout正則化。Dropout層放置于隱藏層之后。
圖7 三維網(wǎng)絡結(jié)構(gòu)示意圖
3.1.2 2D網(wǎng)絡
如圖8所示,2D網(wǎng)絡包含三個卷積層,分別包含4、16和16個維度為3×3、5×5和3×3的卷積核,帶有ReLU激活,以及一個具有384個單元隱藏層的多層感知器。在訓練期間采用步長為2×2的3×3最大池化層和Dropout的正則化。Dropout層同樣位于隱藏層之后。
圖8 二維網(wǎng)絡結(jié)構(gòu)示意圖
使用Xavier初始化方法分別初始化兩個網(wǎng)絡的權(quán)重。然后通過最小化均方誤差損失函數(shù)進行訓練。權(quán)重更新是使用Adam優(yōu)化器[22]進行的,學習率為0.001,學習率以0.9倍率衰減,以小批量進行訓練且批量大小為4。
我們對每個網(wǎng)絡進行5次重復訓練,并計算測試集的平均分數(shù)。2D網(wǎng)絡訓練40個迭代周期,3D網(wǎng)絡則訓練50個迭代周期。在訓練期間,Dropout概率被設(shè)置為50%。
為評估網(wǎng)絡是否正確地檢測到活動的手勢執(zhí)行者,我們定義一個評價指標來評估預測結(jié)果的準確性,如圖9所示。
圖9 預測結(jié)果和標注結(jié)果對比圖
數(shù)據(jù)集中的教師幀將活躍的表演者編碼為白色的輪廓。正確的網(wǎng)絡預測也應該在輪廓內(nèi)具有其最亮的值。該度量的基本思想是查看網(wǎng)絡輸出中最亮像素的位置,并比較該位置是否是教師幀中的白色像素。然而,由于原始教師幀的重新采樣,它不僅僅由黑色(背景)、白色(前景)和0.3的亮度值(旁觀者)組成。因此,我們沒有顯式地檢查白色,而是將該值與閾值0.3進行比較。高于該閾值的值被認為足夠亮。選擇0.3的閾值是因為它是旁觀者的最低亮度。
由于有些序列不包含活動的手勢執(zhí)行者,因此教師幀為全黑色像素。在這種情況下,我們檢查網(wǎng)絡預測是否包括任何高于0.3閾值的像素。如果所有像素的值都低于該閾值,則返回真。否則,返回假。
對于兩個幀的比較,度量返回真或假,作為輸出是否正確的決定。然后在整個測試集中使用這個正確性度量來計算網(wǎng)絡的運動檢測分數(shù):
為了量化網(wǎng)絡對運動檢測任務的學習程度,我們確定了一個基線分數(shù),即當執(zhí)行隨機預測時的分數(shù),為5%。
如表3所示,兩個網(wǎng)絡結(jié)構(gòu)在測試集上展示出了非常相似的整體性能,可見兩個網(wǎng)絡都成功地從數(shù)據(jù)集學習到了期望的顯著性檢測任務。他們能夠在場景中檢測和定位出主動手勢,準確率明顯高于隨機預測的基線分數(shù)。為以更精細的方式比較兩個網(wǎng)絡的性能,我們將測試集分成多個子集,每個子集只包含相同活動手勢的序列。這為每個手勢產(chǎn)生了8個子集,加上兩個序列子集,其中有空場景和只有旁觀者而沒有執(zhí)行者的場景。然后,我們在這些子集上評估運動性能度量,并比較兩個網(wǎng)絡的性能得分,如表4所示。
表3 網(wǎng)絡總體性能對比
表4 不同網(wǎng)絡在不同子集上的手勢預測結(jié)果對比
當比較不同子集的結(jié)果時,有兩個得分明顯較低的類別:“Stop”手勢和旁觀者。我們發(fā)現(xiàn)教師幀中“Stop”手勢有時生成得不正確,因此有一些幀不包含人的輪廓,只包含手的微小輪廓,如圖10所示。這是因為在其他手勢中,手臂離傳感器更近。當生成教師幀時,輪廓隨后被錯誤地生成,并存在訓練和測試數(shù)據(jù)中。該度量將這些錯誤生成的幀與網(wǎng)絡預測進行比較,因此為這些序列產(chǎn)生了低的分數(shù)。對于這兩個手勢類別,3D網(wǎng)絡顯示出比2D網(wǎng)絡更高的性能。在只有旁觀者的場景下,它也顯示出低得多的標準差。這個現(xiàn)象揭示3D網(wǎng)絡如何系統(tǒng)地和更好地區(qū)分實際的執(zhí)行者和在同一幀中相對于其他人顯得更活躍的人。
圖10 正確/不正確的教師幀及其預測結(jié)果示意圖
3D網(wǎng)絡結(jié)構(gòu)對于手臂位置更加多樣化的手勢,顯示出更高的性能?!癤”和“Check”手勢就是這種情況,它們都包含在空中畫一個符號。這些運動的手臂位置都較低,如圖11所示。從單幀的角度看,手臂的擺放位置看起來更像是旁觀者的手臂位置。3D網(wǎng)絡接收完整的圖像幀序列作為輸入,其覆蓋范圍不止單幀圖像。這也是為什么3D網(wǎng)絡在檢測這種姿勢的主動運動方面表現(xiàn)得更好。同樣地,我們觀察到3D網(wǎng)絡在檢測“Circle”手勢時的分數(shù)也更高,其包含幀中的手臂位置也非常低。
圖11 低位置的手勢示意圖
實驗結(jié)果表明,神經(jīng)網(wǎng)絡的能力非常適合在多人場景中檢測和定位顯著的運動,而且像2D或3D卷積核這樣的設(shè)計決策應該根據(jù)所選手勢集的特征來做出。這兩種結(jié)構(gòu)的總體性能非常相似。同時,我們還可以發(fā)現(xiàn),手勢集的選擇對網(wǎng)絡特征學習的影響也不容忽視。2D網(wǎng)絡的總體良好表現(xiàn)可能是基于我們實驗中使用的是類似命令的手勢。由于2D網(wǎng)絡的優(yōu)勢對于清晰的手臂姿勢來說是顯而易見的,因此它在這種姿勢設(shè)置下表現(xiàn)良好是有意義的。對于不同手勢,網(wǎng)絡結(jié)構(gòu)表現(xiàn)出不同的結(jié)果也指出了這樣的事實,即某些手勢特征影響了網(wǎng)絡結(jié)構(gòu)能夠?qū)W習到該手勢的程度。
我們的方法不需要預處理步驟,如Riche等人[21]中在顯著圖融合過程中的透視校正,這些步驟確保他們的系統(tǒng)在人到傳感器的不同距離上進行工作。這在本文中是不需要的,因為由于我們的數(shù)據(jù)增強技術(shù),我們的數(shù)據(jù)集中已經(jīng)包含不同距離的人。神經(jīng)網(wǎng)絡能夠從這些數(shù)據(jù)中具有泛化能力,并在沒有人工預處理的情況下學習這些不變性。因此,我們的工作重心轉(zhuǎn)移到如何創(chuàng)建合適的數(shù)據(jù)集。
本文引入卷積神經(jīng)網(wǎng)絡結(jié)構(gòu)來檢測和定位多人場景中的顯著身體運動。所采用的3D神經(jīng)網(wǎng)絡不需要任何手動預處理步驟,即可定位出一個人所執(zhí)行的身體姿勢。本文提出的系統(tǒng)實現(xiàn)了一種顯著性機制,該機制能夠針對特定身體運動線索做出反應。實驗結(jié)果表明,本文的網(wǎng)絡結(jié)構(gòu)可以可靠地檢測和定位到場景中執(zhí)行顯著運動的人。