資料介紹
描述
介紹
大約 1% 的人對他們的下一次癲癇發(fā)作感到焦慮。抗驚厥藥物對至少 20% 的患者沒有幫助,而且大劑量服用還會帶來副作用。這種恐懼妨礙了執(zhí)行日常任務,例如駕駛汽車或游泳。存在可以檢測癲癇發(fā)作的設備,但我們的目標是構建一種可穿戴 EEG 設備,可以預測癲癇發(fā)作即將發(fā)生,以便護理人員和/或用戶可以暫停他們正在做的事情并采取適當?shù)?/font>預防措施.
五年前,一場Kaggle 競賽提出了開發(fā)機器學習算法以幫助預測癲癇發(fā)作事件的挑戰(zhàn)。向參賽者提供了 106 GB 的訓練數(shù)據(jù) in.mat 文件。每個訓練樣本代表 10 分鐘的原始顱內腦電圖讀數(shù)。對于 5 只狗,數(shù)據(jù)包括以 400 Hz 采樣的 16 個通道讀數(shù)。對于 2 名人類患者,在 24 個通道上以 5000 Hz 的頻率對數(shù)據(jù)進行采樣。
這是從一個頻道采樣的一小段:
醫(yī)學研究支持 4 個不同階段的概念,對應于:癲癇發(fā)作事件之間、之前、期間和之后。出于此預測任務的目的,主要挑戰(zhàn)是開發(fā)二元分類器來區(qū)分所謂的發(fā)作間期(事件之間)和發(fā)作前(事件之前)狀態(tài)。
大多數(shù)參賽者根據(jù) FFT 或通道之間的時間相關性設計經(jīng)過實驗室測試的功能,同時考慮到類似同期比賽的結果。
不受嵌入式硬件計算可行性的現(xiàn)實限制的約束,獲勝模型涉及使用各種機器學習算法訓練的復雜集成。比賽于 2014 年結束,比 Tensorflow 等框架可用于深度學習實驗早了將近一年。
自比賽以來,將卷積神經(jīng)網(wǎng)絡 (CNN) 應用于頻譜圖一直是語音和信號處理任務的一種流行方法。這借鑒了計算機視覺的成功經(jīng)驗,通過重新定義問題來識別信號時頻表示中稱為共振峰的視覺特征。
除了通過傅里葉變換實現(xiàn)正則化的好處之外,F(xiàn)FT 算法速度非??欤梢栽谫Y源有限的硬件上執(zhí)行。
CNN 也變得越來越小,因此我們將這兩種強大的算法結合起來,在嵌入式硬件上實時運行推理,通過識別發(fā)作前狀態(tài)來預測癲癇發(fā)作。
訓練我們的神經(jīng)網(wǎng)絡
我們從一些簡化的假設開始。
由于資源限制,我們不想將 10 分鐘的 16/24 通道 EEG 記錄讀入內存。相反,我們會將樣本分成 200 個 3 秒的片段。隱含地,我們假設每個人都同樣很好地代表了我們希望在區(qū)分該片段是否先于癲癇發(fā)作事件時學習的簽名。
此外,我們假設每個通道都獨立代表這些簽名。這允許我們以忽略通道之間的協(xié)方差為代價來擴展數(shù)據(jù)集。首先,我們嘗試在標準 FFT 下可視化頻譜圖:
通過試驗不同的參數(shù)選擇和 FFT 變體,我們選擇了短時傅里葉變換 ( STFT )。
為了避免重新計算這些變換,我們將圖像輸出到文件。這是在對頻率表示中的表面視覺可辨模式應用附加轉換和歸一化之后的示例。我們將圖像大小調整為 128x128 以加載更多圖像并更快地訓練。
要了解有關我們數(shù)據(jù)處理的更多信息,請參閱我們的博客文章。
為了快速探索 CNN 將帶來一些有用的東西這一想法,我們使用非常簡單的神經(jīng)網(wǎng)絡架構和Keras順序 API 設置了一個基線。我們的 vanilla CNN 包括 5x5 卷積過濾器,然后是一個 3x3 卷積層,然后通過具有 ReLU 激活的完全連接層進行展平和漏斗,以及用于額外正則化的 dropout。
def build_network():
model = Sequential()
model.add(Conv2D(32, (5, 5), input_shape=(128, 128, 1)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Flatten())
model.add(Dense(2048))
model.add(Activation('relu'))
model.add(Dropout(.5))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(.5))
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dropout(.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
adam = Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, epsilon=1e-8)
model.compile(optimizer=adam, loss='binary_crossentropy', metrics=['accuracy'])
return model
由于極端的類別不平衡,我們對發(fā)作前的例子進行了上采樣。
調用fit 方法,我們在使用幾千個樣本的訓練輸出中看到了學習的跡象。為了擴大訓練規(guī)模,我們切換到fit_generator方法來迭代我們收集的近 1000 萬張圖像。
我們發(fā)現(xiàn)我們的模型是欠擬合的,正如訓練和驗證性能相似的損失平穩(wěn)所證明的那樣:
Epoch 4/100
128/128 [==============================] - 525s 4s/step - loss: 0.6798 - acc: 0.5515 - val_loss: 0.6768 - val_acc: 0.5682
Epoch 5/100
128/128 [==============================] - 509s 4s/step - loss: 0.6769 - acc: 0.5668 - val_loss: 0.6775 - val_acc: 0.5579
Epoch 6/100
128/128 [==============================] - 532s 4s/step - loss: 0.6761 - acc: 0.5624 - val_loss: 0.6732 - val_acc: 0.5728
Epoch 7/100
128/128 [==============================] - 504s 4s/step - loss: 0.6748 - acc: 0.5714 - val_loss: 0.6706 - val_acc: 0.5803
Epoch 8/100
128/128 [==============================] - 505s 4s/step - loss: 0.6737 - acc: 0.5686 - val_loss: 0.6696 - val_acc: 0.5791
Epoch 9/100
128/128 [==============================] - 504s 4s/step - loss: 0.6733 - acc: 0.5665 - val_loss: 0.6685 - val_acc: 0.5808
Epoch 10/100
128/128 [==============================] - 504s 4s/step - loss: 0.6674 - acc: 0.5834 - val_loss: 0.6670 - val_acc: 0.5852
Epoch 11/100
128/128 [==============================] - 504s 4s/step - loss: 0.6676 - acc: 0.5782 - val_loss: 0.6669 - val_acc: 0.5863
Epoch 12/100
128/128 [==============================] - 503s 4s/step - loss: 0.6667 - acc: 0.5803 - val_loss: 0.6655 - val_acc: 0.5884
....
Epoch 99/100
128/128 [==============================] - 502s 4s/step - loss: 0.6242 - acc: 0.6316 - val_loss: 0.6317 - val_acc:
0.6271
Epoch 100/100
128/128 [==============================] - 521s 4s/step - loss: 0.6253 - acc: 0.6318 - val_loss: 0.6266 - val_acc:
0.6321
盡管如此,我們可以開始圍繞我們的簡化假設確定一些細節(jié),并探索更復雜的模型。
接下來,我們嘗試通過使用TF-Slim在 ImageNet 上預訓練的 inception_v3 架構訓練模型來進行遷移學習。
inception_v3 架構比我們上面的簡單架構具有更高的學習數(shù)據(jù)模式的能力。通過微調,許多圖像特征將適合我們的任務,即使圖像集非常不同。
經(jīng)過一段時間的訓練后,我們的模型在近 100 萬張頻譜圖圖像的平衡子集上達到了72% 的驗證準確率。一旦我們在 pi 上快速運行,我們堅信會投入時間和精力在更多數(shù)據(jù)上訓練和評估這樣的模型。
此外,我們可能會嘗試無監(jiān)督預訓練,因為一半可用的 Kaggle 數(shù)據(jù)由測試樣本組成。
更新:使用更新的 api、不同的模型架構和略有不同的預處理,我們在這個jupyter notebook中達到了更高的驗證準確性。
黑客腦電圖設備
我們嘗試了 Muse 耳機,因為Adafruit 教程將其描述為直接破解。不幸的是,制造商無法繼續(xù)支持這一點,并且引用的庫似乎已失效。
我們還找到了更實惠的Force Trainer 。但是,固件會執(zhí)行 FFT 并返回功率譜中不同波段內的值。相反,我們需要原始 EEG 信號,就像我們用來開發(fā)機器學習模型進行分析的那樣。
最后,我們選擇了NeuroSky MindWave Mobile設備。價格介于上述兩個選項之間,同時支持收集原始 EEG 信號,該產(chǎn)品看起來很有前途。我們使用這個repo從耳機中讀取原始 EEG 值。
import bluetooth
from mindwavemobile.MindwaveDataPoints import RawDataPoint
from mindwavemobile.MindwaveDataPointReader import MindwaveDataPointReader
import textwrap
if __name__ == '__main__':
mindwaveDataPointReader = MindwaveDataPointReader()
mindwaveDataPointReader.start()
try:
if (mindwaveDataPointReader.isConnected()):
while True:
dataPoint = mindwaveDataPointReader.readNextDataPoint()
if (dataPoint.__class__ is RawDataPoint): #Only want the raw vals
print(dataPoint) #printing as a test
else:
print((textwrap.dedent("""\
Exiting because the program could not connect
to the Mindwave Mobile device.""").replace("\n", " ")))
except KeyboardInterrupt:
sys.exit()
這款耳機將通過藍牙將數(shù)據(jù)傳輸?shù)轿覀兊?a href='http://wenjunhu.com/v/tag/481/' target='_blank' class='arckwlink_none'>樹莓派。然后 pi 將像我們的訓練樣本一樣格式化數(shù)據(jù)并對其進行推理以預測癲癇發(fā)作。
運行推理
在渲染圖像之前,我們在設備上應用我們的信號處理管道。
最后,如果檢測到與即將發(fā)生的癲癇發(fā)作事件相對應的特征,我們會對頻譜圖進行推理,以向用戶發(fā)出警報(通過我們原型中的壓電蜂鳴器)。
為了減少誤報,我們需要開發(fā)一個后處理工作流程,這樣用戶就不會被模型錯誤弄得筋疲力盡。一個簡單的想法是僅在某個時間窗口內的陽性計數(shù)超過憑經(jīng)驗確定的閾值后才發(fā)出警報。
使用設備,我們可以執(zhí)行數(shù)據(jù)收集,這將有助于改進我們的模型。為了進一步降低成本,可以考慮構建一個 EEG 電路,或許可以使用更少的電極。
未來,我們計劃將該模型應用于更小的低功耗設備,如Blue Pill ,它可以使用紐扣電池運行。
最后的想法
通過輕松訪問廉價硬件等資源以及開源機器學習算法和數(shù)據(jù),參與醫(yī)療設備技術的概念化和開發(fā)是一個激動人心的時刻。
我們希望激勵其他人將改變未來生活的技術產(chǎn)品化。
在這里查看我們關于這個項目的回購協(xié)議!
- 可穿戴設備的電針活動應用簡介
- 用于便攜可穿戴設備的RX8130CE
- 2023可穿戴設備行業(yè)技術與市場分析 21次下載
- 深度分析可穿戴設備:當今最火的科技
- 可穿戴設備開源分享
- 支持Twitch的簡單可穿戴設備
- SWED癲癇癥智能可穿戴設備開源分享
- 如何設計更加小巧、續(xù)航能力更強的可穿戴設備
- 可穿戴設備的設計方向與規(guī)范資料下載
- 可穿戴設備的電源方案探討資料下載
- 可穿戴設備中的電源管理技術資料下載
- ADI:可穿戴設備,醫(yī)院之外的健康衛(wèi)士 1次下載
- 基于無線模塊的可穿戴設備的應用方案 3次下載
- 使用無線模塊構建可穿戴設備 9次下載
- 移動與可穿戴設備的解決方案 25次下載
- 醫(yī)療可穿戴設備的設計需求和解決方案 2438次閱讀
- 可穿戴設備應用程序的實現(xiàn) 816次閱讀
- 可穿戴設備:滿足卓越電源管理的需求 783次閱讀
- 可穿戴設備發(fā)展歷程!醫(yī)療可穿戴設備和傳感器生態(tài)系統(tǒng)正在快速成長! 6395次閱讀
- 淺析Dialog可穿戴設備解決方案 4812次閱讀
- 如何設計一種可穿戴設備待機延長的方案 821次閱讀
- 可穿戴用戶的增長主要來自智能手表 以健康和健身追蹤器為主要功能 5382次閱讀
- 關于可穿戴設備市場的調研報告 3047次閱讀
- MEMS六軸傳感器的可穿戴設備電路設計—電路精選(37) 3940次閱讀
- 可穿戴設備氧傳感器電路解析—電路精選(35) 4543次閱讀
- 醫(yī)療可穿戴設備:如何打開慢性病困惑的“黑箱” 1139次閱讀
- 醫(yī)療可穿戴設備的6大領頭羊,都是誰? 925次閱讀
- 可穿戴設備電源設計關鍵點解析 1668次閱讀
- 簡單有效的可穿戴設備ESD靜電防護原則 2961次閱讀
- 為什么可穿戴設備如此流行? 1061次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多