戶慶凱 萬(wàn)舒暢 朱命冬
(河南工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 新鄉(xiāng) 453000)
通過(guò)對(duì)現(xiàn)有行人檢測(cè)[1]和姿態(tài)估計(jì)系統(tǒng)[2]進(jìn)行了研究,現(xiàn)在的基于機(jī)器學(xué)習(xí),視覺(jué)技術(shù)應(yīng)運(yùn)而生的行人檢測(cè)和姿態(tài)估計(jì)系統(tǒng)在運(yùn)行在不同配置的計(jì)算機(jī)上時(shí)會(huì)有較大的效果差異,不同性能的計(jì)算機(jī),可能會(huì)出現(xiàn)幀數(shù)過(guò)剩,精確度不夠,或者精確度足夠,卻幀數(shù)過(guò)低,那以實(shí)現(xiàn)行人檢測(cè)和姿態(tài)估計(jì)的實(shí)時(shí)性。因?yàn)橄到y(tǒng)的默認(rèn)解決方案不能完美地適配在各種不同的計(jì)算機(jī)上,所以在一臺(tái)計(jì)算機(jī)上進(jìn)行了多種不同的配置方案,找到一種幀數(shù)精確度最高的解決方案。
對(duì)于行人檢測(cè)與姿態(tài)估計(jì)[3]的應(yīng)用,CVPR 2016 Convolutional Pose Machine (CPM) 和CVPR2017 realtime multi-person pose estimation 算法是其基礎(chǔ),兩種算法的模型效果很好,并且取得了較好的魯棒性,當(dāng)行人被遮擋了一部分后還是能夠估計(jì)出來(lái)。
1)CMP[4](單人姿態(tài)估計(jì))的模型采用的大卷積核來(lái)獲得大的感受野,這對(duì)于推斷被遮擋的關(guān)節(jié)是很有效的。
整個(gè)算法流程:
(1)首先對(duì)圖像中出現(xiàn)的所有人進(jìn)行回歸,回歸各個(gè)人的關(guān)節(jié)的點(diǎn);
(2)然后根據(jù)center map 來(lái)去除掉對(duì)其他人的響應(yīng);
(3)最后通過(guò)重復(fù)地對(duì)預(yù)測(cè)出來(lái)的heatmap 進(jìn)行refine 得到最終的結(jié)果,在進(jìn)行refine 的時(shí)候,需要引入中間層的loss,從而保證較深的網(wǎng)絡(luò)仍然可以訓(xùn)練下去,不至于梯度彌散或者爆炸。
2)realtime multi-person pose estimation(多 人姿態(tài)估計(jì))[5]算法是基于CMP 構(gòu)造的,所以計(jì)算量較大,需要較好計(jì)算性能的顯卡進(jìn)行計(jì)算。該網(wǎng)絡(luò)的結(jié)構(gòu)與CPM 很類似,也是通過(guò)CPM 的方式先將所有人的關(guān)節(jié)點(diǎn)都回歸出來(lái),然后再對(duì)這些關(guān)鍵節(jié)點(diǎn)進(jìn)行劃分,這樣就可以把關(guān)節(jié)分配到每個(gè)人。
以下是幾種常見(jiàn)的人體姿態(tài)識(shí)別算法。
2018 年2 月Facebook 開(kāi)源了人體姿態(tài)識(shí)別系統(tǒng)DensePose[6]。Facebook公布了這一框架的代碼、模型和數(shù)據(jù)集,同時(shí)發(fā)布了DensePose-COCO,這是一個(gè)為了估計(jì)人類姿態(tài)的大型真實(shí)數(shù)據(jù)集,其中包括了對(duì)5萬(wàn)張COCO圖像手動(dòng)標(biāo)注的由圖像到表面的對(duì)應(yīng)。這對(duì)深度學(xué)習(xí)研究者來(lái)說(shuō)是非常詳細(xì)的資源,它對(duì)姿態(tài)估計(jì)、身體部位分割等任務(wù)提供了良好的數(shù)據(jù)源。
DensePose 的論文中提出了DensePose-RCNN,這是Mask-RCNN 的一種變體,可以以每秒多幀的速度在每個(gè)人體區(qū)域內(nèi)密集地回歸特定部位的UV坐標(biāo)。它是基于一種能將圖像像素通過(guò)卷積網(wǎng)絡(luò)映射到密集網(wǎng)格的系統(tǒng)——DenseReg。模型的目標(biāo)是決定每個(gè)像素在表面的位置以及它所在部分相對(duì)應(yīng)的2D參數(shù)。
DensePose 借用了Mask-RCNN[7]的架構(gòu),同時(shí)帶有Feature Pyramid Network(FPN)的特征,以及ROI-Align 池化。除此之外,他們?cè)赗OI 池化的頂層搭建了一個(gè)全卷積網(wǎng)絡(luò)。
OpenPose[8]是由卡內(nèi)基梅隆大學(xué)認(rèn)知計(jì)算研究室提出的一種對(duì)多人身體、面部和手部形態(tài)進(jìn)行實(shí)時(shí)估計(jì)的框架。
OpenPose 同時(shí)提供2D 和3D 的多人關(guān)鍵點(diǎn)檢測(cè),同時(shí)還有針對(duì)估計(jì)具體區(qū)域參數(shù)的校準(zhǔn)工具箱。OpenPose可接受的輸入格式有很多種,可以是圖片、視頻、網(wǎng)絡(luò)攝像頭等。同樣,它的輸出格式也是多種多樣,可以是PNG、JPG、AVI,也可以是JSON、XML 和YML。輸入和輸出的參數(shù)同樣可以針對(duì)不同需要進(jìn)行調(diào)整。
該模型利用MPII[9]人類姿勢(shì)數(shù)據(jù)集進(jìn)行訓(xùn)練,這是一個(gè)內(nèi)容十分豐富的數(shù)據(jù)集,專門(mén)針對(duì)人類姿態(tài)估計(jì)。目前只有TensorFlow的實(shí)現(xiàn)。
這項(xiàng)研究將人類姿態(tài)估計(jì)的任務(wù)應(yīng)用到真實(shí)的圖片中,該方法既可以進(jìn)行動(dòng)作識(shí)別,也能進(jìn)行估計(jì),與之前先檢測(cè)人類動(dòng)作再對(duì)此進(jìn)行推測(cè)的技術(shù)有所區(qū)分。在實(shí)施過(guò)程中用到了基于CNN 的探測(cè)器和整數(shù)線性規(guī)劃法。
基于“瀑布”收縮空間池架構(gòu)(WASP),Artacho 等提出了一個(gè)統(tǒng)一的人體姿態(tài)估計(jì)框架(UniPose)[10]。UniPose 不需要單獨(dú)的分支來(lái)進(jìn)行對(duì)邊界框和關(guān)節(jié)檢測(cè),結(jié)合上下文分割和聯(lián)合定位功能,確定了人體檢測(cè)的關(guān)節(jié)點(diǎn)和邊界框的位置。在不依賴統(tǒng)計(jì)后處理方法的情況下以高精度估計(jì)人體姿勢(shì)。
默認(rèn)的openpose[11]參數(shù)和自己電腦的配置不完全匹配,會(huì)導(dǎo)致電腦性能資源的浪費(fèi)或溢出,導(dǎo)致軟件在運(yùn)算處理行人態(tài)勢(shì)時(shí),無(wú)法充分使用電腦性能,無(wú)法跑出最大FPS。甚至有時(shí)因?yàn)閰?shù)設(shè)置不當(dāng)和優(yōu)化不足,會(huì)導(dǎo)致FPS 數(shù)值非常低。針對(duì)openpose 默認(rèn)的參數(shù)進(jìn)行優(yōu)化,使程序跑的過(guò)程中,將電腦性能發(fā)揮到極致,將沒(méi)必要的處理減到最少,處理精度和震蕩率減小到最合理范圍,open?pose 的默認(rèn)處理分辨率的精度較高,識(shí)別精度很高,但如果GPU 性能不好的話,就會(huì)讓FPS[12]非常不理想。本文結(jié)合這些問(wèn)題進(jìn)行分析和調(diào)試,尋找最優(yōu)的參數(shù)解決方案。
本系統(tǒng)平臺(tái)的硬件部分包括一部手機(jī)、一臺(tái)GPU性能較好PC機(jī),手機(jī)進(jìn)行視頻錄制和拍照片,把錄制好的視頻和圖片導(dǎo)入到PC 里,PC 端利用OpenPose 系統(tǒng)進(jìn)行處理,如圖1。手機(jī)端和電腦端分別下載DroidCam,此軟件可以實(shí)現(xiàn)通過(guò)無(wú)線網(wǎng)絡(luò),把手機(jī)作為PC端攝像頭的功能,將電腦和手機(jī)連接好,實(shí)現(xiàn)實(shí)時(shí)的攝像畫(huà)面功能,PC 端利用OpenPose 系統(tǒng),進(jìn)行實(shí)時(shí)攝像畫(huà)面人體姿態(tài)識(shí)別,如圖2。
圖1 視頻圖片處理流程
圖2 攝像實(shí)時(shí)處理流程
綜合前面的開(kāi)發(fā)環(huán)境搭建和算法分析,本章主要任務(wù)是設(shè)計(jì)并實(shí)現(xiàn)基于OpenPose[13]的圖片、視頻和實(shí)時(shí)攝像頭的人體姿態(tài)識(shí)別系統(tǒng)。深度學(xué)習(xí)訓(xùn)練數(shù)據(jù)集模型文件采用預(yù)先訓(xùn)練好的COCO[14]模型,通過(guò)OpenPose 對(duì)圖片、視頻、實(shí)時(shí)攝像頭、進(jìn)行姿態(tài)識(shí)別和圖片、關(guān)節(jié)點(diǎn)信息的輸出。
手機(jī)端和電腦端各自下載DroidCam 軟件,從而手機(jī)可作為電腦的攝像頭。
1)下載手機(jī)端DroidCam運(yùn)行如圖3。
圖3 Android端DroidCam運(yùn)行
手機(jī)屏幕上顯示的WIFI IP 為手機(jī)的IP 地址,Device IP為端口號(hào)。
2)下載電腦端DroidCam運(yùn)行如圖4。
圖4 電腦端DroidCam運(yùn)行結(jié)果
電腦端輸入手機(jī)端的IP 地址和端口號(hào),如圖5。
圖5 輸入界面
將上面手機(jī)上的IP 地址和端口號(hào)輸入電腦端的對(duì)應(yīng)位置,下面的Audio 可以設(shè)置是否通過(guò)手機(jī)錄制聲音。
4)連接后的效果如圖6。
圖6 連接效果
點(diǎn)擊“Start”后手機(jī)與電腦連接,手機(jī)攝像頭的畫(huà)面被同步到電腦上,視頻延遲很低,清晰度流暢度也不錯(cuò),電腦端視頻也是以攝像頭視頻流的方式被調(diào)用的,方便后面對(duì)調(diào)用攝像頭時(shí),能夠調(diào)用到這個(gè)視頻流。
1)選取一張含有人物的圖片,如圖7。
圖7 人物圖
2)輸入命令行指令,輸入圖片地址和想要將處理好的圖片輸出的地址,如圖8。
圖8 指令圖1
其中”binOpenPoseDemo.exe”為運(yùn)行OpenPose的命令,--write_images examples3”表示將處理的數(shù)據(jù)以圖片格式輸出,輸出地址為”examples3”。--image_dir examples2”表示處理的數(shù)據(jù)為圖片,讀取地址為”examples2”。
3)輸出的人體姿態(tài)圖像如圖9。
圖9 人物姿態(tài)識(shí)別圖
1)輸入命令行指令如圖10。
圖10 指令圖2
其中“--face”表示啟用人臉姿態(tài)識(shí)別,“--hand”表示啟用手部姿態(tài)識(shí)別,--face_net_reso?lution“256×256”表示面部識(shí)別的識(shí)別分辨率為‘256×256’,--hand_net_resolution“256×256”“表示手部姿態(tài)識(shí)別的識(shí)別分辨率為‘256×256’。
2)運(yùn)行效果如圖11。
圖11 人體姿態(tài)面部手部識(shí)別圖
1)選取一段人物清晰的視頻如圖12。
圖12 人體視頻動(dòng)圖
2)輸入命令行指令如圖13。
圖13 指令圖3
視頻地址為“examplesmediammexport162703 4-098799.mp4”,“write_images_examplesmedia_out”為設(shè)置輸出格式為圖片,輸出地址為“examplesme?dia_out”。
3)輸出的人體姿態(tài)圖片如圖14。
圖14 圖片輸出圖
因?yàn)橐曨l通過(guò)處理只能輸出為逐幀的圖片,所以此時(shí)該文件夾中輸出了兩千多張圖片,是逐幀處理輸出的。
4)逐幀圖片合成視頻
通過(guò)pr 等視頻剪輯軟件,將導(dǎo)出到“exam?plesmedia_out”路徑下的2847張進(jìn)行視頻合成。
5)合成后視頻效果如圖15。
圖15 視頻合成效果動(dòng)圖
6)視頻人體識(shí)別流程圖如圖16。
圖16 視頻處理流程圖
1)手機(jī)作為攝像頭進(jìn)行連接
手機(jī)端電腦端下載DroidCam 軟件,電腦端輸入手機(jī)端的IP 地址和端口,進(jìn)行連接,效果如圖17所示。
圖17 攝像頭連接圖
2)輸入命令行命令,如圖18所示。
圖18 指令圖4
3)運(yùn)行結(jié)果為如圖19。
圖19 實(shí)時(shí)人體姿態(tài)識(shí)別動(dòng)圖
在啟用攝像頭實(shí)時(shí)運(yùn)行時(shí),會(huì)出現(xiàn)攝像頭調(diào)用錯(cuò)誤的情況,調(diào)用的不是自己想調(diào)用的手機(jī)攝像頭,而是電腦攝像頭,如圖20所示。
圖20 系統(tǒng)默認(rèn)調(diào)用攝像頭
在運(yùn)行時(shí),需要將攝像頭指定為數(shù)組中的第二個(gè)攝像頭,如圖21所示。
圖21 指令圖5
改過(guò)攝像頭后運(yùn)行程序如圖22。
圖22 改后攝像圖
將攝像頭改為1 后,OpenPose 的運(yùn)行可以正常顯示手機(jī)作為攝像頭傳入的畫(huà)面。
獨(dú)立運(yùn)行Pose[15]模式時(shí),OpenPose可以正常運(yùn)行,但將face 和hand 添加進(jìn)來(lái)時(shí),程序就會(huì)出現(xiàn)溢出如圖23。
圖23 內(nèi)存溢出提示圖
第6 行顯示“out of memory”表示內(nèi)存溢出了。經(jīng)過(guò)查詢研究發(fā)現(xiàn),OpenPose 在默認(rèn)情況下,對(duì)pose、face、hand 的解析分辨率設(shè)置的較高,設(shè)置成小一點(diǎn)的分辨率可以解決這個(gè)問(wèn)題。對(duì)pose、face、hand重新設(shè)置分辨率參數(shù),如圖24。
圖24 重新設(shè)定分辨率圖
運(yùn)行效果如圖25所示。
圖25 人體臉部手部姿態(tài)識(shí)別動(dòng)圖
經(jīng)過(guò)幾次討論和嘗試,鎖定了flags.hpp[17]文檔,里面有每個(gè)參數(shù)詳細(xì)注釋,如圖26。
圖26 文檔注釋圖
其中主要參數(shù):
Pose:身體骨骼關(guān)鍵點(diǎn)檢測(cè)模式;
Face:臉部關(guān)鍵點(diǎn)檢測(cè)模式;
Hand:手部關(guān)鍵點(diǎn)檢測(cè)模式。
在不同模式下設(shè)置不同分辨參數(shù),導(dǎo)致運(yùn)行幀率不同和人體識(shí)別精度不同。通過(guò)調(diào)整參數(shù),來(lái)提高骨骼還原度、面部還原度、手部還原度。通過(guò)實(shí)驗(yàn)設(shè)置不同分辨率參數(shù)來(lái)找到一套最優(yōu)參數(shù)設(shè)置。
發(fā)現(xiàn)是電腦GPU 配置太差,無(wú)法運(yùn)行默認(rèn)狀態(tài)的pose+hand/face[16],以上報(bào)錯(cuò)信息也是內(nèi)存溢出。
解決方案:
調(diào)整網(wǎng)絡(luò)的分辨率,其調(diào)整如表1。
表1 分辨率調(diào)整表格
實(shí)驗(yàn)結(jié)果:
默認(rèn)情況下如表2所示。
表2 默認(rèn)情況表
第一次調(diào)整如表3所示。
表3 第一次調(diào)整表
第二次調(diào)整如表4所示。
表4 第二次調(diào)整表
第三次調(diào)整如表5。
表5 第三次調(diào)整表
由以上實(shí)驗(yàn)結(jié)果,對(duì)每個(gè)列表的分辨率進(jìn)行實(shí)驗(yàn),統(tǒng)計(jì)每個(gè)列表分辨率下運(yùn)行的幀率,綜合考慮流暢性和識(shí)別精度兩方面,得到了一套比較合理的分辨率方案,如表6所示。
表6 最終方案表
為了使得行人檢測(cè)和姿態(tài)估計(jì)系統(tǒng)在精確度、時(shí)效性以及幀率之間達(dá)到了一個(gè)良好的平衡,通過(guò)實(shí)驗(yàn),本文總結(jié)出一套全新的參數(shù)優(yōu)化策略:為了得到一套比較合理的分辨率方案,可以快速地去設(shè)置參數(shù),初始分辨率為256*256,針對(duì)net_resolution模型,可以調(diào)整pose、pose+face、pose+hand、pose+face+hand 的參數(shù);針對(duì)face_net_resolution 模型,只需要去調(diào)整post+face 參數(shù)或pose+face+hand 參數(shù);針對(duì)hand_net_resolution 模型,只需要調(diào)整pose+hand或pose+face+hand參數(shù)。
本論文研究了在各種不同檢測(cè)需求下和不同硬件環(huán)境下,最優(yōu)的配置參數(shù)。實(shí)現(xiàn)性能利用最大化。
本文在基于深度學(xué)習(xí)的行人檢測(cè)姿態(tài)估計(jì)系統(tǒng)的基礎(chǔ)上主要做了以下工作:
1)對(duì)與不能調(diào)用其他非系統(tǒng)攝像頭的問(wèn)題進(jìn)行研究改進(jìn)。
2)對(duì)不同精度需求和不同配置的電腦進(jìn)行參數(shù)優(yōu)化。
3)總結(jié)出一套全新的參數(shù)優(yōu)化策略。
人體姿態(tài)識(shí)別做為一個(gè)研究方向,以后一定會(huì)進(jìn)入我們每個(gè)人的生活,可以預(yù)測(cè)這個(gè)技術(shù)以后一定會(huì)改變我們的生活方式,為人類帶來(lái)巨大貢獻(xiàn)。