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