Liuciba commited on
Commit
5fa7631
ยท
verified ยท
1 Parent(s): 0ab03e7

Add comprehensive README with architecture docs

Browse files
Files changed (1) hide show
  1. README.md +167 -0
README.md ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SleepStageNet - ๅŸบไบŽๅฟƒ็އ/HRV/ๅ‘ผๅธ/ไฝ“ๅŠจ็š„็ก็œ ๅˆ†ๆœŸๆจกๅž‹
2
+
3
+ ## ๐ŸŽฏ ๆฆ‚่ฟฐ
4
+
5
+ SleepStageNet ๆ˜ฏไธ€ไธชๅŸบไบŽๆทฑๅบฆๅญฆไน ็š„็ก็œ ๅˆ†ๆœŸๆจกๅž‹๏ผŒไฝฟ็”จ **4ไธช้žEEG็‰นๅพ** ่ฟ›่กŒ่‡ชๅŠจ็ก็œ ๅˆ†ๆœŸ๏ผš
6
+
7
+ | ็‰นๅพ | ่ฏดๆ˜Ž | ็”Ÿ็†ๆ„ไน‰ |
8
+ |------|------|---------|
9
+ | **HRV (RMSSD)** | ๅฟƒ็އๅ˜ๅผ‚ๆ€ง | ๅๆ˜ ่‡ชไธป็ฅž็ป็Šถๆ€๏ผˆๅ‰ฏไบคๆ„Ÿๆดปๆ€ง๏ผ‰ |
10
+ | **ๅฟƒ็އ (HR)** | ๆฏๅˆ†้’Ÿๅฟƒ่ทณๆฌกๆ•ฐ | ๅๆ˜ ๆ•ดไฝ“ๅฟƒ่ก€็ฎกๆฐดๅนณ |
11
+ | **ๅ‘ผๅธ้ข‘็އ (RR)** | ๆฏๅˆ†้’Ÿๅ‘ผๅธๆฌกๆ•ฐ | ๅๆ˜ ๅ‘ผๅธ่ฐƒ่Š‚็Šถๆ€ |
12
+ | **ไฝ“ๅŠจ (Movement)** | ่บซไฝ“ๆดปๅŠจ้‡ | ๅๆ˜ ่‚ขไฝ“่ฟๅŠจ/่ง‰้†’ |
13
+
14
+ **่พ“ๅ‡บ**๏ผšๆฏ30็ง’epoch็š„็ก็œ ๅˆ†ๆœŸ โ†’ Wake / N1 / N2 / N3 / REM
15
+
16
+ ## ๐Ÿ“ ๆžถๆž„่ฎพ่ฎก
17
+
18
+ ็ปผๅˆไบ†ไปฅไธ‹SOTA่ฎบๆ–‡็š„ๆœ€ไฝณ่ฎพ่ฎก๏ผš
19
+
20
+ ```
21
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
22
+ โ”‚ SleepStageNet โ”‚
23
+ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
24
+ โ”‚ โ”‚
25
+ โ”‚ ่พ“ๅ…ฅ: (batch, T, 4) โ† Tไธช30็ง’epoch, ๆฏไธชๆœ‰4ไธช็‰นๅพ โ”‚
26
+ โ”‚ โ”‚
27
+ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
28
+ โ”‚ โ”‚ 1. Feature Projection (ๅ‚่€ƒSleepPPG-Net) โ”‚ โ”‚
29
+ โ”‚ โ”‚ MLP: 4 โ†’ d_model*2 โ†’ d_model โ”‚ โ”‚
30
+ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
31
+ โ”‚ โ”‚ โ”‚
32
+ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
33
+ โ”‚ โ”‚ 2. Cross-Feature Attention (ๅ‚่€ƒwav2sleep) โ”‚ โ”‚
34
+ โ”‚ โ”‚ ๆฏไธช็‰นๅพ็‹ฌ็ซ‹ๆŠ•ๅฝฑ + CLS Token + Transformer โ”‚ โ”‚
35
+ โ”‚ โ”‚ ๅญฆไน  HRVโ†”HRโ†”RRโ†”Movement ็š„ไบคไบ’ๅ…ณ็ณป โ”‚ โ”‚
36
+ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
37
+ โ”‚ โ”‚ (้—จๆŽง่žๅˆ) โ”‚
38
+ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
39
+ โ”‚ โ”‚ 3. Positional Encoding โ”‚ โ”‚
40
+ โ”‚ โ”‚ ๆญฃๅผฆไฝ็ฝฎ็ผ–็  (ๆ—ถ้—ดไฝ็ฝฎๅฏน็ก็œ ็ป“ๆž„ๅพˆ้‡่ฆ) โ”‚ โ”‚
41
+ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
42
+ โ”‚ โ”‚ โ”‚
43
+ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
44
+ โ”‚ โ”‚ 4. Dilated Temporal CNN (ๅ‚่€ƒwav2sleep) โ”‚ โ”‚
45
+ โ”‚ โ”‚ 2 blocks ร— [d=1,2,4,8,16,32], k=7 โ”‚ โ”‚
46
+ โ”‚ โ”‚ ๆ„Ÿๅ—้‡Ž โ‰ˆ 6ๅฐๆ—ถ โ†’ ๆ•่ŽทๅฎŒๆ•ด็ก็œ ๅ‘จๆœŸ โ”‚ โ”‚
47
+ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
48
+ โ”‚ โ”‚ โ”‚
49
+ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
50
+ โ”‚ โ”‚ 5. Classification Head โ”‚ โ”‚
51
+ โ”‚ โ”‚ Linear(d_model โ†’ d_model/2 โ†’ n_classes) โ”‚ โ”‚
52
+ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
53
+ โ”‚ โ”‚
54
+ โ”‚ ่พ“ๅ‡บ: (batch, T, n_classes) โ† ๆฏไธชepoch็š„ๅˆ†็ฑปlogits โ”‚
55
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
56
+ ```
57
+
58
+ ### ๅ…ณ้”ฎๅˆ›ๆ–ฐ
59
+
60
+ 1. **ๅŒ่ทฏๅพ„้—จๆŽง่žๅˆ**๏ผš็ฎ€ๅ•MLPๆŠ•ๅฝฑ + ่ทจ็‰นๅพTransformerๆณจๆ„ๅŠ›็š„้—จๆŽง่žๅˆ๏ผŒๅ…ผ้กพๆ•ˆ็އๅ’Œ่กจ่พพ่ƒฝๅŠ›
61
+ 2. **้šๆœบ็‰นๅพ้ฎ่”ฝ** (ๅ‚่€ƒwav2sleep)๏ผš่ฎญ็ปƒๆ—ถไปฅ30%ๆฆ‚็އ้šๆœบmask็‰นๅพ๏ผŒๆ้ซ˜ไผ ๆ„Ÿๅ™จ็ผบๅคฑๆ—ถ็š„้ฒๆฃ’ๆ€ง
62
+ 3. **่†จ่ƒ€ๆ—ถๅบCNN** (ๅ‚่€ƒwav2sleep)๏ผšๆ„Ÿๅ—้‡Ž่ฆ†็›–โ‰ˆ6ๅฐๆ—ถ๏ผŒ่ƒฝๆ•่ŽทๅฎŒๆ•ด็š„90-120ๅˆ†้’Ÿ็ก็œ ๅ‘จๆœŸ
63
+ 4. **Per-patient Z-scoreๆ ‡ๅ‡†ๅŒ–** (ๅ‚่€ƒSleepPPG-Net)๏ผšๆถˆ้™คไธชไฝ“ๅŸบ็บฟๅทฎๅผ‚๏ผŒ่ฟ™ๆ˜ฏๆœ€ๅ…ณ้”ฎ็š„้ข„ๅค„็†ๆญฅ้ชค
64
+
65
+ ## ๐Ÿ“Š ๆจกๅž‹้…็ฝฎ
66
+
67
+ | ้…็ฝฎ | d_model | ๅ‚ๆ•ฐ้‡ | Epoch Mixer | Sequence Mixer | ้€‚็”จๅœบๆ™ฏ |
68
+ |------|---------|--------|-------------|----------------|---------|
69
+ | small | 64 | ~195K | 1ๅฑ‚ Transformer | 1 block, d=[1,2,4,8,16] | ๅฟซ้€Ÿๅฎž้ชŒ |
70
+ | **base** | 128 | **~2M** | 2ๅฑ‚ Transformer | 2 blocks, d=[1,2,4,8,16,32] | **ๆŽจ่** |
71
+ | large | 256 | ~13.7M | 3ๅฑ‚ Transformer | 3 blocks, d=[1,2,4,8,16,32,64] | ๆœ€ไฝณๆ€ง่ƒฝ |
72
+
73
+ ## ๐Ÿ”ฌ ๅ‚่€ƒๆ–‡็Œฎ
74
+
75
+ | ่ฎบๆ–‡ | ่ดก็Œฎ | ๅนดไปฝ |
76
+ |------|------|------|
77
+ | [wav2sleep](https://arxiv.org/abs/2411.04644) | Epoch Mixer + Sequence Mixer + ้šๆœบๆจกๆ€้ฎ่”ฝ | 2024 |
78
+ | [Cross-Modal Transformer](https://arxiv.org/abs/2208.06991) | ่ทจๆจกๆ€ๆณจๆ„ๅŠ› + ๅŠ ๆƒไบคๅ‰็†ต [1,2,1,2,2] | 2022 |
79
+ | [SleepPPG-Net](https://arxiv.org/abs/2202.05735) | Per-patient Z-score + BiLSTM FEๅŸบ็บฟ | 2022 |
80
+ | [Mamba-sleep](https://arxiv.org/abs/2412.15947) | ่ฝป้‡Mambaๅบๅˆ—ๅปบๆจก + ้€†้ข‘็އๅŠ ๆƒ | 2024 |
81
+
82
+ ## ๐Ÿš€ ๅฟซ้€Ÿไฝฟ็”จ
83
+
84
+ ### ๅฎ‰่ฃ…ไพ่ต–
85
+
86
+ ```bash
87
+ pip install torch numpy
88
+ ```
89
+
90
+ ### ๆŽจ็†็คบไพ‹
91
+
92
+ ```python
93
+ import numpy as np
94
+ import torch
95
+ from sleep_staging_model import create_model
96
+
97
+ # ๅˆ›ๅปบๆจกๅž‹
98
+ model = create_model('base', n_features=4, n_classes=4)
99
+
100
+ # ๅ‡†ๅค‡่พ“ๅ…ฅๆ•ฐๆฎ: Tไธช30็ง’epoch็š„็‰นๅพ
101
+ T = 1200 # 10ๅฐๆ—ถ = 1200ไธชepoch
102
+ features = np.stack([
103
+ hrv_rmssd, # HRV (RMSSD) ๅบๅˆ—
104
+ heart_rate, # ๅฟƒ็އๅบๅˆ—
105
+ respiratory_rate, # ๅ‘ผๅธ้ข‘็އๅบๅˆ—
106
+ body_movement, # ไฝ“ๅŠจๅบๅˆ—
107
+ ], axis=-1) # shape: (T, 4)
108
+
109
+ # Z-scoreๆ ‡ๅ‡†ๅŒ– (ๅ…ณ้”ฎๆญฅ้ชค!)
110
+ features = (features - features.mean(axis=0)) / (features.std(axis=0) + 1e-8)
111
+ features = np.clip(features, -5, 5)
112
+
113
+ # ๆŽจ็†
114
+ x = torch.tensor(features, dtype=torch.float32).unsqueeze(0) # (1, T, 4)
115
+ model.eval()
116
+ with torch.no_grad():
117
+ logits = model(x) # (1, T, n_classes)
118
+ predictions = torch.argmax(logits, dim=-1) # (1, T)
119
+
120
+ # ๆ ‡็ญพ: 0=Wake, 1=N1, 2=N2, 3=N3, 4=REM
121
+ stage_names = {0: 'Wake', 1: 'N1', 2: 'N2', 3: 'N3', 4: 'REM'}
122
+ ```
123
+
124
+ ### ่ฎญ็ปƒ
125
+
126
+ ```bash
127
+ python train_sleep_staging.py --model base --batch_size 16 --lr 1e-3 --max_epochs 100
128
+ ```
129
+
130
+ ## ๐Ÿ“‹ ่ฎญ็ปƒ้…็ฝฎ (ๆฅ่‡ชๆ–‡็Œฎๆœ€ไฝณๅฎž่ทต)
131
+
132
+ | ่ถ…ๅ‚ๆ•ฐ | ๅ€ผ | ๆฅๆบ |
133
+ |--------|------|------|
134
+ | Optimizer | AdamW | wav2sleep |
135
+ | Learning Rate | 1e-3 | wav2sleep |
136
+ | Weight Decay | 1e-2 | wav2sleep |
137
+ | Batch Size | 16 (ๆ•ดๅคœ) | wav2sleep |
138
+ | LR Schedule | OneCycleLR (10% warmup + cosine) | ๆ”น่ฟ›่‡ชwav2sleep |
139
+ | Loss | Weighted Focal Loss (ฮณ=2) | Cross-Modal Transformer + Focal |
140
+ | Class Weights | ้€†้ข‘็އๅŠ ๆƒ | Mamba-sleep |
141
+ | Early Stopping | patience=10 | wav2sleep (5) |
142
+ | Gradient Clip | max_norm=1.0 | ๆ ‡ๅ‡†ๅฎž่ทต |
143
+ | Augmentation | ้šๆœบ็ฟป่ฝฌ(p=0.5) + ๅ™ชๅฃฐ(p=0.3) | wav2sleep |
144
+ | Feature Mask | p=0.3 | wav2sleep |
145
+
146
+ ## ๐Ÿ“Š ๆ•ฐๆฎ้›†
147
+
148
+ ่ฎญ็ปƒๆ•ฐๆฎ: [`abmallick/heart-breath-sleep-stage-dataset`](https://huggingface.co/datasets/abmallick/heart-breath-sleep-stage-dataset)
149
+
150
+ - 30็ง’epoch็ฒ’ๅบฆ
151
+ - ๅŒ…ๅซๅฟƒ็އใ€ๅ‘ผๅธ้ข‘็އใ€HRVๆŒ‡ๆ ‡
152
+ - 485+ๅคœ็ก็œ ่ฎฐๅฝ•
153
+ - 4็ฑปๆ ‡ๆณจ: Wake, N1, N2, N3
154
+
155
+ ## ๆœŸๆœ›ๆ€ง่ƒฝ (ๅŸบไบŽๆ–‡็Œฎ)
156
+
157
+ | ๆŒ‡ๆ ‡ | 4็ฑป (ๆ— REM) | 5็ฑป (ๅซREM) |
158
+ |------|------------|------------|
159
+ | Cohen's ฮบ | 0.55-0.65 | 0.50-0.60 |
160
+ | Accuracy | 70-80% | 65-75% |
161
+ | F1 (macro) | 0.50-0.65 | 0.45-0.60 |
162
+
163
+ > ๆณจ: ้žEEG็‰นๅพ็š„็ก็œ ๅˆ†ๆœŸๆ€ง่ƒฝ้€šๅธธไฝŽไบŽEEG-basedๆ–นๆณ•(ฮบโ‰ˆ0.75+)๏ผŒ่ฟ™ๆ˜ฏ่ฏฅ้ข†ๅŸŸ็š„ๅ›บๆœ‰้™ๅˆถใ€‚
164
+
165
+ ## License
166
+
167
+ MIT