楊光耀
(北京維周智能科技有限公司,北京 102600)
深度學(xué)習(xí)算法是當(dāng)前計算機領(lǐng)域中實現(xiàn)視覺感知、目標(biāo)識別等目標(biāo)的常用方法,借助CPU 和GPU 強大的運算能力,通過模擬人體視覺、聽覺等復(fù)雜功能的物理作用機制來完成過去很多因受運算水平和認(rèn)知深度限制而難以實現(xiàn)的任務(wù)。當(dāng)一個運動的物體作用于人眼時,眼睛通過分析人體的關(guān)鍵特征點隨時間的變化趨勢,在動態(tài)標(biāo)記特征點的基礎(chǔ)上對運動狀態(tài)進行識別,從而做出相應(yīng)的判斷?;谔卣髯兓?guī)律的姿態(tài)識別是眼睛的主要功能,同時也是一個信息采集與深度加工的過程。在對眼睛物理機理和目標(biāo)識別過程進行研究的過程中,有學(xué)者結(jié)合神經(jīng)網(wǎng)絡(luò)運算方法提出了OpenPose 姿態(tài)識別算法。該文重點研究該姿態(tài)識別算法的實現(xiàn)過程。
OpenPose 是一個基于卷積神經(jīng)網(wǎng)絡(luò)和監(jiān)督學(xué)習(xí)的開源項目,主要用于人體姿態(tài)識別。該項目最早由美國卡耐基梅隆大學(xué)提出,既可以用于單人姿態(tài)識別,也可以用于多人姿態(tài)識別。該算法在線辨識人體在運動過程中產(chǎn)生的肢體、表情等部位的變化狀態(tài),再通過卷積神經(jīng)網(wǎng)絡(luò)進行特征提取與識別,經(jīng)過在線訓(xùn)練之后可以用于類似場景。OpenPose 可以對運動中的人體進行關(guān)鍵點自動辨識,在相同運動時間內(nèi)采集多個關(guān)鍵點進行特征標(biāo)記,之后對這些關(guān)鍵點進行持續(xù)跟蹤。在跟蹤過程中,對攝像機拍攝到的扭曲畫面進行參數(shù)評估和實時補償,最大限度地提升對人體姿態(tài)識別的精度。
一般來說,在姿態(tài)識別過程中,以下關(guān)鍵因素會影響識別的速度和精度:1) 在攝像機鏡頭內(nèi),由于目標(biāo)處于時刻運動的狀態(tài),因此采集到的物體位置分布不一,且運動中的人體在攝像機鏡頭內(nèi)成像時所占用的像素數(shù)目會變化,這些因素會對目標(biāo)特征的捕捉與識別造成影響。2) 如果攝像機成像過程中出現(xiàn)某些因素(光線變化、突然出現(xiàn)遮擋物以及進入攝像機鏡頭內(nèi)人數(shù)的變化等),那么這些偶發(fā)因素都會影響計算方法對目標(biāo)識別的效率和采集目標(biāo)特征的精度。3) 利用攝像機成像技術(shù)對進入視場內(nèi)的運動目標(biāo)進行姿態(tài)識別是串行運算的過程,也就是必須對一個運動物體進行識別之后才能對下一個物體進行識別,這對于小樣本數(shù)據(jù)是有效的,但是當(dāng)待識別的運動物體數(shù)量增加時,就會增加運算難度,同時實時性也會降低,這就會給實際應(yīng)用帶來困難。為了解決以上目標(biāo)識別過程中的難題,OpenPose 采用基于深度神經(jīng)網(wǎng)絡(luò)的方法對關(guān)鍵特征點進行預(yù)測式估計,從而獲得準(zhǔn)確的識別結(jié)果。OpenPose的計算流程如圖1 所示。
由圖1 可知,當(dāng)利用OpenPose 進行目標(biāo)識別計算時,首先,需要對輸入系統(tǒng)中的圖像或視頻進行預(yù)處理,采用歸一化的方法對組成圖像或視頻的數(shù)據(jù)進行處理,從而便于后續(xù)運算。其次 ,采用從上到下的順序?qū)θ梭w的特征點進行檢測,將檢測后采集的特征點數(shù)據(jù)進行矩陣化存儲,按照行和列不同的含義進行編碼。再次,基于特征點數(shù)據(jù),利用神經(jīng)網(wǎng)絡(luò)強大的數(shù)據(jù)擬合能力對采集的特征點數(shù)據(jù)進行建模,對其中有規(guī)則的變化進行數(shù)學(xué)表征,同時對特征點后續(xù)發(fā)展趨勢(也就是人體關(guān)鍵部位的運動狀態(tài))進行預(yù)測,以提升特征點在線識別的效率,縮短識別時間,便于在多種類型的設(shè)備上進行部署。最后,對建立的特征點數(shù)據(jù)模型和預(yù)測值進行修正,采用殘差補全的方法對不準(zhǔn)確的結(jié)果進行校正,最終確保輸出的姿態(tài)識別結(jié)果符合實際情況和邏輯預(yù)期。
圖1 OpenPose 計算流程
在大多數(shù)應(yīng)用場景中,選擇采用雙層卷積神經(jīng)網(wǎng)絡(luò)就能完成姿態(tài)識別任務(wù)。首先,在雙層卷積神經(jīng)網(wǎng)絡(luò)中,對攝像機中采集到的像素點進行骨架化拆分,也就是根據(jù)進入攝像機內(nèi)人體的大小和姿態(tài)、四肢的走向以及頭顱的位置,采用簡單的線段集合進行模擬,并假設(shè)這些線段的集合可以用L(p)來表示。其次,對其中的關(guān)鍵點進行標(biāo)記,假設(shè)這些關(guān)鍵點的集合可以用S(p)來表示。最后,分別對L(p)、S(p)進行回歸運算,將回歸后的結(jié)果輸入神經(jīng)網(wǎng)絡(luò)中進行卷積運算,通過特征融合的方法采集特征點信息。對采集到的信息來說,需要利用其他值(另一層神經(jīng)網(wǎng)絡(luò)在對特征點變化趨勢進行預(yù)測后得到的值)對其進行修正,這樣就可以對特征點信息進行再次校正,有利于獲得更高的輸出精度。
為了利用攝像頭和計算機達(dá)到人體姿態(tài)識別的目的,需要結(jié)合OpenPose 算法設(shè)計一整套算法實現(xiàn)流程。二維平面的人體姿態(tài)識別的步驟如圖2 所示。
圖2 人體姿態(tài)識別過程步驟
由圖2 可知,當(dāng)利用OpenPose 進行二維平面內(nèi)的人體姿態(tài)識別時,首先,需要根據(jù)采集的姿態(tài)特征點建立數(shù)據(jù)集,按照一定的比例將數(shù)據(jù)集劃分為訓(xùn)練集以及驗證集,一般訓(xùn)練集的數(shù)據(jù)量比驗證集多,這樣才能最大限度地提升人體姿態(tài)數(shù)學(xué)模型的擬合精讀,從而訓(xùn)練出泛化能力較強的神經(jīng)網(wǎng)絡(luò)。其次,利用OpenPose 算法遍歷整個數(shù)據(jù)集,利用訓(xùn)練集擬合數(shù)據(jù)模型,利用驗證集測試訓(xùn)練好的數(shù)據(jù)模型,測試結(jié)果符合誤差指標(biāo)表示模型準(zhǔn)確,可以進行后續(xù)運算,否則重新對神經(jīng)網(wǎng)絡(luò)進行調(diào)參并進行再次訓(xùn)練,直至獲得準(zhǔn)確的數(shù)據(jù)模型為止。再次,利用OpenPose算法對新輸入的人體姿態(tài)圖像或者視頻進行動作特征的提取,經(jīng)過前期的訓(xùn)練和驗證后,數(shù)據(jù)模型具有一定的泛化能力,能夠識別輸入系統(tǒng)的姿態(tài)特征點數(shù)據(jù),從而進行特征計算,給出符合預(yù)期的結(jié)果。從次,對識別的特征點進行標(biāo)簽化處理,對重要特征點建立數(shù)據(jù)標(biāo)簽,替換特征較弱的數(shù)據(jù)點,從而完成對訓(xùn)練集的更新,在該基礎(chǔ)上,再次對建立的數(shù)據(jù)模型進行訓(xùn)練,進一步完善模型的識別準(zhǔn)確度,同時對OpenPose 算法進行改進,通過關(guān)鍵參數(shù)的優(yōu)化提升泛化能力。最后,對人體姿態(tài)圖像或者視頻進行再次識別,將2 次識別的結(jié)果進行比較,利用第二次識別的結(jié)果校正第一次識別的結(jié)果,對2 次識別結(jié)果中重合的部分進行提取,將其作為最優(yōu)識別結(jié)果輸出,便于在線使用。
為了實現(xiàn)人體姿態(tài)識別過程,需要分別搭建系統(tǒng)開發(fā)環(huán)境對采集到的數(shù)據(jù)和特征進行處理,然后再基于OpenPose 進行算法改進與設(shè)計,最終獲得理想的識別結(jié)果。
用于人體姿態(tài)識別目的的檢測系統(tǒng)是以O(shè)penPose 為核心算法進行設(shè)計和開發(fā)的,因此需要先搭建OpenPose基本運行環(huán)境。目前,機器視覺領(lǐng)域中的算法開發(fā)主要依靠Python 語言來實現(xiàn)。同時,OpenPose 是基于C++開發(fā)的算法,因此該文選擇Python 語言作為代碼編寫、調(diào)試和運行工具,選擇CUDA 作為調(diào)用顯卡訓(xùn)練測試的必須軟件,選擇swig(一種深度學(xué)習(xí)軟件開發(fā)工具)的目的在于給OpenPose 提供編譯環(huán)境。根據(jù)OpenPose 官方提供的cmu 模型、mobilenet_thin 模型、mobilenet_v2_large 模型和mobilenet_v2_small 模型的評價,該文選擇cmu 模型作為姿態(tài)識別的調(diào)用模型,主要原因是cmu 具有更高的識別精度。OpenPose 中集成了很多完整的、易于實現(xiàn)特定功能的函數(shù),在使用過程中可以直接進行調(diào)用。
在利用神經(jīng)網(wǎng)絡(luò)進行大規(guī)模訓(xùn)練之前,需要選定并設(shè)定相應(yīng)的標(biāo)簽,便于神經(jīng)網(wǎng)絡(luò)識別。該文結(jié)合常見的人類肢體動作,選擇站立、行走、奔跑、跳躍、轉(zhuǎn)體、坐下、下蹲以及揮手等動作作為標(biāo)簽。結(jié)合這些標(biāo)簽,選擇進入攝像機鏡頭的人體骨架部位的鼻子、脖子、左右肩膀、左右手腕以及左右膝蓋等部位作為關(guān)鍵識別點,通過采集這些點位的變化信息來進行特征識別。
當(dāng)OpenPose 進行姿態(tài)識別時,是基于攝像機采集到的視頻(圖片)信息進行特征提取的。OpenPose 根據(jù)關(guān)鍵識別點的分布對進入攝像機內(nèi)的人體進行骨架化抽象。
在對關(guān)鍵識別點進行骨架化抽象之后,OpenPose 對關(guān)鍵識別點的特征進行實時提取,提取的數(shù)據(jù)既包括關(guān)鍵識別點的位置分布,也包括臨近識別點之間連線的變化情況。
OpenPose 提供了18 個身體部位的準(zhǔn)確位置,包括鼻子、脖子、眼睛、耳朵、肩膀、肘部、手腕、臀部、膝蓋以及腳踝等。對這18 個身體部位進行辨識就可以得到18條曲線,分別對應(yīng)這些關(guān)節(jié)的運動軌跡。為了減少數(shù)據(jù)集的冗余度,根據(jù)身體的結(jié)構(gòu)和運動特點將人體關(guān)節(jié)分為不同的組別,具體如下:1) 面部關(guān)節(jié)。面部關(guān)節(jié)包括頭部內(nèi)部的點。面部關(guān)節(jié)分布密集,在小范圍內(nèi)運動,很少表現(xiàn)出強烈的獨立運動。因此,將這些關(guān)節(jié)從表示方案中刪除。2) 軀干關(guān)節(jié)。軀干關(guān)節(jié)包括肩部和臀部。它們反映了身體的運動狀態(tài)。此外,它們是連接身體和四肢的關(guān)節(jié)。因此,將它們加入表現(xiàn)方案中。3) 一級關(guān)節(jié)。一級關(guān)節(jié)包括肘關(guān)節(jié)和膝關(guān)節(jié)。肘關(guān)節(jié)和膝關(guān)節(jié)包括大量關(guān)于手勢和運動的信息。尤其是當(dāng)身體旋轉(zhuǎn)和彎曲時,它們在視覺上發(fā)揮了比軀干關(guān)節(jié)更重要的作用。因此,將它們加入表示方案中。4) 二級關(guān)節(jié)。二級關(guān)節(jié)包括腕關(guān)節(jié)和踝關(guān)節(jié)。腕關(guān)節(jié)和踝關(guān)節(jié)比肘關(guān)節(jié)和膝關(guān)節(jié)更容易被拉伸,對人體姿態(tài)識別具有決定作用。因此,將它們加入表現(xiàn)方案中。
根據(jù)表現(xiàn)方案對進入攝像機中的人體重要部位進行識別。在識別過程中,由于身體的不同關(guān)節(jié)在人類視覺印象中的重要性是不相等的,因此,為了給這些關(guān)節(jié)分配適當(dāng)?shù)臋?quán)重,使分?jǐn)?shù)與人類的判斷相吻合,該文制定了以下權(quán)重系數(shù)賦值規(guī)則:1) 二級關(guān)節(jié)與身體軀干的距離較長,但是一級關(guān)節(jié)與身體軀干相連,并受二級關(guān)節(jié)和身體軀干的影響。因此,在手勢匹配中,一級關(guān)節(jié)的重要性比二級關(guān)節(jié)低,身體軀干關(guān)節(jié)的權(quán)重最小。2) 因為一級關(guān)節(jié)與二級關(guān)節(jié)之間的距離比一級關(guān)節(jié)與身體軀干之間的距離長,所以下肢更加靈活,也更難模仿。因此,以一級關(guān)節(jié)和二級關(guān)節(jié)為端點的運動軌跡在匹配時更重要,給其賦予最高級別的權(quán)重系數(shù)。
在給不同部位的運動軌跡賦予不同的權(quán)重系數(shù)之后,就開始對人體運動軌跡進行識別,并根據(jù)識別結(jié)果提取數(shù)據(jù),分別按照點特征、線特征和面特征對提取的數(shù)據(jù)進行相應(yīng)預(yù)處理,包括剔除無效數(shù)據(jù)、建立每一組數(shù)據(jù)的標(biāo)簽以及對標(biāo)簽化數(shù)據(jù)進行輸入和輸出分類等,從而便于后續(xù)利用算法進行訓(xùn)練和識別。
對攝像機采集到的視頻(圖像)來說,將其進行預(yù)處理后組成輸入數(shù)據(jù)集,利用OpenPose 進行數(shù)據(jù)集遍歷,提取關(guān)鍵識別點的特征信息,對提取到的特征點進行信息整合。將預(yù)處理后的輸入信息和輸出信息建立一一映射的關(guān)系,將其中70%的數(shù)據(jù)作為訓(xùn)練集、將30%的數(shù)據(jù)作為驗證集進行訓(xùn)練,訓(xùn)練過程中選擇不同的評估模型會得到不同的訓(xùn)練精度。經(jīng)過現(xiàn)場試驗,最終確定選擇MLPClassifier分類器作為評估模型,該分類器模型的基本參數(shù)見表1。
表1 MLPClassifier 分類器基本參數(shù)
在選擇分類器之后,就對輸入數(shù)據(jù)進行訓(xùn)練,一方面利用OpenPose 自帶的算法進行姿態(tài)識別,另一方面采用RNN 網(wǎng)絡(luò)對輸入數(shù)據(jù)進行預(yù)測,根據(jù)預(yù)測結(jié)果對現(xiàn)有的數(shù)據(jù)訓(xùn)練結(jié)果進行修正,從而提高姿態(tài)識別的準(zhǔn)確度。RNN 網(wǎng)絡(luò)選用LSTM 網(wǎng)絡(luò),也就是長短時記憶神經(jīng)網(wǎng)絡(luò)。這種網(wǎng)絡(luò)最大的特點就是可以準(zhǔn)確地對時間序列數(shù)據(jù)進行預(yù)測,根據(jù)當(dāng)前數(shù)據(jù)特征對未來變化趨勢進行預(yù)測,結(jié)合預(yù)測值對訓(xùn)練結(jié)果進行修正,從而獲得理想輸出。結(jié)合LSTM 網(wǎng)絡(luò)后的OpenPose 算法主要由7 層主要結(jié)構(gòu)組成,如圖3 所示。
利用神經(jīng)網(wǎng)絡(luò)對人體姿態(tài)進行識別的重點在于神經(jīng)網(wǎng)絡(luò)的設(shè)計和訓(xùn)練。前文主要介紹了神經(jīng)網(wǎng)絡(luò)的設(shè)計方法,基于圖3 可以設(shè)計一個符合使用要求、能夠有效進行人體姿態(tài)識別的神經(jīng)網(wǎng)絡(luò)。在完成設(shè)計工作后,需要對神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練。神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程就是參數(shù)調(diào)整的過程,該文采用在線訓(xùn)練的方式對神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練。首先,指定多名不同體態(tài)、身高的工作人員在攝像機前做不同的動作,錄制視頻后將其傳入神經(jīng)網(wǎng)絡(luò)進行識別,根據(jù)識別結(jié)果與標(biāo)準(zhǔn)結(jié)果的均方差來判斷識別的效果,當(dāng)識別效果不佳時,工作人員重新對神經(jīng)網(wǎng)絡(luò)參數(shù)進行調(diào)整,賦予其新的參數(shù)值,之后再進行反復(fù)識別、判斷和調(diào)整,最終可以獲得越來越接近實際情況的識別效果,這時就表示神經(jīng)網(wǎng)絡(luò)已完成訓(xùn)練。之后,另外組織其他工作人員依次通過攝像機做出不同的姿態(tài)供神經(jīng)網(wǎng)絡(luò)識別,以判斷識別率。識別率是識別成功的次數(shù)與總識別次數(shù)之間的比值。當(dāng)識別率很高(該文設(shè)置為95%)時,表示神經(jīng)網(wǎng)路訓(xùn)練效果顯著,能夠用于識別任務(wù)。經(jīng)過在線測試發(fā)現(xiàn),訓(xùn)練后的網(wǎng)絡(luò)能夠達(dá)到預(yù)定的識別率,表示該神經(jīng)網(wǎng)絡(luò)符合使用要求,能夠用于人體姿態(tài)的在線測試。
利用以上算法對輸入數(shù)據(jù)進行訓(xùn)練,再利用訓(xùn)練好的網(wǎng)絡(luò)進行人體姿態(tài)識別,就可以獲得較好的識別結(jié)果,識別精度較高,準(zhǔn)確度也較高。
該文結(jié)合OpenPose 算法研究了實現(xiàn)人體姿態(tài)識別系統(tǒng)的過程。通過分析與設(shè)計可以發(fā)現(xiàn),OpenPose 是目前進行人體姿態(tài)識別的主流算法,其具有很高的識別精度和很快的識別速度,能夠滿足商業(yè)化開發(fā)的需求。另外,該文在實現(xiàn)算法的過程中,利用RNN 網(wǎng)絡(luò)的預(yù)測值對辨識結(jié)果進行修正,從而進一步提高姿態(tài)識別的精度。研究人員在通過計算機實現(xiàn)算法的過程中發(fā)現(xiàn),OpenPose 算法具有一定的延遲,當(dāng)利用該文所提出的方法進行姿態(tài)識別時,存在大約0.1 s 的延遲,如何最大限度縮短延遲將是未來的重點研究方向。
圖3 OpenPose 算法網(wǎng)絡(luò)結(jié)構(gòu)層次