一種并行化的人體行為識別方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及人體行為識別和分布式計算研宄的技術(shù)領(lǐng)域,尤其是指一種并行化的 人體行為識別方法。
【背景技術(shù)】
[0002] 如今社會在數(shù)字化,智能化的浪潮中以前所未有的速度迅速發(fā)展,人們已經(jīng)不再 滿足于計算機作為生產(chǎn)的工具,希望能從繁瑣的操作中解放自己,讓計算機自主的理解外 部信息,探尋更加自然的交互方式。人體行為識別作為其中一個研宄熱點,受到了越來越多 的關(guān)注。
[0003] 人體行為識別研宄具有非常廣闊的應(yīng)用前景。例如,1)視頻監(jiān)控和視頻檢索,傳統(tǒng) 的視頻監(jiān)控完全依賴于人力進行手動的尋找可疑行為和安全隱患等,將行為識別應(yīng)用于視 頻監(jiān)控中,實現(xiàn)實時的無人監(jiān)控,可以減少人力物力的投入;2)智能家居,通過有效的理解 用戶行為模式,實現(xiàn)家具、生活設(shè)備的自動控制;3)家長監(jiān)護,通過行為識別技術(shù)可以對老 人的一些行為如突然跌倒、長時間未活動等異常行為進行及時的檢測,向家人發(fā)出警報信 息。
[0004] 同時,移動互聯(lián)網(wǎng)、傳感器網(wǎng)絡(luò)、視頻監(jiān)控以及智能終端等技術(shù)的迅猛發(fā)展,由此 導(dǎo)致數(shù)據(jù)量爆炸式增長,數(shù)據(jù)規(guī)模不斷增大。人體行為識別所涉及的行業(yè)和數(shù)據(jù)量也在不 斷擴大。傳統(tǒng)的單機存儲與識別計算已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足需求,進行海量的人體行為識別,大 批量的識別是具有重要研宄意義和價值的。
[0005] 人體行為識別目前分為基于視覺的行為識別和非視覺的行為識別,基于視覺的人 體行為識別集中于計算機視覺領(lǐng)域,利用成像設(shè)備如照相機等采集場景中的信息,通過圖 形圖像的相關(guān)技術(shù)進行行為的跟蹤、識別、分析和理解等;基于非視覺的行為識別主要通過 各種傳感器輸入設(shè)備,如陀螺儀、重力加速器、GPS等獲取人體信息,再采用相關(guān)的機器學(xué)習(xí) 算法進行模型的構(gòu)建與識別?;谝曈X的行為識別易受外在物體、行為著裝、遮擋等影響, 導(dǎo)致誤識別率增加?;趥鞲衅鞯男袨樽R別主要面向于室內(nèi)環(huán)境,傳感器信號噪聲較大,工 作時間短,同時其也受制于便攜性等問題,對基于非視覺的行為識別發(fā)展產(chǎn)生了一定影響。
[0006] 采用Kinect進行人體行為識別和研宄已經(jīng)成為當(dāng)前的新方法和研宄方向,其結(jié) 合了視覺行為識別和非視覺行為識別的優(yōu)點。Kinect可以獲取到場景的深度信息,基于此 可獲取三維的關(guān)節(jié)點數(shù)據(jù),通過計算和變換獲得關(guān)節(jié)點的速度,加速度等信息,如同穿戴加 速度,陀螺儀等傳感器一樣,而不會給人體帶來不便;同時Kinect的RGB攝像頭獲取的視頻 流數(shù)據(jù)仍適用于基于視覺的行為識別機器學(xué)習(xí)算法上。
[0007] 目前廣泛采用的Hadoop框架實現(xiàn)了分布式文件系統(tǒng)HDFS和MapReduce編程模 式,解決了海量數(shù)據(jù)的存儲和計算分析問題,但是MapReduce框架的缺陷:中間結(jié)果寫回文 件系統(tǒng),數(shù)據(jù)線性處理,任務(wù)調(diào)度低效,無法滿足的計算快速和實時性。人體行為識別需要 在大量的數(shù)據(jù)上進行迭代式的計算完成模型的訓(xùn)練,是一項計算密集型和數(shù)據(jù)密集型的任 務(wù),MapReduce并不適合作為計算密集型的計算框架?;趦?nèi)存計算的通用并行計算框架 Spark提出了彈性分布式數(shù)據(jù)集(ResilientDistributedDatasets,RDD),可以在內(nèi)存上 透明地存儲數(shù)據(jù)并且只有在需要的時候才傳輸給磁盤,基于內(nèi)存的計算模式可以讓Hadoop 應(yīng)用程序在內(nèi)存中的執(zhí)行速度提升上百倍,將行為識別算法在Spark上并行化可以極大的 提高訓(xùn)練效率和實時性。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明的目的在于克服現(xiàn)有技術(shù)的缺點與不足,提供一種并行化的人體行為識別 方法,此方法基于Kinect的行為識別過程,同時針對傳統(tǒng)的串行識別算法在Spark上并行 化,提供海量的、可擴展的識別能力。
[0009] 為實現(xiàn)上述目的,本發(fā)明所提供的技術(shù)方案為:一種并行化的人體行為識別方法, 包括以下步驟:
[0010] 1)基于Kinect的深度傳感器獲取人體的關(guān)節(jié)點數(shù)據(jù)和RGB圖像數(shù)據(jù);
[0011] 2)關(guān)節(jié)點數(shù)據(jù)預(yù)處理,保證特征的位移和尺度不變性;
[0012] 3)針對靜態(tài)行為特征的選取,從人體結(jié)構(gòu)出發(fā),選取了人體結(jié)構(gòu)向量、骨骼間的空 間夾角和骨骼長度偏置共三方面的信息進行融合;
[0013] 4)針對動態(tài)行為特征,以靜態(tài)特征所述方法,定義人體結(jié)構(gòu)相似度,在滑動窗口的 基礎(chǔ)上,以結(jié)構(gòu)相似度的變化為搜索策略,根據(jù)當(dāng)前幀與上次搜索幀的變化情況來動態(tài)調(diào) 整滑動窗口的大??;
[0014] 5)基于內(nèi)存計算的通用并行計算框架Spark實現(xiàn)了并行神經(jīng)網(wǎng)絡(luò)算法框架PANN, 從Hadoop分布式文件系統(tǒng)HDFS中讀取特征數(shù)據(jù),分為整體模型、前向計算、梯度計算、預(yù)測 這幾個主要模塊;
[0015] 6)采用擬牛頓法L-BFGS對PANN中的梯度下降法進行優(yōu)化,減少迭代次數(shù)和 Spark框架計算過程中的Stage生成,加快模型的訓(xùn)練速率;
[0016] 7)構(gòu)建完整的識別平臺,包括數(shù)據(jù)輸入層、HDFS存儲層、YARN資源管理層及Spark 和PANN算法應(yīng)用層。
[0017] 在步驟1)中,所述的基于Kinect的深度傳感器獲取的人體骨骼數(shù)據(jù)包括以人體 為目標(biāo)對Kinect的深度信息進行識別能力測定,確定不同距離下關(guān)節(jié)點的深度數(shù)據(jù)變化, 同時以KinectSDK作為接口,相應(yīng)的功能模塊和可視化界面實時的采集數(shù)據(jù)。
[0018] 在步驟2)中,所述的關(guān)節(jié)點數(shù)據(jù)預(yù)處理對三維空間數(shù)據(jù)規(guī)范化到0和1之間。
[0019] 在步驟3)中,所述的靜態(tài)行為特征的提取包括關(guān)節(jié)點之間的骨骼的歸一化向量 表示,如下:
[0020] 3. 1)對于靜態(tài)行為特征所述的人體結(jié)構(gòu)向量,是根據(jù)人體結(jié)構(gòu)學(xué)的原理,將相鄰 的關(guān)節(jié)點連接成骨骼向量,結(jié)構(gòu)向量是描述動作的主要特征點,根據(jù)分為左右的情況,選擇 上肢4組,下肢4組特征向量和一組脊柱向量;
[0021] 3. 2)個體變化的幅度會產(chǎn)生差異,為精確描述上肢結(jié)構(gòu)變化情況,選擇了左腕、左 肩、右腕和右肩與臀部中央節(jié)點的空間夾角作為特征;
[0022] 3. 3)結(jié)構(gòu)向量在Kinect的輸入流中是實時變化的,關(guān)節(jié)點之間的夾角也不穩(wěn)定, 因此需要建立一個針對個體的可靠的骨架數(shù)據(jù)作為輸入向量的偏置。
[0023] 在步驟4)中,所述的動態(tài)行為特征指人體在運動過程中,每個關(guān)節(jié)點都會隨著父 關(guān)節(jié)點連帶著運動,動作在向前推進過程中,關(guān)節(jié)點之間的夾角不斷改變,而不同的動作會 產(chǎn)生不同的模式,以人的整體關(guān)節(jié)點變化作為切入點,將骨架作為一個整體而不是脫離人 體結(jié)構(gòu)關(guān)系進行分析,結(jié)構(gòu)相似度考慮了人體的整個骨架在運動過程中的變化情況,將結(jié) 構(gòu)距離相似度定義為人體在運動過程中的角度變化量和距離變化量的總差異,同時在滑動 窗口的基礎(chǔ)上,以結(jié)構(gòu)相似度的變化為搜索策略,根據(jù)當(dāng)前幀與上次搜索幀的變化情況來 動態(tài)調(diào)整滑動窗口的大小。
[0024] 在步驟5)中,所述的基于Spark的并行神經(jīng)網(wǎng)絡(luò)算法框架PANN基于當(dāng)前的多層 前饋人工神經(jīng)網(wǎng)絡(luò),由一個輸入層、多個隱含層、一個輸出層構(gòu)成,采用后向傳播的誤差調(diào) 整公式,層與層之間通過單向的權(quán)值網(wǎng)連接,輸入數(shù)據(jù)來自行為識別的特征提取后的數(shù)據(jù), 從分布式文件系統(tǒng)HDFS中讀取,特征數(shù)據(jù)RDD的分區(qū)數(shù)量與集群計算節(jié)點數(shù)目相同,可以 加速各子任務(wù)的計算。算法中神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)權(quán)值矩陣變量weights在每個分區(qū)的每條輸 入數(shù)據(jù)中均會使用到,是一個全局變量,因此將其作為Spark中的broadcast類型的共享變 量,使其在每個節(jié)點中均有一份緩存,如下:
[0025] 5. 1)在訓(xùn)練階段,前向計算的過程中,各RDD分區(qū)通過與weights權(quán)值矩陣相乘 依次計算各隱層的輸出,最后在輸出層計算與實際期望的誤差,統(tǒng)計總誤差和并且產(chǎn)生一 次reduce操作,由此產(chǎn)生一個Stage,即每更新一次權(quán)值矩陣則產(chǎn)生一個新的Stage,客戶 端驅(qū)動程序通過反向傳播算法更新weights權(quán)值矩陣,并再次廣播給各子節(jié)點,一次完整 的迭代過程完成;
[0026] 5.2)訓(xùn)練結(jié)束后即生成了最終的權(quán)值矩陣,作為模型的基礎(chǔ),在測試階段,輸入 的測試數(shù)據(jù)同樣以相同的方式分區(qū),通過權(quán)值矩陣并行計算即可批量得到輸出向量,通過 標(biāo)簽數(shù)據(jù)轉(zhuǎn)換成類別,測試數(shù)據(jù)RDD的分區(qū)數(shù)可以根據(jù)數(shù)據(jù)量的大小進行確定,由于模型 已經(jīng)訓(xùn)練完成,只會產(chǎn)生兩次矩陣的乘法運算,進行一次前向計算過程,因此只會生成一個 Stage〇
[0027] 在步驟6)中,所述的擬牛頓法L-BFGS對梯度下降法的優(yōu)化,基于對算法的可擴展 性和實用性考慮,同時為減少迭代次數(shù)和Stage生成,加快模型的訓(xùn)練速率,采用MLlib的 LBFGS接口,通過自定義的梯度計算模塊Gradient和梯度更新模塊Updater來完成迭代計 算的具體任務(wù),Gradient定義了計算目標(biāo)的梯度計算和損失函數(shù),同時Updater定義了梯 度更新的規(guī)則,在進行迭代計算時,主要通過將權(quán)值矩陣廣播到各個計算節(jié)點,各自節(jié)點計 算梯度任務(wù),再進行更新操作,同時返回當(dāng)前迭代的損失,通過判斷兩次的損失差值來確定 是否收斂,比普通的梯度下降法有顯著的性能提升。
[0028] 在步驟7)中,所述的識別平臺,包括:
[0029] 7. 1)人體行為的數(shù)據(jù)通過Kinect實時獲取,包括圖像的深度數(shù)據(jù)和骨骼數(shù)據(jù),PC 客戶端將采集到的骨骼流數(shù)據(jù)作為文本文件寫入本地,并