README.md 4.7 KB
Newer Older
H
Hypo 已提交
1
# candock
HypoX64's avatar
HypoX64 已提交
2
这是一个用于记录毕业设计的日志仓库,其目的是尝试多种不同的深度神经网络结构(如LSTM,RESNET,DFCNN等)对单通道EEG进行自动化睡眠阶段分期.我们相信这些代码同时可以用于其他生理信号(如ECG,EMG等)的分类.希望这将有助于您的研究.<br>
HypoX64's avatar
HypoX64 已提交
3
## 数据集
HypoX64's avatar
HypoX64 已提交
4
使用了三个睡眠数据集进行测试,分别是:   [[CinC Challenge 2018]](https://physionet.org/physiobank/database/challenge/2018/#files)    [[sleep-edf]](https://www.physionet.org/physiobank/database/sleep-edf/)   [[sleep-edfx]](https://www.physionet.org/physiobank/database/sleep-edfx/) <br>
HypoX64's avatar
HypoX64 已提交
5
对于CinC Challenge 2018数据集,使用其C4-M1通道<br>对于sleep-edfx与sleep-edf数据集,使用Fpz-Cz通道<br>
HypoX64's avatar
HypoX64 已提交
6 7 8
值得注意的是:sleep-edfx是sleep-edf的扩展版本.<br>

## 一些说明
HypoX64's avatar
HypoX64 已提交
9
* 对数据集进行的处理<br>
H
hypox64 已提交
10
  读取数据集各样本后分割为30s/Epoch作为一个输入,共有5个标签,分别是Sleep stage 3,2,1,R,W,将分割后的eeg信号与睡眠阶段标签进行一一对应<br>
HypoX64's avatar
HypoX64 已提交
11 12 13

  注意:对于sleep-edfx数据集,我们仅仅截取了入睡前30分钟到醒来后30分钟之间的睡眠区间作为读入数据(实验结果中用only sleep time 进行标注),目的是平衡各睡眠时期的比例并加快训练速度.

HypoX64's avatar
HypoX64 已提交
14 15 16 17
* 数据预处理<br>
  对于不同的网络结构,对原始eeg信号采取了预处理,使其拥有不同的shape:<br>
  LSTM:将30s的eeg信号进行FIR带通滤波,获得θ,σ,α,δ,β波,并将它们进行连接后作为输入数据<br>
  resnet_1d:这里使用resnet的一维形式进行实验,(修改nn.Conv2d为nn.Conv1d).<br>
HypoX64's avatar
HypoX64 已提交
18
  DFCNN:将30s的eeg信号进行短时傅里叶变换,并生成频谱图作为输入,并使用图像分类网络进行分类.<br>
HypoX64's avatar
HypoX64 已提交
19

HypoX64's avatar
HypoX64 已提交
20
* EEG频谱图<br>
H
hypox64 已提交
21 22 23 24 25
  这里展示5个睡眠阶段对应的频谱图,它们依次是Wake, Stage 1, Stage 2, Stage 3, REM<br>
  ![image](https://github.com/HypoX64/candock/blob/master/image/spectrum_Wake.png)
  ![image](https://github.com/HypoX64/candock/blob/master/image/spectrum_Stage1.png)
  ![image](https://github.com/HypoX64/candock/blob/master/image/spectrum_Stage2.png)
  ![image](https://github.com/HypoX64/candock/blob/master/image/spectrum_Stage3.png)
H
hypox64 已提交
26
  ![image](https://github.com/HypoX64/candock/blob/master/image/spectrum_REM.png)<br>
HypoX64's avatar
HypoX64 已提交
27

H
hypox64 已提交
28 29 30 31 32 33 34 35 36 37 38
* 关于交叉验证<br>
  为了便于与其他文献中的方法便于比较,使用了两种交叉验证方法<br>
  1.对于同一数据集,采用5倍K-fold交叉验证<br>
  2.在不同数据集间进行交叉验证<br>

* 关于评估指标<br>
  对于各标签:<br>
  accuracy = (TP+TN)/(TP+FN+TN+FP)<br>
  recall = sensitivity = (TP)/(TP+FN)<br>
  对于总体:<br>
  
HypoX64's avatar
HypoX64 已提交
39 40
* 关于代码<br>
  目前的代码仍然在不断修改与更新中,不能确保其能工作.详细内容将会在毕业设计完成后抽空更新.<br>
HypoX64's avatar
HypoX64 已提交
41
## 部分实验结果
HypoX64's avatar
HypoX64 已提交
42 43
该部分将持续更新... ...<br>
[[Confusion matrix]](https://github.com/HypoX64/candock/blob/master/image/confusion_mat)<br>
HypoX64's avatar
HypoX64 已提交
44
* sleep-edf<br>
HypoX64's avatar
HypoX64 已提交
45

HypoX64's avatar
HypoX64 已提交
46 47
  | Network        | Label average recall | Label average accuracy | error rate |
  | :------------- | :------------------- | ---------------------- | ---------- |
HypoX64's avatar
HypoX64 已提交
48
  | lstm           | 0.8342               | 0.9611                 | 0.0974     |
HypoX64's avatar
HypoX64 已提交
49
  | resnet18_1d    | 0.8434               | 0.9627                 | 0.0930     |
HypoX64's avatar
HypoX64 已提交
50
  | DFCNN+resnet18 | 0.8567               | 0.9663                 | 0.0842     |
HypoX64's avatar
HypoX64 已提交
51
  | DFCNN+resnet50 | 0.7916               | 0.9607                 | 0.0983     |
HypoX64's avatar
HypoX64 已提交
52

HypoX64's avatar
HypoX64 已提交
53
* sleep-edfx(only sleep time)<br>
HypoX64's avatar
HypoX64 已提交
54

HypoX64's avatar
HypoX64 已提交
55 56 57 58
  | Network        | Label average recall | Label average accuracy | error rate |
  | :------------- | :------------------- | ---------------------- | ---------- |
  | lstm           | 0.7864               | 0.9166                 | 0.2085     |
  | resnet18_1d    | xxxxxx               | xxxxxx                 | xxxxxx     |
HypoX64's avatar
HypoX64 已提交
59
  | DFCNN+resnet18 | 0.7844               | 0.9124                 | 0.219      |
HypoX64's avatar
HypoX64 已提交
60
  | DFCNN+resnet50 | xxxxxx               | xxxxxx                 | xxxxxx     |
HypoX64's avatar
HypoX64 已提交
61

HypoX64's avatar
HypoX64 已提交
62 63 64
* CinC Challenge 2018<br>

## 心路历程
H
hypox64 已提交
65 66
* 2019/04/01 DFCNN的运算量也忒大了,提升还不明显,还容易过拟合......真是食之无味,弃之可惜...
* 2019/04/03 花了一天更新到pytorch 1.0, 然后尝试了一下缩小输入频谱图的尺寸从而减小运算量... 
H
hypox64 已提交
67 68
* 2019/04/04 需要增加k-fold+受试者交叉验证才够严谨...
* 2019/04/05 清明节…看文献,还是按照大部分人的做法来做吧,使用5倍K-fold和数据集间的交叉验证,这样方便与其他人的方法做横向比较. 不行,这里要吐槽一下,别人做k-fold完全是因为数据集太小了…这上百Gb的数据做K-fold…真的是多此一举,结果根本不会有什么差别…完全是浪费计算资源…