張 鵬,逄 博,徐 欣,韋 博
(杭州電子科技大學通信工程學院,浙江杭州 310018)
對人體姿態(tài)進行關節(jié)點檢測具有重要的現(xiàn)實意義,如對病人的病態(tài)進行監(jiān)護和調理、在自動駕駛技術上對行人的行為進行識別以保證駕駛安全等。早在2008 年,葉蓬等[1]就提出了傳統(tǒng)的基于代數(shù)計算的方法,對視頻幀之間簡單運動模式進行指數(shù)形式的線性化操作,經過簡化歐式變換的矩陣對線性操作后的數(shù)據(jù)進行提取和重組,求得表征運動參數(shù),實現(xiàn)對目標姿態(tài)的計算;Toshev 等[2]提出的“DeepPose”,將人體姿勢估計研究從經典方法[3]轉變到深度網(wǎng)絡,利用網(wǎng)絡直接回歸關節(jié)的x,y 坐標。這種方法比較直接,但最大的缺點是檢測速度慢,檢測效果依賴于標簽數(shù)據(jù)的完整性;與之不同的是,Tompson 等[4]通過并行運行多個分辨率庫中的圖像,同時捕獲各種比例特征來生成熱圖,將ConvNet 和圖形模型聯(lián)合使用,學習關節(jié)之間的典型空間關系;Pishchulin 等[5]以類似方法解決這一問題,其中包括如何處理一元分數(shù)生成和相鄰關節(jié)成對比較問題。
對關節(jié)點估計進行連續(xù)預測的方法有:Carreira 等[6]研究輸入一組預測,并每次通過網(wǎng)絡完善這些預測。但該方法需要多階段訓練,并且權重在每次迭代中被共享;Ludi等[7]引入一個模塊化仿真框架,針對各種以人為中心的場景算法進行訓練和驗證,描述了如何利用模擬數(shù)據(jù)訓練人體姿態(tài)估計算法來識別城市中不尋常的人類活動,但其檢測速度略有不足;Verma 等[8]提出一種新的連續(xù)幀跟蹤算法,通過計算單個身體部位在幀間的集體遍歷,反饋給TNN 進行學習,該方法可有效提高識別速度;Angelini 等[9]給出一種新的基于二維姿態(tài)的姿態(tài)層次HAR 方法,從人體姿勢中提取低層次和高層次特征,并將其提供給長—短期記憶神經網(wǎng)絡和一維卷積神經網(wǎng)絡進行分類;張劍書等[10]采用YOLO 算法結合AlphaPose 模型從視頻或圖像中提取出人類目標,將目標檢測任務作為回歸問題解決。采用YOLO 算法檢測速度較快,但總體精度偏低;蔡興泉等[11]提出一種少量關鍵序列幀的識別技術,對原有運動序列預選構造出初選關鍵幀序列,利用幀消減獲取關鍵幀序列,然后分別對不同人體姿勢建立隱馬爾科夫模型,得到的結果精度很高但檢測速度不佳;Farrajota 等[12]采用一系列殘差自動編碼器產生多個預測,然后結合起來提供一個身體關節(jié)可能性地圖,關注各關節(jié)點聯(lián)系,可以較好地保證精度;Nguyen 等[13]提出一種基于混合深度學習的手勢識別方法,該方法利用RGB 幀、三維骨骼關節(jié)信息和身體部位分割來解決這些問題。
鑒于上述模型存在檢測精度不高、檢測周期過長或檢測模型規(guī)模過大等問題,本文提出改進模型,將關節(jié)點和肢體分開檢測和識別,引用OpenPose[14]模型中的PAF(Part Affinity Fields)方法,并對該方法進行非線性化改進以提高檢測精度和檢測速度。block 之間使用Dense 連接機制減少模型的復雜度,優(yōu)化使用6 層模型結構,進一步提高模型精度。本模型相對于其他模型有參數(shù)較少、精度較高、檢測周期較短等優(yōu)勢。
傳統(tǒng)模型中,除了DensePose 模型使用全部的Dense 連接機制以外,其他都沒有使用Dense 連接機制,而只是簡單的層之間疊加。這樣通過加深網(wǎng)絡或加寬網(wǎng)絡的方法得到的模型非常容易過擬合,不利于模型表征。本文使用Dense 連接機制而不使用卷積層或者池化層,這是參考Gao 等[15]提出的DenseNet(Densely Connected Convolutional Networks)作出的改進。
Dense 連接層是一種線性運算,如圖1 所示。其中每個輸入都通過權重連接到每個輸出,因此,有n_inputs *n_outputs 個權重(n_inputs 代表輸入維度,n_outputs 代表輸出維度),其后通常跟隨非線性激活函數(shù),這種連接方式可以實現(xiàn)權重和參數(shù)共享,前面階段的數(shù)據(jù)信息可以很方便地被后面階段共享利用。
Fig.1 DenseNet structure圖1 DenseNet 結構
本文的Dense 連接機制對單模型結構進行改進設計,實現(xiàn)了參數(shù)共享,簡化了參數(shù)的計算過程。連接已經不是殘差塊block 內部的網(wǎng)絡層對象連接,而是每一個分支網(wǎng)絡結構branch 之間的稠密和稀疏連接,如關鍵點定位模塊L(t)和肢體連接模塊A(t)都是block,本文中block 內部的連接仍然保持普通的依序連接。之所以不在block 內部構成連接,是因為在塊與塊之間的信息共享度較塊內部信息共享度高,在使用dense 連接機制后會伴隨計算成本不斷增大。因為這種機制需要維持參數(shù)共享,意味著在多層之間的參數(shù)需要來回傳遞,這會加大計算機運行消耗。而在塊內部的信息相對于其他塊是獨立的,不需要再將塊內部的信息共享到其他塊中,所以在塊內部的dense 連接機制可以取消。但是block 塊之間的信息大多是共享的,在關鍵點定位模塊中的關鍵點置信度信息需要與后面的肢體匹配模塊共享,同時在更新一輪肢體匹配模塊之后的信息也需要反饋回關鍵點定位模塊,然后對參數(shù)進行微調,所以需要使用dense 連接機制共享參數(shù)。
傳統(tǒng)的關節(jié)點連接技術是根據(jù)檢測到的關節(jié)點置信度大小最相近的兩個關節(jié)點進行連接匹配,這樣的連接方式不具有代表性。假如某一個關節(jié)點檢測結果出現(xiàn)了較大問題,那么得到的肢體就會發(fā)生較大偏移。為了解決這類問題,本文引用OpenPose 模型中的PLF(Point Line Fields)方法,并對該方法作非線性化改進。
主要改進點:在對肢體上的范圍點進行置信度計算過程中使用指數(shù)—對數(shù)非線性化表示,以探索更高維度的空間可能存在的關鍵點。找到該關鍵點后進行指數(shù)—對數(shù)非線性化轉化,增大其權重。之所以這么做,是因為在一條肢體上每一點的權重不應該只是線性的均勻變化,所以本文采用非線性表示,使用log 函數(shù)對一條肢體上每一個點的權重作非線性映射,以放大隱藏的關鍵點信息。同樣,對關節(jié)點的計算方法也考慮了指數(shù)熱度的影響,因為有的節(jié)點置信度非常小,可能是錯誤信息,需要使用指數(shù)調熱方法避免或減少這種情況對預測結果產生太大影響,即將這些值控制在0~1 之間。
PLFs 計算肢體置信度如圖2 所示。
Fig.2 Limb confidence calculated by PLFs algorithm圖2 PLFs 算法計算肢體置信度
其中,j1和j2分別表示第k 個人的肢體c 上的兩類關節(jié)點,每個PLF 是每個肢體的2D 矢量場。對于屬于特定肢體區(qū)域中的每個像素,2D 矢量編碼從肢體一個部位指向另一部位的方向,每種肢體都有一個對應的PLF 將兩個相關的身體部位連接在一起。
p(u)代表連接在兩個關節(jié)點dj1和dj2之間的肢體置信度:
如果通過對u的等距值進行采樣和求和來近似積分,則如公式(1)得到的積分值是均勻的;而使用log 函數(shù)對一條肢體上每一個點的權重作非線性變化,得到的權重就是非線性的,如公式(2)所示。
KP-Detector 模型流程如圖3 所示。
Fig.3 Model flow圖3 模型流程
主要分為3 個部分:①使用ResNet50 預訓練的神經網(wǎng)絡對圖片進行特征提取,從最后一層的featuremap 中定位隱藏的候選關節(jié)點,以及給出每個關節(jié)點屬于某一類的置信度值;②對得到的關節(jié)點定位信息和置信度值按照PLFs算法進行連接,組成合理的肢體信息,得到每一條肢體的置信度值;③每一條隱藏的肢體構成一個最大二分圖,通過構建一棵匈牙利樹,找到合理的最大匹配情況即為最后的肢體連接結果。
2.1.1 關節(jié)點檢測
從預訓練好的ResNet50的最后一層提取出關節(jié)點的位置信息和類別信息,生成一組輸入特征圖F。在此階段,網(wǎng)絡生成一組部分親和力字段(PLF):
其中,φ1指第一階段對肢體置信度值的初始化。將第一個階段的預測結果與原始圖像特征F 串聯(lián)起來作為當前階段的預測值,用于產生精確的預測結果:
其中,φt表示在第t 個階段CNN的推理過程,T 表示總的PLF 階段數(shù)。經過T 次迭代后,從最新的PLF 預測開始,重復進行置信度圖檢測:
其中,ρt表示在第t 個階段進行推理的CNN 過程,C 表示置信度映射階段的總數(shù)量。這種方法每個階段都細化了PLF 和置信度圖分支,因此每個階段計算量減少了一半,改進的親和力場預測方法可改善置信度圖結果。
置信度圖結果是在早期階段進行預測,估計的結果在后期通過全局推斷逐步完善。在每個階段的末尾應用損失函數(shù),在估計預測值與標簽和字段之間使用L2損失。對損失函數(shù)進行空間加權以解決某些數(shù)據(jù)集不能完全標記所有人的問題。
在階段ti的PLF 分支損失函數(shù)和階段tk的置信度圖分支損失函數(shù)為:
在評估方程式中的fS訓練過程中,帶關節(jié)點注釋的2D關鍵點生成標簽數(shù)據(jù)可信度圖S*,每個置信度圖都是特定身體部位位于給定像素中信息的2D 表示。理想情況下,如果一個人出現(xiàn)在圖像中,則每個置信度圖中應存在一個峰值;如果圖像中有多個人,則對于每個人k,應該有一個對應于每個可見部分j的峰值。本文首先為每個人k生成個人置信度圖,其中xj,k∈R2代表對應于人k的第j個關節(jié)點的標簽值。定義為:
其中,σ為控制峰值的形式,網(wǎng)絡預測的標簽點置信度圖是通過對各個置信度圖進行匯總后得到的最大值。
之所以選擇使用置信度圖中最大的值而不是平均值,是因為實驗結果表明,使用最大值相較于平均值效果更好。
2.1.2 關節(jié)點連接
給定一組身體部位檢測結果,組裝它們以形成未知人數(shù)的全身姿勢,需要每對身體部位檢測都具有關聯(lián)性的置信度,采用方法是檢測每一對可能成為關節(jié)點對的兩個點的中點。但是,當人們擠在一起時,這些中點很可能支持虛假的關聯(lián),其原因是由表示方面的局限性引起的:①因為表達信息主要來自于最關鍵的那個點,而未考慮到整個關節(jié)點的協(xié)調配合,所以肢體的信息表達不完整;②對于關節(jié)點而言,它只注重位置信息而忽略了方向隱藏的信息;③因為用于模型訓練的數(shù)據(jù)單一,所以模型的泛化能力較差。
PLFs 算法非常巧妙地解決了這些限制,保留了肢體支撐區(qū)域的位置和方向信息。每個PLF 是每個肢體的2D 矢量場。對于屬于特定肢體的區(qū)域中的每個像素,2D 矢量編碼從肢體一個部位指向另一部位的方向,每種肢體都有一個對應的PLF 將其兩個相關的身體部位連接在一起。
考慮單個肢體PLFs 算法,設xj1,k和xj2,k為關節(jié)點的標簽位置,其中j1和j2分別表示第k個人肢體c上的兩類關節(jié)點,計算關鍵點xj1,k指向xj2,k的單位向量:
其中,lc,k代表肢體長度,如圖1、圖2 所示的寬度,σl代表肢體寬度,如圖2、圖3 所示的高度。如式(11)和式(12)所示,只有限制在肢體范圍內的點p的向量才被算作單位向量v,否則就是0。
這樣,一張圖片中所有人的關節(jié)點p所在位置對應的PLF 值為:
式中,nc(p)是一張圖片中k個人中關節(jié)點p值非零的個數(shù)。
首先對Lc進行采樣,采用式(2)的方式,然后根據(jù)式(16)對采樣后的信息進行積分求和,得到肢體的置信度值:
對檢測置信度圖執(zhí)行非極大值抑制算法,以獲得離散的部分候選位置。由于圖像中存在多個人的關節(jié)點信息,所以可能有多個候選對象。這些候選關節(jié)點定義了大量可能的候選肢體,使用PLF 上的線積分計算公式對每個候選肢體進行綜合評分,從中找到最佳匹配——K 維匹配。本文使用一個貪婪的松弛方法,該松弛方法不僅能夠持續(xù)產生高質量的匹配結果,而且能夠大幅度縮短匹配時間,推測原因是由于PLF 網(wǎng)絡的接收域很大。
KP-Detector 模型內部結構如圖4 所示。
設前一組階段預測關節(jié)點置信度圖為L(t),后一組階段預測肢體置信度圖為A(t),每個階段的關節(jié)點預測結果與對應圖像特征F 針對每個后續(xù)階段進行前后級聯(lián),在每個卷積塊中使用的卷積核大小為3,使用3 個這樣的卷積核串聯(lián)組成。連續(xù)階段的預測t∈{1,…,T}并在每個階段進行中間監(jiān)督,相對于其他網(wǎng)絡模型增加了網(wǎng)絡深度。在原始模型中,網(wǎng)絡體系結構基本包括許許多多7×7 卷積層。在當前模型中,通過使用3 個連續(xù)的3×3 內核替換7×7的卷積內核,保留了接收場,同時減少了計算量,而操作數(shù)前者為97,后者只有51。此外,3 個卷積中每個輸出按照類似于DenseNet的方法將內核串聯(lián)在一起,非線性層數(shù)量增加了兩倍,網(wǎng)絡可同時保留較低級別和較高級別功能。
Fig.4 Internal structure of KP-Detector model圖4 KP-Detector 模型內部結構
KP-Detector 模型外部結構如圖5 中L(2)、L(3)所示,分別是關節(jié)點置信度圖和肢體置信度圖的預測網(wǎng)絡,其中在關節(jié)點定位模塊中使用4 塊重結構,在肢體置信度模塊使用2 塊重結構,相比其他結構結果最好。兩種模塊使用類似于DenseNet的連接結構,即每一塊重結構之間都是以Dense 形式連接在一起的,這樣保證后面的重結構可以充分利用到前面重結構的信息,從而使信息共享最大化,即在前面的重結構中將高分辨率數(shù)據(jù)送入后面的精度解析過程中實現(xiàn)信息之間共享最大化。
Fig.5 External structure of KP-Detector model圖5 KP-Detector 模型外部結構
本文在MPII 數(shù)據(jù)集上評估KP-Detector、CPN、SHN 和DensePose 模型。MPII 數(shù)據(jù)集由3 844 個訓練和1 758 個測試小組組成,這些小組由高度互動的姿勢(具有14 個身體部位)中的多個相互作用的個體組成。數(shù)據(jù)集收集了各種場景下的圖像,這些場景包含如擁擠、比例變化、遮擋和接觸等現(xiàn)實世界中的情形,并提供本文模型與Stacked Hourglass Network 和DensePose的運行時間分析比較,以量化系統(tǒng)效率(見圖6)。
如圖7 所示,本文使用4 種模型分別在MPII 數(shù)據(jù)集上做檢測精度比較實驗,4 種模型分別是本文提出的KP-Detector 模 型、CPN(Cascaded Pyramid Network)模 型、SHN(Stacked Hourglass Networks)模型和DensePose 模型。從圖片曲線可以看出,本文提出的KP-Detector 模型精度指標隨著迭代次數(shù)的增多明顯超越其他3 個模型,說明本文模型在精度方面有明顯優(yōu)勢。
使用4 種模型分別在MPII 測試數(shù)據(jù)集上進行檢測速度比較實驗,實驗結果如圖8 所示。本文提出的KP-Detector 模型的檢測速度指標FPS(每一秒內檢測的圖片張數(shù))在整體上的表現(xiàn)較其他模型要穩(wěn)定很多,而在后期受圖片數(shù)量的影響越來越小,是CPN 模型和DensePose 模型檢測速度的1.25 倍左右。分析原因可能是本文模型是自底向上進行檢測,而從關節(jié)點開始檢測定位,然后是肢體檢測,最后是肢體連接,這樣的檢測方式保證了如果在前一個階段檢測失敗或者置信度低于某一個閾值時會被拋棄,保證在后面的階段不會再次出現(xiàn),大大縮短了檢測周期。同時,使用Dense 連接機制保證了可用參數(shù)的共享性,保證了特征信息和關節(jié)點信息最大化利用。
Fig.6 Sample results of different models圖6 不同模型樣本結果
Fig.7 Comparison of accuracy on MPII data set圖7 MPII 數(shù)據(jù)集上的精確度比較結果
Fig.8 Comparison results of detection speed of four models on MPII data set圖8 4 種模型在MPII 數(shù)據(jù)集上檢測速度的比較結果
本文對4 種模型大小進行比較。原CPN 模型、SHN 模型和DensePose 模型大小約是本文KP-Detector 模型的12倍。如果在某工程應用或研究項目中,需要將模型遷移到內存大小嚴格限制的ARM 等低存儲設備芯片上,那么模型大小自然是第一個需要考慮的因素。該模型成功被壓縮到只有18M 左右,能滿足大部分存儲設備需求。本模型之所以能夠相較于其他模型小如此多,主要是因為網(wǎng)絡結構中定位模塊與肢體連接模塊是序列進行的,而且使用了Dense 模塊,這樣大大節(jié)省了參數(shù)空間,并能夠充分共享將近一半的參數(shù)量。再看KP-Detector的兩種結構模型,如果在Association 模塊也使用Dense 連接模塊,會使得到的模型規(guī)模變大3MB 左右,但是參數(shù)量卻減少1 000 左右,這是因為在Association 使用了Dense 連接機制后,每一個階段得到的數(shù)據(jù)會被其他階段共享,在共享中難免會有很多冗余計算節(jié)點,使模型變大,但是模型整體上被共享的參數(shù)量卻不一樣,這些多余的參數(shù)并不是重新生成,而是被其他階段共享,這樣參數(shù)數(shù)量反而減少了。所以在這兩種模型結構中,在KP-Detector的Association 模塊中使用Dense連接機制會更利于模型存儲和參數(shù)共享。
Table 1 Comparison results of scale of four models表1 4種模型規(guī)模比較結果
對各種模型結構進行試驗,如對{3、4、5、6、7}這5 種階段的結構進行試驗,發(fā)現(xiàn)階段數(shù)為6 或者7 時最優(yōu)。在階段數(shù)為6 時,對具體的關節(jié)點定位模塊和肢體連接模塊中的子模塊數(shù)分別進行實驗,評價指標mAP(mean Average Precision)。實驗結果表明,在關節(jié)點定位模塊使用4 個子模塊和在肢體連接模塊使用2 個子模塊時效果最好,在這兩種模塊中分別使用Dense 連接結構,保證了模型參數(shù)的共享性,模型精度得到提升。所以最后決定使用4 個關節(jié)點定位子模塊和2 個肢體連接子模塊,并且都使用Dense 連接機制,如表2 所示。
對KP-Detector 模型中的PAFs 和PLFs 進行比較實驗,最后發(fā)現(xiàn)在精度mAP 上比PAFs 略高出0.5 個百分點,在檢測速度FPS 上比PAFs 略快0.4,整體結果說明改進后的PLFs 相比于PAFs 效果要好一些。說明對一條肢體上的每一個點的權重不應是均勻線性變化的,增加其非線性效果會更好,如表3 所示。
Table 2 Experimental comparison results of KP-Detector model structure with different stages表2 KP-Detector 模型結構取用不同階段實驗比較結果(%)
Table 3 Comparative experiments using PAFs and PLFs表3 使用PAFs 和PLFs 比較實驗
實時多人關節(jié)點檢測估計是機器能夠以視覺方式理解和解釋人及其互動的關鍵要素。本文做了以下工作:①提出關鍵點關聯(lián)的顯式非參數(shù)表示形式,對人類四肢的位置和方向進行編碼;②設計了一種可以共同學習零件檢測和關聯(lián)的架構;③證明了貪婪的解析算法足以產生高質量的人體姿勢解析;④證明了PLF 細化遠比PAF 和身體部位位置細化相結合更為重要,從而大大提高了運行性能和準確性;⑤將身體和腳部估計結合到一個模型中可以提高每個組件的準確性,并減少運行時間;⑥證明在模型中適當使用Dense 連接機制可以提高參數(shù)的共享性,減輕模型的梯度消失問題,使用匈牙利算法做肢體的最大二分圖匹配是一個非常好的方法。本文設計是一個用于身體、腳、手和面部關鍵點檢測的實時系統(tǒng),該系統(tǒng)可以廣泛應用于涉及人類分析的許多研究主題,如人類的重新識別、重新定位和人機交互等。該研究對人體姿態(tài)識別技術的應用和優(yōu)化有一定的參考作用。
本文還有需改進的地方:①增加更多關節(jié)點優(yōu)良數(shù)據(jù)集,使用無監(jiān)督學習方法或者其他方法增加這種優(yōu)質數(shù)據(jù)集,使模型的表現(xiàn)力更強;②利用生成模型生成一些數(shù)據(jù)集,或者是一些沒有標記出來的關節(jié)點,這樣數(shù)據(jù)集會更豐富,非常有利于模型訓練;③不斷優(yōu)化模型,以達到識別非真人的人形雕塑目標,使模型識別能力更強。