一、第一阶段内容要求
- 从 PhysioNet Sleep-EDFx 公开数据集实时读取EEG/EOG/EMG,这一步我们还需要提前下载好指定的数据库,在官方网站这一条的指引也足够清楚,只需要跟随他们的指引就可以磨刀霍霍了,只不过八个g的数据确实要花很大时间
- 如果没有下好数据库就去操作,大概率会一直报错,并且pycharm的尿性会一直说是没有检测符合编号的样本,能检测到就怪了
- 用自监督模型 TS2Vec 做"无监督"预训练
- 在线推断 30-秒窗口的睡眠阶段
- 实时刷新睡眠指标(总睡眠时间、REM 占比等)
- 其实本来想要再在更为早期的部分加入ai自己在新的专业论文或者更新的互联网上能免费调用的数据库里自己寻找数据给自己更新参数的功能,但是这样其实增加运行和维护成本,本质上也需要活人负责审查数据或者论文的可靠性真实性,或者说这一套的代码也需要自己能做反向,更新别人的同时更新自己,综合考虑还是决定从这一期的内容开始考虑
二、框架考虑
1.本次代码部分我打算使用以下七个库
库 | 作用 |
---|---|
mne | 从 PhysioNet 下载、读取 .edf 睡眠记录,并把原始 EEG/EOG/EMG 信号切成 30 秒窗口给模型用。 |
numpy | 做所有底层数值计算:矩阵乘法、滑动缓存、距离度量等 |
torch | 提供张量、自动求导和 GPU 加速,让自监督模型 TS2Vec 能跑起来 |
ts2vec | 现成的自监督时序编码器;我们用它「无标签」地把 30 秒信号转成 128 维特征向量 |
sklearn.preprocessing.StandardScaler | 对每 30 秒窗口做标准化(零均值单位方差),避免不同通道幅值差异影响模型 |
collections.deque | 充当「实时缓冲区」,不断丢掉旧采样点、追加新采样点,实现 30 秒滑动窗口 |
time / datetime | 控制实时流速(sleep 1/FS 秒)和打印当前时间戳,让终端看起来像实时监测 |
整体来讲这一阶段我们粗略地解决了获取初始数据并以此为基础训练出能够实时监测用户睡眠状态下各个数据的代码