楊 磊 李英祥 張洪波
(成都信息工程大學通信工程學院,四川 成都 610225)
體能測試是監測在校學生身體健康的重要手段,目前主要通過體育老師人工進行評估和計數,存在效率低下和標準難以準確執行等問題。因此,本文旨在設計基于深度學習的體能測試評估與計數算法。在本算法中,需要對體能測試視頻中人物的關節點進行檢測、運動類型進行識別,并針對不同的運動制定評價標準,判斷有效運動并計數,以提高體能測試的檢測效率與準確度。
當前,國內外學者對人體運動姿態識別與分析方法進行了一定程度的研究。滿蔚仕等[1]采用一種通過雷達回波模型和同步擠壓小波變換(SSTAP)方法獲得人體主要部位的特征,再通過同步擠壓小波變換獲得人體回波信號并解析為運動姿態信息。張永強[2]設計了一種基于Hu不變矩陣特征優化的人體運動姿態識別算法,提取連續二維圖像的7個Hu不變舉證,并輸入到SVM中訓練最終完成對運動姿態識別。Gao L等[3]設計了一種無線穿戴運動捕捉系統,通過姿態數據庫中的姿態信號特征序列和后續三層識別算法精確地識別各種運動,但是硬件成本太高。Zhao L等[4]采用慣性傳感器技術對籃球運動中的運球、傳球、接球和投籃4種姿勢進行識別。Thar M C等[5]基于Openpose對關節信息進行檢測,并計算與標準動作之間的差距,從而完成對瑜伽的自學訓練,但是該方法應用場景較為單一。綜上所述,大部分研究基于傳統方法和深度學習模型,存在成本較高、準確率低和檢測速度較慢等問題。
針對上述問題,本文設計了基于輕量級的深度學習網絡的體測識別與計數算法,有效改善了體測運動識別與計數效率與準確率問題。該算法結構如圖1所示,輸入為視頻中的每幀RGB圖像,主要包括姿態估計、分類網絡和計數3個主要模塊。姿態估計模塊能夠對圖像中的人物關節點進行檢測和追蹤,輸出為視頻中每個人物的關節點坐標時域信息;分類網絡能夠根據圖像中人物的動作進行運動識別;計數模塊結合上述模塊的計算結果與運動評價標準完成對視頻中體測運動的有效判斷與計數。
Openpose作為一種自底向上的姿態估計方法,在諸多領域得到了廣泛的應用。本文采用Daniil Osokin[6]提出的一種對 Openpose改進的姿態估計網絡——lightweight-openpose作為姿態估計模塊的基本框架。在該網絡結構中,首先將輕量級的網絡Mobilenet作為特征提取網絡。在后續的網絡中,Heatmap和PAFs預測采用公用的網絡結構,在最后兩層中,分別完成對Heatmap和PAF的預測。同時,將Openpose網絡中7×7的卷積核替換成兩個3×3的卷積核,這樣既大幅減少了網絡的參數,同時也具有相同的感受野[7],最后在3×3卷積塊中加入了殘差結構,以解決網絡變深帶來的影響。網絡結構示意圖如圖2所示。
本文根據體能測試計數實際應用場景做了如下的改進:(1)通過計算相鄰幀所有關節組的相似度,對視頻中多個人物進行區分與追蹤;(2)對由于遮擋導致關節檢測不全的情況進行優化;(3)減少模型無效關節點和區域的計算。
在體能測試計數的場景下,常常會多人出現在一張圖像中的情況。為便于后續流程對關節信息逐幀、逐人的分析,本文設計了人物追蹤算法[8]。如果一張圖片中存在多個人,即多個姿態(關節點組)的時候,會遍歷上一幀中的所有姿態信息,對每一個姿態中的所有關節進行相似度計算。如果相似關節數大于閾值,即認為這相鄰兩幀的姿態屬于同一個人。相鄰幀中的兩個姿態的相似度計算公式如下:
式中,d為兩個姿態所有關節點距離之和,a為兩個姿態框面積的最大值,n為關節點個數,ε為一個較小的實數,其中:
在體能測試場景中,由于障礙物或者拍攝角度的問題,視頻圖像中的人物往往存在部分關節不全或者重疊的問題,導致模型無法對關節進行有效的預測,對后續運動分析模塊造成較大的影響。對于上述問題,文中采用人體測量學的方法對漏檢的人體進行補全[9]。具體方法為:對于身體對稱部位,只需要獲取其中一半的身體部位關節點即可通過以身體中軸線映射獲取另一半關節的坐標信息;對于其他特殊部位,如鼻子,其坐標應該位于兩肩中點的延長線上,長度可以通過其他可見的幀進行獲取。改進效果如圖3所示。
原始模型共有18個關節點,但是在體能測試計數的場景中,部分頭部關節點的坐標信息沒有實際作用,反而加重了整個模型的運算負擔[10]。因此,將原始模型的關節點刪減,部位包括左右耳朵、左右眼睛和脖子,以減輕模型的計算負擔。
同時注意到在體能測試的場景中,可能會出現意外入鏡的人物,原始模型往往會對其進行檢測,但這卻是無效的計算,因此需要拋棄。在改進的模型中,基于檢測到的姿態對象,會生成一個檢測框屬性,該屬性是包含所有關節點的最小面積的長方形框。為避免對無效區域的計算,對檢測框區域面積所占比例小于整體圖像的檢測區域進行舍棄,從而進一步減少模型的計算量。模型改進效果對比如圖4所示。
針對常見的4種體能測試運動:引體向上、俯臥撐、下蹲和仰臥起坐制作數據集。數據集圖片的來源包括bilibili、youtube、騰訊視頻等視頻網站;百度圖片、必應圖片、谷歌圖片及搜狗圖片的搜索引擎,通過爬蟲和視頻取幀等技術獲取運動圖片。該數據集共有4個分類、6160張圖片,隨機分配測試集和訓練集的比例為3∶7,部分數據集如圖5所示。
由于不同的體測運動具有不同的評判和計數標準,因此運動視頻或者圖片需要輸入到分類網絡,對運動種類進行預測[11]。考慮到實際場景中,改變運動類型的時間間隔普遍較長,因此采取抽樣的策略進行預測。根據上述功能需求,選擇了常見的分類網絡,包括ResNet、MobileNet[12]等。首先,對各個原始網絡在數據集上進行訓練,但是預測準確率表現不佳。因此,對訓練過程做如下優化:(1)對數據進行批量正則化(batch normalization)處理,目的是使一批輸入圖像的Feature Map滿足均值為0、方差為1的分布規律,加速網絡的收斂并提升準確率[13];(2)在訓練過程中使用遷移學習[14]的方法,通過官方提供的ImageNet數據集上的預訓練模型,使在較少的數據集上得到更好的準確率。通過訓練與測試,經過上述對訓練過程的改進,各個網絡的預測精度均提升了5%~8%。
在體能測試和日常訓練中,如果關鍵關節或肢體伸展不夠,不僅不能達到預期的鍛煉效果,而且在體能測試過程中不能算作有效運動。因此,體能測試與計數模塊需要對視頻中人物的運動有效性進行判斷,并記錄有效的運動次數。具體方法為:根據姿態估計網絡獲得運動中各個關節坐標的時域信息,并以此計算各個關鍵肢體彎曲角度的時域信息,從而判斷關鍵部位的伸展情況,計算有效的運動次數,并通過圖表的方式進行可視化。本文涉及的4種運動及其評價方式為:俯臥撐需要關注手臂和臀部的彎曲角度;引體向上通過手臂拉伸角度判斷是否有效完成運動;仰臥起坐通過整個身體在臀部的彎曲程度判斷是否有效運動;下蹲運動需要膝蓋處角度判斷是否下蹲到位。計算公式如表1所示,其中∠elb、∠hip和∠kne分別代表手肘、臀部和膝蓋的角度,θ和α代表允許的誤差范圍。

表1 各運動評價標準
在人物追蹤算法實驗過程中,關鍵點在于對參數θ、N的選擇。其中,θ為某相鄰幀、同一個關節的相似程度,而N代表相似關節的個數。實驗選擇 lightweight-openpose官方提供的預訓練目標檢測模型,對視頻中圖像進行關節點預測與人物追蹤,并對保存的幀圖像進行驗證。實驗發現,錯誤的參數設置可能導致將單個人檢測成多人的情況。θ、N的選擇與人物追蹤錯誤率如表2所示,由表可見當θ=0.5,N=3時算法有最佳的表現。

表2 θ、N選擇對于人物追蹤的正確率影響
基于上述改進的模型,繼續對關節點數量和對無效檢測區域進行優化,對頭部無效計算的耳朵、眼睛和脖子等關節點進行刪減。無效檢測區域的比例設置為10%,實驗圖片數量為1000張,平臺為NVIDIA GTX 1080 GPU,模型單幀平均耗時如表3所示,改進模型在運行速度上提升了17.6%,達到約36幀/秒。

表3 姿態估計模型改進前后耗時 單位:s
運動識別模塊使用Pytorch框架搭建分類網絡,包括ResNet和MobileNet家族常用網絡,數據集采用自制數據集,共6160張圖片,隨機分配驗證集和訓練集,比例為3∶7。訓練過程中,對數據的預處理包括:(1)隨機剪裁至大小為224×224;(2)以概率為0.5隨機水平旋轉[14];(3)歸一化處理。訓練平臺為Nvidia GTX 1080 GPU,遷移學習預訓練模型采用Pytorch官網提供的模型,batch_size設置為16,優化器選擇Adam優化器,損失函數選擇交叉熵損失函數,模型的平均運行速度如表4所示,各個網絡在該分類任務上的精度如表5所示。

表4 各個模型運行速度 單位:s

表5 各個模型在驗證集上的準確率
從表5可以看出,由于數據集的限制,各個模型在驗證集上的準確率均不高,但是通過遷移學習和正則化預處理的方法提高準確率約5%~8%。其中MobileNet_v3_large的準確率最高,達到了94.49%。但是結合表4中各個模型的平均運行速度,在實際應用中選擇MobileNet_v2作為運動識別預測模型。
采用各個視頻網站收集和現場錄制的體能測試運動視頻片段作為輸入,依次通過姿態估計網絡和運動識別網絡,結合有效計數標準,通過圖表分析關鍵肢體角度的時域信息,并計算峰值濾除無效運動最終完成計數,部分實驗結果如圖6所示。實驗過程中,誤差范圍θ設置為10°,并進行重復實驗,實驗結果與人工計數結果進行對比,得到體能測試計數算法的準確率如表6所示。

表6 4類體能測試計數準確率
由圖6可知,本算法能對4種常見的體能測試運動進行有效性區分并準確計數。在圖6(d)中,由于下蹲程度不夠,導致部分運動未進行計數。從表6可以看到,體能測試算法平均準確率達到了95%。但是,由于仰臥起坐運動中未對手臂和腿等關節進行計算,導致計數錯誤率較高。
本文提出的體能測試計數方法解決了人工計數標準難以執行和效率低的問題。本算法改進了姿態估計算法,并制作數據集訓練分類網絡,結合計數標準對有效運動進行計數。實驗表明,姿態估計模塊人物追蹤錯誤率最低為3.2%,速率提升了17%;動作識別網絡通過改進模型訓練過程使得準確率達到94.84%;有效運動計數模塊平均準確率達到95%。但是該方法也存在一定的缺陷:(1)運動識別數據集較小,且場景比較單一,導致分類網絡預測精度較低;(2)體能測試運動有效性僅對部分關鍵部位的簡單分析,并且實驗數據量偏小。在后續研究中將針對上述問題,擴容數據集和實驗數據,考慮更多的肢體評價指標,提升計數準確率。