摘 ?要:隨著人工智能發(fā)展,過去的數(shù)年間,卷積神經(jīng)網(wǎng)絡(luò),循環(huán)神經(jīng)網(wǎng)絡(luò),自編碼器,等領(lǐng)域發(fā)展迅速,但是由于移動設(shè)備的機能限制,很少存在移動設(shè)備上能夠直接運行的網(wǎng)絡(luò)模型,需要將網(wǎng)絡(luò)輕量化才能在移動設(shè)備上使用。本文通過輕量化網(wǎng)絡(luò)模型檢測人體關(guān)鍵點,然后運用相關(guān)算法讓人體動作和系統(tǒng)的指令相互匹配、反饋并形成一個完善的系統(tǒng)。
關(guān)鍵詞:卷積神經(jīng)網(wǎng)絡(luò);輕量級網(wǎng)絡(luò);人體檢測;動作反饋
中圖分類號:TP183 ;TP311 ? ? ? ? 文獻(xiàn)標(biāo)識碼:A文章編號:2096-4706(2021)14-0086-04
Abstract: With the improvement of artificial intelligence, convolutional neural networks, cyclic neural networks, autoencoders, and other fields have developed rapidly in the past few years. However, due to the functional limitations of mobile devices, few models can run directly on mobile devices. The network model needs to be lightweight before it can be used on mobile devices. This paper uses lightweight network models to detect the key points of the human body, and then uses related algorithms to match human body movements and system commands, feedback and form a perfect system.
Keywords: convolutional neural network; lightweight network; human body detection; action feedback
0 ?引 ?言
首先為了能夠進(jìn)行肢體檢測,我們需要人體姿態(tài)的評估獲取到對應(yīng)的人體關(guān)鍵坐標(biāo),人體姿態(tài)評估算法主要是評估人體關(guān)鍵部位在二維圖中的坐標(biāo),有時我們也會把這個坐標(biāo)叫做位置。在2016年卡內(nèi)基梅隆大學(xué)Yaser Sheikh組推出了CPM,同年的7月普林斯頓大學(xué)的Deng Jia組提出了Hourglass。兩者都在當(dāng)年取得優(yōu)異表現(xiàn)。
而輕量化是我們第二步需要解決的問題,為了能讓移動設(shè)備和可佩戴設(shè)備能夠使用深度神經(jīng)網(wǎng)絡(luò)進(jìn)行演算,google先后提出了三種主要網(wǎng)絡(luò)結(jié)構(gòu),由于第一代網(wǎng)絡(luò)結(jié)構(gòu)中存在激活函數(shù)數(shù)值歸0的問題,為了更好解決這些問題提出了mobileNet-V2,其提出的Linear Bottleneck緩解了激活函數(shù)問題,之后Goolge又推出了mobileNet-V3,利用h-wish、SE模塊,其在精度和效率提升上取得了不小的提升。
我們需要利用mobileNet-V2和mobileNet-V3對Hourglass和CPM模型對其進(jìn)行修改,將卷積層分別改用進(jìn)行替換,配合系統(tǒng)后續(xù)功能。
第三步獲取到人體關(guān)鍵部位關(guān)鍵點坐標(biāo),然后使用BHLD算法將這些關(guān)鍵點轉(zhuǎn)化成為人體肢體特征,我們將這些肢體特征與人體運動和特殊狀態(tài)下手臂長度,肢體角度等做對比。而有目的性的抽取特定應(yīng)用場景下人體動作特性,我們將這些特性規(guī)范化提取成為特征預(yù)判條件,而這些預(yù)判條件能更有效地參與到與我們之前通過輕量化模型獲取的人體關(guān)鍵點坐標(biāo)轉(zhuǎn)化肢體特征的對比,然后給予一套評分規(guī)則對肢體特征進(jìn)行評分和系統(tǒng)對應(yīng)的指令形成映射并反饋提示信息。
完成以上基本要求,我們需要最后能夠在手機上執(zhí)行的系統(tǒng),同時為了考慮到一些手機性能問題,我們還需要能夠通過網(wǎng)絡(luò)來幫助這些機型進(jìn)行異地的網(wǎng)絡(luò)計算,同時也需要系統(tǒng)能夠繼續(xù)自我學(xué)習(xí),優(yōu)化模型,更新模型。而這個系統(tǒng)的實現(xiàn)我們將在后面具體描述。
1 ?BHLD算法的肢體檢測與反饋
人體姿態(tài)的評估只是獲取到人體的幾個關(guān)鍵點,無法檢測到人體當(dāng)前正在做什么具體動作和表達(dá)什么意思,所以本文在這里解決:
(1)如何將人體動作最后映射到對應(yīng)系統(tǒng)指令并取得反饋。
(2)如何檢測判定人體何種動作狀態(tài)。
(3)如何提示用戶該如何滿足特定動作。
本文提出一種簡單的處理方式BHLD算法來結(jié)局以上問題,BHLD算法其包含以下四個主要步驟:
第一步:從人體關(guān)鍵點中提煉肢體特征。
L=F肢體轉(zhuǎn)化(Point[n][2])
Point[n][2]表示人體的動作在二維視頻中獲取的關(guān)鍵點,n為人體關(guān)鍵點數(shù)量,同時每個關(guān)鍵點又包含其X坐標(biāo)與Y坐標(biāo)。Point整體包括頭部,頸部,下腹部,左右肩,左右手肘,左右手關(guān)節(jié),等部分相對的X,Y坐標(biāo)。L表示一個n維肢體特征數(shù)組,每個肢體特征包含一個數(shù)組分別存放角度和距離,其中包含肢體當(dāng)前左右肩部和肢體的角度,左右肘部角度,肢體左右小臂膀像素距離,肢體左右大臂膀像素距離等肢體特征,角度的單位為度,像素距離單位為像素。例如Y[0]表示頭部的長度,而Y[1]表示頭部的與身體的角度。F肢體轉(zhuǎn)化()函數(shù)將人體特征點Point[n][2]按距離公式和角度計算公式,轉(zhuǎn)化成為特定的肢體間的角度與肢體本身像素長度等肢體特征。
第二步:由肢體特征判定符合的動作結(jié)果。
Z=F動作判定(L1,L2,Point[n][2],Action[n])
L1,L2都是肢體特征,只是獲取方式不同,L1是當(dāng)前狀態(tài)下獲取的關(guān)鍵點后轉(zhuǎn)化的肢體特征而是L2人體標(biāo)準(zhǔn)站立狀態(tài)下獲取肢體特征,Action[n]是記錄根據(jù)實驗過程中發(fā)現(xiàn)的人體動作所對應(yīng)的特征模型數(shù)據(jù)列表,列表中存放這各種動作信息,這些動作信息又包含許多特征限制,這些限制包含檢測類型,檢測左、右邊界和滿足檢測后的得分與相應(yīng)權(quán)重。其中每一項都包含[動作編號,動作名字,限制條件列表],而限制條件列表中的每一項又包含[檢測類型,檢測左邊界,檢測右邊界,標(biāo)準(zhǔn)分,權(quán)重]。
F動作判定()函數(shù)首先從Action[n]列表開始,提取第一個Action對象,并對其所包含的限制條件逐一檢測。檢測方式是:根據(jù)限制條件的檢測類型進(jìn)行檢測,而這些檢測類型包含但不僅僅只包含以下幾點:
(1)將L1中的值與限制條件中檢測左邊界、檢測右邊界進(jìn)行匹配;
(2)將L1的肢體像素距離值與L2中同位置肢體像素距離進(jìn)行對比,然后獲取兩者的商并與限制條件中的“檢測左邊界”“檢測右邊界”進(jìn)行匹配;
(3)將Point點中幾個點的坐標(biāo)值進(jìn)行X與X互減,Y與Y互減,然后將X差值或Y差值與限制條件中“檢測左邊界”“檢測右邊界”進(jìn)行匹配;
由這些匹配結(jié)果來判斷人體動作是否符合“檢測左邊界”與“檢測右邊界”,從而獲取限制條件中的標(biāo)準(zhǔn)分和權(quán)重得分,即權(quán)重×標(biāo)準(zhǔn)分;
累加所有條件的權(quán)重評分,得到累計分?jǐn)?shù),最高累計分?jǐn)?shù)和這個得分對應(yīng)的Action[n]對象動作編號作為結(jié)果一部分返回,同時返回每個得分限制條件的檢測類型與其標(biāo)準(zhǔn)分和權(quán)重得分。
Z是經(jīng)過F動作判定()函數(shù)處理后結(jié)果,其中包含最高得分的動作編號,最高得分,和限制條件計算結(jié)果列表,而列表中每一項又包括限制類型、動作標(biāo)準(zhǔn)分和特征權(quán)重×標(biāo)準(zhǔn)分的權(quán)重分,其數(shù)據(jù)字典:[動作編號,最高權(quán)重評分,限制條件計算結(jié)果列表]。限制評定結(jié)果是多記錄列表,其中又每條記錄又包含:[限制類型,標(biāo)準(zhǔn)分,權(quán)重分]。
第三步:將結(jié)果映射到指令,然后獲取指令并執(zhí)行。
CM=CA檢測(Z,CL[n])
CL[n]是所有指令的映射列表,其中包含的每一條指令都含有各種匹配條件,這些條件分為必要條件,互斥條件,當(dāng)所有必要條件都滿足或者互斥條件滿足其中一項,指令就可以被獲取。對應(yīng)每天指令的數(shù)據(jù)結(jié)構(gòu)[動作編號,指令編號,必要條件列表,互斥條件列表],而其中每一個條件列表又包含了檢測類型,這樣就能通過檢測類型來判斷“動作結(jié)果”是否滿足這些條件,從而判定指令是否執(zhí)行。CM是經(jīng)過CA檢測()函數(shù)檢測后得到的指令I(lǐng)D,獲取到CM指令后,系統(tǒng)會有其對應(yīng)的功能列表,其都包含一個具體功能ID與實際執(zhí)行代碼的映射。CA檢測()函數(shù)是對CL[n]中所有指令下的每個條件進(jìn)行窮盡檢測的檢測程序,會依次檢測Z的限制條件結(jié)果列表,查找條件列表中的檢測類型的對應(yīng)Z中每條記錄的限制類型能否一一配對,獲取權(quán)重得分,判斷是否滿足后返回指令I(lǐng)D。當(dāng)指令I(lǐng)D被返回后,系統(tǒng)就會根據(jù)指令I(lǐng)D進(jìn)行執(zhí)行。
第四步,將動作結(jié)果進(jìn)行對比,獲取匹配程度與說明,然后反饋給用戶:
PL=C檢測(Z,S[n])
PL根據(jù)動作編號、檢測結(jié)果的檢測類型和檢測結(jié)果的權(quán)重評分與S[n]進(jìn)行逐個對比,然后獲取對比匹配的S[n]問題提示項,所以P是S[n]的子集,S[n]是個數(shù)組,存放了檢測結(jié)果對應(yīng)的提示文字。C檢測()函數(shù)是根據(jù)Z返回數(shù)據(jù)進(jìn)行對比,然后將檢測結(jié)果匹配的問題提示返回給PL;最終用戶根據(jù)PL返回的結(jié)果獲取到對應(yīng)的提示,而第三步的指令會被系統(tǒng)接受,然后對應(yīng)操作系統(tǒng)內(nèi)的任務(wù),同時達(dá)到用戶,系統(tǒng)都得到應(yīng)該獲取的反饋。
2 ?系統(tǒng)實現(xiàn)
本文設(shè)計的系統(tǒng)是一種利用移動設(shè)備檢測人體動作通過本地指令反饋并同時保留遠(yuǎn)程網(wǎng)絡(luò)對具體動作進(jìn)行分類的整體解決方案,前后包括圖片獲取,人體姿態(tài)估計,BHLD算法的肢體檢測與反饋等功能,涉及包含如圖1所示的步驟。
各步驟具體工作為:
(1)用戶處于指定位置,移動設(shè)備通過設(shè)備自帶攝像頭或外接USB攝像頭獲取用戶的動作行為視頻。
(2)總控系統(tǒng)分析動作視頻,采集實時特定圖片,利用輕量化改進(jìn)后的CPM和Hourglass人體姿態(tài)估計算法獲取到人體的基本關(guān)鍵點。
(3)總控系統(tǒng)將基本關(guān)鍵點數(shù)據(jù)發(fā)送到達(dá)肢體檢測系統(tǒng)。
(4)肢體檢測系統(tǒng)根據(jù)基本關(guān)鍵點和BHLD算法獲取每個人體肢體的具體位置,長度,關(guān)節(jié)呈現(xiàn)的角度,和身軀的長度,然后判斷整個人體處于特定的動作中;若人體姿勢不滿足標(biāo)準(zhǔn)狀態(tài),則提示用戶如何糾正特定動作來滿足標(biāo)準(zhǔn)狀態(tài)的要求。
(5)肢體檢測系統(tǒng)返回判斷結(jié)果到總控系統(tǒng),總控系統(tǒng)將人體姿態(tài)與計算指令進(jìn)行匹配:若人體姿勢滿足標(biāo)準(zhǔn)狀態(tài),則判斷該標(biāo)準(zhǔn)狀態(tài)是否對應(yīng)某項動作指令,若是,則執(zhí)行該指令,若否,則忽略執(zhí)行相應(yīng)指令,直接將動作信息反饋給用戶。
(6)用戶根據(jù)反饋結(jié)果繼續(xù)改變動作,再次進(jìn)入步驟(1),直到用戶退出系統(tǒng)。
其中肢體檢測系統(tǒng)的核心是BHLD算法:
首先是轉(zhuǎn)化函數(shù),輸入人體關(guān)鍵特征點,將這些點對應(yīng)到不同肢體,然后通過三角函數(shù)轉(zhuǎn)化成為對應(yīng)肢體的角度數(shù)據(jù),相同的還有距離函數(shù)概念相同就不呈現(xiàn)了。轉(zhuǎn)化函數(shù)具體代碼為:
fun countAnger(x1: Float, y1: Float, x2: Float, ?y2: Float):Double{
var ?langle: Number ?= Math.atan2(((x2 - x1).toDouble()), ((y2 - y1).toDouble()))
return ?langle.toDouble()*( 180 /Math.PI)
}
這個是肢體特征的部分屬性,頭部角度,肩部角度,上臂長度,這些屬性都是通過上面的角度計算函數(shù)獲取。長度屬性不同的就是執(zhí)行的是計算長度的公式。具體代碼為:
class ActionFeature(){
//頭部角度
var angleOfTop :Double = 0.0
//肩部角度
var lAngleOfShoulder :Double = 0.0
var rAngleOfShoulder:Double = 0.0
//上臂長度
var lLengthOfShoulder :Double = 0.0
var rLengthOfShoulder:Double = 0.0
//以下忽略
以下代碼是檢測具體的人體肢體特征關(guān)鍵代碼,最外層的runConditionCheck是整體的動作檢測方法,for(condition in conditionList)是窮盡了所有方法對應(yīng)的限制條件,condition.checkLimit是讓這些限制條件去判斷是否和actionFeature相一致,而判斷的時候又要根據(jù)conditionId來判斷限制類型來調(diào)用不同的checkAction函數(shù),最后獲得結(jié)果分?jǐn)?shù)和權(quán)重。之后的代碼基本是計算權(quán)重,然后從hash表中獲取Action的指令I(lǐng)D,這些相對簡單就不在展現(xiàn)。具體代碼為:
fun runConditionCheck(actionFeature: ActionFeature?,baseActionFeature: ActionFeature?){
for(condition in conditionList){
var result: ActionDetectionResult? = condition.checkLimit(actionFeature, baseActionFeature)
total += result??!.weight * result?。?socre
}
}
fun checkLimit(actionFeature:ActionFeature?, baseActionFeature:ActionFeature?): ActionDetectionResult? {
var result : ActionDetectionResult? = null
when(conditionId){
1L -> result = actionFeature?.let { checkAction(it) }
......//略
}
return result
}
fun checkAction(actionFeature:ActionFeature):ActionDetectionResult{
if(actionFeature.angleOfTop>=leftConditionLimit ||......){
return ActionDetectionResult(conditionId, socre, weight)
}
}
在肢體檢測系統(tǒng)內(nèi),系統(tǒng)同時還保留著對網(wǎng)絡(luò)請求,發(fā)送網(wǎng)絡(luò)信息,將人體姿態(tài)估計后的關(guān)鍵點實時傳送到網(wǎng)絡(luò)服務(wù)器,并同時對現(xiàn)有的網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行學(xué)習(xí)任務(wù)。
從圖2中我們可以看到移動設(shè)備可以通過網(wǎng)絡(luò)請求將圖片發(fā)送給遠(yuǎn)程網(wǎng)絡(luò)服務(wù)器,然后遠(yuǎn)程網(wǎng)絡(luò)服務(wù)器獲取到圖片數(shù)據(jù)然后放入運算中心獲取到對應(yīng)的人體關(guān)鍵點,之后返回給手機。
系統(tǒng)會定期從用戶上傳的圖片中拿出由后臺工作人員重新對其人體關(guān)鍵點進(jìn)行標(biāo)記,重新批量運算人體姿態(tài)評估模型,更新模型超參數(shù)以求達(dá)到更好的預(yù)測性能并會及時同步到用戶手機上。同步到用戶手機上的除了人體姿態(tài)評估模型還有可能是定期需要更新的肢體運算中的預(yù)判條件和指令映射數(shù)據(jù)。圖3為紅米手機實際檢測效果。
同時我們對應(yīng)幾個移動設(shè)備進(jìn)行了粗略的性能統(tǒng)計,如表2所示。
整體系統(tǒng)基本滿足我們之前設(shè)計的預(yù)期,基本能夠在移動設(shè)備上進(jìn)行檢測,同時我們也預(yù)留了接口,對應(yīng)老舊手機我們也能支持。
3 ?結(jié) ?論
首先由于是使用CPM和Hourglass網(wǎng)絡(luò)結(jié)構(gòu),而非CPN網(wǎng)絡(luò)結(jié)構(gòu)相對精度和效率存在一定的提升空間,后續(xù)會繼續(xù)改進(jìn)系統(tǒng),使用CPN網(wǎng)絡(luò)結(jié)構(gòu)輕量化改造版本來完善現(xiàn)有系統(tǒng),由于CPM和Hourglass網(wǎng)絡(luò)結(jié)構(gòu)已經(jīng)能夠滿足系統(tǒng)需求,對系統(tǒng)是否能移植移動設(shè)備重要程度已非技術(shù)難點,所以在這里本文暫且忽略優(yōu)化所帶來的性能提升。
其次,由于圖片是二維結(jié)構(gòu),而人體是三維結(jié)構(gòu),相同關(guān)鍵點組可以表達(dá)兩種及以上肢體特征,并非1對1映射,所以存在誤差和誤判。而這個問題雖然可以通過人體構(gòu)造的特性限制和人體活動本身的條件限制來減少誤判,但是這種方法并非最佳解決方案,而且隨檢測條件的增加必然會加重系統(tǒng)負(fù)擔(dān),本系統(tǒng)的另外不足之處在于使用窮盡法來判斷各種人體動作,所以檢測條件的增加必然會加劇此問題對性能和準(zhǔn)確性的影響。
參考文獻(xiàn):
[1] 唐暉,王慶,陳洪,等.基于深度學(xué)習(xí)的體感交互方法 [J].計算機與現(xiàn)代化,2019(2):7-14.
[2] 周鑫.特征池化:一種用于CNN的特征選擇方法 [D].西安:西安電子科技大學(xué),2018.
[3] 夏瀚笙,沈峘,胡委.基于人體關(guān)鍵點的分心駕駛行為識別 [J].計算機技術(shù)與發(fā)展,2019,29(7):1-5.
[4] 李玲霞,王羽,吳金君,等.基于改進(jìn)型多維卷積神經(jīng)網(wǎng)絡(luò)的微動手勢識別方法 [J].計算機工程,2018,44(9):243-249.
[5] SU Z H,YE M,ZHANG G H,et al.Cascade Feature Aggregation for Human Pose Estimation [J/OL].arXiv:1902.07837 [cs.CV].(2019-02-21).https://arxiv.org/abs/1902.07837.
作者簡介:范臻君(1982.11—),男,漢族,上海人,本科,研究方向:人工智能。