賀宗梅
(長沙民政職業(yè)技術(shù)學(xué)院,湖南 長沙 410004)
人體行為識別在近些年發(fā)展比較迅速,目前應(yīng)用比較多的領(lǐng)域在視頻監(jiān)控和醫(yī)療保健行業(yè),還有自動駕駛領(lǐng)域,而在殘疾人康復(fù)領(lǐng)域目前應(yīng)用很少。黨的十九大報告明確提出“發(fā)展殘疾人事業(yè),加強殘疾康復(fù)服務(wù)”。根據(jù)人口普查和全國殘疾人抽樣調(diào)查統(tǒng)計,目前我國殘疾人將達到8500萬之多。殘疾人的康復(fù)通常需要專業(yè)的康復(fù)人員去協(xié)助,但是這種協(xié)助很多時候人工成本比較高,為了能夠讓殘疾人自己可以進行規(guī)范的康復(fù)訓(xùn)練,因此把基于視頻的人體行為識別技術(shù)應(yīng)用到殘疾人的康復(fù)中就具有很重要的現(xiàn)實意義和經(jīng)濟價值,同時也是對行為識別應(yīng)用于殘疾人康復(fù)領(lǐng)域做了一個有益的探索。
通過對收集到的殘疾人康復(fù)行為進行分析,按照高內(nèi)聚低耦合的設(shè)計理念,對殘疾人康復(fù)評測系統(tǒng)進行了模塊劃分,該系統(tǒng)的功能模塊包含6 個模塊,其中各模塊的功能如下:
用戶數(shù)據(jù)模塊:該模塊的功能主要為管理殘疾人的基本信息,包括殘疾人的姓名,身份證號,殘疾情況描述等;保存殘疾人朋友的康復(fù)計劃,根據(jù)計劃,生成康復(fù)任務(wù);保存每次康復(fù)的效果數(shù)據(jù),同時能夠自動生成報表,對比每次康復(fù)的效果等。
圖像預(yù)處理模塊:該模塊主要是對幀轉(zhuǎn)換過來的圖片進行預(yù)處理,因為圖像都是來自視頻,所以圖像需要通過幀的格式來進行提取,然后轉(zhuǎn)換成可以識別的圖片,因此這個過程就包括圖片灰度值、大小值、降噪等各種處理,確保輸入的圖片能夠滿足后續(xù)處理環(huán)節(jié)的需要。
關(guān)鍵點檢測模塊:在深度學(xué)習(xí)過程中,有人體骨骼標識的標識圖。該模塊對預(yù)處理過輸入的圖片進行關(guān)鍵點特征的提取,再匹配骨骼關(guān)鍵點,形成骨骼關(guān)鍵點的向量,為后續(xù)行為的姿態(tài)估計做準備。
姿態(tài)估計模塊:根據(jù)形成的骨骼關(guān)鍵點向量建立向量矩陣,根據(jù)矩陣來估計殘疾人朋友的康復(fù)姿態(tài)。
二次特征提取模塊:對預(yù)處理過的圖形進行二次特征提取,形成行為特征的矩陣。
康復(fù)評價及應(yīng)用模塊:根據(jù)生成的各種矩陣,包括:關(guān)鍵點預(yù)測矩陣、骨骼關(guān)鍵點向量矩陣和行為矩陣,利用行為神經(jīng)網(wǎng)絡(luò)模型進行行為識別。根據(jù)這些矩陣數(shù)據(jù),對比標準行為數(shù)據(jù)得出本次動作的打分評價,最后形成訓(xùn)練效果數(shù)據(jù)存入數(shù)據(jù)庫,用于后續(xù)的各種分析。
根據(jù)神經(jīng)網(wǎng)絡(luò)原理,設(shè)計一款康復(fù)姿態(tài)識別的神經(jīng)網(wǎng)絡(luò)模型,如圖1 所示。在神經(jīng)網(wǎng)絡(luò)架構(gòu)圖中標識了圖形輸入、核、步長、Padding等參數(shù)。
圖1 神經(jīng)網(wǎng)絡(luò)模型架構(gòu)
1.數(shù)據(jù)集準備
根據(jù)神經(jīng)網(wǎng)絡(luò)訓(xùn)練的需要,通過對現(xiàn)實和網(wǎng)絡(luò)資源的整理收集,共收集到康復(fù)姿態(tài)識別神經(jīng)網(wǎng)絡(luò)訓(xùn)練集1937張圖片,其中踢腿429張,下蹬有723張,站立有785張;測試集中踢腿有107張,下蹬有118張,站立有91張。每一種類別都放在不同的文件里并有標注。
2.搭建神經(jīng)網(wǎng)絡(luò)
按照神經(jīng)網(wǎng)絡(luò)架構(gòu)圖的設(shè)計思路,在裝有python和pycharm 的實驗環(huán)境下,利用tensorflow 完成康復(fù)姿態(tài)識別神經(jīng)網(wǎng)絡(luò)的搭建,其搭建的主要步驟如表1所示。
表1 神經(jīng)網(wǎng)絡(luò)模型實現(xiàn)步驟
2獲取圖片路徑和標簽3數(shù)據(jù)類型返回4第一層卷積層5第二層卷積層6第三層卷積層7第四層池化層8第五層全連接層9第六層全連接層定義read_traffic_light方法,讀取每一張圖片并把讀取的像素矩陣放到images列表里,標簽放到labels列表里,返回的數(shù)據(jù)是np.array類型的數(shù)據(jù)。把數(shù)據(jù)轉(zhuǎn)換類型再返回,同時調(diào)用shuffle函數(shù)隨機打亂順序,從而完成數(shù)據(jù)構(gòu)造。這樣就完成了圖片的像素矩陣并有了對應(yīng)的標簽。采用tf.Variable函數(shù)定義兩個變量,變量1為權(quán)重,這個權(quán)重就是卷積核,該卷積核符合正態(tài)分布矩陣;變量2為偏置項,采用tf.truncated_normal函數(shù)生成,偏置項的shape必須與權(quán)重的深度相對應(yīng),參數(shù):shape:一維的張量,也是輸出的張量;mean:正態(tài)分布的均值;stddev:正態(tài)分布的標準差。把第一層卷積的輸出作為第二層卷積層的輸入,這一層的卷積核大小為3*3,深度為32,對應(yīng)上層輸出的深度,卷積的步長為2,padding為SAME。最后卷積的結(jié)果加上偏置項再進行RELU激活函數(shù)激活。filter_3=tf.Variable(tf.truncated_normal(shape=[3,3,48,64],mean=0,stddev=0.1))bias_3=tf.Variable(tf.constant(0.1,shape=[64]))conv_3=tf.nn.conv2d(leaky_relu_2,filter=filter_3,strides=[1,2,2,1],padding='SAME'fg_3=tf.nn.bias_add(conv_3,bias_3)relu_3=tf.nn.relu(fg_3)以第三層卷積層作為池化層的輸入,過濾器尺寸為3*3,步長為2。這一層的輸出為[None,2,2,64]的矩陣。添加dropout層使部分節(jié)點在訓(xùn)練時的輸出置為0,防止過擬合,從而使得模型在測試數(shù)據(jù)上的效果更好。將數(shù)據(jù)矩陣平鋪成一維向量。建一個符合正態(tài)分布的矩陣,shape的第一個為256,第二個參數(shù)為隨機值。tf.matmul函數(shù)把構(gòu)建的權(quán)重矩陣與平鋪的一維矩陣相乘,再加上偏置項。設(shè)置shape為100,IMAGE_CLASSIFY 的值為3,后一層的輸出深度為3;定義loss函數(shù):采用tf.nn.sigmoid_cross_entropy_with_logits函數(shù)來計算預(yù)測值與真實值得交叉熵,tf.reduce_mean函數(shù)求平均值;優(yōu)化loss:采用Adam算法優(yōu)化loss,尋找全局最優(yōu)點的優(yōu)化算法,傳入一個learning_rate學(xué)習(xí)率的參數(shù),參數(shù)設(shè)定為0.001。
3.神經(jīng)網(wǎng)絡(luò)訓(xùn)練
為了讓神經(jīng)訓(xùn)練得比較智能,在訓(xùn)練過程中把數(shù)據(jù)分成一定的batch,當一個batch 訓(xùn)練完成后再獲取下一個batch 進行訓(xùn)練,train_batches 是我們上面獲取的圖片數(shù)量, batch_size 是一個batch 的大小。train_batches 對batch_size 求整數(shù)除法,就是一共有多少個batch。在分批次的訓(xùn)練過程中,不斷優(yōu)化loss,神經(jīng)網(wǎng)絡(luò)每訓(xùn)練一次batch的數(shù)據(jù)會更新一次loss,所以它每更新一次我們就利用測試集測試一次,每迭代一次打印一次loss,最后調(diào)用save 保存訓(xùn)練模型,每迭代100 次保存一下模型。這樣就完成了神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練。訓(xùn)練過程的運行結(jié)果如圖2所示:
圖2 運行過程
殘疾人康復(fù)評測系統(tǒng)側(cè)端工具采用攝像頭,手機端或者電腦端采用可視化的開發(fā)工具,在展示端采用目前主流的移動開發(fā)技術(shù)實現(xiàn)。具體軟件如下:
1.視頻處理工具:ffmpeg‐20181115
2.集成開發(fā)環(huán)境:Microsoft Visual Studio Code、Anaconda3
3.界面設(shè)計工具:wxFromBuilder
4.編程語言環(huán)境:python3.6
用戶登錄系統(tǒng)后,點擊開始訓(xùn)練,系統(tǒng)會自動啟動端測設(shè)備,對殘疾人朋友的康復(fù)進行視頻拍攝,系統(tǒng)對采集到的視頻通過神經(jīng)網(wǎng)絡(luò)模型進行分析并給出本次動作的打分,如圖2 所示。同時保存到數(shù)據(jù)庫,便于日后生成康復(fù)訓(xùn)練報告。
圖3 康復(fù)評價圖
本文對殘疾人康復(fù)評測系統(tǒng)做了較好的實現(xiàn),實現(xiàn)了數(shù)據(jù)采集、康復(fù)監(jiān)測、康復(fù)評價等相關(guān)功能。在系統(tǒng)中引入了人體行為識別相關(guān)技術(shù),設(shè)計了一個能夠滿足康復(fù)所需要的神經(jīng)網(wǎng)絡(luò)模型,并對它做了實現(xiàn)和訓(xùn)練,目前具備了較好的智能識別效果。該項目的實現(xiàn)為智能化康復(fù)系統(tǒng)研發(fā)做了較好的探索。但是,該系統(tǒng)只實現(xiàn)了腿部康復(fù)訓(xùn)練評測功能,要進一步應(yīng)用到其他部位的康復(fù),還需要不斷地完善。