王俊巖,祁 燕
(沈陽理工大學 信息科學與工程學院,沈陽 110159)
人體姿態(tài)估計課題的發(fā)展越來越貼近實際,例如在異常行為檢測、步態(tài)分析以及行人重識別等領域的應用前景[1]。其中3D的人體姿態(tài)估計比2D能更進一步還原真實的姿態(tài),更具挑戰(zhàn)性。
目前實現(xiàn)3D人體姿態(tài)估計的方法主要有兩種:一種直接從圖像回歸得到3D坐標;另外一種采用兩階段方法,先用預訓練好的2D人體姿態(tài)估計器從圖像上預測出2D骨骼序列作為輸入,再根據(jù)2D關節(jié)點坐標估計出3D關節(jié)點坐標,其主要研究內容是從2D坐標如何快速、準確的估計出3D坐標。第二種方法減少了模型在2D姿態(tài)估計上的壓力,網(wǎng)絡結構簡單,運算速度較快,占用顯存較少[2]。由于從2D關節(jié)坐標恢復3D信息是一個逆問題,具有深度模糊性,其中3D關節(jié)的深度可能沿著投影到同一個2D關節(jié)位置的光線深度存在多種解決方案[3]。本文通過將這一問題看成處理1對N的多個輸出結果問題,可以轉換為混合多個概率分布來擬合函數(shù),得到多個輸出結果。本文通過混合多個高斯分布來構建混合密度網(wǎng)絡,獲得參數(shù)信息,比如高斯分布中的期望和方差,從而提供更準確的預測效果。
在深度學習的研究中,一個好的激活函數(shù)可以使梯度有效的傳播,在提高網(wǎng)絡性能的同時也不會造成過多的計算損耗。最近,可學習的激活函數(shù)吸引了很多學者的關注。PReLU利用激活函數(shù)的參數(shù)化,在訓練過程中以端到端方式適應不同的網(wǎng)絡體系結構和數(shù)據(jù)集,比其他的ReLU變體更具靈活性[4]。PAU不僅可以近似通用激活函數(shù),而且可以在學習很少參數(shù)的同時,學習新的激活函數(shù)[5]。本文引用可學習的激活函數(shù),其參數(shù)是全局參數(shù),具有數(shù)據(jù)自適應性,可以提高網(wǎng)絡的性能。
本文通過構建混合密度網(wǎng)絡,更改神經(jīng)網(wǎng)絡的輸出和損失函數(shù),來預估出多個3D人體姿勢假設。在網(wǎng)絡結構上,將基于逐元素注意力機制的AReLU激活函數(shù)[6]應用到網(wǎng)絡層中。實驗證明,本文應用的AReLU激活函數(shù)提升了網(wǎng)絡的性能,進一步降低了平均關節(jié)點誤差。
由于2D姿態(tài)估計3D姿態(tài)具有深度不確定性,根據(jù)文獻[7],用Bishop提出的混合密度網(wǎng)絡[8]可以來估計預測不確定性的情況。通過訓練一組混合密度網(wǎng)絡,并組合不同混合密度網(wǎng)絡的參數(shù),來預測概率密度的參數(shù),得到最終預測結果。
本文的總目標是在給定2D輸入的情況下,估計3D空間中的人體關節(jié)位置。因為輸入是已知的2D骨骼序列x∈R2n(R為實數(shù)集),輸出的是三維空間中的一系列點y∈R3n,所以可以學習一個函數(shù)f:R2n→R3n,使其在N個姿勢的數(shù)據(jù)集中,預測誤差最小。該函數(shù)將x映射到一組輸出參數(shù)Θ={μ,σ,α}用于混合模型中。
在已知2D關節(jié)點x∈R2n的情況下,3D姿勢y∈R3n的概率密度表示為高斯核函數(shù)的線性組合。
(1)
式中:m是高斯核的數(shù)量;αi(x)是混合系數(shù),可以看作在給定輸入2D關節(jié)點下第i個高斯核生成3D姿勢的先驗概率(以x為條件)。
αi(x)滿足下面約束
(2)
式中φi(y|x)表示為第i個高斯核的3D姿勢的條件密度,用高斯分布表示為
(3)
式中:μi(x)和σi(x)分別為第i個高斯核的均值和方差,其中混合系數(shù)、均值、方差都是輸入2D姿勢x的函數(shù);d為輸出3D姿勢的維度。
最后,使用深度網(wǎng)絡學習的函數(shù)可表示為
(4)
φi(y|x,w)=
(5)
式中參數(shù)取決于深度網(wǎng)絡的學習權重w。
注意力機制是讓網(wǎng)絡專注于找到輸入數(shù)據(jù)中顯著與當前輸出相關的有用信息,從而提高輸出的質量。如基于通道的注意力機制是每個通道中的所有元素共享相同的注意力值。本文引用的基于逐元素的注意力機制是最細粒度的,其使特征向量的每個元素可以得到不同的注意力值。要想每個元素都有一個獨立的注意力值,需學習一個與輸入特征向量對應的元素注意力圖。
激活函數(shù)將非線性引入人工神經(jīng)網(wǎng)絡,對于網(wǎng)絡的表達能力和學習動態(tài)至關重要。引用基于元素注意力機制的AReLU激活函數(shù),其將元素注意力機制與ReLU激活函數(shù)相結合,并應用到本文的網(wǎng)絡層中。通過設計注意力模塊,使預激活的特征圖學習基于元素的和基于符號的注意力圖。根據(jù)ReLU激活函數(shù)的性質,注意力模塊會導致正元素放大,并抑制負元素,因此注意力圖根據(jù)其符號縮放元素。這樣會使得網(wǎng)絡訓練更能抵抗梯度消失的問題,從而提高網(wǎng)絡結構的性能。
1.3.1 逐元素注意力機制
設輸入特征向量V={vi}∈RW×H×C,在整個特征向量上計算注意力圖S={si}∈RW×H×C,S表示注意力圖,包含每個元素對應的注意力值。使用一個函數(shù)ψ來調節(jié)特征圖和輸入特征向量,得到輸出ψ(vi,si)。ψ是逐元素乘法,為了執(zhí)行逐元素乘法,需要先將S擴展到V的整個維度。
Element-wise Sign-based Attention(ELSA)是一種基于元素的注意力機制,用于定義基于注意力機制的激活函數(shù),公式為
(6)
式中:Θ={α,β}是可學習參數(shù);C(·)將輸入變量裁剪到[0.01,0.99];σ(·)是Sigmoid激活函數(shù)。可以看出,在ELSA中正負元素分別受到α和β不同程度的關注。所以,該注意力機制會根據(jù)當前輸入的符號值,給出合理的注意力值。
1.3.2 基于逐元素注意力機制的激活函數(shù)
ELSA在網(wǎng)絡層中可表示為
(7)
在使用ELSA構建激活函數(shù)時,將其與ReLU激活函數(shù)結合在一起。ReLU函數(shù)為
(8)
兩者結合后的AReLU激活函數(shù)為
(9)
可以發(fā)現(xiàn),當輸入大于零被激活時,由于1+σ(β)>1,AReLU放大了梯度,有助于避免梯度消失。當輸入小于零時,ReLU負數(shù)部分恒為零,會導致一些神經(jīng)元無法激活,而AReLU會將其激活,縮小梯度。α和β是可學習的全局參數(shù),會使激活函數(shù)更具數(shù)據(jù)自適應性,提高網(wǎng)絡的精確度。所以在網(wǎng)絡層上應用AReLU激活函數(shù)可以加強網(wǎng)絡的訓練效果。
采用Stacked Hourglass網(wǎng)絡[9]對圖像進行檢測,生成16個關節(jié)點位置。使用的Stacked Hourglass網(wǎng)絡訓練模型是在MPII數(shù)據(jù)集上進行了預訓練,并在Human3.6M數(shù)據(jù)集上進行了微調,從而使該模型在目標數(shù)據(jù)集上獲得了更準確的2D關節(jié)檢測,并進一步減少了3D姿態(tài)估計誤差。對Human3.6M數(shù)據(jù)集進行檢測,生成對應的2D關節(jié)點信息,并保存為.h5文件,為3D人體姿勢估計器的訓練作準備。
3D人體姿態(tài)估計網(wǎng)絡結構如圖1所示。首先,將2D關節(jié)點坐標輸人到3D人體姿態(tài)估計器中。其中,特征提取器的第一層線性層把維度為32的輸入(16個2D關節(jié)點坐標維度是32)提高到1024維的特征空間中,并在該層使用ReLU激活函數(shù)。隨后,跟著兩個殘差塊進行殘差連接,每個殘差塊里有兩個線性層,把AReLU激活函數(shù)添加到這兩個線性層中。最后,在假設生成器中改變神經(jīng)網(wǎng)絡的輸出使三個線性層分別輸出3個參數(shù),混合系數(shù)、均值和方差。其中,每個高斯核的均值μi代表一個3D姿勢假設。分別使用3個不同的激活函數(shù)來約束對應的3個參數(shù),對混合系數(shù)使用了Softmax函數(shù),用mELU函數(shù)來約束方差;對均值使用一個標準的線性層,該層的輸出維度是240(16個3D關節(jié)點坐標維度是48,本文共設5個高斯核)。
圖1 3D人體姿態(tài)估計器網(wǎng)絡結構
實驗運行環(huán)境的服務器配置為CPU[Interl(R)Core(TM)i7-9700 CPU @ 3.60GHz],顯卡[NVIDA GeForce RTX 2080],系統(tǒng)是64位Ubantu 16.04。深度學習框架是TensorFlow GPU 1.14.0。
實驗數(shù)據(jù)集采用的Human3.6M數(shù)據(jù)集是目前最大室內3D人體姿態(tài)數(shù)據(jù)集。該數(shù)據(jù)集由360萬張3D圖片,11名受試者在4個不同的視點下執(zhí)行了15個不同的動作。每個人體姿態(tài)有32個關節(jié)點,但是僅有17個關節(jié)點是移動的,所以本文的訓練集中僅有17個3D關節(jié)點。本文模型在經(jīng)過 2D 人體姿勢估計器檢測過的 Human 3.6M數(shù)據(jù)集結果上進行訓練,并在帶有真實 3D 標注的 Human3.6M 數(shù)據(jù)集上測試。
3.3.1 數(shù)據(jù)處理
模型在經(jīng)過Stacked Hourglass網(wǎng)絡檢測的2D關節(jié)點坐標和帶有真實標注3D關節(jié)點坐標上進行訓練。為了加快訓練速度,將標準歸一化應用于2D輸入和3D輸出,通過將輸入數(shù)據(jù)減去平均值并除以標準偏差實現(xiàn)。由于輸入只有2D關節(jié)點坐標,沒有深度信息,無法預測3D姿勢的全局位置。因此本文將髖關節(jié)周圍的3D姿勢零中心化,使3D 數(shù)據(jù)圍繞在根關節(jié)點附近,所以本文把髖關節(jié)移除,僅有16個3D關節(jié)點坐標參與訓練。
3.3.2 網(wǎng)絡調參
使用Adam優(yōu)化訓練網(wǎng)絡,訓練200次迭代次數(shù),初始學習率設置為0.001,最小批次大小為64,用Kaiming初始化來設置線性層的初始權重。在每個線性層后添加批處理歸一化層加速神經(jīng)網(wǎng)絡訓練。使用log-sum-exp技巧解決因損失函數(shù)中包含多個求和值的對數(shù),導致計算值特別小所產(chǎn)生的計算機系統(tǒng)認為這個數(shù)太小而無法表示出的問題。
為了對本文所提方法的性能做出評價,采用Human3.6M數(shù)據(jù)集官方推薦的測試集S9、S11,對測試集中的15個動作分別進行評估。通過比較重建的姿勢假設與真實標注數(shù)據(jù),計算每個關節(jié)點的歐幾里得距離。表1表示計算每個動作關節(jié)點坐標誤差的平均值。本文的方法比基準[2]的平均誤差降低了9毫米,比只引用混合密度網(wǎng)絡[3]降低了7毫米,這說明本文通過構建混合密度網(wǎng)絡和在網(wǎng)絡層上應用AReLU激活函數(shù),可以提高3D人體姿態(tài)估計的準確性。表2表示基于Procustes分析的平均關節(jié)點誤差。其先對網(wǎng)絡輸出進行剛性變換(平移,旋轉和縮放)向真實標注數(shù)據(jù)對齊后,再計算關節(jié)點誤差的平均值。如表2所示,經(jīng)過Procustes對齊后的平均誤差也比基準的低。這說明本文應用可學習的AReLU激活函數(shù)在網(wǎng)絡層上具有很好的數(shù)據(jù)自適應性和緩解梯度消失問題,從而提高了網(wǎng)絡的性能,降低了平均關節(jié)點誤差。
表1 每個動作關節(jié)點坐標誤差的平均值
表2 基于Procrustes分析的平均關節(jié)點誤差
圖2列舉了兩個動作的可視化樣例。
圖2 模型樣例可視化
圖2中第一列是原始輸入的2D姿勢,第二列是3D真實標注,余下的5列是通過3D姿態(tài)估計器預測出的5個假設姿勢??梢钥闯?個姿勢假設都有不同的地方,這樣增加了訓練的不確定性,使神經(jīng)網(wǎng)絡獲得了更多的信息,更有利于模型的學習。圖3為3D姿勢可視化圖。
圖3 3D姿勢可視化
圖3中左圖為輸入2D人體姿態(tài)估計器中的測試圖,并在原圖上用藍色的圓點顯示輸出的16個2D關節(jié)點。圖3中右圖為輸入左圖2D關節(jié)點坐標對應的3D人體姿態(tài)預測結果的可視化圖,其輸出的是17個3D關節(jié)點。因為模型在訓練時僅有16個3D關節(jié)點參與訓練,所以在模型訓練結束后,本文在可視化過程中把髖關節(jié)加入到3D人體姿態(tài)的可視化中。結果能準確反映3D人體姿態(tài)及三維網(wǎng)格空間中人體各部位所在位置的三維空間坐標。
本文根據(jù)2D到3D之間的深度模糊性構建了混合密度模型,引用混合密度網(wǎng)絡,使網(wǎng)絡獲取更多參數(shù)信息,輸出多種3D可行姿勢假設;并在網(wǎng)絡層上應用了一種可學習的基于逐元素注意力機制的AReLU激活函數(shù),提升了網(wǎng)絡結構的性能,提高了3D人體姿態(tài)估計的準確性。