當前位置:首頁 > 嵌入式 > 《嵌入式技術(shù)與智能系統(tǒng)》
[導(dǎo)讀]本研究旨在開發(fā)一種在資源受限的微控制器單元(MCU)上運行的方法,用以進行鼾聲檢測。不同于使用CNN進行聲音檢測的方式,我們采用門控循環(huán)單元(GRU)模型以對音頻數(shù)據(jù)進行處理和分析。通過采用優(yōu)化模型結(jié)構(gòu)、模型量化等常用的模型優(yōu)化方式,我們最終成功將GRU模型適配到低功耗的MCU平臺,使其能夠在不依賴外部計算資源的情況下,獨立完成端側(cè)的鼾聲檢測任務(wù),無需聯(lián)網(wǎng)。實驗結(jié)果表明,該模型在保持較高準確性的同時,能夠有效降低系統(tǒng)算力需求,滿足移動健康監(jiān)測設(shè)備的實時性與便攜性要求。這一研究為鼾癥患者的持續(xù)監(jiān)測和睡眠健康管理提供了一種新的解決方案,同時也拓展了深度學(xué)習在嵌入式系統(tǒng)中的應(yīng)用前景。

1. 引言

提起打鼾,可能大家都不會陌生,打鼾是睡眠呼吸障礙的一種常見表現(xiàn),普遍存在于全球各地,影響著數(shù)百萬人的生活質(zhì)量和健康??梢哉f,打鼾是一個極端令人煩惱的生理現(xiàn)象,驗證影響睡眠質(zhì)量。對于許多患者而言,及時檢測打鼾并采取相應(yīng)措施至關(guān)重要。然而,盡管市場上已有多種方法用于鼾聲檢測,包括使用各種監(jiān)測設(shè)備和進行復(fù)雜的睡眠研究,但這些方法大多數(shù)依賴于昂貴的設(shè)備和專業(yè)的操作,這在資源有限的環(huán)境中并不實用,也難以普及到廣大需要的人群,就顯得有些空中樓閣了。因此,開發(fā)一種簡便、低成本且可靠的鼾聲檢測方法具有重要的實際意義,可以極大地提高普及度以及大眾的認可讀[1]。

近年來,人工智能在處理和分析聲音數(shù)據(jù)方面取得了顯著進展,尤其是深度學(xué)習技術(shù)已被成功應(yīng)用于各種聲音識別任務(wù),例如語音識別和異常聲音檢測。正是這些技術(shù)的進步,為更加準確、可靠的鼾聲檢測提供了新的可能性。在MCU單元上實現(xiàn)深度學(xué)習模型的嘗試,為端側(cè)的計算和邊緣智能開辟了新的可能性,使得在低成本的硬件設(shè)備上部署復(fù)雜的算法變得可行[2]。

本研究旨在探索使用深度學(xué)習架構(gòu)——門控循環(huán)單元,并對其進行輕量級設(shè)計,以實現(xiàn)對鼾聲的高效檢測。GRU模型能夠捕捉到時間序列數(shù)據(jù)中的依賴關(guān)系,如鼾聲的音頻模式,使得其更加適合實時處理和分析。選擇MCU單元作為運行平臺,不僅因為其成本低和易于集成到便攜式設(shè)備中,而且因為它適合于在資源受限的環(huán)境中操作,滿足在各種環(huán)境下對鼾聲進行實時監(jiān)測的需求。

通過將GRU模型適配到基于MCU的呼吸輔助裝置,我們可以將鼾聲檢測系統(tǒng)帶入患者的日常生活環(huán)境中,從而實現(xiàn)實時、非侵入性的監(jiān)測,提供即時反饋和必要的醫(yī)療干預(yù)。此外,該方法的發(fā)展也將推動深度學(xué)習在嵌入式系統(tǒng)中的應(yīng)用,特別是在處理生理信號和促進移動健康監(jiān)測方面,為廣泛的生物醫(yī)學(xué)應(yīng)用開辟新的道路。本文接下來將詳細介紹GRU模型的訓(xùn)練和調(diào)優(yōu)過程,以及如何實現(xiàn)在微控制器單元上部署該模型。

2. GRU模型簡介

GRU全稱Gated Recurrent Unit,直譯叫做門控回歸單元。是一種用于處理序列數(shù)據(jù)的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)模型。RNN指代遞歸神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network),是一種常用于處理序列數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)架構(gòu)[3]。與傳統(tǒng)的前饋神經(jīng)網(wǎng)絡(luò)不同,RNN具有記憶功能,非常適合于對序列數(shù)據(jù)進行處理,這是通過計算和維護狀態(tài)變量來實現(xiàn)的。相較于傳統(tǒng)的RNN,GRU具有更簡單的結(jié)構(gòu)和更高效的訓(xùn)練方式。它通過一種稱為門控機制的方式來控制信息的流動,包括更新門和重置門。這些門控機制有助于模型決定在每個時間步上應(yīng)該記住什么信息,以及應(yīng)該忘記什么信息,從而更好地處理長序列數(shù)據(jù)。GRU模型包括一個更新門和一個重置門。更新門決定了新的輸入應(yīng)如何保留,而重置門則決定了狀態(tài)信息應(yīng)如何忽略[4]。

圖1是一個GRU的框圖說明。

Figure 1. GRU model. The switch is soft, is a weighted sum of the inputs, the sum of weights is 1

1. GRU模型示意圖。開關(guān)其實是軟的,是彼此兩個輸入的帶權(quán)和,且彼此權(quán)重的和為1

接下來介紹下這兩個門控單元的工作流程。首先是重置門r,負責對狀態(tài)量H進行逐點相乘,記作r?H??? 。rH都是相同維度的向量,相乘的結(jié)果起到對記憶的信息篩選淡出的效果。之后將輸入和計算后的狀態(tài)結(jié)合成為新的候選狀態(tài)h??? 。最終將結(jié)果進行更新,更新就是通過這個z門。計算方式是z?Ht?1+(1?z)?H??????1+(1??)??? ,也就是說將上一次計算的狀態(tài)與當前的候選狀態(tài)H??? 進行加權(quán)求和,得到本次的最終狀態(tài),當然也就是下一次的Ht?1???1 。如此循環(huán)往復(fù),直到訓(xùn)練結(jié)束,得到最終的模型[5]。

此外,與長短時記憶網(wǎng)絡(luò)(LSTM)相比,GRU模型減少了參數(shù)數(shù)量,一些情況下更容易訓(xùn)練,并且在計算上也更高效。這使得GRU成為處理序列數(shù)據(jù)時的一種流行選擇。由于GRU模型的門控結(jié)構(gòu),它具有一定的記憶能力,能夠更好地捕捉時間序列中的重要特征,并且相對于傳統(tǒng)的RNN模型,GRU模型在一定程度上緩解了梯度消失的問題,從而更適合處理長序列數(shù)據(jù)。

3. 在PC上進行GRU模型的訓(xùn)練與測試

3.1. GRU模型訓(xùn)練

接下來,我們來看看如何訓(xùn)練一個GRU模型,模型訓(xùn)練平臺選用Keras,有需要的讀者請自行安裝Keras開發(fā)工具。我們這里主要給大家介紹模型搭建部分,這里假設(shè)我們的鼾聲檢測數(shù)據(jù)集已經(jīng)準備好了,并將其劃分為訓(xùn)練和測試數(shù)據(jù)集,分別命名為:(x_train, y_train), (x_test, y_test)。直接進行模型構(gòu)建與訓(xùn)練:

import tensorflow as tf

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import GRU, Dense

# 構(gòu)建GRU模型

model = Sequential()

model.add(GRU(128, input_shape=(64, 64), stateful=False, unroll=False))

model.add(Dense(2, activation='softmax'))

# 編譯模型

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

# 模型訓(xùn)練

model.fit(x_train, y_train, batch_size=128, epochs=10, validation_data=(x_test, y_test))

先看下這里所指定的輸入,(64, 64)。怎么理解呢?上文講過GRU模型實際上是每次只輸入一個維度的數(shù)據(jù),即數(shù)據(jù)應(yīng)該是(1, 64)。這里好像有點出入。這就不得不解釋下,這里的兩個64分別代表什么。前一個64表示timestep,第二個64表示音頻特征的維度。那么就可以理解為:一次訓(xùn)練,我們是一次性對64組連續(xù)的語音特征進行訓(xùn)練,這樣能夠更好的處理他們之間的相關(guān)性。這里的音頻特征是由一段固定長度時域數(shù)據(jù)提取而來。

這里需要注意的是,GRU模型構(gòu)建的時候,有兩個參數(shù),分別是stateful以及unroll,這兩個參數(shù)是什么意思呢:

stateful參數(shù):當stateful設(shè)置為True時,表示在處理連續(xù)的數(shù)據(jù)時,GRU層的狀態(tài)會被保留并傳遞到下一個時間步,而不是每個batch都重置狀態(tài)。這對于處理時間序列數(shù)據(jù)時非常有用,例如在處理長序列時,可以保持模型的狀態(tài)信息,而不是在每個batch之間重置。默認情況下,stateful參數(shù)為False。需要注意的是,若設(shè)置stateful為True,需要手動管理狀態(tài)的重置。

unroll參數(shù):默認情況下,unroll參數(shù)為False。當unroll設(shè)置為True時,表示在計算時會展開RNN的循環(huán)。通常情況下,對于較短的序列,unroll設(shè)置為True可以提高計算速度,但對于較長的序列,可能會導(dǎo)致內(nèi)存消耗過大,例如,上述模型如果unroll = True,會展開64次相同的GRU所執(zhí)行的操作,模型中包含大量節(jié)點。

我們再看看stateful參數(shù)。鼾聲信號其實是時域音頻信號,每個時間步之間實際上是存在有時間前后關(guān)系的,即前后的音頻片段之間會組成一段完整的音頻數(shù)據(jù)。因此,在實際使用時若要一次只處理單個時間步的數(shù)據(jù),就需要設(shè)置stateful為True。

3.2. GRU模型測試

上面通過訓(xùn)練,得到了一個龐然大物。之所以龐大,是因為我們采用了unroll參數(shù)將其展開,發(fā)現(xiàn)模型其實由很多相同的模型塊組成,GRU模塊如圖2所示。

而這個模型塊的數(shù)量和所設(shè)置的時間步是相關(guān)的。這里我們要給大家?guī)鞧RU模型的一個特殊性,那就是實際推理所用到的模型和訓(xùn)練時是不一樣的。具體而言,訓(xùn)練時候,我們?yōu)榱俗孏RU模型能夠更好的學(xué)習相鄰音頻之間的關(guān)系,需要將模型輸入設(shè)置為(64, 64)。而實際測試時候,由于模型已經(jīng)具備了處理相鄰音頻的能力,我們也就不再需要將模型輸入設(shè)置為(64, 64),而是將其設(shè)置為(1, 64),即每次只輸入給模型一條音頻特征,同時我們設(shè)置stateful = True (請注意,與推理時相反,訓(xùn)練的時候stateful為False!),即每次模型會記錄下當前所計算出來的狀態(tài)信息,將其用于下一次的計算。這樣化整為零,使輸入減少到了以前的1/64。隱藏狀態(tài)的計算量也就按比例一起減少了。但要注意的是,最后一步用于把隱藏狀態(tài)映射成輸出的Dense層的計算次數(shù)卻按比例增加了。不過,與減少的執(zhí)行GRU模塊的計算相比,增加的計算比減少的計算要少得多。

Figure 2. GRU model block

2. GRU模型塊

用于推理的模型構(gòu)建代碼修改如下:

# 構(gòu)建新模型

new_model = Sequential()

new_model.add(GRU(1, batch_input_shape=(1, 1, 64), unroll=True, stateful=True))

new_model.add(Dense(2, activation='softmax'))

new_model.set_weights(model.get_weights())

注意到,最后一行,有一個set_weights函數(shù),目的是將之前我們所訓(xùn)練出來的模型參數(shù)配置給這個新模型??匆幌履P偷淖兓?,如圖3所示。

Figure 3. GRU model with time-step 1

3. 時間步為1的GRU模型

圖中紅圈位置有一個AssignVariable節(jié)點,它的作用就是將本次所運行出來的狀態(tài)量進行保存,以供下次推理使用。

3.3. GRU模型量化

在模型部署前需要對模型進行量化,量化的原理就是將用浮點數(shù)表示的模型權(quán)重,映射為(?128, 127)之間的8位整數(shù)[6]。這樣做的好處是可以減小模型尺寸,可以將其縮減到之前的近1/4。再者,MCU平臺提供了對于具有8位整數(shù)類型權(quán)重的模型的推理加速能力。不過弊端就是,精度可能會有所下降,所幸的是GRU模塊大量使用有上、下確界的Sigmoid和Tanh激活函數(shù),有助于估計中間結(jié)果的值域。模型量化可以使用NXP公司所開發(fā)的eIQ工具,打開eIQPortal軟件,找到MODELTOOL,如圖4所示:

Figure 4. eIQ Portal tools

4. eIQ Portal工具

用它打開我們剛才重新制作的模型,點擊左上角的Convert選擇轉(zhuǎn)換工具為Tensor Flow Lite,并勾選Enable Quantization,如圖5所示。

Figure 5. Model quantization

5. 模型量化頁面

點擊Convert即可獲得量化后的模型。

4. GRU模型的在端側(cè)的部署

我們選用了NXP的i.MX RT1060跨界MCU部署GRU模型。

4.1. i.MX RT1060平臺簡介

i.MX RT1060跨界MCU擁有600 MHz的主頻,可以提供卓越的計算能力、多種媒體功能以及實時功能,易于使用。i.MX RT1060采用主頻達600 MHz的Cortex®-M7同時提供一流的安全保障。i.MX RT1060 MCU支持寬溫度范圍,適用于消費電子、工業(yè)和汽車市場。擁有高達1 MB片上內(nèi)存,包括512 KB的FlexRAM,能被靈活的分配為ITCM/DTCM/OCRAM。集成了高級DCDC和LDO的電源管理模塊,簡化電源序列。同時提供了多種內(nèi)存接口,包括SDRAM,RAWNAND FLASH,NORFLASH,SD/eMMC,Quad/Octal SPI,Hyper RAM/Flash以及其他接口,可以連接諸如WLAN,藍牙,GPS,displays以及攝像頭傳感器。同時具有豐富的音視頻特性,包括LCD顯示,顯示加速器,攝像頭接口,SPDIF以及I2S音頻接口。

4.2. 基于SDK中eIQTFLm工程進行模型集成

首先需要指出的是,GRU模型相較于一般基于CNN的模型相比,其模型部署方法是一致的。特別地,eIQ MODEL TOOL會把GRU模塊降解成由最基本的TensorFlowLite所支持的算子所組成的模型結(jié)構(gòu)。這樣一來,就可以使用我們的TensorFlowLite引擎進行推理了。而對應(yīng)到MCU上就是使用tflite-micro推理引擎進行推理。Tflite-micro使用一種算子注冊機制決定哪些算子的實現(xiàn)將被鏈接到最終生成的可執(zhí)行映像中。這決定了為了將模型部署到MCU上,需要根據(jù)模型所需節(jié)點來修改注冊算子的源文件。這里我們已eIQ中l(wèi)abel_image的例子作為基礎(chǔ)進行修改。找到工程中的model_ds_cnn_ops_micro.cpp文件,它就是剛才提到的注冊算子的源文件,原來的例子包含了推理label_image所需的算子,我們對其進行修改如下:

tflite::MicroOpResolver &MODEL_GetOpsResolver()

{

static tflite::MicroMutableOpResolvers_microOpResolver;

s_microOpResolver.AddAdd();

s_microOpResolver.AddAssignVariable();

s_microOpResolver.AddCallOnce();

s_microOpResolver.AddFullyConnected();

s_microOpResolver.AddLogistic();

s_microOpResolver.AddMul();

s_microOpResolver.AddReshape();

s_microOpResolver.AddReadVariable();

s_microOpResolver.AddSub();

s_microOpResolver.AddSplit();

s_microOpResolver.AddSplitV();

s_microOpResolver.AddSoftmax();

s_microOpResolver.AddTanh();

s_microOpResolver.AddUnpack();

s_microOpResolver.AddVarHandle();

return s_microOpResolver;

}

修改好之后,將模型的二進制數(shù)據(jù)轉(zhuǎn)換成符合C數(shù)組定義格式的文本形式(例如,使用xxd工具),并替換工程中model_data.h里面所包含的原始模型,就完成了所有關(guān)于模型的準備工作。當然對于數(shù)據(jù)預(yù)處理部分需要編寫對應(yīng)的MIC采集以及特征計算部分,限于篇幅本文就不再展開了。有興趣的讀者可以聯(lián)系作者。

5. 實驗驗證

選擇i.MX RT1060 EVK作為試驗平臺,整體組裝方案以及UI設(shè)計如圖6所示:

Figure 6. Overall architecture

6. 整體組裝方案

UI頁面主要分為三大顯示區(qū),分別是閾值調(diào)節(jié)區(qū):可以通過滑動條靈活的調(diào)節(jié)檢測閾值,提高系統(tǒng)的抗干擾能力;音頻特征區(qū):顯示當前音頻信號的特征圖。狀態(tài)顯示區(qū):顯示當前模型預(yù)測結(jié)果,紅燈表示為異常,綠燈表示為正常。

6. 結(jié)語

本研究實現(xiàn)了一種能夠在資源有限的微控制器單元(MCU)上運行的鼾聲檢測方法,采用門控循環(huán)單元(GRU)模型對音頻數(shù)據(jù)進行處理,并且結(jié)合模型優(yōu)化方案,例如模型結(jié)構(gòu)裁剪,模型量化等,成功將GRU模型適配到MCU平臺,使得系統(tǒng)能夠獨立完成鼾聲檢測無需依賴外界計算資源,且無需聯(lián)網(wǎng)。同時為了豐富產(chǎn)品顯示,設(shè)計了一個人機友好的UI界面,可以實時顯示系統(tǒng)識別狀態(tài),并可以調(diào)節(jié)系統(tǒng)檢測閾值等。實驗表明,該模型在保持高準確性的同時,降低了系統(tǒng)算力需求,滿足移動健康監(jiān)測設(shè)備的實時性和便攜性。這一研究為鼾癥患者提供了新的睡眠健康管理解決方案,并拓展了深度學(xué)習在嵌入式系統(tǒng)中的應(yīng)用前景。

NOTES

*通訊作者。

參考文獻

[1] Nguyen, M. and Huang, J. (2022) Snore Detection Using Convolution Neural Networks and Data Augmentation. In: Long, B.T., Kim, H.S., Ishizaki, K., Toan, N.D., Parinov, I.A. and Kim, YH., Eds., Proceedings of the International Conference on Advanced Mechanical Engineering, Automation, and Sustainable Development 2021 (AMAS2021). AMAS 2021. Lecture Notes in Mechanical Engineering. Springer, Cham.
https://doi.org/10.1007/978-3-030-99666-6_15
[2] Xie, J., Aubert, X., Long, X., van Dijk, J., Arsenali, B., Fonseca, P., et al. (2021) Audio-Based Snore Detection Using Deep Neural Networks. Computer Methods and Programs in Biomedicine, 200, Article 105917.
https://doi.org/10.1016/j.cmpb.2020.105917
[3] Goodfellow, I., Bengio, Y. and Courville, A. (2016) Deep Learning. MIT Press, 367-415.
[4] Cho, K., van Merrienboer, B., Gulcehre, C., Bahdanau, D., Bougares, F., Schwenk, H., et al. (2014). Learning Phrase Representations Using RNN Encoder-Decoder for Statistical Machine Translation. Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP), Doha, October 2014, 1724-1734.
https://doi.org/10.3115/v1/d14-1179
[5] Zhang, A., Lipton, Z.C., Li, M. and Smola, A.J. (2023) Dive into Deep Learning. Cambridge University Press.
[6] Krishnamoorthi, R. (2018) Quantizing Deep Convolutional Networks for Efficient Inference: A Whitepaper. arXiv: 1806.08342.
https://doi.org/10.48550/arXiv.1806.08342
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉