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