敬 倩,陶青川
(四川大學(xué)電子信息學(xué)院,成都 610065)
人工智能、深度學(xué)習(xí)和計算機視覺等技術(shù)在體育行業(yè)的應(yīng)用日趨成熟和廣泛,極大地促進了學(xué)生體測測評系統(tǒng)的研究[1]。深度學(xué)習(xí)在運動分析領(lǐng)域中已經(jīng)取得了長足的進步,它在預(yù)測能力和應(yīng)用效果方面都表現(xiàn)出色[2]。Jian等[3]通過使用卷積神經(jīng)網(wǎng)絡(luò)來逐幀分析運動員的訓(xùn)練過程,并從中提取出關(guān)鍵幀來估算姿態(tài),最終建立起一種能夠根據(jù)感知變化來調(diào)整姿態(tài)的算法。Grunz 等[4]對足球比賽使用人工神經(jīng)網(wǎng)絡(luò)的分層結(jié)構(gòu)進行了深入的分析,并且在較短時間完成了較多數(shù)據(jù)的處理,還發(fā)現(xiàn)該方法可以對比賽策略進行更有效的優(yōu)化,針對當(dāng)前情況給出有效戰(zhàn)術(shù)。
仰臥起坐是體測項目中的通用考核項目,有一定難度。在完成仰臥起坐動作時,動作標準與否以及改進之處基本上依靠人腦的主觀經(jīng)驗性的評價,存在效率低下和打分誤差大的問題[5],無法在不同環(huán)境、不同時刻、不同測試人員之間保證考核和指導(dǎo)相一致,也比較難具體、細致、專業(yè)地指導(dǎo)學(xué)生。
綜上,本文設(shè)計了一種基于計算機視覺的仰臥起坐計數(shù)算法,在解決傳統(tǒng)問題的基礎(chǔ)上,減輕了監(jiān)考人員和成績錄入的壓力,具有較高的理論研究價值和實用性。首先通過攝像頭采集動作信息,將其輸入到改進后的YOLOv7?Pose[6]網(wǎng)絡(luò)中檢測出人體的關(guān)鍵點坐標,根據(jù)關(guān)鍵點坐標計算當(dāng)前動作和標準動作之間的相似度,并對符合要求的動作進行計數(shù)。
隨著深度學(xué)習(xí)技術(shù)的發(fā)展,基于二維人體關(guān)鍵點預(yù)測的方法在各個領(lǐng)域風(fēng)靡,通過該技術(shù),我們可以更好地提取圖像和視頻的特征,并且比傳統(tǒng)方法更準確地估算人體姿態(tài)[7]。從RGB 圖像中確定所含的人體,并定位人體的各個關(guān)鍵點坐標是二維姿態(tài)估計的基本任務(wù)?;诙S人體姿態(tài)研究目標數(shù)量的差異,可分為單人以及多人方法。單人姿態(tài)估計是多人姿態(tài)估計的基礎(chǔ)[8]。單人姿態(tài)估計分為基于直接預(yù)測人體坐標點的坐標回歸方法,以及基于預(yù)測人體坐標點的高斯分布的熱圖檢測方法?;诜椒ㄕ摰牟煌嗳俗藨B(tài)估計的主要研究方法可以分為基于關(guān)鍵點的方法和基于實例的方法這兩種[9]。基于實例的方法先從圖像中檢測出所有人體目標,接著單獨對每個目標進行姿態(tài)估計。而基于關(guān)鍵點的方法首先檢測當(dāng)前場景內(nèi)人體的全部坐標點,然后再將對應(yīng)的關(guān)鍵點連接成圖,最后通過圖優(yōu)化的方法剔除錯誤的連接,構(gòu)成人體的姿態(tài)骨架。
與傳統(tǒng)姿態(tài)估計算法不同,YOLOv7?Pose是一個單級多人關(guān)鍵點檢測器。它具有自頂向下和自底向上兩種方法的優(yōu)點,是基于YOLO目標檢測框架提出的新穎的、無熱力圖的方法,類似于谷歌使用回歸計算關(guān)鍵點的思想,YOLOv7?Pose既不使用檢測器進行二階處理,也不使用熱力圖拼接,是一種暴力回歸關(guān)鍵點的檢測算法,且在處理速度上具有一定優(yōu)勢。
YOLOv7?Pose 由兩個組件組成:Backbone和Head。Backbone 是一種用于提取圖像特征的卷積神經(jīng)網(wǎng)絡(luò)。Backbone 主要包含了CBS、ELAN 等模塊,CBS 操作其實是由三個操作組合而成:Conv、BN 和Silu 激活函數(shù);ELAN 模塊是一個高效的網(wǎng)絡(luò)結(jié)構(gòu),也是YOLOv7的主要貢獻之一,由多個CBS 構(gòu)成,它通過控制最短和最長的梯度路徑,使網(wǎng)絡(luò)能夠?qū)W習(xí)到更多的特征,并且具有更強的魯棒性。
YOLOv7?Pose的Head相當(dāng)于融合了YOLOv5的Neck 和Head 的功能,主要包含SPPCSPC、ELAN?W 等模塊,作用是對圖像進行預(yù)測。SPPCSPC 用SPP 空間金字塔池化操作代替了卷積層后的常規(guī)池化層,可以增加感受野,使得算法適應(yīng)不同的分辨率圖像;CSP 模塊首先將特征分為兩部分,其中的一個部分進行常規(guī)的處理,另外一個部分進行SPP 結(jié)構(gòu)的處理,最后把這兩部分合并在一起,從而減少一半的計算量,速度得到有效提升。ELAN?W 跟ELAN模塊非常相似,略有不同的就是它在第二條分支的時候選取5個輸出進行相加。
YOLOv7?Pose 首先將輸入的圖片轉(zhuǎn)換為640 × 640 大小,輸入到Backbone 網(wǎng)絡(luò)中,然后經(jīng)Head 層輸出四個特征圖,再分別經(jīng)過Rep 和Conv 輸出20 × 20,40 × 40,80 × 80 和160 ×160這四種不同尺度的未經(jīng)處理的預(yù)測結(jié)果。
YOLOv7?Pose 在公開數(shù)據(jù)集上有著一流的表現(xiàn),模型的特征提取和預(yù)測能力都得到了認可,但是其模型YOLOv7?w6 的參數(shù)量過大導(dǎo)致無法在邊緣設(shè)備上運行,因此,本文對其進行了輕量化改進,以適用于本文的體能計數(shù)場景。
本文提出的算法應(yīng)用在單人體能訓(xùn)練場景,攝像頭采集的人體目標較大,因此針對YOLOv7?Pose進行了一系列改進,改進策略如下:
(1)YOLOv7?Pose 采用4 層特征融合的方式主要是為了解決小尺寸目標難以檢測的問題,但是這對算法的檢測速度也會有影響。特征圖像的尺寸越小,它們就越能夠檢測到大體積的物體,反之亦然[10]。考慮到實際場景下的人體目標較大,因此刪除YOLOv7?Pose 針對小目標檢測的兩個分支80 × 80 和160 × 160,只保留20 × 20 以及40 × 40 這兩個針對較大尺寸的目標的獨立預(yù)測分支。
(2)由于仰臥起坐計數(shù)只需要檢測較為簡單的人體目標,只有這一個類別且場景簡單,最重要的是對實時性的要求較高,因此本文對原網(wǎng)絡(luò)的ELAN和ELAN?W 模塊的特征提取層進行刪減,從而大幅度降低了網(wǎng)絡(luò)參數(shù),提高了姿態(tài)估計的實時性。改進后的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
(3)由于仰臥起坐的計數(shù)不需要關(guān)注頭部的信息,比如眼睛和耳朵,因此將YOLOv7?Pose原本的17 個關(guān)鍵點縮減至13 個,主要關(guān)注四肢及軀干等重點部分的關(guān)鍵點,從而加快推理速度,進一步提高了姿態(tài)估計的實時性。
使用改進后的網(wǎng)絡(luò)對自制仰臥起坐數(shù)據(jù)集進行訓(xùn)練,在幾乎不降低精度的前提下,模型的計算量從153.7 M 下降到30.7 M,即降低到原來的1/5,證明了本文輕量化方法的有效性。
人體骨骼是人類運動的基礎(chǔ),所以,我們能夠通過觀察人體骨骼來更好地理解身體行為和活動方式。本文提出的動作計數(shù)方法首先通過YOLOv7?Pose 檢測出人體關(guān)鍵點坐標,再用坐標信息表征人體運動姿態(tài),改進后的模型可以對視頻進行實時檢測,滿足算法實時性需求。由于仰臥起坐動作的特殊性,每個動作都會帶來上下半身的折疊角度的變化,因此本文根據(jù)仰臥起坐不同關(guān)節(jié)角度變化自定義了檢測方式,只需要判斷人體肩關(guān)節(jié)、髖關(guān)節(jié)和踝關(guān)節(jié)三個部位的角度變化來區(qū)分動作是否標準[11]。對姿態(tài)估計獲得的人體關(guān)鍵點坐標進行處理,得到上述角度值,當(dāng)角度大于160°時認為躺下,角度小于100°時認為坐起,當(dāng)兩個條件同時滿足時,方可認為是一個合格的仰臥起坐,從而計數(shù)一分鐘內(nèi)學(xué)生所做的仰臥起坐個數(shù),停止計數(shù),期間若有動作不滿足以上條件,則視為不規(guī)范且不計數(shù)。
計算公式如下:設(shè)肩膀,髖及腳踝的點位分別為A(x1,y1),B(x2,y2)和C(x3,y3),可得到待測角度為
(1)平均準確度(average precision, AP)。單人姿態(tài)估計AP 的計算公式基于OKS,OKS 表示了真實關(guān)鍵點和預(yù)測關(guān)鍵點之間的相似性[12],AP的計算公式為
式(2)中,T為給定的閾值。
(2)平均準確度均值(mean average preci?sion, mAP)。平均精度均值是常用的指標之一,其計算方式為先求出所有關(guān)節(jié)點的AP,再對其求均值[12],計算公式如下:
(3)計數(shù)準確率(count accuracy, CA)。CA是本文提出的評價指標,記實際仰臥起坐數(shù)量TrueNum,測得仰臥起坐數(shù)量為TestNum,則計數(shù)準確率公式為
基于以上評價指標,表1給出了改進前后的兩個網(wǎng)絡(luò)相關(guān)參數(shù)的對比。
表1 改進前后網(wǎng)絡(luò)各參數(shù)對比
本文的實驗環(huán)境為Ubuntu16.04LTS,處理器為Intel(R)Xeon(R)Platinum 8255C,主頻2.50 GHz,基于64 位操作系統(tǒng),使用的GPU 型號為GeForce RTX 2080 Ti,單卡,顯存為11 GB,模型的訓(xùn)練和測試基于PyTorch 1.8.2框架。
現(xiàn)有的二維數(shù)據(jù)集,如MS COCO、MPⅡ等,圖像中大部分是站立的正面的人體,但是本文關(guān)注的場景基于側(cè)面的橫向的人體,因此公開數(shù)據(jù)集并不能完全適配當(dāng)前動作場景。因此本文是基于自制的數(shù)據(jù)集。首先是在不同光照、拍攝距離和背景下拍攝了80 個仰臥起坐動作的視頻,然后進行人工打標,再通過鏡像、旋轉(zhuǎn)和裁剪等數(shù)據(jù)增強方式擴充數(shù)據(jù)集,最終達到10000個樣本。
本文以仰臥起坐計數(shù)的準確率為評價指標,選取50 個時長1 分鐘的視頻進行測試,使用本文的方法最終的計數(shù)準確率CA(count accuracy)達到98.8%,可以部署在邊緣設(shè)備。相比于傳統(tǒng)的計數(shù)方法,本文方法計數(shù)的精度更高,且更便捷?;诒疚姆椒ǖ挠嫈?shù)效果圖如圖2所示。
圖2 計數(shù)效果圖
本文針對仰臥起坐計數(shù)任務(wù),對YOLOv7?Pose網(wǎng)絡(luò)進行輕量化改進,對ELAN模塊刪減部分特征提取層,減少關(guān)鍵點預(yù)測量,并刪減針對小目標的檢測分支。在自制數(shù)據(jù)集上的實驗結(jié)果證明,以上改進在少量精度損失下,大大減少了模型大小,提高了關(guān)鍵點提取速度,有利于后續(xù)基于關(guān)鍵點坐標進行體能計數(shù)。但是本文的算法是采用人工設(shè)計的輕量化網(wǎng)絡(luò),更注重降低網(wǎng)絡(luò)的參數(shù)量和檢測的實時性,缺乏了一定的人體結(jié)構(gòu)約束帶來的先驗知識,后續(xù)將進一步完善。