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