徐菲,陶青川,吳玲,敬倩
(四川大學(xué)電子信息學(xué)院,成都610065)
當(dāng)前體能訓(xùn)練中普遍需要將俯臥撐計(jì)數(shù)作為考核成績(jī)[1],俯臥撐測(cè)試的成績(jī)測(cè)量大都采用人工計(jì)數(shù)或紅外設(shè)備測(cè)量,這些測(cè)量方式均存在測(cè)試標(biāo)準(zhǔn)不一致、測(cè)試效率低、裁判員工作負(fù)荷大等問(wèn)題。
基于紅外設(shè)備的俯臥撐計(jì)數(shù)系統(tǒng)主要由紅外發(fā)射器、紅外接收器等設(shè)備組成[2]。原理是測(cè)試人員撐起和俯臥時(shí)阻斷紅外發(fā)射器和紅外接收器之間的信號(hào),接收器無(wú)法接收到信號(hào)時(shí),判定相應(yīng)俯臥撐動(dòng)作并進(jìn)行計(jì)數(shù)。但當(dāng)紅外線被非測(cè)量對(duì)象遮擋后,系統(tǒng)也會(huì)判定是被運(yùn)動(dòng)員肢體遮擋,從而出現(xiàn)計(jì)數(shù)錯(cuò)誤。所以紅外傳感測(cè)量設(shè)備普遍存在的問(wèn)題是容易被異物干擾而誤報(bào)成績(jī)。
因此,采用基于機(jī)器視覺(jué)的智能算法對(duì)俯臥撐這一類傳統(tǒng)體能訓(xùn)練項(xiàng)目進(jìn)行檢測(cè)計(jì)數(shù),具有重大意義。人體姿態(tài)檢測(cè)是視頻智能監(jiān)控的關(guān)鍵應(yīng)用領(lǐng)域之一,由于人體肢體自由度較高,當(dāng)人在做不同的運(yùn)動(dòng)時(shí),肢體也呈現(xiàn)不同的狀態(tài)[3]。傳統(tǒng)人體姿態(tài)識(shí)別框架OpenPose是基于卷積神經(jīng)網(wǎng)絡(luò)和監(jiān)督學(xué)習(xí)的框架上開(kāi)發(fā)的開(kāi)源庫(kù),可以在多種場(chǎng)合下實(shí)現(xiàn)對(duì)人體復(fù)雜姿態(tài)的估計(jì),在機(jī)器視覺(jué)領(lǐng)域有廣泛的應(yīng)用[4]。但由于卷積神經(jīng)網(wǎng)絡(luò)復(fù)雜度過(guò)大,導(dǎo)致該訓(xùn)練框架在運(yùn)行速度、內(nèi)存空間諸多方面的限制,且不利于后續(xù)計(jì)數(shù)模塊銜接。
針對(duì)上述問(wèn)題,本文設(shè)計(jì)了一種基于機(jī)器視覺(jué)的俯臥撐計(jì)數(shù)算法,如圖1所示,該算法由兩個(gè)部分組成,圖像采集模塊和智能計(jì)數(shù)模塊,圖像采集模塊中由攝像機(jī)完成圖像采集。智能計(jì)數(shù)模塊中由改進(jìn)的YOLOv3算法進(jìn)行對(duì)人體的目標(biāo)檢測(cè),由Ultralight-Simplepose模型預(yù)測(cè)人體關(guān)鍵點(diǎn),最后由SVM分類器實(shí)現(xiàn)分類計(jì)數(shù)功能,輸出計(jì)數(shù)結(jié)果。
圖1 算法流程圖
COCO的英文全名是Common Objects in Context,該數(shù)據(jù)集是由美國(guó)微軟公司建立的一種大型的圖像處理數(shù)據(jù)集,其任務(wù)信息包含目標(biāo)探測(cè)、像素分割和字幕標(biāo)注等。對(duì)數(shù)據(jù)集的標(biāo)注信息保存在JSON格式的文件中,包括五大類注釋,分別是目標(biāo)檢測(cè)、關(guān)鍵點(diǎn)檢測(cè)、素材分割、全景分割和字幕生成。COCO API接口可以實(shí)現(xiàn)圖像標(biāo)簽數(shù)據(jù)加載、解析和視頻可視化功能。
因本文使用COCO API接口,將制作的俯臥撐數(shù)據(jù)集全部轉(zhuǎn)換為COCO數(shù)據(jù)集格式后再進(jìn)行訓(xùn)練和測(cè)試。腳本一開(kāi)始先將數(shù)據(jù)集字典段中的info、licenses及categories進(jìn)行定義,然后再遍歷圖像信息將其轉(zhuǎn)換為對(duì)應(yīng)的COCO格式,最終生成相應(yīng)的JSON文件。
YOLOv3是針對(duì)YOLO模型的又一次改進(jìn)版本,主要包括以下幾個(gè)方面:
(1)YOLOV3使用多個(gè)分類標(biāo)簽預(yù)測(cè)來(lái)不同的目標(biāo),能適應(yīng)更加多樣性的場(chǎng)景。與傳統(tǒng)的識(shí)別模型不同,它采用了單獨(dú)的邏輯分類工具,在訓(xùn)練過(guò)程中使用二元交叉熵?fù)p失函數(shù)來(lái)分類目標(biāo)。
(2)用于目標(biāo)檢測(cè)的YOLOv3邊界框有3種不同的尺寸,但提取不同尺寸的特征時(shí)運(yùn)用的是同一種算法。在基于COCO數(shù)據(jù)集的實(shí)驗(yàn)中,YOLOv3的神經(jīng)網(wǎng)絡(luò)分別為每種尺寸預(yù)測(cè)了三個(gè)邊界框,得到的邊界張量T的公式是:
張量T中包含4個(gè)邊界框角點(diǎn)位置、1個(gè)目標(biāo)預(yù)測(cè)以及80種不同類型的目標(biāo)分類預(yù)測(cè)。N×N表示檢測(cè)框的參考位置信息,3是3個(gè)不同尺寸的先驗(yàn)框。之后將不同圖層中得到的特征圖進(jìn)行卷積、上采樣、圖層連接,獲得其上采樣特征和細(xì)粒度特征,提高檢測(cè)精度。
(3)YOLOv3在YOLOv2的基礎(chǔ)上進(jìn)行了提升,同時(shí)融合其他新型殘差網(wǎng)絡(luò),由連續(xù)的3×3卷積層和1×1卷積層組合而成,其中還添加了幾個(gè)近路連接。YOLOv3與YOLO系列以前的網(wǎng)絡(luò)對(duì)比,權(quán)值更大,層數(shù)更多,其卷積層數(shù)共有53個(gè),所以命名DarkNet-53,如圖2所示。
圖2 DarkNet-53示意圖
DarkNet-53在檢測(cè)精度上比傳統(tǒng)的YOLO模型更加精確,同時(shí)計(jì)算量更加精簡(jiǎn),耗時(shí)更短。與ResNet-101相比,DarkNet-53的效率提升了近1.5倍,ResNet-152和它功能相當(dāng),但運(yùn)行時(shí)間卻是其2倍[5]。
YOLOv3算法可以檢測(cè)多姿多態(tài)的物體,而本文只需要檢測(cè)人體。YOLOv3有三個(gè)不同尺寸的邊界框,大小分別為13×13、26×26、52×52。小尺寸的特征圖像更適合定位目標(biāo)較大的目標(biāo),而大尺寸的特征圖像更容易檢測(cè)目標(biāo)較小的物體。對(duì)于只檢測(cè)人的任務(wù),YOLOv3網(wǎng)絡(luò)相對(duì)復(fù)雜,影響算法的檢測(cè)效率,系統(tǒng)負(fù)擔(dān)較大。因此,在結(jié)構(gòu)上對(duì)YOLOv3網(wǎng)絡(luò)進(jìn)行了優(yōu)化,改進(jìn)后的網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。
圖3 改進(jìn)后網(wǎng)絡(luò)結(jié)構(gòu)示意圖
改進(jìn)后網(wǎng)絡(luò)模型在整體結(jié)構(gòu)上與原YOLOv3模型類似,仍然運(yùn)用了卷積層和殘差塊來(lái)進(jìn)行特征提取,調(diào)整了開(kāi)始的卷積層的尺寸和步長(zhǎng),減少計(jì)算量。
在檢測(cè)網(wǎng)絡(luò)部分,因?yàn)闄z測(cè)目標(biāo)尺寸為近景人體,不存在較小目標(biāo),將特征圖從原來(lái)的3個(gè)縮減為1個(gè),只保留最小尺寸的特征圖。
改進(jìn)后輸入尺寸為416×416,權(quán)值大小為122.3Mb,大小相對(duì)于原始YOLOv3減小了約2倍,GPU平均耗時(shí)7.2ms。改進(jìn)后的GPU平均耗時(shí),速度均有明顯提升。
本文運(yùn)用改進(jìn)的YOLOv3進(jìn)行人體目標(biāo)檢測(cè),如圖4所示,預(yù)測(cè)出人體的感興趣區(qū)域(ROI),圈定該區(qū)域以便進(jìn)行進(jìn)一步處理。
圖4 人體目標(biāo)檢測(cè)結(jié)果
Ultralight-SimplePose是一種超輕量的人體關(guān)鍵點(diǎn)預(yù)測(cè)框架,主要運(yùn)用的是Simple Baseline算法[6]。與傳統(tǒng)人體姿態(tài)檢測(cè)框架相比,具有速度快,精度高的優(yōu)勢(shì)。采用自上而下的策略,先進(jìn)行目標(biāo)檢測(cè)(人),再對(duì)每個(gè)檢測(cè)到的人進(jìn)行單人的關(guān)鍵點(diǎn)檢測(cè)(單人姿態(tài)估計(jì)),輸入圖像是1.2小節(jié)中改進(jìn)后的YOLOv3檢測(cè)到的人的ROI。
Ultralight-SimplePose算法中提出的Simple Baseline結(jié)構(gòu)如圖5所示。ResNet是圖像特征提取中常用的一種主干網(wǎng)絡(luò),該算法在主干網(wǎng)ResNet最后一個(gè)卷積階段插入了幾層名為C5的反卷積。默認(rèn)情況下,使用三個(gè)具有批處理規(guī)范化和由線性函數(shù)激活的反卷積層,每層有256個(gè)4×4核濾波器,步幅是2。最后加入1×1的卷積層,生成人體關(guān)鍵點(diǎn)預(yù)測(cè)圖。
圖5 baseline結(jié)構(gòu)圖
該算法與Hourglass[7]和CPN[8]在生成高分辨率特征圖的方式上有所不同,后兩者都使用上采樣來(lái)提高特征映射的分辨率,并將卷積參數(shù)放入其他塊中。而Simple Baseline的方法是將上采樣和卷積參數(shù)以更簡(jiǎn)單的方式組合到反卷積層中,而不使用跳層連接。
該算法在姿態(tài)追蹤方面具體有如下幾點(diǎn):
(1)光流聯(lián)合傳播:光流(Optical Flow)是指運(yùn)動(dòng)的目標(biāo)在連續(xù)多幀圖像上的像素移動(dòng)的瞬時(shí)速度,光流矢量是圖像上相應(yīng)的坐標(biāo)點(diǎn)灰度的瞬時(shí)變化率。對(duì)于前一幀中的檢測(cè)到的人體各個(gè)關(guān)節(jié)點(diǎn),計(jì)算光流矢量,然后確定一個(gè)邊界框,作為傳播到當(dāng)前幀中的人體預(yù)測(cè)。當(dāng)由于運(yùn)動(dòng)模糊或遮擋而丟失檢測(cè)時(shí),該算法可以從之前的幀中正確預(yù)測(cè)出當(dāng)前幀的人體的邊界框。
(2)基于光流的姿態(tài)匹配:幀間追蹤某個(gè)目標(biāo)時(shí),需要計(jì)算目標(biāo)前后幀的匹配度,在運(yùn)動(dòng)較快或者密集場(chǎng)景下,使用邊界框IoU(Intersection over Union)作為相似性度量(SBbox)效果不好,此時(shí)框不重疊,且與實(shí)例沒(méi)有對(duì)應(yīng)關(guān)系;當(dāng)兩幀間的姿態(tài)相差較大時(shí),使用對(duì)象關(guān)節(jié)點(diǎn)相似性O(shè)KS(Object Keypoint Similarity)效果也不好,無(wú)法進(jìn)行有效匹配。該算法就利用了光流,先計(jì)算下一幀的加上光流偏移后的姿態(tài),然后再計(jì)算OKS,考慮到兩幀之間可能有各種原因造成的不連續(xù)情況,所以這里可以計(jì)算連續(xù)多幀的OKS。給定幀Ik中的一個(gè)實(shí)例和幀Il中的一個(gè)實(shí)例,基于流的姿勢(shì)相似性度量表示為:
(3)基于光流的姿態(tài)跟蹤算法:首先將(1)中說(shuō)的聯(lián)合傳播中得到人像預(yù)測(cè)和檢測(cè)模型得到的預(yù)測(cè)做非極大值抑制(NMS),然后進(jìn)行單人姿態(tài)估計(jì),之后計(jì)算如(2)中所述的兩幀之間的對(duì)象關(guān)鍵點(diǎn)相似性(OKS),并進(jìn)行貪婪匹配,完成姿態(tài)跟蹤。
以上是關(guān)于Ultralight-SimplePose框架人體姿態(tài)預(yù)測(cè)的算法原理簡(jiǎn)述,調(diào)用Ultralight-SimplePose進(jìn)行訓(xùn)練,得到俯臥撐狀態(tài)下的人體關(guān)鍵點(diǎn)預(yù)測(cè)模型。該算法中人體關(guān)鍵點(diǎn)共有17處,分別為鼻子、左眼、右眼、左耳、右耳、左肩、右鍵、左肘、右肘、左腕、右腕、左臀、右臀、左膝、右膝、左踝、右踝。將以上17個(gè)點(diǎn)進(jìn)行預(yù)測(cè),并分別記錄其二維平面點(diǎn)坐標(biāo)。圖6為實(shí)驗(yàn)中人體俯臥撐時(shí)關(guān)鍵點(diǎn)預(yù)測(cè)圖,其中人體關(guān)鍵點(diǎn)預(yù)測(cè)精度為0.945。
圖6 人體俯臥撐時(shí)關(guān)鍵點(diǎn)預(yù)測(cè)圖
支持向量機(jī)SVM(Support Vector Machines)是一種二分類模型[9]。SVM的基本算法是對(duì)于線性可分的數(shù)據(jù)集,求解一個(gè)超平面,該超平面能夠?qū)⒂?xùn)練數(shù)據(jù)集劃分為正類和負(fù)類,并最大化其幾何區(qū)間[10]。本文需要分類的數(shù)據(jù)集為提取人體關(guān)鍵點(diǎn)后計(jì)算出的角度特征數(shù)據(jù),屬于非線性可分?jǐn)?shù)據(jù)集,此時(shí)要通過(guò)函數(shù)變換使坐標(biāo)數(shù)據(jù)映射到更高維度的空間里,在高維度空間里再求解一個(gè)超平面進(jìn)行線性分類,將分類結(jié)果映射回原本的數(shù)據(jù)集中。
這種非線性的映射在SVM里由核函數(shù)來(lái)實(shí)現(xiàn),核函數(shù)的作用是簡(jiǎn)化高維空間中的映射計(jì)算量,本文采用高斯徑向基核函數(shù)(Gaussian radial basis function kernel)來(lái)實(shí)現(xiàn)輸入空間到特征空間的映射,設(shè)訓(xùn)練數(shù)據(jù)集T={(x1,y1),(x2,y2),…,(xN,yN)},坐標(biāo)點(diǎn)數(shù)據(jù)xi∈Rd,d為樣本空間維度,學(xué)習(xí)目標(biāo)yi∈{- 1,1}為二元變量,i,j=1,2,…,N。
輸入實(shí)例為Xi、Xj,核函數(shù)表達(dá)式為:
通過(guò)核函數(shù)求解凸二次規(guī)劃問(wèn)題,在高維度空間里分類決策函數(shù)為:
上式中b為偏置項(xiàng),其中α的值,也就是求解關(guān)于對(duì)偶問(wèn)題的最大值,其中C(C>0)為懲罰因子,由下面公式計(jì)算得出:
將核函數(shù)K代入(4)式中,得到基于高斯徑向基核函數(shù)的SVM最優(yōu)分類函數(shù):
本文將1.3小節(jié)中所獲得的人體17個(gè)關(guān)鍵點(diǎn)坐標(biāo)數(shù)據(jù)集進(jìn)行處理,為減少計(jì)算維度和計(jì)算量,去除與俯臥撐動(dòng)作無(wú)關(guān)的臉部點(diǎn)位,只提取手肘夾角、肩肘夾角、臀腰夾角等特征,輸入SVM分類器進(jìn)行訓(xùn)練。分別將以下三種狀態(tài)進(jìn)行標(biāo)注:標(biāo)準(zhǔn)俯臥撐狀態(tài)下的撐起狀態(tài),俯臥狀態(tài),以及不標(biāo)準(zhǔn)俯臥撐狀態(tài)。為了完成俯臥撐計(jì)數(shù)的同時(shí)實(shí)現(xiàn)對(duì)俯臥撐動(dòng)作標(biāo)準(zhǔn)化的監(jiān)督,使用二叉樹(shù)法依次分類樣本[11],如圖7所示,SVM先將標(biāo)準(zhǔn)俯臥撐和不標(biāo)準(zhǔn)俯臥撐進(jìn)行分類,以便在計(jì)數(shù)過(guò)程中篩除不標(biāo)準(zhǔn)姿態(tài),隨后分類標(biāo)準(zhǔn)俯臥撐狀態(tài)下的撐起狀態(tài)及俯臥狀態(tài)。
圖7 多分類SVM俯臥撐計(jì)數(shù)模型
訓(xùn)練出檢測(cè)俯臥撐計(jì)數(shù)的SVM分類器后,設(shè)置計(jì)數(shù)器,若實(shí)例動(dòng)作不標(biāo)準(zhǔn),則不予計(jì)數(shù),當(dāng)圖像遍歷撐起、俯臥、撐起三個(gè)狀態(tài)時(shí),則計(jì)數(shù)器加一,實(shí)現(xiàn)俯臥撐計(jì)數(shù)功能,如圖8所示。
圖8 俯臥撐計(jì)數(shù)界面
本文實(shí)驗(yàn)環(huán)境為PyTorch 1.4.0、Python 3.6、Ubuntu 18.04.4LTS、MXNet 1.5.0;處理器為Intel Core i5-7400,CPU頻率為3.0GHz;內(nèi)存8GB;GPU顯卡為NVIDIA GTX 1080TI,顯存12GB。
本文選擇hmdb51[12]、UCF50[13]人類行為數(shù)據(jù)集中俯臥撐視頻,自制俯臥撐訓(xùn)練視頻等抽幀作為訓(xùn)練數(shù)據(jù)集,選取其中3000張圖片作為數(shù)據(jù)樣本。
實(shí)驗(yàn)測(cè)試由視頻測(cè)試,抽幀得到的圖片數(shù)據(jù)傳遞至智能計(jì)數(shù)模塊開(kāi)始計(jì)數(shù),每張圖片檢測(cè)耗時(shí)125ms。本實(shí)驗(yàn)以計(jì)數(shù)準(zhǔn)確率作為評(píng)價(jià)標(biāo)準(zhǔn),實(shí)驗(yàn)測(cè)試結(jié)果見(jiàn)表1。
表1 計(jì)數(shù)算法測(cè)試結(jié)果
根據(jù)實(shí)驗(yàn)結(jié)果所示,該算法完全正確率大于99%,可以實(shí)時(shí)地,準(zhǔn)確地進(jìn)行俯臥撐體能訓(xùn)練及測(cè)試計(jì)數(shù)。
本文設(shè)計(jì)了一種基于機(jī)器視覺(jué)的俯臥撐計(jì)數(shù)算法,能準(zhǔn)確實(shí)現(xiàn)體能訓(xùn)練及考核中俯臥撐計(jì)數(shù),比人工計(jì)數(shù)更準(zhǔn)確,節(jié)省人力成本;比紅外感應(yīng)計(jì)數(shù)更便捷、安全、不易被異物干擾。本文的算法及網(wǎng)絡(luò)框架還可以推廣到其他體能測(cè)試計(jì)數(shù)需求,如仰臥起坐、引體向上等項(xiàng)目,有較強(qiáng)的應(yīng)用性。該算法在極少數(shù)的條件下的檢測(cè)還是存在漏計(jì)和誤計(jì)的情況,因此仍需要擴(kuò)充數(shù)據(jù)集,并且對(duì)網(wǎng)絡(luò)進(jìn)一步優(yōu)化。