錢 興,張曉明,2
(1.中北大學 儀器與電子學院,山西 太原 030051;2.中北大學 儀器科學與動態(tài)測試教育部重點實驗室,山西 太原 030051)
步態(tài)識別作為第二代生物特征識別技術的代表之一,促進了樓宇內導航、行人識別、醫(yī)療康復等領域的發(fā)展,具有重要意義[1].步態(tài)識別的關鍵在于對步態(tài)特征信號的提取.傳統步態(tài)特征信號的提取主要依靠人工提取,但人工提取存在一定的局限性和不確定性,且容易遺漏與步態(tài)相關的特征信息.因此,尋找合適的步態(tài)特征信號的提取方法很有必要[2-4].
近年來,隨著卷積神經網絡(Convolutional neural networks,CNN)在步態(tài)特征信號的提取中展現出明顯的優(yōu)勢而備受關注.GoogLeNet和AlexNet-like等模型相繼被提出,在提高步態(tài)特征信號提取能力和效率[5-7]的同時,也提高了步態(tài)識別率.吳軍等[8]利用手機的傳感器數據通過CNN算法進行人體步態(tài)識別取得了一定成果,然而,識別率低于90%.陳法權等[9]采用多個慣性傳感器進行基于CNN的步態(tài)識別,識別率達到了91.5%,但模型數據權重值大,且并未在硬件上實現對步態(tài)的實時識別.羅成[10]通過改進的卷積神經網絡,達到了97%的識別率,但模型結構復雜,不利于進行下位機移植.隨著卷積神經網絡模型的不斷發(fā)展,雖然識別率提高,但CNN模型變得更加復雜.卷積層的增多使得計算量增大,占用下位機內存增多,導致模型在進行下位機移植時延時過多,實時性差.在進行步態(tài)識別模型搭建的同時,同樣需要關注對模型參數進行壓縮的方法.Song Han等[11]通過剪枝、權值共享和數據壓縮對經典的卷積神經網絡模型進行壓縮和優(yōu)化,將AlexNet模型壓縮了35倍,VGG模型壓縮了49倍.然而,此方法只進行了理論驗證并未進行硬件上的實驗,僅具有理論參考意義.杜振國[12]提出了基于混合參數剪枝的模型壓縮算法,在精度不損失的情況下在LeNet-5模型上達到2.64倍的參數壓縮效果,在AlexNet-like 模型上達到10.96 倍的參數壓縮效果,有效減少了模型中的參數量和運算量,但未進行下位機實現,缺少數據支撐.因此,需要設計一種構造簡單、卷積層數少的CNN步態(tài)識別模型,并選擇適當方法進行模型壓縮.
針對上述問題,本文首先搭建了一種基于輕量CNN步態(tài)的識別模型.通過減少卷積層和縮小模型結構,減少模型移植時對內存空間的占用,同時保證模型對步態(tài)的識別能力.其次,采用權值聚類和哈夫曼編碼的方法來對模型中卷積層和全連接層的權重參數進行壓縮,通過對權重的壓縮來解決模型移植后實時性差的問題.同時,通過實測數據集進行了學習和驗證.
對步態(tài)信息的采集傳感器主要考慮兩個方面.一方面,傳感器需要能夠采集不同步態(tài)信息的數字特征,一般需要多傳感器進行步態(tài)信息采集;另一方面,采集步態(tài)的數據量不宜過多,采集到的數據量過多將導致步態(tài)識別系統的計算量增大,同時實時性變差.
不同步態(tài)信息最直觀地反映在腿部的運動狀態(tài)上,腿部運動狀態(tài)最主要的是通過加速度信號和關節(jié)彎曲角度信號進行描述.不同的步速、路況會有不同的加速度,該信息直觀可靠、物理意義明確.彎曲度信號可以反映人體腿部膝關節(jié)彎曲角度參數,具有良好的步態(tài)周期分割能力,能夠彌補加速度信息在步態(tài)周期劃分上的缺點.加速度和彎曲度信息的組合可以較好采集不同步態(tài)的特征信息且數據量相對較少.因此,選取了三軸加速度傳感器與彎曲度傳感器進行人體步態(tài)信息的采集[13].
將步態(tài)識別系統傳感器放置在實驗測試人員的膝蓋位置,使得三軸加速度傳感器的z軸與地面垂直,彎曲度傳感器貼合在膝蓋骨的位置,共輸出4種信號,包括x軸、y軸、z軸和彎曲角度,采樣頻率為100 Hz.
LeNet-5模型[14]被譽為早期卷積神經網絡中最有代表性的實驗系統之一,具有結構簡單、特征提取率高的特點.此網絡模型主要由卷積層、池化層和全連接層構成.輸入矩陣經過卷積層和池化層的計算轉變?yōu)閹в邢鄳卣鞯木仃?,并通過全連接層展開,根據所需分類的類別進行判定.卷積層最核心的部分為卷積核,具有局部性,可對輸入矩陣進行局部特征提取.LeNet-5模型共有6層,3個卷積層、2個池化層和1個全連接層,卷積層采用的都是5×5大小的卷積核.LeNet-5模型結構如圖1 所示.
圖1 LeNet-5模型結構Fig.1 LeNet-5 model structure
步態(tài)識別系統主要通過卷積神經網絡原理進行步態(tài)識別,其核心為卷積層和池化層的數據計算.卷積層主要是對步態(tài)數據進行步態(tài)特征值提取,每一層的計算為
(1)
(2)
式中:Mn為第l層輸出;Mn-1為第l層輸入;N(i,j)為對應特征值的大小;Wn為當前層卷積核;f(x,y)為卷積核的大??;x,y代表卷積核行列數;s代表卷積的步長;p代表填充層數;N(i,j)代表Mn的大小.
池化層主要進行特征選擇和信息過濾,每一層的計算為
Zl=MaxP(Zl-1),
(3)
式中:MaxP表示池化層進行最大池化操作.
步態(tài)識別系統模型借鑒LeNet-5的結構,在輕量CNN步態(tài)識別模型中引入Leaky ReLU函數對卷積層提取到的特征值進行線性映射,解決卷積計算對非線性無法很好擬合和卷積輸出數據小于零時神經元被抑制的問題[15].當CNN模型的結構變得更復雜時,對數據集數量的要求就更高,否則會出現過擬合的現象,影響最終的識別率.針對本文采集到的數據集,可適當進行網絡層數的縮減和修改.輕量CNN步態(tài)識別模型如圖2 所示.
圖2 輕量CNN模型Fig.2 Lightweight CNN model
輸入為每秒100×4的數據矩陣,其中100為1 s內采集到的每個種類的信號數量,4列分別為x軸、y軸、z軸和彎曲角度的數值.本文使用3×1 和5×1 的小卷積核代替LeNet-5模型中 5×5 的卷積核.因為輸入矩陣為100×4,通過 3×1 和5×1的小卷積核可以將每個信號種類的步態(tài)特征信息進行分別提取,同時,減少使用 5×5 的卷積核時對輸入矩陣進行補零操作.3×1和5×1的小卷積核與兩個5×5的卷積核相比,減少了卷積核的數量,節(jié)省大量的計算資源.
卷積層輸出的數據存在小于零的特征值,通過Leaky ReLU函數將減少小于零的特征值被抑制的問題.對于后面訓練網絡加快收斂有較好的效果,對于測試集的分類準確率也有所提高.
池化層選擇最大池化,三軸加速度傳感器和彎曲度傳感器采集到的數字矩陣具有4種不同信號的數量,需要進行局部特征的提取,而平均池化有利于提取全局特征,并不適合步態(tài)信息的提取.因此,選擇最大池化有利于提高步態(tài)識別率.
為了解決步態(tài)識別系統延時過高的問題和減少計算量,達到提高系統實時性的目的,使用權重聚類和哈夫曼編碼實現對模型的壓縮.
首先,對設計好的輕量CNN步態(tài)識別模型進行權重聚類.權重聚類主要是進行模型參數的權值聚類,即通過統計權值在不同區(qū)間的數量,將數量多的權值區(qū)間通過聚類算法進行聚類,并將原權值替換為區(qū)間內最優(yōu)值,然后,整體進行權重的微調,達到不改變模型識別率的目的.輕量CNN步態(tài)識別模型數量較多的權值區(qū)間如圖3 所示.
圖3 權值區(qū)間統計Fig.3 Weight interval statistics
在區(qū)間[-0.011 420 67,0.006 579 33]內的權值數量最多,其他權重依次散布在各個區(qū)間,將前5個權值數量最多的區(qū)間采用 K-Mean算法[16]來對權值進行聚類,使得劃分在同一類別中的所有權重共享該類的聚類質心.K-Mean算法首先進行K值的確定,然后根據不同區(qū)間的初始質心完成對數據的分割,最后通過迭代選出各個區(qū)間內的最優(yōu)權重.
由于權重聚類主要是將訓練好的卷積層和全連接層的權重參數進行劃區(qū)間選優(yōu),得到的最優(yōu)權重將對區(qū)間內所有權重進行替換,并通過權重微調保證步態(tài)識別模型的精度.圖4 為前5個權值數量最多的區(qū)間進行聚類后選取的權重值.
圖4 聚類后的權重值Fig.4 Weight value after clustering
哈夫曼編碼(Huffman coding)是可變字長編碼(Variable word length coding)的一種,適用于無損耗數據壓縮.哈夫曼編碼對權值的壓縮過程主要是先對要壓縮的權值數據進行統計,計算出權值數據出現的概率,再根據權值數據出現的概率不同將哈夫曼編碼中唯一的碼字與之對應,并將所有碼字組成哈夫曼碼表[17].哈夫曼編碼對權值壓縮的過程中通過壓縮時所組成的哈夫曼碼表的對應關系,實現權值數據的還原.根據哈夫曼編碼的原理可知,進行哈夫曼編碼的數據重復越多,熵越低,就越能用短的碼值來表示更多的數字,編碼的效率就越高,壓縮的效果就越好.權重聚類將步態(tài)識別模型的卷積層和全連接層權重數量最多的前5個區(qū)間進行權值替換,將區(qū)間內的值全部替換為此區(qū)間的最優(yōu)權重.經過權重聚類后的輕量CNN步態(tài)識別模型權值參數的分布較為集中,用哈夫曼編碼可以減少部分的信息冗余,減少計算量.
對卷積層1、卷積層2和全連接層數據壓縮前后的參數大小變化進行統計,統計結果如表1 所示.
表1 參數變化測試Tab.1 Parameter change test
表1 中,Q表示權值共享,H表示哈夫曼編碼.從表1 中可以看到卷積層1、卷積層2、全連接層的大小分別為1 KB、1 KB、693 KB,總共為 703 KB.經過權值共享和哈夫曼編碼壓縮后總大小為595.56 KB,模型縮小了15.28%.
STM32F4系列單片機具有體積小、計算速度快、可外接SRAM的特點,適合作為步態(tài)識別系統的硬件核心.采用的單片機型號為STM32F407ZGT6,該型號的單片機外擴1 MB的SRAM和1 MB的Flash,適合進行步態(tài)識別模型的移植.通過深度學習工具箱將訓練好的輕量CNN步態(tài)識別模型進行壓縮,使用C語言對壓縮后的模型進行代碼編寫.人體步態(tài)識別系統,主要由MPU6050三軸加速度傳感器、Flex彎曲度傳感器、STM32F407ZGT6和上位機組成.通過傳感器采集到人體步態(tài)數據傳輸到STM32F407ZGT6單片機中,然后進行當前步態(tài)識別,最后將識別結果傳輸到上位機進行顯示.人體步態(tài)識別系統結構圖和系統實物圖分別如圖5、圖6 所示.
圖5 系統結構圖Fig.5 System structure diagram
圖6 系統實物圖Fig.6 Physical diagram of the system
STM32單片機實現步態(tài)識別算法的流程如圖7 所示.
圖7 STM32實現CNN流程圖Fig.7 Flow chart of STM32 implementation CNN
通過對壓縮后的模型進行編寫,生成的模型總大小為653.35 KB,使用STM32 Cube AI工具分析網絡模型[18]是否可運行,此模型占用Flash資源643.25 KB,占用RAM資源316.94 KB,可以在STM32F407ZGT6單片機上運行.
為了驗證設計好的步態(tài)識別系統,本文的45名實驗測試人員(男25人,女20人)均為身體健康的成年人,無任何影響走路狀態(tài)的疾病.其中,20名青年志愿者的年齡介于19周歲~29周歲,男女各10人,身高在155 cm~183 cm 之間,體重在45 kg~82 kg之間;20名中年志愿者的年齡介于37周歲~53周歲,男女各10人,身高在152 cm~179 cm 之間,體重在48 kg~85 kg之間;5名老年志愿者年齡介于60周歲~67周歲,3名男性,2名女性,身高在150 cm~175 cm 之間,體重在43 kg~75 kg之間.實驗使用的傳感器的采樣頻率為100 Hz,正常人走路每分鐘大約100步~120步,故一個步態(tài)周期大約為1 s,所以選定每秒即100×4個數據為一個周期進行數據處理.實驗采集到每種步態(tài)有60 000個數據,共300 000個數據.
將步態(tài)識別系統傳感器放置在實驗測試人員的膝蓋位置,使得三軸加速度傳感器的z軸與地面垂直,彎曲度傳感器貼合在膝蓋骨的位置.測試場景分別為水平地面的直線行走、上下樓梯、上下坡.將測試好的數據通過串口發(fā)送到電腦上,電腦通過串口傳輸助手保存當前運動數據.
在實時性方面,STM32F4單片機將傳感器采集到的數據通過基于卷積神經網絡的步態(tài)識別模型進行步態(tài)識別,并將識別結果通過串口發(fā)送到計算機上,根據串口助手顯示的時間戳判斷數據壓縮前后的實時性.
為了測試步態(tài)識別系統的實際延時,將程序設置為每經過10 ms(采集一次新數據時間)進行當前步態(tài)的識別,并傳送到PC端進行顯示.實驗所測的延時包括采集步態(tài)數據的時間和進行數據處理的時間,壓縮前后下坡時的延時如圖8、圖9 所示.
圖8 壓縮前延時Fig.8 Delay before compression
圖9 壓縮后延時Fig.9 Post compression delay
可以看到進行模型壓縮前單片機延時為 700 ms,優(yōu)化后的延時為375 ms,提升了325 ms,基本上實現了步態(tài)識別系統對人體步態(tài)實時識別的要求.
在準確性方面,統計實驗人員在不同步態(tài)下采集到的識別率情況,通過統計得出各個步態(tài)下的識別率和總體識別率.圖10 為實驗采集的步態(tài)數據.
圖10 實驗采集的步態(tài)數據Fig.10 Gait data collected in the experiment
其中,每種步態(tài)各有60 000個數據;在走路狀態(tài)下,有58 392個數據顯示為走路狀態(tài),有1 608個數據顯示為非走路狀態(tài);在上樓狀態(tài)下,有56 016個數據顯示為上樓狀態(tài),有3 984個數據顯示為非上樓狀態(tài);在下樓狀態(tài)下,有56 748個數據顯示為下樓狀態(tài),有3 252個數據顯示為非下樓狀態(tài);在上坡狀態(tài)下,有57 876個數據顯示為上坡狀態(tài),有2 124個數據顯示為非上坡狀態(tài);在下坡狀態(tài)下,有58 338個數據顯示為下坡狀態(tài),有1 662個數據顯示為非下坡狀態(tài).表2 為設備在5種步態(tài)模式下壓縮前后的識別率.
表2 5種步態(tài)模式下壓縮前后的識別率Tab.2 Recognition rate before and after compression in five gait modes
根據實驗測得的數據分析得出,壓縮前后不同步態(tài)識別率并未發(fā)生改變;走路、上樓、下樓、上坡、下坡的識別率分別為 97.32%,93.36%,94.58%,96.46%,97.23%,總體識別率為95.79%.
本文設計了一種基于輕量卷積神經網絡的人體步態(tài)識別系統.搭建了一個輕量CNN步態(tài)識別模型,能夠在縮減CNN模型結構的同時保證較高的步態(tài)識別率.實驗結果表明:輕量CNN步態(tài)識別模型的步態(tài)識別率達到了95.79%;采用權值聚類和哈夫曼編碼的方法對步態(tài)模型中的權重進行壓縮,減少下位機內存占用量.實驗結果表明:壓縮后的當前步態(tài)識別延時為375 ms,相比于壓縮前延時降低了53.57%,且步態(tài)識別率不變.為實現樓宇內導航、行人識別提供了硬件基礎.
基于輕量卷積神經網絡的人體步態(tài)識別系統仍有很大的提升空間.現有的步態(tài)數據庫對于不同年齡段的覆蓋不足,需要擴充數據庫;在實際應用中人體的步態(tài)會受行人自身因素和外部環(huán)境因素等的影響,需要提供大規(guī)模的步態(tài)數據和減少步態(tài)干擾;權值聚類和哈夫曼編碼對卷積神經網絡的權重進行壓縮減少了數據延時,但數據的延時仍然不小,今后的重點工作是優(yōu)化步態(tài)識別模型縮小權值.