余益臻,任 佳,劉 瑜,郭力寧
1(浙江理工大學 機械與自動控制學院,杭州 310018)
2(深圳市深智杰科技有限公司,深圳 518102)
睡眠約占人生命總時長的三分之一,隨著生活節奏的加快,越來越多的人飽受睡眠問題的困擾,睡眠質量不好是危害健康的一大隱患[1].越來越多的流行病學證據支持睡眠時間短與肥胖和糖尿病風險之間的聯系.與行為或睡眠障礙有關的慢性睡眠喪失,可能是體重增加、胰島素抵抗和2 型糖尿病的一個新的危險因素[2].有關研究表明,人側躺時睡枕的高度應大于平躺時的高度[3],以減輕側躺時肩部承受的壓力.因此,需要設計一種能根據睡姿來調整高度的枕頭來改善睡眠質量.于是,如何有效地識別人體平躺和側躺這兩種睡姿就成了解決該問題的關鍵.
目前,對于人體睡姿識別的研究還比較少,已知的睡姿識別方法有基于睡姿圖像技術,即攝像頭采集人體睡眠時的圖像,通過數字圖像處理和機器學習算法對該圖像進行分類[4],識別出此時人體的睡姿.也有通過置于床墊中的陣列式壓力傳感器,采集人體壓力分布,來識別當前睡姿[5].然而,以上兩種方案存在著一些不足和需要改進的地方.首先,通過攝像頭采集睡姿圖像的方法,涉及了用戶隱私,以及當人體被物體遮蓋時(如臉被頭發遮擋,身體被被子遮蓋),識別錯誤的問題.其次,采集人體壓力分布的方法,置于床墊中的陣列式壓力傳感器面積大,傳感器損耗大,且精度要求高,整個系統成本較高.
針對上述問題,本文提出了一種基于深度學習的自適應睡枕設計方案.通過枕頭內部的壓力傳感器和氣壓傳感器,分別采集頭部對枕頭的壓力和枕頭氣囊內的氣壓,生成時間序列數據幀,并利用深度學習方法,自動學習深度特征,解決睡姿識別問題.
自適應睡枕的設計主要分為兩個部分:硬件平臺設計和睡姿識別算法的設計.
系統硬件平臺的總體設計如圖1所示,主控芯片選用意法半導體(ST) 公司的STM32F407ZGT6,該MCU 采用ARM Cortex-M4 架構,主頻高達168 MHz,帶有FPU,具有強大的浮點運算能力.MCU 主要負責處理傳感器采集到的數據,根據識別的結果去控制執行器,并每隔一段時間數據寫入外部Flash,還通過藍牙與手機APP 通信.傳感器有壓力傳感器和氣壓傳感器,分別使用HX711 模塊的壓力傳感器,XGZP6847 氣壓計模塊,用于采集頭部對枕頭的壓力和置于枕頭內部氣囊的氣壓.執行器為氣泵和氣閥,分別選擇5 V 微型充氣泵和5 V 微型電磁氣閥,用于控制氣囊的充放氣,達到調整枕頭至對應高度的目的.主控芯片通過低功耗HC-42 藍牙5.0BLE 模塊與手機進行通信,手機APP 可實現對枕頭高度的設定、固件程序的升級,以及提取儲存在Flash中的數據并生成txt 文件.

圖1 硬件平臺示意圖
通常,自然界中的大部分信號都存在噪聲,而直接采集所得的壓力和氣壓原始數據包含了各種噪聲,會對后續的工作產生影響,因此,需要對壓力和氣壓原始數據進行預處理.首先,將數據進行均值濾波,去除尖銳噪聲.再將數據進行標準化,將數據限定在一定的范圍內,消除奇異樣本數據的影響,并且有效提升模型的收斂速度.

然后將每8 s的數據生成一幀時序數據,每兩幀數據間的時間重疊為4 s.因數據采樣頻率為10 Hz,每次采樣得到1個壓力值和1個氣壓值,所以每一幀時序數據包含了80個壓力數據和80個氣壓數據,如圖2所示.

圖2 一幀數據示意圖

其中,X為一幀時序數據,xi為i時刻的數據,xi∈R2,pih為i時刻的壓力值,pig為i時刻的氣壓值.
最后將一幀時序數據作為神經網絡的輸入,該數據為一維雙通道時序數據,須選擇合適網絡模型對其進行特征提取和預測分類.
卷積神經網絡(CNN)是一種處理具有類似網格結構的數據的神經網絡,與傳統人工神經網絡結構不同,CNN 包含了卷積層和池化層.卷積層之間采用稀疏連接和權值共享的連接方式,可大幅降低參數數量[6],加快了學習速率.池化層降低了輸出至下一層的數據維度,簡化了網絡的復雜度,同時也在一定程度上減少了過擬合的可能.
與二維、三維卷積神經網絡相比,對于固定長度片段的數據,且該數據的一些特征在片段中的位置不具有高度相關性時,一維卷積神經網絡(1DCNN)可以有效地將這些特征提取出來.本文中每個通道的數據為一維數據,1DCNN的卷積核朝一個方向移動,如圖3箭頭所示.一維卷積運算公式如下:

圖3 1DCNN 卷積操作

其中,s(n)為卷積后的序列,f為待卷積的離散信號,g為卷積核,N是信號f的長度.為了去除冗余信息,簡化網絡復雜度,防止數據過擬合,需在一維卷積層后添加池化層.
循環神經網絡(RNN)是專門用于處理序列的神經網絡,長短期記憶網絡(LSTM)是一種特殊的RNN,是為了解決RNN 梯度消失和梯度爆炸而提出的.在傳統的RNN中,訓練算法使用的是BPTT,當時間比較長時,需要回傳的殘差會指數下降,導致網絡權重更新緩慢,無法體現出RNN的長期記憶的效果,需要一個存儲記憶的單元,因此,LSTM 模型被提出.
LSTM 單元結構如圖4所示,t?1表示上一時刻,t表示當前時刻.LSTM的核心在于,每個LSTM 單元的長期記憶中的信息狀態(cell state).LSTM 通過設置3個門來控制長期記憶中的信息,這3個門分別是:遺忘門(forget gate)、輸入門(input gate)和輸出門(output gate)[7].門由一個Sigmoid 層和一個點乘操作組成,可以讓信息選擇性保留.

圖4 LSTM 單元結構
遺忘門可以決定清除或保留長期記憶中的信息.

在Sigmoid 層輸入上一時刻的隱含狀態ht?1和當前時刻的輸入xt,由循環權重Wf、輸入權重Uf和偏置bf,可以計算得到一個0 與1 之間的數ft,來決定上一時刻需要保留的信息量.
輸入門決定了當前時刻被存進長期記憶中的信息.

在tanh 層輸入上一時刻的隱含狀態ht?1和當前時刻的輸入xt,tanh 激活函數可以將輸出值限制在?1和+1 之間,輸出一個新的向量,表示當前時刻待存儲的信息.同樣地,ht?1和xt經過一個Sigmoid 層,計算得到it來決定中需被存儲的信息量.Ct表示經過遺忘門和輸入門添加了一部分新信息后,當前時刻長期記憶中的信息.
LSTM 單元的輸出,即當前時刻的隱含狀態ht,取決于Ct和輸出門.

將Ct輸入至一個tanh 層,得到一個待輸出量.同樣地,將在Sigmoid 層輸入ht?1和xt,計算得到ot來決定輸出,最后得到該LSTM 單元的輸出ht.
門控循環單元網絡(GRU)是一種特殊的RNN,是LSTM的一個變種,如圖5所示,與LSTM 主要不同之處在于,GRU 單個門控單元同時控制遺忘因子和更新狀態單元的決定.GRU 將LSTM的遺忘門、輸入門和輸出門進行了改動,變為更新門(update gate)和重置門(reset gate).在很多情況下,GRU 實際表現效果與LSTM 接近,而GRU 模型比LSTM 模型更簡單,能夠有效減少模型消耗的資源[8].

圖5 GRU 結構
重置門和更新門的計算公式如下:

更新門用于控制上一時刻的狀態信息被保留至當前狀態中的程度,更新門的值越大表示上一時刻的狀態信息保留越多.重置門用于控制忽略前一時刻的狀態信息的程度,重置門的值越大表示忽略越少.

與LSTM中的一些功能類似,重置門控制的上一時刻的信息量ht?1需 要被保留.更新門控制ht?1中需要
丟棄的信息和h~t中多少信息會被保留,最后得到該GRU單元的輸出ht.
本文采用的1DCNN-GRU 網絡模型,由一維卷積神經網絡(1DCNN)與門控循環單元網絡(GRU)組成.先由1DCNN 網絡對經過預處理的時序數據進行一維卷積操作,提取數據在空間結構上的特征,再將提取出來的特征傳入GRU 網絡.經過1DCNN 后,提取得到的特征仍具有時序特性,所以GRU 網絡可以有效地對這些特征進行處理,并對處理結果進行有效地預測和分類.通常,分類模型的最后一層由一個Softmax 函數激活的全連接層構成,Softmax 函數定義如下:

Softmax 函數將n個范圍在(?∞,+∞)的數,映射為n個(0,1)之間的概率.同時,使用Softmax 函數可以防止數值出現上溢和下溢.經過該全連接層后,輸出模型預測的分類.
本文將整個睡眠狀態細分為6 種,分別為:1)平躺保持不動;2)平躺雖有變化但仍為平躺;3)平躺變側躺;4)側躺保持不動;5)側躺雖有變化但仍為側躺;6)側躺變平躺.其中,平躺時枕頭高度應處在低位,側躺時應升至高位.
本文參與實驗的人員共有10 人,包括8 名大學生和2 名教師.圖6–圖11為2 號實驗員的其中一組數據,該組數據記錄了該實驗員的6 種睡眠狀態,每種睡眠狀態包含了連續16 s的頭部對枕頭的壓力值和枕頭氣囊內的氣壓值.該數據為一維雙通道時序數據,片段長度固定且該數據的一些特征在片段中的位置不具有高度相關性.

圖6 狀態1 數據曲線圖

圖7 狀態2 數據曲線圖

圖8 狀態3 數據曲線圖

圖9 狀態4 數據曲線圖

圖10 狀態5 數據曲線圖

圖11 狀態6 數據曲線圖
本文網絡模型搭建和訓練在PC 機上進行,處理器為IntelCorei5-7300H,內存為8 GB,顯卡為NVIDIA GTX1050 (2 GB),使用TensorFlow和Keras 深度學習框架.
網絡模型的深度會很大程度地影響特征的學習.對于層數較少的淺層網絡,該網絡學習得到的特征表征能力有限,隨著層數的增加,網絡可以學習到表征能力更強的深度特征,可以更好地擬合復雜的特征輸入.然而,網絡參數量會隨著網絡的加深而增加,消耗更多的計算和存儲資源,而且網絡的加深可能會導致模型過擬合,因此需要對模型結構進行綜合考慮.
神經網絡主要分為輸入層、隱藏層和輸出層.網絡的第一層為輸入層,在該層傳入預處理完的一幀時序數據.網絡的輸出層由1個Softmax 全連接層構成,該層的維數等于需分類類別的個數,本文一共需要識別6 種狀態,所以輸出層的維數是6.
網絡的隱藏層共有6 層,如圖12所示,由一維卷積層、池化層和GRU 層組成.其中,隱藏層的前3 層為一維卷積層,用于提取輸入數據特征,文獻[9,10]中將層數設置為3 時,已經有很好的效果.模型的超參數由多次實驗確定.在前兩層中,每一層定義64個卷積核用于提取特征,將卷積核大小設置為10,在第3 層中定義32個卷積核,將卷積核大小設置為5.第4 層是窗口大小為5的最大池化層,第5 層為GRU 層,將門控單元個數設置為64.優化器選擇Adam 優化器[11],損失函數使用交叉熵損失函數.模型迭代50 次時,誤差損失函數達到收斂狀態,所以將訓練次數設置為50.訓練集和測試集比例為8:2.

圖12 網絡模型結構
本文采用了準確率(Accuracy)、精度(Precision)、召回率(Recall)和F1 值(F1-score)對該網絡模型進行評價.準確率是預測正確的樣本占所有樣本的比例.精度表示預測為正樣本中,真正是正樣本的比例.召回率表示正樣本中,有多少是預測正確的正樣本.F1 值是精度和召回率的加權平均值.

其中,TP表示將正樣本預測為正樣本,FN表示將正樣本預測為負樣本,FP表示將負樣本預測為正樣本,TN表示將負樣本預測為負樣本.
對模型進行訓練和驗證后,得到混淆矩陣、召回率、精度和F1 值,如表1所示.

表1 1DCNN-GRU 模型分類結果
作為對比,使用如下的網絡模型,進行相同實驗,得到不同網絡模型的參數量和準確率,如表2所示.

表2 模型對比結果
結果表明,相比于其他3 種網絡模型,1DCNN-GRU和1DCNN-LSTM 模型的準確率較高,1DCNN-GRU模型參數量更少,更有利于在單片機上的應用.
從理論上看,傳入網絡的數據為一維雙通道時序數據,1DCNN 可以學習數據在整體結構上的特征,提取數據的局部特征,組合抽象成高層特征.并且卷積層之間采用稀疏連接和權值共享的連接方式,能大幅降低參數數量,加快了學習速率.池化層降低了輸出至下一層的數據維度,進一步簡化了網絡的復雜度.由于經過1DCNN 后,提取得到的特征仍具有時序特性,所以LSTM和GRU 網絡可以有效地處理這些特征.而且,GRU在LSTM的基礎上優化了門結構,保持了與LSTM 相近的表現效果的同時,減少了模型的參數量,縮短了模型訓練的時間.
STM32CubeMX是一個圖形化工具,可以對STM32微處理器進行配置,并生成相應可執行的初始化C 語言代碼.STM32CubeAI是STM32CubeMX的一個工具包,可以將預先訓練好的人工神經網絡轉換成可以在單片機上運行的優化代碼.
將訓練好的模型文件.h5 文件導入STM32CubeAI,并對該模型進行分析和驗證,得出模型所需的資源和部分驗證結果的混淆矩陣,如圖13和表3所示,最后生成單片機代碼工程文件,并在單片機上運行.

圖13 10 組驗證數據混淆矩陣

表3 網絡模型所占資源
本文針對睡姿識別任務,使用了1DCNN-GRU 網絡模型,在PC 機上進行訓練和驗證.接著,對比了BP、1DCNN和1DCNN-LSTM 網絡模型,選擇將1DCNNGRU 網絡模型移植至單片機,并在單片機上運行,能較好地識別睡姿.由于該實驗缺乏相關的公開數據集,數據集只包含了少量實驗人員的數據,且數據量少,加之考慮到模型的移植,網絡模型不能太復雜,限制了網絡的深度,影響了該網絡模型的準確率,下一步的研究重點是繼續改進和優化模型,進一步提高其準確率.