吳 玲,陶青川,敬 倩
(四川大學(xué)電子信息學(xué)院,成都 610065)
現(xiàn)有的體能計(jì)數(shù)系統(tǒng)主要采取人工計(jì)數(shù)或者紅外設(shè)備檢測(cè)的方式,不僅效率低、誤差大,而且成本高。近年來(lái),隨著人工智能的快速發(fā)展,計(jì)算機(jī)視覺領(lǐng)域的許多技術(shù)如人臉識(shí)別、語(yǔ)義分割和姿態(tài)估計(jì)等,在智能安防、遠(yuǎn)程醫(yī)療和體感游戲等領(lǐng)域得到了廣泛應(yīng)用。因此,基于計(jì)算機(jī)視覺技術(shù)的智能計(jì)數(shù)算法在體能訓(xùn)練中的應(yīng)用具有重要意義。
姿態(tài)估計(jì)是計(jì)算機(jī)視覺領(lǐng)域的一個(gè)熱門研究方向,其包括二維姿態(tài)估計(jì)和三維姿態(tài)估計(jì)。對(duì)于多人二維姿態(tài)估計(jì)而言,主要有兩種方法:自上而下以及自下而上。對(duì)于自上而下方法,首先是利用目標(biāo)檢測(cè)網(wǎng)絡(luò)檢測(cè)出所有人體目標(biāo),然后對(duì)每個(gè)目標(biāo)做姿態(tài)估計(jì)。He 等提出了一種在有效檢測(cè)目標(biāo)的同時(shí)輸出高質(zhì)量實(shí)例分割Mask 的MASK-RCNN 算法。Chen 等提出級(jí)聯(lián)金字塔網(wǎng)絡(luò)(cascaded pyramid network,CPN),可以提供上下文信息,用于推斷被遮擋的關(guān)鍵點(diǎn)。對(duì)于自下而上方法,需要先找到圖片中的所有關(guān)鍵點(diǎn),然后把這些關(guān)鍵點(diǎn)按一定算法規(guī)則匹配組成完整個(gè)體,如Cao 等提出的Openpose 經(jīng)典算法,使用PAFs(part affinity fields)這種結(jié)構(gòu)對(duì)全局上下文進(jìn)行編碼,自下而上進(jìn)行解析,能夠?qū)崟r(shí)地進(jìn)行多人二維姿態(tài)估計(jì)。
二維姿態(tài)估計(jì)雖然能簡(jiǎn)單有效地將人體的姿態(tài)輪廓刻畫在二維平面上,但是當(dāng)拍攝視角和姿態(tài)動(dòng)作快速變換時(shí),不同的關(guān)鍵點(diǎn)因?yàn)橄嗷フ趽蹩赡軙?huì)映射到二維平面的同一位置,或者出現(xiàn)漏檢、檢測(cè)不穩(wěn)定等情況。隨著姿態(tài)估計(jì)技術(shù)的不斷發(fā)展及應(yīng)用場(chǎng)景的復(fù)雜化,二維姿態(tài)估計(jì)的弊端日益凸顯,因此越來(lái)越多的學(xué)者投入到三維姿態(tài)估計(jì)技術(shù)的研究中。三維姿態(tài)估計(jì)可以檢測(cè)關(guān)鍵點(diǎn)的深度信息,能夠有效地解決部分遮擋情況下的關(guān)鍵點(diǎn)信息丟失問(wèn)題,基于深度學(xué)習(xí)的三維人體姿態(tài)估計(jì)現(xiàn)已成為三維姿態(tài)估計(jì)的主流研究方法。
本文基于三維姿態(tài)估計(jì)網(wǎng)絡(luò)提出了一種Fast-3D-Pose-Counter 智慧體能計(jì)數(shù)算法,該算法由數(shù)據(jù)采集模塊和三維姿態(tài)計(jì)數(shù)算法模塊組成。數(shù)據(jù)采集模塊通過(guò)單目RGB 攝像頭采集人體體能訓(xùn)練視頻圖像,計(jì)數(shù)算法模塊由改進(jìn)的YOLO_v3 目標(biāo)檢測(cè),自上而下的SimplePose 二維姿態(tài)估計(jì)網(wǎng)絡(luò),3D-Pose-Baseline 三維姿態(tài)估計(jì)網(wǎng)絡(luò)和KNN 動(dòng)作分類器組成。算法總流程圖如圖1所示。
圖1 算法流程
二維關(guān)鍵點(diǎn)檢測(cè)包括自上而下和自下而上兩類方法。自上而下的特點(diǎn)是準(zhǔn)確率高,但推理速度慢;自下而上的特點(diǎn)是推理速度快,但準(zhǔn)確率低。由于后期需要建立二維關(guān)鍵點(diǎn)到三維關(guān)鍵點(diǎn)的非線性網(wǎng)絡(luò)映射,然后再對(duì)三維坐標(biāo)特征向量進(jìn)行分類實(shí)現(xiàn)動(dòng)作計(jì)數(shù),因此二維關(guān)鍵點(diǎn)的推理精度至關(guān)重要,所以本文選擇了自上而下的方法實(shí)現(xiàn)二維關(guān)鍵點(diǎn)的檢測(cè)。自上而下法包括兩個(gè)步驟:①人體目標(biāo)檢測(cè)。②基于檢測(cè)框做姿態(tài)估計(jì)。
1.1.1 基于改進(jìn)的YOLO_v3人體目標(biāo)檢測(cè)網(wǎng)絡(luò)
經(jīng)典的YOLO_v3 網(wǎng)絡(luò)以Darknet-53 作為骨干網(wǎng)絡(luò),復(fù)用Darknet-53 的前52 層網(wǎng)絡(luò)結(jié)構(gòu),去除了最后一層全連接層,所以YOLO_v3 網(wǎng)絡(luò)是一個(gè)全卷積網(wǎng)絡(luò),其網(wǎng)絡(luò)結(jié)構(gòu)中大量使用Resnet 的跳層連接結(jié)構(gòu)。YOLO 將圖像劃分為×的網(wǎng)格,當(dāng)目標(biāo)中心落在某個(gè)網(wǎng)格中,就用這個(gè)網(wǎng)格去檢測(cè)它,每個(gè)網(wǎng)格需要檢測(cè)3 個(gè)錨框,對(duì)于每個(gè)錨框,它包含坐標(biāo)信息(,,,)以及置信度等5 個(gè)信息,同時(shí)還會(huì)使用one-hot編碼包含是否含有所有類別的信息,如COCO數(shù)據(jù)集含有80 個(gè)類別,所以,每個(gè)特征輸出層的維度為:
其中CLASS表示數(shù)據(jù)集包含的類別數(shù)量。需要注意的是,原Darknet53 中的尺寸是在圖片分類訓(xùn)練集上訓(xùn)練的,輸入的圖像尺寸是256×256,而本文采用輸入的尺寸是416×416。圖2為YOLO_v3 416 的網(wǎng)絡(luò)模型結(jié)構(gòu)圖,最終得到三個(gè)特征層尺度,分別是52×52、26×26、13×13。特征圖越小,感受野越大,越適合檢測(cè)大目標(biāo);特征圖越大,感受野越小,越適合檢測(cè)小目標(biāo)。所以52×52 的特征圖適合檢測(cè)小目標(biāo),26×26 的特征圖適合檢測(cè)中目標(biāo),13×13 的特征圖適合檢測(cè)大目標(biāo)。
圖2 YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)
由于本文提出的算法應(yīng)用在單人體能訓(xùn)練場(chǎng)景,攝像頭采集的人體目標(biāo)較大,因此需要在原YOLO_v3網(wǎng)絡(luò)上進(jìn)行改進(jìn),改進(jìn)策略如下:
(1)考慮到實(shí)際應(yīng)用場(chǎng)景中的人體目標(biāo)較大,同時(shí)為了保證在一定的檢測(cè)距離范圍內(nèi)的檢測(cè)效果,只保留13×13 以及26×26 這2 個(gè)獨(dú)立預(yù)測(cè)分支。
(2)為了保證整個(gè)三維姿態(tài)估計(jì)算法的實(shí)時(shí)性,需要使用一個(gè)高效精簡(jiǎn)的網(wǎng)絡(luò)快速準(zhǔn)確地定位出人體目標(biāo),因此在原YOLO_v3 的基礎(chǔ)上對(duì)網(wǎng)絡(luò)層進(jìn)行刪減,改進(jìn)后的網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。
圖3 改進(jìn)后的YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)
使用改進(jìn)之后的網(wǎng)絡(luò)對(duì)自制數(shù)據(jù)集進(jìn)行訓(xùn)練,得到的檢測(cè)模型大小為13.7 M,約占原YOLO_v3模型的1/17,在i5-6500 CPU 上實(shí)際部署時(shí)推理速度可達(dá)71.6 FPS。部分檢測(cè)效果如圖4所示。
圖4 改進(jìn)的YOLO_v3檢測(cè)人體效果
1.1.2 基于SimplePose進(jìn)行二維姿態(tài)估計(jì)
SimplePose是一個(gè)簡(jiǎn)單高效的單人姿態(tài)估計(jì)模型,它采用自上而下的策略,在被檢測(cè)人體目標(biāo)的基礎(chǔ)上進(jìn)行二維姿態(tài)估計(jì),使用Resnet作為骨干網(wǎng)絡(luò),其網(wǎng)絡(luò)結(jié)構(gòu)如圖5所示。
圖5 SimplePose網(wǎng)絡(luò)結(jié)構(gòu)
SimplePose 沒 有 采 用Hourglass和CPN 等姿態(tài)估計(jì)網(wǎng)絡(luò)設(shè)計(jì)的金字塔形特征結(jié)構(gòu),而是直接利用Resnet 殘差模塊的輸出特征層(C5)生成姿態(tài)的熱力圖(heatmap),然后在其后接入3個(gè)反卷積和卷積交替的模塊來(lái)獲得高分辨率的heatmap,每個(gè)反卷積模塊都采用Deconv +BatchNorm+ReLU 結(jié)構(gòu),最后用1 個(gè)1*1 的卷積層改變通道數(shù),使得輸出熱圖個(gè)數(shù)為關(guān)鍵點(diǎn)個(gè)數(shù)。
為了提高姿態(tài)估計(jì)的有效性,避免直接從單幀圖像中進(jìn)行姿態(tài)估計(jì)而導(dǎo)致的被遮擋關(guān)鍵點(diǎn)漏檢誤檢的問(wèn)題,SimplePose基于光流對(duì)姿態(tài)進(jìn)行跟蹤,主要思想?yún)⒖剂薌irdhar 等提出的姿態(tài)跟蹤方法,使用光流法對(duì)檢測(cè)框進(jìn)行補(bǔ)充,使用OKS 代替檢測(cè)框的IOU 來(lái)計(jì)算相似度等,具體方法如下:
(1)確定bbox。將人體目標(biāo)檢測(cè)器檢測(cè)的bbox 和基于光流估計(jì)的bbox 采用NMS 進(jìn)行統(tǒng)一。
(2)對(duì)bbox 進(jìn)行剪切和Resize,然后采用SimplePose姿態(tài)估計(jì)網(wǎng)絡(luò)進(jìn)行姿態(tài)估計(jì)。
(3)最后通過(guò)OKS 度量人體關(guān)鍵點(diǎn)相似度,按照基于光流的跟蹤對(duì)檢測(cè)到的行人實(shí)例的姿態(tài)進(jìn)行不斷的更新。
更新策略是首先估計(jì)每幀中人的姿態(tài),通過(guò)分配一個(gè)特有的id 來(lái)在不同幀之間對(duì)人體姿態(tài)進(jìn)行跟蹤。然后計(jì)算上下幀中人體關(guān)鍵點(diǎn)的OKS 相似度,將相似度大的作為同一個(gè)id,沒有匹配到的分配一個(gè)新的id。給定幀k的一系列目標(biāo)P={p},和幀l 的一系列目標(biāo)P={p},基于流的姿態(tài)相似度度量定義為:
OKS指標(biāo)定義如下:
其中表示Groundtruth 中人物的,表示關(guān)鍵點(diǎn)的,d表示Groundtruth 和預(yù)測(cè)圖中的每個(gè)人關(guān)鍵點(diǎn)的歐氏距離,S表示當(dāng)前人物在Groundtruth 中所占面積的平方根, 即
本文將上文提到的改進(jìn)的YOLO_v3 網(wǎng)絡(luò)用作人體目標(biāo)檢測(cè)器,并結(jié)合SimplePose 光流檢測(cè)框?qū)θ梭w目標(biāo)進(jìn)行檢測(cè),僅保留檢測(cè)框內(nèi)的人體目標(biāo)圖像作為SimplePose 二維姿態(tài)檢測(cè)模塊的輸入,檢測(cè)人體的骨骼關(guān)鍵點(diǎn),SimplePose監(jiān)測(cè)的關(guān)鍵點(diǎn)數(shù)量為17 個(gè),分別為鼻子、左右眼、左右耳、左右肩、左右手肘、左右手腕、左右臀、左右膝、左右腳踝。考慮到體能訓(xùn)練中主要關(guān)注的部位為人體的軀干,因此本文將SimplePose 姿態(tài)估計(jì)模塊的輸出通道數(shù)減少為13,即去掉臉部的雙耳、雙眼這四個(gè)關(guān)鍵點(diǎn),這樣既可以減少訓(xùn)練計(jì)算量,又可以提高檢測(cè)速度,改進(jìn)之后的SimplePose 檢測(cè)效果如圖6所示。
圖6 改進(jìn)后的SimplePose檢測(cè)效果
3D Pose Baseline 是一個(gè)超輕量級(jí)的神經(jīng)網(wǎng)絡(luò)模型,可以很好地處理2D 到3D 姿態(tài)回歸的問(wèn)題,其網(wǎng)絡(luò)結(jié)構(gòu)如圖7 所示。該網(wǎng)絡(luò)結(jié)構(gòu)簡(jiǎn)單,使用Resnet 作為骨干網(wǎng)絡(luò),將每一個(gè)Resnet 結(jié)構(gòu)作為一個(gè)Block,每個(gè)Block 中包含了兩個(gè)全連接層(linear 層),每個(gè)全連接層后面都緊連著Batch Normalization、ReLU 和Dropout層。除此之外還在Block 前加了一個(gè)全連接層,用來(lái)將輸入的16×2 的二維關(guān)節(jié)點(diǎn)坐標(biāo)升維到1024 維。同樣地,在網(wǎng)絡(luò)最后也加了一個(gè)全連接層,用來(lái)將1024 維的數(shù)據(jù)降維到16×3 的三維坐標(biāo)。整個(gè)網(wǎng)絡(luò)只需要一些基本的計(jì)算模塊和結(jié)構(gòu),即可達(dá)到實(shí)時(shí)準(zhǔn)確的三維姿態(tài)估計(jì)。
圖7 3D Pose Baseline網(wǎng)絡(luò)結(jié)構(gòu)
本文在改進(jìn)的SimplePose 網(wǎng)絡(luò)輸出坐標(biāo)的基礎(chǔ)上,將其二維姿態(tài)檢測(cè)的坐標(biāo)格式統(tǒng)一為3D Pose Baseline 要求的輸入格式,然后將輸入圖像旋轉(zhuǎn),使用3D Pose Baseline 網(wǎng)絡(luò)在Human 3.6 M 數(shù)據(jù)集的訓(xùn)練模型進(jìn)行測(cè)試,最終的3D姿態(tài)檢測(cè)效果如圖8所示。
圖8 3D姿態(tài)檢測(cè)效果
KNN(K nearest neighbors)算法又叫K近鄰算法,它是有監(jiān)督學(xué)習(xí)分類中的一種經(jīng)典算法,其實(shí)現(xiàn)過(guò)程包括3個(gè)步驟。
(1)計(jì)算待分類物體與其他物體之間的距離。
(2)統(tǒng)計(jì)距離最近的個(gè)實(shí)例。
(3)個(gè)實(shí)例中擁有最多實(shí)例的類別即為未來(lái)新樣本的實(shí)例。
該過(guò)程中涉及的主要因素有兩個(gè):值的選擇,距離度量的方式。
對(duì)于值的選擇:越大,則滿足新樣本距離要求的實(shí)例會(huì)越多,模型簡(jiǎn)單但可能會(huì)欠擬合。越小,模型會(huì)變復(fù)雜,但是容易發(fā)生過(guò)擬合。所以值一般小于20,當(dāng)值適當(dāng)時(shí),無(wú)論新樣本是什么,預(yù)測(cè)結(jié)構(gòu)都是訓(xùn)練集中實(shí)例最多的樣本。
對(duì)于距離的度量,兩個(gè)樣本點(diǎn)之間的距離代表了這兩個(gè)樣本之間的相似度。距離越大,差異性越大;距離越小,相似度越大。最常見的度量方式有兩種:歐氏距離和曼哈頓距離。假設(shè)存在兩個(gè)點(diǎn)(,,…,),(,,…,y),各個(gè)距離的定義如下:
其中,代表特征維度,代表空間的維數(shù),當(dāng)=1 時(shí),就是曼哈頓距離;當(dāng)→∞時(shí),就是切比雪夫距離。
本文對(duì)三維姿態(tài)估計(jì)之后獲得的人體16 個(gè)三維關(guān)鍵點(diǎn)坐標(biāo)進(jìn)行處理,計(jì)算三維空間坐標(biāo)系下左右手肘、左右腰部和左右膝蓋這六個(gè)關(guān)節(jié)部位的彎曲角度,得到基于三維關(guān)鍵點(diǎn)坐標(biāo)的六維特征向量。然后采用歐氏距離度量方式,設(shè)定值為13,基于KNN 算法對(duì)特征向量按照仰臥起坐的躺臥、上伏、貼膝這三個(gè)狀態(tài)進(jìn)行分類,若按順序依次完成這三個(gè)動(dòng)作,則計(jì)數(shù)加一,若因?yàn)閯?dòng)作不規(guī)范沒有按照順序進(jìn)行或者未執(zhí)行規(guī)定動(dòng)作則計(jì)數(shù)不變。
本文的實(shí)驗(yàn)環(huán)境為Ubuntu16.04 LTS,內(nèi)存8 G,處理器為Intel Core i5-7500 CPU,主頻3.4 GHz,基于64 位操作系統(tǒng),GPU 型號(hào)為Ge-Force GTX 1080Ti,顯存16G,模型的訓(xùn)練和測(cè)試基于Pytorch 1.8.0框架。
由于算法中含有二維姿態(tài)估計(jì)模塊和三維估計(jì)姿態(tài)模塊,因此需要選擇不同的數(shù)據(jù)集進(jìn)行訓(xùn)練。現(xiàn)有的二維數(shù)據(jù)集,如MS COCO、MPII 等,圖像中的人體大部分以站立為主,而本文主要關(guān)注的是體能訓(xùn)練場(chǎng)景,如俯臥撐、仰臥起坐等,大部分人物姿態(tài)是以橫躺或者坐立為主,實(shí)驗(yàn)結(jié)果表明現(xiàn)有的公開數(shù)據(jù)集并不適用體能訓(xùn)練場(chǎng)景。因此,本文以仰臥起坐項(xiàng)目為例,利用labelme 對(duì)自采集體能訓(xùn)練集進(jìn)行打標(biāo),然后通過(guò)鏡像、旋轉(zhuǎn)和裁切等數(shù)據(jù)增強(qiáng)算法擴(kuò)充了樣本容量,達(dá)到8000個(gè)樣本。最后,利用COCO API對(duì)數(shù)據(jù)集進(jìn)行歸一化處理,最終的樣本格式如圖9所示。
圖9 自制二維姿態(tài)數(shù)據(jù)集
Human3.6M是使用最廣泛的多視圖單人三維人體姿態(tài)數(shù)據(jù)集。該數(shù)據(jù)集包含360萬(wàn)個(gè)3D人體姿勢(shì)和15個(gè)場(chǎng)景中的相應(yīng)視頻,比如討論、坐在椅子上、拍照等。由于Human3.6M數(shù)據(jù)集包含的場(chǎng)景豐富,我們的體能訓(xùn)練源數(shù)據(jù)經(jīng)過(guò)旋轉(zhuǎn)處理后,可以與該數(shù)據(jù)集中的很多姿態(tài)樣本符合,所以本文選取了Human3.6M數(shù)據(jù)集的S1、S5、S6、S7、S8作為訓(xùn)練集,S9、S11作為測(cè)試集。
本文將體能計(jì)數(shù)的準(zhǔn)確率作為評(píng)價(jià)指標(biāo),選取80個(gè)時(shí)長(zhǎng)約25 s的體能測(cè)試視頻進(jìn)行測(cè)試,包含1180 個(gè)有效動(dòng)作,最終的計(jì)數(shù)準(zhǔn)確率可以達(dá)到99.6%,實(shí)測(cè)幀率約27.4 FPS,具備很好的實(shí)用性。相比于傳統(tǒng)的計(jì)數(shù)方法,計(jì)數(shù)精度大大提高,成本大幅降低。相比于僅用二維姿態(tài)關(guān)鍵點(diǎn)的幾何角度判斷法,本算法能在攝像頭拍攝視角變換的情況下保證計(jì)數(shù)精度,使用更為靈活方便。相比于二維姿態(tài)分類計(jì)數(shù)算法,本算法能改善二維姿態(tài)估計(jì)中由于目標(biāo)遮擋導(dǎo)致的誤檢漏檢情況,利用空間信息實(shí)現(xiàn)更為準(zhǔn)確地計(jì)數(shù)?;诒舅惴ǖ牟糠譁y(cè)試效果如圖10所示。
圖10 本文算法效果
本文提出了一種基于三維姿態(tài)估計(jì)的智慧體能計(jì)數(shù)算法,該算法能夠從單目攝像頭采集的圖像中,準(zhǔn)確快速地提取出人體三維骨架特征,然后對(duì)三維坐標(biāo)特征向量進(jìn)行分類以實(shí)現(xiàn)精確計(jì)數(shù)。實(shí)驗(yàn)結(jié)果表明該算法可以有效地克服傳統(tǒng)計(jì)量算法的局限性,在存在部分遮擋、拍攝角度適當(dāng)變換的情況下也能夠保證計(jì)數(shù)準(zhǔn)確率。該算法具有廣闊的實(shí)際應(yīng)用前景,如健身效果評(píng)估和體感游戲等。但是,由于缺少大型的3D 室外數(shù)據(jù)集以及單視角中2D 到3D 的映射固有的深度模糊性,導(dǎo)致該算法在極少數(shù)場(chǎng)景中下存在計(jì)數(shù)誤差,后期將通過(guò)增加攝像頭數(shù)量以及擴(kuò)充數(shù)據(jù)集進(jìn)行進(jìn)一步完善。