閆 河,劉繼紅,莫佳迪,劉倫宇
(重慶理工大學(xué)兩江人工智能學(xué)院,重慶 401135)
人體骨架點(diǎn)提取是行為識別與人機(jī)交互中常涉及的一項(xiàng)子任務(wù),讓人體骨架點(diǎn)提取網(wǎng)絡(luò)保持高精度的同時(shí)變得更輕量對于部署和使用就顯得尤為重要。當(dāng)前人體骨架點(diǎn)提取方法中表現(xiàn)較好的有文獻(xiàn)[1]提出的Alphapose網(wǎng)絡(luò)架構(gòu),該網(wǎng)絡(luò)由對稱空間變換網(wǎng)絡(luò)SSTN、參數(shù)姿勢非大值抑制NMS和姿勢引導(dǎo)建議發(fā)生器PGPG三部分組成,其中SSTN用于得到高質(zhì)量的單人人體區(qū)域,NMS用以解決同時(shí)出現(xiàn)多個(gè)檢測框的問題,PGPG通過生成相似的訓(xùn)練樣本來增強(qiáng)數(shù)據(jù),雖然Alphapose已經(jīng)取得了不錯(cuò)的效果,但是其參數(shù)量和計(jì)算量都非常龐大。除此之外,還有Face++提出的一種金字塔型的串接模型,即CPN(cascaded pyramid network)[2],這個(gè)模型能夠同時(shí)兼顧人體全局信息以及關(guān)節(jié)點(diǎn)的局部信息,在COCO數(shù)據(jù)集上也取得了不錯(cuò)的準(zhǔn)確率,但這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)同樣復(fù)雜且龐大。文獻(xiàn)[3]提出的高分辨率網(wǎng)絡(luò)(HRNet)相比其它人體骨架點(diǎn)提取網(wǎng)絡(luò)得到了更好的提取精度,HRNet 摒棄了以往常規(guī)網(wǎng)絡(luò)所用的串聯(lián)方式,它采用并聯(lián)的方式將不同分辨率子網(wǎng)按照分辨率從高到底的方式并行連接,實(shí)現(xiàn)了多尺度融合且能有效利用特征信息,但HRNet同樣沒有顧及到減小參數(shù)量和所需的計(jì)算量。另外,微軟提出的 Simple Baseline(SB)[4]從結(jié)構(gòu)上來說是一種極其簡單的人體骨架點(diǎn)提取網(wǎng)絡(luò),在一個(gè)ResNet后面接上三個(gè)轉(zhuǎn)置卷積層,骨架點(diǎn)提取準(zhǔn)確率非常高,但由于其Bottleneck的expansion參數(shù)為4,就必須對Bottleneck中的最后一個(gè)特征圖的通道做擴(kuò)展,這就使得其參數(shù)量和計(jì)算量相比在它之前出現(xiàn)的網(wǎng)絡(luò)來說也并不小。文獻(xiàn)[5]為了減少SB的參數(shù)量與計(jì)算量,對其網(wǎng)絡(luò)進(jìn)行了重新設(shè)計(jì),修改Bottleneck的expansion 為1同時(shí)添加了GC Block注意力模塊,并將Bottleneck第二層的標(biāo)準(zhǔn)卷積換為深度可分離卷積,使用修改后的Bottleneck替換下采樣階段的基礎(chǔ)組件Bottleneck,同時(shí)在上采樣階段也選擇輕量級的反卷積組替換掉三個(gè)轉(zhuǎn)置卷積層,文獻(xiàn)[5]提出的改進(jìn)模型,雖然參數(shù)量與計(jì)算量僅為SB的1/30左右,但由于網(wǎng)絡(luò)被過度簡化,其在COCO數(shù)據(jù)集上的精度下降了大約2個(gè)百分點(diǎn)。
本文致力于探討如何在保證人體骨架點(diǎn)提取精度的同時(shí)有效降低網(wǎng)絡(luò)模型參數(shù)量和計(jì)算量。擬通過在Bottleneck基礎(chǔ)組件最后一個(gè)卷積層之后加入ECA注意力模塊,調(diào)整Bottleneck基礎(chǔ)組件的參數(shù)expansion為1,修改ResNet骨干網(wǎng)絡(luò)倒數(shù)第三個(gè)Bottleneck基礎(chǔ)組件的卷積步長為1,使用反卷積組替換掉原網(wǎng)絡(luò)后面接著的轉(zhuǎn)置卷積層,以實(shí)現(xiàn)減少原SB網(wǎng)絡(luò)模型的參數(shù)量和計(jì)算量,并保證較高的人體骨架點(diǎn)提取精度。
SB的網(wǎng)絡(luò)結(jié)構(gòu)較為簡易,如圖1,主要由骨干網(wǎng)絡(luò)和head network兩部分組成,其中骨干網(wǎng)絡(luò)為ResNet[6],head network則為一些轉(zhuǎn)置卷積層。在ResNet的基礎(chǔ)上,去掉最后的特征輸出層;在后面接上3個(gè)反卷積模塊,每個(gè)模塊依次為反卷積層、批歸一化和relu激活函數(shù),其中反卷積參數(shù)為:256通道,4×4的卷積核,步長為2,填充值為1;最后添加一個(gè)1×1的卷積層,以對所有的關(guān)鍵點(diǎn)生成預(yù)測熱力圖。
圖1 SB整體網(wǎng)絡(luò)結(jié)構(gòu)
圖2 ECA注意力模塊
本文在ResNet的Bottleneck最后一層卷積后添加ECA注意力模塊,同時(shí)修改Bottleneck的expansion為1,修改之后為ECABottleneck,然后在SB網(wǎng)絡(luò)的基礎(chǔ)上,使用ECABottleneck替換掉ResNet骨干網(wǎng)絡(luò)中的Bottleneck,再修改倒數(shù)第三個(gè)Bottleneck組件的卷積步長為1,最后使用文獻(xiàn)[5]提出的反卷積組替換掉轉(zhuǎn)置卷積層,并仍然采用原論文使用的平方誤差損失函數(shù)。
2.2.1 結(jié)合ECA注意力模塊
注意力機(jī)制已被證實(shí)是一種增強(qiáng)深度卷積神經(jīng)網(wǎng)絡(luò)的潛在方法,它在圖像分類識別[7,8]、目標(biāo)檢測[9]等計(jì)算機(jī)視覺方面[10]都取得了非常好的效果。SE-Net[11]首次提出了一種有效的通道注意力學(xué)習(xí)機(jī)制,并取得了良好的性能。在這之后,人們開發(fā)的注意力模塊大致可分為兩個(gè)方向:①增強(qiáng)特征聚合;②通道注意力與空間注意力相結(jié)合。
ECA[12]是一種能有效捕獲跨通道交互信息的注意力,在不降低維度的情況下進(jìn)行逐通道全局平均池化之后,通過考慮每個(gè)通道及其k個(gè)近鄰來捕獲本地跨通道信息交互;這種方法可以同時(shí)保證效率和有效性??梢酝ㄟ^大小為k的快速一維卷積有效實(shí)現(xiàn)ECA模塊,其中內(nèi)核大小k代表本地跨通道交互的覆蓋范圍,即有多少個(gè)相近鄰參與一個(gè)通道的注意力預(yù)測。k值由一種自適應(yīng)的方法來進(jìn)行確定,其中交互作用的覆蓋范圍(即內(nèi)核大小k)與通道維數(shù)成比例。
以往的經(jīng)驗(yàn)表明,避免降維對于學(xué)習(xí)通道注意力非常重要,并且適當(dāng)?shù)目缤ǖ佬畔⒔换タ梢栽诒3中阅艿耐瑫r(shí)顯著降低模型的復(fù)雜性。而ECA恰好通過一維卷積有效地實(shí)現(xiàn)了局部跨通道交互策略并無需降維,且ECA模塊僅包含少量參數(shù),就可以帶來明顯的性能提升。因此,在網(wǎng)絡(luò)中加入ECA注意力模塊,該模塊只給原模型增加了很小的負(fù)擔(dān),卻得到了比較大的精度提升。本文將ECA模塊添加到ResNet網(wǎng)絡(luò)中的bottleneck塊中,修改之后的ECABottleneck模塊如圖3所示,依次經(jīng)過一個(gè)1×1、3×3和1×1卷積核尺寸大小卷積操作之后,再經(jīng)過ECA注意力模塊。
圖3 ECABottleneck模塊
2.2.2 輕量級ECABottleneck
expansion是一個(gè)超參數(shù),用來控制在resnet網(wǎng)絡(luò)中是否對殘差連接的通道做擴(kuò)展,原論文中expansion取值為4,即是將殘差連接的輸出通道數(shù)擴(kuò)展為輸入通道數(shù)的四倍,本文將其修改為1,以不對殘差連接的通道做擴(kuò)展,以此來降低網(wǎng)絡(luò)的參數(shù)量和計(jì)算量。
如圖3所示,一個(gè)bottleneck block由三個(gè)卷積層和一個(gè)短路連接組成,一個(gè)標(biāo)準(zhǔn)卷積層的參數(shù)
Dk×Dk×Cin×Cout
(1)
其中,DK是卷積核的大小,Cin是輸入的通道數(shù),Cout是輸出的通道數(shù),由此得出一個(gè)標(biāo)準(zhǔn)bottleneck block的參數(shù)為
1×1×N×M+3×3×M×M+1×1×M×N
(2)
一般情況下,對于一個(gè)bottleneck block來說,輸入通道數(shù)和輸出通道數(shù)是相等的,也就是說N=M×expansion,bottleneck block默認(rèn)的expansion值為4,因此,一個(gè)bottleneck block的參數(shù)可以簡化為
17×M×M
(3)
為了降低整個(gè)人體骨架點(diǎn)提取網(wǎng)絡(luò)的模型復(fù)雜度。受文獻(xiàn)[5]的啟發(fā),本文也將expansion由4調(diào)整為1,如圖4所示,此時(shí)的N=M×expansion=M,一個(gè)bottleneck block的參數(shù)就為
圖4 各種場景下的人體關(guān)鍵點(diǎn)估計(jì)效果
11×M×M
(4)
通過這種方法,有效降低了網(wǎng)絡(luò)模型的參數(shù)量和計(jì)算量。
所有的實(shí)驗(yàn)都是在基于Windows10操作系統(tǒng)的服務(wù)器上完成的,該服務(wù)器由18 核心 36 線程3.09GHz 的CPU和2個(gè)NVIDIA Quadro RTX8000 GPU組成。采用COCO 2017人體骨架點(diǎn)提取數(shù)據(jù)集來訓(xùn)練和測試,并將結(jié)果與原論文結(jié)果進(jìn)行對比。全部代碼均采用Python編程語言實(shí)現(xiàn),訓(xùn)練的批處理大小(batchsize)設(shè)置為32,學(xué)習(xí)率設(shè)為10-4,選擇的優(yōu)化器為Adam,損失函數(shù)為均方誤差,訓(xùn)練輪數(shù)為140。
下載MS COCO(Microsoft Common Objects in Context)[13]官網(wǎng)的數(shù)據(jù)集,MS COCO數(shù)據(jù)集是用于多人關(guān)鍵點(diǎn)訓(xùn)練和測試的主流數(shù)據(jù)集;該數(shù)據(jù)集標(biāo)注了17個(gè)人體關(guān)鍵點(diǎn),包含了2萬多張圖像共計(jì)2萬5千多個(gè)帶有標(biāo)簽的個(gè)人樣本用于人體骨架點(diǎn)提取。其中COCO數(shù)據(jù)集公開了15萬多個(gè)實(shí)例用于訓(xùn)練和驗(yàn)證,本實(shí)驗(yàn)同樣在 MS COCO2017 公開數(shù)據(jù)集上進(jìn)行訓(xùn)練與驗(yàn)證;訓(xùn)練集提供了118287 張圖片共149813個(gè)人體樣本,驗(yàn)證集提供了5000 張圖像共6352個(gè)人體樣本用于人體骨架點(diǎn)提取。
MS COCO數(shù)據(jù)集的標(biāo)注數(shù)據(jù)對應(yīng)情況為:0-鼻子,1-左眼,2-右眼,3-左耳,4-右耳,5-左肩關(guān)節(jié),6-右肩關(guān)節(jié),7-左手肘關(guān)節(jié),8-右手肘關(guān)節(jié),9-左手腕,10-右手腕,11-左臀,12-右臀,13-左膝蓋,14-右膝蓋,15-左腳踝,16-右腳踝。其中脖子關(guān)鍵點(diǎn)并未標(biāo)記,可由左肩和右肩的關(guān)節(jié)點(diǎn)坐標(biāo)計(jì)算得出。
本文的實(shí)驗(yàn)驗(yàn)證同樣在 COCO2017 數(shù)據(jù)集上進(jìn)行,與文獻(xiàn)[14]相似,本文也同樣采用MS COCO官方給定的關(guān)鍵點(diǎn)相似性(OKS)進(jìn)行評估,OKS的計(jì)算公式為
(5)
其中是di標(biāo)注點(diǎn)和預(yù)測關(guān)節(jié)點(diǎn)位置之間的歐氏距離,ski為標(biāo)準(zhǔn)差,vi是指能否觀察到真實(shí)的人體關(guān)鍵點(diǎn),vi大于0表示能觀察到,vi小于0表示觀察不到。每個(gè)關(guān)節(jié)點(diǎn)的相似度都會在落在[0,1]之間,完美的預(yù)測將會得到OKS=1,預(yù)測值與真實(shí)值差距太大將會得到OKS無限趨于0。
本文采用平均準(zhǔn)確率和召回率來呈現(xiàn)人體關(guān)鍵點(diǎn)檢測結(jié)果,在COCO數(shù)據(jù)集評價(jià)指標(biāo)中,所有的AP默認(rèn)為mAP,AP.5表示當(dāng)OKS=0.50 時(shí)的檢測準(zhǔn)確度,AP.75表示當(dāng)OKS=0.75 時(shí)的檢測準(zhǔn)確度,AP是指在OKS 分別取 0.50、0.55、…、0.90、0.95 這10個(gè)值的平均檢測準(zhǔn)確度,AP(M)表示中型尺度目標(biāo)的平均準(zhǔn)確率,AP(L)表示大型尺度目標(biāo)的平均準(zhǔn)確率,AR表示在 OKS分別取 0.50、0.55、…、0.90、0.95這10個(gè)值的平均召回率。
本文研究了所提方法每個(gè)部分對精度提升的影響,即消融實(shí)驗(yàn)[15],包括ECA模塊和expansion參數(shù)的調(diào)整。對于ECA模塊的驗(yàn)證,本文分別設(shè)計(jì)了包含ECA模塊和不包含ECA模塊的網(wǎng)絡(luò),分別進(jìn)行訓(xùn)練,其它參數(shù)均保持一致且都未使用預(yù)訓(xùn)練模型。對應(yīng)的網(wǎng)絡(luò)訓(xùn)練結(jié)束后,其對應(yīng)的精度、參數(shù)量和計(jì)算量對比如表1,可以看到,ECA模塊對骨架點(diǎn)提取精度的提升效果顯著,對于以ResNet50、ResNet101和ResNet152為骨干網(wǎng)絡(luò)的骨架點(diǎn)提取結(jié)果中,加入ECA模塊使得網(wǎng)絡(luò)對于人體骨架點(diǎn)的提取準(zhǔn)確率分別提升了2.1%、1.0%和 0.8%。這說明ECA模塊提升了網(wǎng)絡(luò)對于人體關(guān)鍵點(diǎn)的提取精度;此外,加入ECA模塊后,網(wǎng)絡(luò)的參數(shù)和FLOPs[16](floating-point operations)只增加了一點(diǎn)點(diǎn),這說明ECA模塊對于整個(gè)網(wǎng)絡(luò)的負(fù)擔(dān)來說非常的小。
表1 本文方法的注意力模塊分解實(shí)驗(yàn)對比
對于expansion參數(shù)取值的驗(yàn)證,本文分別對expansion取值為1和取值為4時(shí)的網(wǎng)絡(luò)進(jìn)行了訓(xùn)練,其它參數(shù)均保持一致且都未使用預(yù)訓(xùn)練模型。對應(yīng)的網(wǎng)絡(luò)訓(xùn)練結(jié)束后,其對應(yīng)的精度、參數(shù)量和計(jì)算量對比如表2,可以看到,把expansion的參數(shù)從4修改為1,對于以ResNet50、ResNet101和ResNet152為骨干網(wǎng)絡(luò)的結(jié)果中,其參數(shù)量和計(jì)算量減小了將近一半,而準(zhǔn)確率僅僅下降了1.6%、0.9%、1.1%,這說明修改expansion的參數(shù)為1可以有效降低整個(gè)網(wǎng)絡(luò)的參數(shù)量和計(jì)算量。
表2 本文方法的expansion取值實(shí)驗(yàn)對比
通過對原網(wǎng)絡(luò)進(jìn)行改良和優(yōu)化,在 COCO val 2017上進(jìn)行實(shí)驗(yàn)驗(yàn)證,實(shí)驗(yàn)結(jié)果如表3所示,添加注意力機(jī)制后,修改ECAbottleneck的expansion為1,并修改向下卷積最后一層的stride為1,訓(xùn)練圖像輸入大小為256×192,分別以ResNet50、ResNet101、ResNet152為骨干網(wǎng)絡(luò)進(jìn)行訓(xùn)練,本文方法相對于SB原網(wǎng)絡(luò)的準(zhǔn)確率幾乎沒有下降,且本文的參數(shù)和計(jì)算量都有了大幅度的減小。
表3 輸入圖像大小為256×192時(shí)在coco2017驗(yàn)證集的準(zhǔn)確率、參數(shù)量與計(jì)算量對比,M=106,G=230
通過實(shí)驗(yàn)對比可知,在對SB網(wǎng)絡(luò)添加注意力及一系列參數(shù)修改之后,相比于原網(wǎng)絡(luò),本文方法的參數(shù)量和計(jì)算量幾乎減半,且本文方法對于人體關(guān)鍵點(diǎn)的估計(jì)精度對比原網(wǎng)絡(luò)只有微小波動。
使用訓(xùn)練好的網(wǎng)絡(luò)模型,以ResNet50為骨干網(wǎng)絡(luò)對驗(yàn)證集圖片進(jìn)行關(guān)鍵點(diǎn)的估計(jì),結(jié)果展示圖如圖4,輸入的原圖像大小均調(diào)整為256×192。其中圖(a)展示的是人體上半身遮擋情況下的關(guān)鍵點(diǎn)估計(jì)結(jié)果,圖(b)為光線陰暗且存在遮擋情況下的結(jié)果,圖(c)為在多人場景下且存在遮擋的效果展示,圖(d)為在滑滑板的復(fù)雜姿態(tài)下的效果展示。
可以看到,在有遮擋、運(yùn)動、多人和光線陰暗等復(fù)雜情況下,對于人眼可預(yù)見的人體關(guān)鍵點(diǎn)位置,本文的方法也能提取出來,從而獲得準(zhǔn)確的人體骨架點(diǎn)。
本文在Simple Baselines for Human Pose Estimation and Tracking論文所提出的網(wǎng)絡(luò)基礎(chǔ)上,對骨干網(wǎng)路resnet的bottleneck block組件進(jìn)行了修改,在每個(gè)bottleneck block組件中的最后一個(gè)卷積之后添加了注意力模塊,并修改bottleneck block的參數(shù)expansion為1,還將resnet骨干網(wǎng)絡(luò)中倒數(shù)第三個(gè)bottleneck block組件的卷積步長修改為1,在網(wǎng)絡(luò)上采樣部分,使用反卷積組替換掉了原來的轉(zhuǎn)置卷積,有效降低了網(wǎng)絡(luò)模型的參數(shù)量和計(jì)算量并保持了較高精度。改進(jìn)之后的網(wǎng)絡(luò)同樣在COCO2017數(shù)據(jù)集上進(jìn)行訓(xùn)練和測試,相較于原網(wǎng)絡(luò),準(zhǔn)確率幾乎沒有變化且參數(shù)量更少。結(jié)果表明,本文方法能夠有效減小網(wǎng)絡(luò)參數(shù)并保持較高的準(zhǔn)確率。在后續(xù)的研究中,進(jìn)一步提升準(zhǔn)確率同時(shí)減小網(wǎng)絡(luò)的參數(shù),仍是工作的重點(diǎn)。