張恒鑫,葉穎詩,蔡賢資+,魏福義
(1.華南農(nóng)業(yè)大學 數(shù)學與信息學院,廣東 廣州 510642; 2.電子科技大學 信息與軟件工程學院,四川 成都 610054)
人體動作識別是智能社會的重要輔助技術,在長者看護、人機交互、智能安防、視頻搜索和敏感場所異常監(jiān)控等方面都有著應用價值。視頻中存在著人體、物體、事件和場景等復雜的信息,本文研究的人體動作識別是對視頻中多種信息的快速高效分析和理解。
以特征是手工設計或自動學習作為區(qū)分依據(jù),可分成傳統(tǒng)的動作識別方法和基于深度學習的動作識別方法兩種。為減少特征的維度和提高識別效率,傳統(tǒng)的動作識別方法一般需要先尋找視頻三維空間中的時空興趣點,然后在其鄰域內(nèi)提取表達有效動作特征[1],再在興趣點或軌跡的時空鄰域內(nèi)提取動作特征。在目前的傳統(tǒng)動作行為識別研究中,基于密集軌跡的識別技術取得了除深度學習方法外最好的實驗效果[2],但傳統(tǒng)的行為識別方法只在特定場景下效果較為突出,難以移植。相反,深度學習方法可以自動學習構建出有效的動作特征,特別適合復雜的場景,具有非常優(yōu)良的泛化能力和魯棒性。近年來,基于深度學習的方法在計算機視覺領域取得了非凡的成果。但深度學習需要大量的數(shù)據(jù)支撐,不適合小型數(shù)據(jù)集的處理,且整個模型是端到端的,是個黑盒模型[3]。
在很多應用場景,識別效率是非常重要的性能指標。本文結合兩者優(yōu)勢,提出一種借助深度學習模型獲取人體關節(jié)點信息并用傳統(tǒng)方法構建時空特征的動作識別算法,經(jīng)實驗驗證能得到快速高效的識別效率。
動作的發(fā)出者是人體,非人體區(qū)域的特征不構成人體動作識別的主要判別依據(jù),模型的注意力應聚焦在人體上?;诖耍疚奶岢鱿葯z測出人體興趣區(qū)域,再對人體關節(jié)點進行提取建模。算法提取的特征簡單高效,且消除了復雜背景對人體動作識別的擾動,具有良好的魯棒性。整體流程包括以下4個步驟,如圖1所示:
圖1 整體流程
(1)以一定間隔抽取一個視頻的若干幀,形成輸入幀序列;
(2)利用人體檢測算法得到各幀中感興趣的人體區(qū)域;
(3)借助人體姿勢估計算法得到人體區(qū)域中人體關節(jié)點的二維坐標信息,并構建人體骨架模型,然后計算關節(jié)向量的時空幾何角度描述特征;
(4)將行為特征輸入到訓練好的k最近鄰(k-nearest neighbor,kNN)分類器中進行分類,輸出行為標簽。
人體檢測中特征的選擇尤其重要,例如Haar小波特征、edgelet特征和運動特征等。在目前的研究中方向梯度直方圖(histogram of oriented gradient,HOG)是使用最廣泛的人體檢測特征,它可以很好地捕捉和描摹人體,但存在著計算量大、運算速度慢的致命缺陷[4],不適合對實時性要求較高的應用場景。
表征身體外沿的輪廓特征可以提供人體檢測的重要信息,并且相鄰像素值差的正負是有效表達人體輪廓的關鍵[5]。而局部二值模式(local binary pattern,LBP)簡潔編碼了相鄰像素值差的正負信息,具有無需預處理和后處理、灰度不變等優(yōu)點[6]。
如圖2所示,LBP算子在3×3的區(qū)域上進行計算,用中心點灰度值順時針依次與相鄰8個灰度值比較。若比較的灰度值大于中心點灰度值,則該位置被賦值為1;若否,則該位置被賦值為0。隨后將按比較順序組成的二進制數(shù)轉(zhuǎn)換為十進制數(shù),最后以該十進制數(shù)作為區(qū)域中心點的LBP值。
圖2 LBP算子
假設輸入是一張普通的RBG圖,首先需要將其轉(zhuǎn)換為圖3(a)的灰度圖以便下面的處理。為了讓LBP特征更加專注于人體的輪廓,本文采用廣泛使用的Sobel邊緣檢測算子處理灰度圖,其對邊緣定位準確的同時具有很強的魯棒性[7]。在Sobel圖上提取LBP描述子,可以提取出更加有效的特征,并且過濾掉了許多噪聲。
圖3 灰度圖及Sobel圖像
在Sobel圖的基礎上,借助LBP算子可以得到LBP圖的每一個像素的灰度值大小。因為LBP值的計算需要3×3的運算區(qū)域,所以會忽略圖像周圍1個像素的區(qū)域。
算法將一個窗口份分割成m×n個單元(cell),將每2×2個相鄰的單元組成一個塊(block)。特征的提取在塊上進行,統(tǒng)計每個塊中的LBP值直方圖,然后將所有塊的LBP直方圖串聯(lián)形成最終的LBP描述子(LBP Descriptor),如圖4所示,黑色邊界的小格子為單元,左上角深底色內(nèi)部虛線的大格子為塊。
圖4 窗口劃分
如圖5流程所示,為實現(xiàn)快速檢測,使用一個線性支持向量機(support vector machine,SVM)分類器和一個非線性SVM分類器級聯(lián)的方法。首先使用線性分類器Hlin以滑動窗口的方式對輸入的圖像進行多尺度掃描,排除非人體區(qū)域。借助線性分類器Hlin,可以排除大部分(高于90%)的區(qū)域。再使用非線性分類器Hlik精確判別經(jīng)過線性分類器Hlin篩選出來的小部分區(qū)域,最后得到人體區(qū)域。
圖5 級聯(lián)SVM工作流程
關于級聯(lián)SVM的定義以及如何利用線性SVM分類器進行快速掃描,請參見文獻[5]。
最后需要對檢測結果進行非極大值抑制(non-maximun suppression,NMS),這會幫助得到最終的人體區(qū)域,并且可以有效消除誤報。非極大值抑制的工作流程如下:
(1)按得分(Score)降序排列待處理候選框集合H;
(2)選出得分最高的候選框h。遍歷集合H中的其余候選框,與最優(yōu)候選框h計算面積交并比(interection-over-union,IoU)。若IoU高于某個閾值(一般為0.3~0.5),則認為該候選框與最優(yōu)候選框h重疊,將此框從集合H中移出;
(3)重復步驟(2),直到集合H不再變化。
從圖6看出,經(jīng)過非極大值抑制處理,左上角的誤報被消除。
圖6 人體檢測結果與非極大值抑制效果
人體關節(jié)點(Joint)對于描述人體姿態(tài)以及行為具有十分關鍵和有效的信息。當人體表征為不同的姿勢時,關節(jié)點與關節(jié)向量(骨骼)都呈現(xiàn)出不同的空間信息。人的動作可以看作是不同的人體姿態(tài)(如圖7所示)組成的一組序列。因此追蹤關節(jié)點的坐標和探索關節(jié)向量的時空幾何角度信息,可以提供非常直接和可靠的信息來實現(xiàn)人體行為識別。
圖7 人體姿態(tài)
3.1.1 人體關節(jié)點和關節(jié)向量定義
算法使用公開的OpenPose人體骨架識別系統(tǒng)以得到人體關節(jié)點的位置信息[8],其具有兩點優(yōu)勢:
(1)可在普通的RGB圖像中捕捉COCO(common objects in context)模型人體骨架信息,提供場景中人體關節(jié)點的坐標信息。
(2)采用自下而上的人體姿態(tài)估計算法,檢測速度較快,實時性好且精度較高。
本文采用B=(J,V) 來表示一個人體骨架信息,其中J表示的是關節(jié)點位置集合,V表示的是關節(jié)向量集合。下面給出關節(jié)位置與關節(jié)向量的定義:
關節(jié)位置(joint positions,JP):將t時刻(幀)中人體的第k個關節(jié)點位置定義為Jk(t)=(x,y)。
關節(jié)向量(joint vector,JV):根據(jù)關節(jié)點位置信息,對肢體的有效部分進行關節(jié)向量提取,表示為Vmn(t)=Jn(t)-Jm(t)。
OpenPose提供了24個關節(jié)點信息,但并不是所有的關節(jié)點對人體姿勢描述有作用[9]。本文在構成人體骨架的頭顱、軀干和四肢三大部分中,選取有效的關節(jié)點組成相關聯(lián)的關節(jié)向量,最終構建符合人體學和行為學的人體骨架模型。具體選取的關節(jié)點和組成的關節(jié)向量可見圖8(b)以及表1。
圖8 人體骨架模型
表1 關聯(lián)關節(jié)向量定義
3.1.2 缺失值處理
利用OpenPose提取獲得的人體關節(jié)點二維坐標存在兩種數(shù)據(jù)缺失問題:一是場景中的人體部分被遮擋,導致部分關節(jié)點無法被檢測;二是由于OpenPose自身算法模型的限制,對具有歧義的關節(jié)點信息產(chǎn)生數(shù)據(jù)丟失。
考慮到人體關節(jié)點的變化趨勢在極短時間內(nèi)可以看成是一段直線,本文使用最近鄰前后幀進行線性回歸預測缺失值,是一種簡單但有效的補全缺失關節(jié)點的方法。若關節(jié)點Jk(t)=(x1,y1) 發(fā)生缺失,記最近鄰前幀對應關節(jié)點為Jk(t-l)=(x0,y0),最近鄰后幀對應關節(jié)點為Jk(t+m)=(x2,y2),那么缺失關節(jié)點可以由式(1)計算得到
(1)
(1)關節(jié)向量方向余弦特征
當場景中的人體進行某種行為時,其每一段關節(jié)向量與場景都構成一定的位置和角度。因此本文提取關節(jié)向量與坐標系的x軸和y軸所成夾角余弦值作為關節(jié)向量方向余弦特征。
(2)關節(jié)向量夾角余弦特征
另一方面,由同一關節(jié)點連接的兩段關節(jié)向量之間的空間夾角大小也為描述人體行為提供了重要信息。因此還需計算關聯(lián)關節(jié)向量之間的夾角余弦特征來描述人體行為。
(3)關節(jié)向量角度變化率特征
一般來說,引入時域的特征可以更好地表達人體的行為,增加類內(nèi)相似性,減少類間的相似性,提高識別率。因此本文提取同一關節(jié)向量不同時刻間的角度變化速率作為行為判別的時域特征。表2給出了同一個人在單手揮手和雙手揮手兩種行為中右肘到右腕關節(jié)向量的5組角度變化率值:
從表2中可以看出該關節(jié)向量在單手揮手時角度變化率近乎沒有,而在雙手揮手時角度變化率波動劇烈,十分符合視頻中單手揮手是使用左手揮動而右手近乎不動的實際情況。
表2 右肘到右腕關節(jié)向量在兩種行為中的角度變化率
選取的3種關節(jié)向量的時空特征如圖9所示。
圖9 關節(jié)向量時空特征
人體檢測數(shù)據(jù)集正樣本中來自于MIT數(shù)據(jù)庫,共924張圖片,大小為128×64,人體大小約80個像素,且人體在不同的光照條件下穿著不一樣的顏色、紋理和款式等的衣服,并有著不一樣的姿態(tài),包括低頭、行走和站立等,還有著正面和背面等視角;負樣本共50張原圖,囊括了森林、街道、建筑、車輛、冰川、郊野、山川和夜景等各類背景元素。在訓練中,從負樣本原圖中隨機裁取了2000張負樣本,大小與正樣本一致。圖10給出了部分正、負樣本的示例。
圖10 正樣本與負樣本示例
表3給出了在本文算法以及常用的HOG+SVM方法使用相同訓練集樣本訓練后,在相同測試集上的實驗結果,測試機環(huán)境配置為intel i5-8300H+8 G內(nèi)存。
表3 人體檢測模塊實驗結果
從表3中可以看出,在測試環(huán)境中本文提出的人體檢測算法不僅檢測速度比HOG+SVM的方法快約16倍且精度更高。
人體動作識別模塊選擇在廣泛使用的Weizmann數(shù)據(jù)庫上進行實驗。Weizmann數(shù)據(jù)庫包含10種動作(具體的動作如圖11所示),部分動作與動作之間相似度較高(如單腳跳和跑步),為精確識別帶來了不小的挑戰(zhàn)。每種行為由9個人在相同背景下完成,共計90個視頻。視頻長度在28幀-146幀,平均長度為61幀。
圖11 Weizmann數(shù)據(jù)庫定義的行為類別
在實驗中,運用OpenPose算法預先對每個視頻提取出每一幀內(nèi)人體關節(jié)點的二維坐標,每個視頻單獨形成一份數(shù)據(jù)文件。然后讀取每一份數(shù)據(jù)文件,處理缺失值后,以步長4的間隔取樣6幀視頻幀作為單個的輸入幀序列,故一組動作的總特征維度為28×6+12×6+14×(6-1)=310。圖12給出了原地跳躍加擊掌以及彎腰兩種動作的幀序列骨架可視。
圖12 兩種動作的幀序列骨架可視
本文選用kNN作為分類器,其在多分類任務上的表現(xiàn)要優(yōu)于SVM分類器[10]。經(jīng)過實驗,選取近鄰參數(shù)為3時取得較好的分類效果,可以達到88.93%的精度。不同近鄰個數(shù)選取對分類精度的影響如圖13所示。
圖13 不同近鄰參數(shù)的分類精度
圖14是本文行為識別算法的識別率混淆矩陣,可以看出基于人體關節(jié)點時空角度特征對于噪聲干擾魯棒性強,大部分行為的類間區(qū)分度高,識別率高達95%以上。但走、并腳跳和原地跳躍這3類行為由于人體時空變化小、相似性高導致識別率僅有75%左右。
圖14 識別率混淆矩陣
人體動作識別是計算機視覺研究領域一個非常活躍的研究方向,未來將在各種基于視頻的應用系統(tǒng)中廣泛使用,有重大的應用價值[11]。本文結合傳統(tǒng)行為識別方法和深度學習方法提出的算法模型由于選取的特征簡單高效且不需要進行后處理,在實驗中取得了較高的識別率和較為實時的檢測速度,比較適用于場景干涉不復雜和對實時性能要求較高的應用環(huán)境,本文算法已經(jīng)作為聯(lián)合培養(yǎng)基地室內(nèi)人員實時定位系統(tǒng)的動作識別輔助,后續(xù)工作中將對多人場景及人與場景交互等情況做進一步擴展和優(yōu)化。