余益臻,任 佳,劉 瑜,郭力寧
1(浙江理工大學 機械與自動控制學院,杭州 310018)
2(深圳市深智杰科技有限公司,深圳 518102)
睡眠約占人生命總時長的三分之一,隨著生活節(jié)奏的加快,越來越多的人飽受睡眠問題的困擾,睡眠質量不好是危害健康的一大隱患[1].越來越多的流行病學證據(jù)支持睡眠時間短與肥胖和糖尿病風險之間的聯(lián)系.與行為或睡眠障礙有關的慢性睡眠喪失,可能是體重增加、胰島素抵抗和2 型糖尿病的一個新的危險因素[2].有關研究表明,人側躺時睡枕的高度應大于平躺時的高度[3],以減輕側躺時肩部承受的壓力.因此,需要設計一種能根據(jù)睡姿來調(diào)整高度的枕頭來改善睡眠質量.于是,如何有效地識別人體平躺和側躺這兩種睡姿就成了解決該問題的關鍵.
目前,對于人體睡姿識別的研究還比較少,已知的睡姿識別方法有基于睡姿圖像技術,即攝像頭采集人體睡眠時的圖像,通過數(shù)字圖像處理和機器學習算法對該圖像進行分類[4],識別出此時人體的睡姿.也有通過置于床墊中的陣列式壓力傳感器,采集人體壓力分布,來識別當前睡姿[5].然而,以上兩種方案存在著一些不足和需要改進的地方.首先,通過攝像頭采集睡姿圖像的方法,涉及了用戶隱私,以及當人體被物體遮蓋時(如臉被頭發(fā)遮擋,身體被被子遮蓋),識別錯誤的問題.其次,采集人體壓力分布的方法,置于床墊中的陣列式壓力傳感器面積大,傳感器損耗大,且精度要求高,整個系統(tǒng)成本較高.
針對上述問題,本文提出了一種基于深度學習的自適應睡枕設計方案.通過枕頭內(nèi)部的壓力傳感器和氣壓傳感器,分別采集頭部對枕頭的壓力和枕頭氣囊內(nèi)的氣壓,生成時間序列數(shù)據(jù)幀,并利用深度學習方法,自動學習深度特征,解決睡姿識別問題.
自適應睡枕的設計主要分為兩個部分:硬件平臺設計和睡姿識別算法的設計.
系統(tǒng)硬件平臺的總體設計如圖1所示,主控芯片選用意法半導體(ST) 公司的STM32F407ZGT6,該MCU 采用ARM Cortex-M4 架構,主頻高達168 MHz,帶有FPU,具有強大的浮點運算能力.MCU 主要負責處理傳感器采集到的數(shù)據(jù),根據(jù)識別的結果去控制執(zhí)行器,并每隔一段時間數(shù)據(jù)寫入外部Flash,還通過藍牙與手機APP 通信.傳感器有壓力傳感器和氣壓傳感器,分別使用HX711 模塊的壓力傳感器,XGZP6847 氣壓計模塊,用于采集頭部對枕頭的壓力和置于枕頭內(nèi)部氣囊的氣壓.執(zhí)行器為氣泵和氣閥,分別選擇5 V 微型充氣泵和5 V 微型電磁氣閥,用于控制氣囊的充放氣,達到調(diào)整枕頭至對應高度的目的.主控芯片通過低功耗HC-42 藍牙5.0BLE 模塊與手機進行通信,手機APP 可實現(xiàn)對枕頭高度的設定、固件程序的升級,以及提取儲存在Flash中的數(shù)據(jù)并生成txt 文件.
圖1 硬件平臺示意圖
通常,自然界中的大部分信號都存在噪聲,而直接采集所得的壓力和氣壓原始數(shù)據(jù)包含了各種噪聲,會對后續(xù)的工作產(chǎn)生影響,因此,需要對壓力和氣壓原始數(shù)據(jù)進行預處理.首先,將數(shù)據(jù)進行均值濾波,去除尖銳噪聲.再將數(shù)據(jù)進行標準化,將數(shù)據(jù)限定在一定的范圍內(nèi),消除奇異樣本數(shù)據(jù)的影響,并且有效提升模型的收斂速度.
然后將每8 s的數(shù)據(jù)生成一幀時序數(shù)據(jù),每兩幀數(shù)據(jù)間的時間重疊為4 s.因數(shù)據(jù)采樣頻率為10 Hz,每次采樣得到1個壓力值和1個氣壓值,所以每一幀時序數(shù)據(jù)包含了80個壓力數(shù)據(jù)和80個氣壓數(shù)據(jù),如圖2所示.
圖2 一幀數(shù)據(jù)示意圖
其中,X為一幀時序數(shù)據(jù),xi為i時刻的數(shù)據(jù),xi∈R2,pih為i時刻的壓力值,pig為i時刻的氣壓值.
最后將一幀時序數(shù)據(jù)作為神經(jīng)網(wǎng)絡的輸入,該數(shù)據(jù)為一維雙通道時序數(shù)據(jù),須選擇合適網(wǎng)絡模型對其進行特征提取和預測分類.
卷積神經(jīng)網(wǎng)絡(CNN)是一種處理具有類似網(wǎng)格結構的數(shù)據(jù)的神經(jīng)網(wǎng)絡,與傳統(tǒng)人工神經(jīng)網(wǎng)絡結構不同,CNN 包含了卷積層和池化層.卷積層之間采用稀疏連接和權值共享的連接方式,可大幅降低參數(shù)數(shù)量[6],加快了學習速率.池化層降低了輸出至下一層的數(shù)據(jù)維度,簡化了網(wǎng)絡的復雜度,同時也在一定程度上減少了過擬合的可能.
與二維、三維卷積神經(jīng)網(wǎng)絡相比,對于固定長度片段的數(shù)據(jù),且該數(shù)據(jù)的一些特征在片段中的位置不具有高度相關性時,一維卷積神經(jīng)網(wǎng)絡(1DCNN)可以有效地將這些特征提取出來.本文中每個通道的數(shù)據(jù)為一維數(shù)據(jù),1DCNN的卷積核朝一個方向移動,如圖3箭頭所示.一維卷積運算公式如下:
圖3 1DCNN 卷積操作
其中,s(n)為卷積后的序列,f為待卷積的離散信號,g為卷積核,N是信號f的長度.為了去除冗余信息,簡化網(wǎng)絡復雜度,防止數(shù)據(jù)過擬合,需在一維卷積層后添加池化層.
循環(huán)神經(jīng)網(wǎng)絡(RNN)是專門用于處理序列的神經(jīng)網(wǎng)絡,長短期記憶網(wǎng)絡(LSTM)是一種特殊的RNN,是為了解決RNN 梯度消失和梯度爆炸而提出的.在傳統(tǒng)的RNN中,訓練算法使用的是BPTT,當時間比較長時,需要回傳的殘差會指數(shù)下降,導致網(wǎng)絡權重更新緩慢,無法體現(xiàn)出RNN的長期記憶的效果,需要一個存儲記憶的單元,因此,LSTM 模型被提出.
LSTM 單元結構如圖4所示,t?1表示上一時刻,t表示當前時刻.LSTM的核心在于,每個LSTM 單元的長期記憶中的信息狀態(tài)(cell state).LSTM 通過設置3個門來控制長期記憶中的信息,這3個門分別是:遺忘門(forget gate)、輸入門(input gate)和輸出門(output gate)[7].門由一個Sigmoid 層和一個點乘操作組成,可以讓信息選擇性保留.
圖4 LSTM 單元結構
遺忘門可以決定清除或保留長期記憶中的信息.
在Sigmoid 層輸入上一時刻的隱含狀態(tài)ht?1和當前時刻的輸入xt,由循環(huán)權重Wf、輸入權重Uf和偏置bf,可以計算得到一個0 與1 之間的數(shù)ft,來決定上一時刻需要保留的信息量.
輸入門決定了當前時刻被存進長期記憶中的信息.
在tanh 層輸入上一時刻的隱含狀態(tài)ht?1和當前時刻的輸入xt,tanh 激活函數(shù)可以將輸出值限制在?1和+1 之間,輸出一個新的向量,表示當前時刻待存儲的信息.同樣地,ht?1和xt經(jīng)過一個Sigmoid 層,計算得到it來決定中需被存儲的信息量.Ct表示經(jīng)過遺忘門和輸入門添加了一部分新信息后,當前時刻長期記憶中的信息.
LSTM 單元的輸出,即當前時刻的隱含狀態(tài)ht,取決于Ct和輸出門.
將Ct輸入至一個tanh 層,得到一個待輸出量.同樣地,將在Sigmoid 層輸入ht?1和xt,計算得到ot來決定輸出,最后得到該LSTM 單元的輸出ht.
門控循環(huán)單元網(wǎng)絡(GRU)是一種特殊的RNN,是LSTM的一個變種,如圖5所示,與LSTM 主要不同之處在于,GRU 單個門控單元同時控制遺忘因子和更新狀態(tài)單元的決定.GRU 將LSTM的遺忘門、輸入門和輸出門進行了改動,變?yōu)楦麻T(update gate)和重置門(reset gate).在很多情況下,GRU 實際表現(xiàn)效果與LSTM 接近,而GRU 模型比LSTM 模型更簡單,能夠有效減少模型消耗的資源[8].
圖5 GRU 結構
重置門和更新門的計算公式如下:
更新門用于控制上一時刻的狀態(tài)信息被保留至當前狀態(tài)中的程度,更新門的值越大表示上一時刻的狀態(tài)信息保留越多.重置門用于控制忽略前一時刻的狀態(tài)信息的程度,重置門的值越大表示忽略越少.
與LSTM中的一些功能類似,重置門控制的上一時刻的信息量ht?1需 要被保留.更新門控制ht?1中需要
丟棄的信息和h~t中多少信息會被保留,最后得到該GRU單元的輸出ht.
本文采用的1DCNN-GRU 網(wǎng)絡模型,由一維卷積神經(jīng)網(wǎng)絡(1DCNN)與門控循環(huán)單元網(wǎng)絡(GRU)組成.先由1DCNN 網(wǎng)絡對經(jīng)過預處理的時序數(shù)據(jù)進行一維卷積操作,提取數(shù)據(jù)在空間結構上的特征,再將提取出來的特征傳入GRU 網(wǎng)絡.經(jīng)過1DCNN 后,提取得到的特征仍具有時序特性,所以GRU 網(wǎng)絡可以有效地對這些特征進行處理,并對處理結果進行有效地預測和分類.通常,分類模型的最后一層由一個Softmax 函數(shù)激活的全連接層構成,Softmax 函數(shù)定義如下:
Softmax 函數(shù)將n個范圍在(?∞,+∞)的數(shù),映射為n個(0,1)之間的概率.同時,使用Softmax 函數(shù)可以防止數(shù)值出現(xiàn)上溢和下溢.經(jīng)過該全連接層后,輸出模型預測的分類.
本文將整個睡眠狀態(tài)細分為6 種,分別為:1)平躺保持不動;2)平躺雖有變化但仍為平躺;3)平躺變側躺;4)側躺保持不動;5)側躺雖有變化但仍為側躺;6)側躺變平躺.其中,平躺時枕頭高度應處在低位,側躺時應升至高位.
本文參與實驗的人員共有10 人,包括8 名大學生和2 名教師.圖6–圖11為2 號實驗員的其中一組數(shù)據(jù),該組數(shù)據(jù)記錄了該實驗員的6 種睡眠狀態(tài),每種睡眠狀態(tài)包含了連續(xù)16 s的頭部對枕頭的壓力值和枕頭氣囊內(nèi)的氣壓值.該數(shù)據(jù)為一維雙通道時序數(shù)據(jù),片段長度固定且該數(shù)據(jù)的一些特征在片段中的位置不具有高度相關性.
圖6 狀態(tài)1 數(shù)據(jù)曲線圖
圖7 狀態(tài)2 數(shù)據(jù)曲線圖
圖8 狀態(tài)3 數(shù)據(jù)曲線圖
圖9 狀態(tài)4 數(shù)據(jù)曲線圖
圖10 狀態(tài)5 數(shù)據(jù)曲線圖
圖11 狀態(tài)6 數(shù)據(jù)曲線圖
本文網(wǎng)絡模型搭建和訓練在PC 機上進行,處理器為IntelCorei5-7300H,內(nèi)存為8 GB,顯卡為NVIDIA GTX1050 (2 GB),使用TensorFlow和Keras 深度學習框架.
網(wǎng)絡模型的深度會很大程度地影響特征的學習.對于層數(shù)較少的淺層網(wǎng)絡,該網(wǎng)絡學習得到的特征表征能力有限,隨著層數(shù)的增加,網(wǎng)絡可以學習到表征能力更強的深度特征,可以更好地擬合復雜的特征輸入.然而,網(wǎng)絡參數(shù)量會隨著網(wǎng)絡的加深而增加,消耗更多的計算和存儲資源,而且網(wǎng)絡的加深可能會導致模型過擬合,因此需要對模型結構進行綜合考慮.
神經(jīng)網(wǎng)絡主要分為輸入層、隱藏層和輸出層.網(wǎng)絡的第一層為輸入層,在該層傳入預處理完的一幀時序數(shù)據(jù).網(wǎng)絡的輸出層由1個Softmax 全連接層構成,該層的維數(shù)等于需分類類別的個數(shù),本文一共需要識別6 種狀態(tài),所以輸出層的維數(shù)是6.
網(wǎng)絡的隱藏層共有6 層,如圖12所示,由一維卷積層、池化層和GRU 層組成.其中,隱藏層的前3 層為一維卷積層,用于提取輸入數(shù)據(jù)特征,文獻[9,10]中將層數(shù)設置為3 時,已經(jīng)有很好的效果.模型的超參數(shù)由多次實驗確定.在前兩層中,每一層定義64個卷積核用于提取特征,將卷積核大小設置為10,在第3 層中定義32個卷積核,將卷積核大小設置為5.第4 層是窗口大小為5的最大池化層,第5 層為GRU 層,將門控單元個數(shù)設置為64.優(yōu)化器選擇Adam 優(yōu)化器[11],損失函數(shù)使用交叉熵損失函數(shù).模型迭代50 次時,誤差損失函數(shù)達到收斂狀態(tài),所以將訓練次數(shù)設置為50.訓練集和測試集比例為8:2.
圖12 網(wǎng)絡模型結構
本文采用了準確率(Accuracy)、精度(Precision)、召回率(Recall)和F1 值(F1-score)對該網(wǎng)絡模型進行評價.準確率是預測正確的樣本占所有樣本的比例.精度表示預測為正樣本中,真正是正樣本的比例.召回率表示正樣本中,有多少是預測正確的正樣本.F1 值是精度和召回率的加權平均值.
其中,TP表示將正樣本預測為正樣本,FN表示將正樣本預測為負樣本,FP表示將負樣本預測為正樣本,TN表示將負樣本預測為負樣本.
對模型進行訓練和驗證后,得到混淆矩陣、召回率、精度和F1 值,如表1所示.
表1 1DCNN-GRU 模型分類結果
作為對比,使用如下的網(wǎng)絡模型,進行相同實驗,得到不同網(wǎng)絡模型的參數(shù)量和準確率,如表2所示.
表2 模型對比結果
結果表明,相比于其他3 種網(wǎng)絡模型,1DCNN-GRU和1DCNN-LSTM 模型的準確率較高,1DCNN-GRU模型參數(shù)量更少,更有利于在單片機上的應用.
從理論上看,傳入網(wǎng)絡的數(shù)據(jù)為一維雙通道時序數(shù)據(jù),1DCNN 可以學習數(shù)據(jù)在整體結構上的特征,提取數(shù)據(jù)的局部特征,組合抽象成高層特征.并且卷積層之間采用稀疏連接和權值共享的連接方式,能大幅降低參數(shù)數(shù)量,加快了學習速率.池化層降低了輸出至下一層的數(shù)據(jù)維度,進一步簡化了網(wǎng)絡的復雜度.由于經(jīng)過1DCNN 后,提取得到的特征仍具有時序特性,所以LSTM和GRU 網(wǎng)絡可以有效地處理這些特征.而且,GRU在LSTM的基礎上優(yōu)化了門結構,保持了與LSTM 相近的表現(xiàn)效果的同時,減少了模型的參數(shù)量,縮短了模型訓練的時間.
STM32CubeMX是一個圖形化工具,可以對STM32微處理器進行配置,并生成相應可執(zhí)行的初始化C 語言代碼.STM32CubeAI是STM32CubeMX的一個工具包,可以將預先訓練好的人工神經(jīng)網(wǎng)絡轉換成可以在單片機上運行的優(yōu)化代碼.
將訓練好的模型文件.h5 文件導入STM32CubeAI,并對該模型進行分析和驗證,得出模型所需的資源和部分驗證結果的混淆矩陣,如圖13和表3所示,最后生成單片機代碼工程文件,并在單片機上運行.
圖13 10 組驗證數(shù)據(jù)混淆矩陣
表3 網(wǎng)絡模型所占資源
本文針對睡姿識別任務,使用了1DCNN-GRU 網(wǎng)絡模型,在PC 機上進行訓練和驗證.接著,對比了BP、1DCNN和1DCNN-LSTM 網(wǎng)絡模型,選擇將1DCNNGRU 網(wǎng)絡模型移植至單片機,并在單片機上運行,能較好地識別睡姿.由于該實驗缺乏相關的公開數(shù)據(jù)集,數(shù)據(jù)集只包含了少量實驗人員的數(shù)據(jù),且數(shù)據(jù)量少,加之考慮到模型的移植,網(wǎng)絡模型不能太復雜,限制了網(wǎng)絡的深度,影響了該網(wǎng)絡模型的準確率,下一步的研究重點是繼續(xù)改進和優(yōu)化模型,進一步提高其準確率.