賀文濤, 黃學(xué)宇, 李 瑤
(空軍工程大學(xué)防空反導(dǎo)學(xué)院, 西安, 710051)
隨著模式識別和圖像處理技術(shù)的快速發(fā)展,人體分析作為該領(lǐng)域一個分支近來也受到了科研人員和工業(yè)應(yīng)用的廣泛關(guān)注,但當(dāng)前的大多數(shù)分析算法僅將人體自身作為研究點(diǎn),通過對人體的全身姿態(tài)或動作捕捉來進(jìn)行相關(guān)應(yīng)用,少有針對某一特定身體部位進(jìn)行的分析研究,對人體與物體的關(guān)聯(lián)研究也比較少。
現(xiàn)有的人體分析算法可按實(shí)現(xiàn)方式大致分為兩類,自上而下(top-down)和自下而上(bottom-up)。自上而下的方式指的是在每次的檢測中首先使用人物檢測器識別圖片中的人員,然后在此基礎(chǔ)上進(jìn)行分析,如Newell[1],WEI[2]等使用的姿態(tài)估計(jì)方法。這種方式的缺點(diǎn)是需要很高的前期人員識別準(zhǔn)確率保證,一旦無法識別人物,姿態(tài)估計(jì)就會失效;另外,由于對每個人都要使用一個檢測器,隨著圖片中人物數(shù)量的增加,其計(jì)算成本會隨之成倍增加。相較之下,自下而上的方式則可以彌補(bǔ)這些缺點(diǎn),其首先在全局進(jìn)行關(guān)節(jié)熱點(diǎn)圖的提取,然后根據(jù)向量關(guān)系進(jìn)行連通,從而為前期保證提供了高可靠性。但早期的自下而上方法,如Pishchulin[3],Insafutdinov[4]等提出的方法,由于最終的解析仍需要復(fù)雜的全局推斷,因此并未提高效率。文獻(xiàn)[5]用貪心算法將關(guān)鍵點(diǎn)連接起來,大大提升了效率,使得實(shí)時的人體分析成為現(xiàn)實(shí)。
當(dāng)前的目標(biāo)檢測器通常由三部分組成:第一部分是在擁有海量的圖片集如ImageNet上經(jīng)過預(yù)訓(xùn)練的主干網(wǎng)絡(luò)(backbone);第二部分是用于預(yù)測類別和物體方框位置的頭(head),主要可分為二階檢測器(R-CNN[6-10]系列)和單階檢測器(YOLO[11-14],SSD[15]和RetinaNet[16]等);第三部分是Neck網(wǎng)絡(luò),指的是在backbone和head之間插入的連接層,用于連接不同階段的特征圖。
近年來,手持物體分析正受到越來越多的關(guān)注和應(yīng)用,但大多應(yīng)用通常有著嚴(yán)格的條件和區(qū)域限制。如文獻(xiàn)[17]中駕駛員手持通話檢測,首先攝像頭需要正對駕駛員,然后進(jìn)行人臉檢測,估算耳部位置劃出感興趣區(qū)域,再根據(jù)區(qū)域內(nèi)手部存在時間加上唇部張合狀態(tài)來綜合判斷手持通話狀態(tài),步驟相當(dāng)繁瑣且需要很高的前期識別準(zhǔn)確保證。
為補(bǔ)充專用于手持物體分析算法的缺失,以及更為準(zhǔn)確穩(wěn)定的識別結(jié)果,本文提出了一種可全局分析的手持物體行為分析算法。
Openpose[5]是由卡耐基梅隆大學(xué)(CMU)感知實(shí)驗(yàn)室發(fā)布的一種實(shí)時多人姿態(tài)估計(jì)方法。該方法采用一種非參數(shù)的表達(dá)方式,即局部親和矢量場(part affinity fields,PAF),來學(xué)習(xí)將各個身體部位與圖片中的各個人體相關(guān)聯(lián)。其體系結(jié)構(gòu)通過對全局的內(nèi)容進(jìn)行編碼,從而自下而上地用貪心算法進(jìn)行解析,無論圖片中有多少人,都能在保持高精度的同時保證實(shí)時性。其網(wǎng)絡(luò)結(jié)構(gòu)主要是通過一個連續(xù)的預(yù)測過程的兩個分支來同時學(xué)習(xí)關(guān)鍵點(diǎn)的定位以及它們之間的關(guān)聯(lián)。
Openpose的網(wǎng)絡(luò)結(jié)構(gòu)圖如圖1所示。
圖1 多階段的雙支路網(wǎng)絡(luò)結(jié)構(gòu)圖
圖1中F是由經(jīng)過微調(diào)的VGG-19卷積網(wǎng)絡(luò)的前10層通過對輸入圖片的分析后生成的特征圖集合,然后將F作為兩個分支第一階段(Stage 1)的輸入,其中分支一(Branch 1)用于預(yù)測置信圖St,分支二(Branch 2)用于預(yù)測PAFs-Lt。在每個階段之后,兩個分支的預(yù)測結(jié)果會被合并作為下一個階段的輸入,并重復(fù)上一階段的操作。
通過上述重復(fù)操作,即可預(yù)測關(guān)鍵點(diǎn)位置及其置信圖。最后,通過貪心算法將這些關(guān)鍵點(diǎn)連接起來即可獲得人體的骨架圖。如圖2所示。
圖2 Openpose檢測結(jié)果
其中,兩個相鄰關(guān)鍵點(diǎn)dj1和dj2的關(guān)聯(lián)性的評估是通過計(jì)算相應(yīng)矢量場中向量間的線積分來實(shí)現(xiàn)的:
(1)
式中:P(u)表示dj1和dj2之間的點(diǎn)。
P(u)=(1-u)dj1+udj2
(2)
Yolov4是由Alexey Bochkovskiy[14]等人于2020年4月發(fā)布的目標(biāo)檢測算法。通過將時下最為先進(jìn)的網(wǎng)絡(luò)調(diào)優(yōu)方法,如加權(quán)殘差連接(WRC)、跨階段部分連接(CSP)、跨小批量歸一化(CmBN)、自對抗訓(xùn)練(SAT)、Mish激活函數(shù)、馬賽克數(shù)據(jù)增強(qiáng)、DropBlock正則化、CIoU Loss等,在Yolov3的基礎(chǔ)上進(jìn)行對比改進(jìn)實(shí)驗(yàn),最終獲得了檢測速度與檢測精度的最佳平衡的目標(biāo)檢測器——Yolov4。
圖3為Yolov4與當(dāng)前其他最先進(jìn)方法在COCO數(shù)據(jù)集上的檢測速度、精度對比圖。
圖3 Yolov4檢測效果對比[11]
由圖3可知,檢測速度差不多時Yolov4的檢測精度更高;檢測精度差不多時,Yolov4則更快。最終其結(jié)構(gòu)如下:
backbone:CSPDarknet53[18]
neck:SPP[19],PAN[20]
head:Yolov3[13]
此外,網(wǎng)絡(luò)結(jié)構(gòu)針對單GPU訓(xùn)練做了優(yōu)化,不需要額外的訓(xùn)練成本即可復(fù)現(xiàn)其優(yōu)良性能,因此本文選擇Yolov4作為物體檢測器的基礎(chǔ)框架,在其基礎(chǔ)上搭建本文算法。
本文的算法流程如圖4,以右手為例進(jìn)行說明。
圖4 算法流程圖
輸入圖片首先經(jīng)過Openpose處理后,提取出圖片中的人員骨架關(guān)節(jié)點(diǎn),其輸出如下(Body_25模型),見圖5。
圖5 BODY_25輸出關(guān)節(jié)圖
Body_25檢測模型下與關(guān)節(jié)點(diǎn)的對應(yīng)關(guān)系如表1所示,共有25個關(guān)節(jié)點(diǎn),每個節(jié)點(diǎn)位置輸出(x,y,score),分別為關(guān)節(jié)點(diǎn)橫坐標(biāo)、關(guān)節(jié)點(diǎn)縱坐標(biāo)以及置信度。
表1 輸出編號對應(yīng)關(guān)節(jié)
同時,輸入圖片經(jīng)Yolo處理,檢測出圖片中感興趣物體的類別與位置,畫出方框。其輸出包含(Xtop_left,Ytop_left,w,h),obj_id等,分別為方框左上角橫-縱坐標(biāo),方框?qū)?高以及物體類別對應(yīng)ID。
經(jīng)過上述處理,融合兩部分輸出信息,使用IOU算法進(jìn)行處理,最后進(jìn)入手持物體行為分析算法的邏輯執(zhí)行部分。實(shí)際手持場景中,不同尺寸大小的物體對手持位置與邏輯判定關(guān)系均有不同影響。按手持物體的尺寸大小分為小型物體和中、大型物體兩類。
小型物體的邊長小于手的長度(15 cm),特點(diǎn)是尺寸較小,形狀較規(guī)則,寬高比較小,手持時通常握在物體中心,如手機(jī)、小刀等,因此當(dāng)手腕節(jié)點(diǎn)與感興趣物體中心(Xcenter,Ycenter)的距離小于手的長度即可認(rèn)為該物體被手持。
如圖6所示,通過Openpose獲得右手腕(x4,y4),右手肘(x3,y3)的位置信息,取右手腕到右手肘距離的一半作為手的長度Lhand(由于手指的關(guān)節(jié)數(shù)量眾多,直接提取其關(guān)節(jié)位置信息會大大增加計(jì)算成本,增加算法復(fù)雜度),可得:
圖6 手持物體邏輯判斷圖
(3)
使用Yolo獲得感興趣物體的類別和位置并畫出方框,輸出方框左上角點(diǎn)坐標(biāo)(Xtop_left,Ytop_left),方框?qū)抴,方框高h(yuǎn),可得物體中心點(diǎn)坐標(biāo)為:
(4)
(5)
由式(3~5)可得手持小型物體的邏輯判斷條件為:
(6)
當(dāng)滿足式(6)時,可認(rèn)為當(dāng)前人員手持物體。
中、大型物體指邊長分別大于手的1倍(15 cm)和3倍(45 cm)以上,特點(diǎn)是尺寸較大,形狀不規(guī)則,寬高比變化多,手持中心位置浮動較大,如書本、晾衣桿等。此時小型物體的邏輯判斷法則不再完全適用。如出現(xiàn)圖7手持狀態(tài)時,手腕位置與物體中心距離遠(yuǎn)大于Lhand,按照小物體邏輯判斷法則(6),此時圖7是未手持狀態(tài),因此出現(xiàn)漏檢。因此,需要對小物體邏輯判斷法則進(jìn)行擴(kuò)充。令手腕到物體中心的距離小于物體檢測框最長邊長的一半,即:
圖7 手持中、大型物體情況1
(7)
根據(jù)式(7),雖然提高了圖7情況手持物體的識別準(zhǔn)確率,但對圖8所示情況的誤檢(未手持卻檢出手持)會增多。為解決圖8所示誤檢情況,需要對物體與手之間的關(guān)聯(lián)性進(jìn)行約束,因此參考圖像檢測中的交并比(IOU)算法進(jìn)行補(bǔ)充。
圖8 手持中、大型物體情況2
交并比(intersection over union)是用于目標(biāo)檢測任務(wù)中計(jì)算圖像重疊比例的算法,主要用于生成候選框的置信度排序。在本文的算法中,利用交并比來判斷手與感興趣物體的關(guān)聯(lián)性大小。
如圖9所示,A為Yolo檢測物體后生成的矩形框,B為以右手腕關(guān)節(jié)點(diǎn)(x4,y4)為中心,以手長的兩倍2Lhand為邊長繪制的矩形,藍(lán)色部分C為A與B的交叉部分。
圖9 交并比法則
設(shè)A左上與右下坐標(biāo)為(X11,Y11),(X12,Y12),設(shè)B左上與右下坐標(biāo)為(X21,Y21),(X22,Y22),則有:
X11=Xtop_left
(8)
Y11=Ytop_left
(9)
X12=Xtop_left+w
(10)
Y12=Ytop_left+h
(11)
X21=X4-Lhand
(12)
Y21=Y4-Lhand
(13)
X22=X4+Lhand
(14)
Y22=Y4+Lhand
(15)
可得:
xA=Max(X11,X21)
(16)
yA=Max(Y11,Y21)
(17)
xB=Max(X12,X22)
(18)
yB=Max(Y12,Y22)
(19)
式中:xA,yA,xB,yB分別為交叉部分左上角與右下角點(diǎn),故有矩形A、矩形B、交叉部分Intersection的各部分面積分別為:
SA=(X12-X11)(Y12-Y11)
(20)
SB=(X22-X21)(Y22-Y21)
(21)
Sinter=Max(xB-xA,0)Max(yB-yA,0)
(22)
則交并比為:
(23)
由式(6)~(7)和式(23)得到算法的最終邏輯判斷法則為:
(24)
其中Limit為自定義的IOU閾值。
通過手持狀態(tài)判定結(jié)果結(jié)合物體類別識別結(jié)果即可輸出手持物體類別結(jié)果。
首先對Yolo進(jìn)行訓(xùn)練。按照小型、中型和大型3種不同的尺寸大小,包括小刀、手機(jī)、水杯、書本、掃帚、晾衣?lián)喂?種類別,包含了危險品和日常家庭使用的各種物品,分辨率為1 280×720,采集了共計(jì)1 489張圖片制成數(shù)據(jù)集。具體組成如表2,圖片數(shù)據(jù)輸入網(wǎng)絡(luò)前統(tǒng)一縮放成512×512的尺寸大小,將訓(xùn)練集與測試集按照4∶1的比列分配。
表2 數(shù)據(jù)采集類別及數(shù)量
為了提高網(wǎng)絡(luò)的魯棒性,對訓(xùn)練數(shù)據(jù)使用了隨機(jī)旋轉(zhuǎn),隨機(jī)縮放,改變色相、對比度、曝光度和馬賽克數(shù)據(jù)增強(qiáng)等方法。其中馬賽克數(shù)據(jù)增強(qiáng)是一種新的數(shù)據(jù)增強(qiáng)方法,將4張圖片數(shù)據(jù)按隨機(jī)比例拼成一張,這樣就能將4張圖片的內(nèi)容混合,使得在目標(biāo)檢測時能超出原有的內(nèi)容范圍。圖10為馬賽克數(shù)據(jù)增強(qiáng)效果圖。通過這一方法與未使用該方法相比,最終物體檢出率提高了大約0.3%。
圖10 馬賽克數(shù)據(jù)增強(qiáng)
本文的實(shí)驗(yàn)環(huán)境配置為:硬件:CPU為Inter Core i5-10600KF@4.10 GHz,GPU為NVIDIA GeForce RTX3070(8G),16 GB內(nèi)存,軟件:Windows 10操作系統(tǒng),安裝CUDA 11.1,CUDNN 8.0.5,使用Visual Studio 2019作為編輯器,OPENCV 4.2.0用于結(jié)果顯示。
為適應(yīng)手持物體的特點(diǎn),加快算法運(yùn)行速度以及方便后期將算法移植到輕型計(jì)算設(shè)備,對網(wǎng)絡(luò)作出適應(yīng)性調(diào)整。將Yolov4-tiny的基于Resnet的預(yù)訓(xùn)練模型yolov4-tiny.conv.29替換成了基于EfficientNet-B0的enetb0-coco.conv.132,稱為Effinet-Yolo;同時在訓(xùn)練時將輸入網(wǎng)絡(luò)尺寸設(shè)置為416×416,在檢測時放大至512×512,以提高小目標(biāo)物體檢出率。分別使用原生的Yolov4,Yolov4-tiny,以及調(diào)整過的Effinet-Yolo進(jìn)行訓(xùn)練,預(yù)設(shè)迭代次數(shù)為12 000次,初始學(xué)習(xí)率分別設(shè)置為0.001 3,0.002 6,0.002 6,學(xué)習(xí)策略為step。當(dāng)average loss降到0.05至3.0以內(nèi),或者經(jīng)過多次迭代后average loss不再下降時,停止訓(xùn)練。
在本文實(shí)驗(yàn)中迭代至6 000次時損失函數(shù)即不再下降,停止訓(xùn)練。分別用3種模型對驗(yàn)證數(shù)據(jù)集進(jìn)行測試,其結(jié)果如表3所示。
表3 模型訓(xùn)練結(jié)果對比
由表3可知Yolov4擁有最高的準(zhǔn)確率和召回率,但由于其網(wǎng)絡(luò)層數(shù)最深導(dǎo)致其網(wǎng)絡(luò)權(quán)重也最大,運(yùn)行速度最慢;Yolov4-tiny由于削減了主干網(wǎng)絡(luò),運(yùn)行速度最快,但準(zhǔn)確率最低,而準(zhǔn)確率較低的主要原因是小型物體的檢出率不足。Effinet-Yolo在替換了backbone后,使得網(wǎng)絡(luò)權(quán)重相對于Yolov4-tiny減少了4.8 MB,從而降低了算法的復(fù)雜度;另外通過在訓(xùn)練時減小網(wǎng)絡(luò)輸入尺寸、在檢測時增大網(wǎng)絡(luò)尺寸的方式,使得小型物體的檢出率有所提高,相較于Yolov4-tiny準(zhǔn)確率提高了3.5%左右。因此,在滿足檢測性能的前提下,最終選用權(quán)重最小最易部署的Effinet-Yolo網(wǎng)絡(luò)模型作為本文算法的物體檢測器。
然后對Openpose的關(guān)節(jié)點(diǎn)輸出進(jìn)行篩選,僅保留手腕和手肘的關(guān)節(jié)信息。使用C++ API進(jìn)行Openpose和Yolo的坐標(biāo)信息融合,并用IOU算法進(jìn)行處理,最后進(jìn)行識別結(jié)果驗(yàn)證。將Yolo封裝成動態(tài)鏈接庫使用,并在VS上進(jìn)行本文算法的代碼運(yùn)行。分別使用表中所示模型搭配以及傳統(tǒng)的方法,均采集手持不同種類的物體,交替左右手,采用單手或雙手,改變身體位姿等視頻數(shù)據(jù)集進(jìn)行驗(yàn)證結(jié)果對比實(shí)驗(yàn)。
不同模型搭配本文算法結(jié)果如表4。由第一組結(jié)果可知,Yolov4與body_25的組合,雖然準(zhǔn)確率最高,但是運(yùn)行速率只有6 fps,無法滿足實(shí)時性要求;由第二組與第三組結(jié)果對照可知,body_25模型運(yùn)行速度更快,這是因?yàn)橄噍^于coco模型雖然提取更多的關(guān)節(jié)點(diǎn),但是其參數(shù)量少,并且由于使用了CUDA技術(shù)進(jìn)行加速,因此其運(yùn)行速度更快。另外,由于本文算法需要依賴于物體檢測器Yolo和關(guān)節(jié)提取器Openpose的準(zhǔn)確率,且二者同時運(yùn)行,而Openpose運(yùn)行相對較慢,因此限制了算法的運(yùn)行速率。另外,相較于表中第4組傳統(tǒng)方法即文獻(xiàn)[20]模型,本文算法的準(zhǔn)確率有所提高,且本文所提算法不需要劃定感興趣區(qū)域,可直接對全局進(jìn)行分析,表現(xiàn)出更好的泛用性。由表4綜合考量,Effinet-Yolo和body_25組合為最優(yōu)搭配。
表4 檢測結(jié)果對比
算法運(yùn)行效果如圖11,最終在圖片上輸出人體骨架及節(jié)點(diǎn),物體檢測框以及左上角的手持狀態(tài)以及左右手的手持物體類別,由圖11(a)可知算法對前文所提手持小、中、大型物體均有較好識別效果,且能區(qū)分左右手,非手持狀態(tài)也能準(zhǔn)確識別;圖11(b)在雙手持物、背面以及部分遮擋重疊時也能保持較高準(zhǔn)確率,驗(yàn)證了算法的魯棒性。
圖11 算法運(yùn)行效果圖
本文算法潛在應(yīng)用場景如下:在工地中,可識別工人是否佩戴安全手套;在家庭的安全監(jiān)察中,可對兒童拿起刀具等危險品的行為進(jìn)行識別警告;可用于手持危險品行為檢測,如在地鐵站或者火車站等閘口用監(jiān)控視頻進(jìn)行危險行為檢測以補(bǔ)充安全檢測遺漏;在戰(zhàn)場中可通過是否手持武器來區(qū)分?jǐn)澄摇?/p>
綜上,Effinet-Yolo和Body_25組合的模型組合結(jié)合算法的判定法則,可使正確識別手持狀態(tài)同時識別出手持物體類別的準(zhǔn)確率達(dá)到91.2%,運(yùn)行速度可達(dá)13 fps,并且總參數(shù)量最少,僅有118.1 MB。因此將其作為本文的實(shí)時手持物體行為分析算法的最終框架。相較于傳統(tǒng)手持物體識別的思路,以姿態(tài)估計(jì)和目標(biāo)檢測為基礎(chǔ)進(jìn)行手持物體識別具有更高的準(zhǔn)確度和泛用性,手持定位更為準(zhǔn)確,同時本文算法不需要嚴(yán)格的前期人員識別保證,不需要劃定感興趣區(qū)域即可進(jìn)行全局分析。
本文針對當(dāng)前人體分析算法很少以某一特定部位作為研究點(diǎn)的問題,提出了專用于手部的全局實(shí)時手持物體識別算法。通過使用Openpose和Yolo對圖片做預(yù)處理,然后使用C++ API進(jìn)行二者的坐標(biāo)信息融合。根據(jù)手持物體的尺寸大小分為小型,中型和大型兩類情況進(jìn)行分類,參考交并比(IOU)算法進(jìn)行處理并作為手持物體狀態(tài)的輔助判斷,最終分別設(shè)計(jì)出了判斷法則,實(shí)現(xiàn)了手持物體行為分析算法,并以提高運(yùn)行速率和方便部署為目的做了適應(yīng)性調(diào)整。在采集的手持物體視頻流數(shù)據(jù)集上,最終識別手持狀態(tài)的同時準(zhǔn)確識別手持物體類別的準(zhǔn)確率可達(dá)到91.2%,通過插幀等方式基本可達(dá)到實(shí)時運(yùn)行的要求。相較于傳統(tǒng)思路方法,本文所提以姿態(tài)估計(jì)和目標(biāo)檢測為基礎(chǔ)的算法定位更為精準(zhǔn),識別準(zhǔn)確率更高,算法在民用以及軍用等多種場景均具有良好的潛在應(yīng)用價值。
下一步的工作是使用多線程調(diào)度機(jī)制等方法,進(jìn)一步提高算法的運(yùn)行效率,同時將算法分析的范圍擴(kuò)展到腳部、頭部等其他身體部位,形成一套完整的人-物交互分析系統(tǒng),最終將其應(yīng)用到無人機(jī)監(jiān)查、智能監(jiān)控等工程應(yīng)用中。