bruAristimunha commited on
Commit
c801f25
·
verified ·
1 Parent(s): 539135e

Replace with clean markdown card

Browse files
Files changed (1) hide show
  1. README.md +25 -221
README.md CHANGED
@@ -13,13 +13,12 @@ tags:
13
 
14
  # EEGSym
15
 
16
- EEGSym from Pérez-Velasco et al (2022) .
17
 
18
- > **Architecture-only repository.** This repo documents the
19
  > `braindecode.models.EEGSym` class. **No pretrained weights are
20
- > distributed here** instantiate the model and train it on your own
21
- > data, or fine-tune from a published foundation-model checkpoint
22
- > separately.
23
 
24
  ## Quick start
25
 
@@ -38,239 +37,44 @@ model = EEGSym(
38
  )
39
  ```
40
 
41
- The signal-shape arguments above are example defaults — adjust them
42
- to match your recording.
43
 
44
  ## Documentation
45
-
46
- - Full API reference (parameters, references, architecture figure):
47
- <https://braindecode.org/stable/generated/braindecode.models.EEGSym.html>
48
- - Interactive browser with live instantiation:
49
  <https://huggingface.co/spaces/braindecode/model-explorer>
50
  - Source on GitHub: <https://github.com/braindecode/braindecode/blob/master/braindecode/models/eegsym.py#L16>
51
 
52
- ## Architecture description
53
-
54
- The block below is the rendered class docstring (parameters,
55
- references, architecture figure where available).
56
-
57
- <div class='bd-doc'><main>
58
- <p>EEGSym from Pérez-Velasco et al (2022) [eegsym2022]_.</p>
59
- <span style="display:inline-block;padding:2px 8px;border-radius:4px;background:#5cb85c;color:white;font-size:11px;font-weight:600;margin-right:4px;">Convolution</span>
60
-
61
- :bdg-dark-line:`Channel`
62
-
63
- .. figure:: ../../docs/_static/model/eegsym.png
64
- :align: center
65
- :alt: EEGSym Architecture
66
-
67
-
68
- The **EEGSym** is a novel Convolutional Neural Network (CNN) architecture designed for
69
- Motor Imagery (MI) based Brain-Computer Interfaces (BCIs), primarily aimed at
70
- **overcoming inter-subject variability** and significantly **reducing BCI inefficiency**
71
- [eegsym2022]_.
72
-
73
- The architecture integrates advances from Deep Learning (DL), complemented by
74
- Transfer Learning (TL) techniques and Data Augmentation (DA), to achieve strong
75
- performance in inter-subject MI classification [eegsym2022]_.
76
-
77
- .. rubric:: Architectural Overview
78
-
79
- EEGSym systematically incorporates three core features:
80
-
81
- #. **Inception Modules** for multi-scale temporal analysis [eegsym2022]_.
82
- #. **Residual Connections** maintain spatio-temporal signal structure and
83
- enable deeper feature extraction [eegsym2022]_.
84
- #. A **Siamese-network design** exploits the inherent symmetry of the brain
85
- across the mid-sagittal plane [eegsym2022]_.
86
-
87
- .. rubric:: Macro Components
88
-
89
- - `EEGSym.symmetric_division` **(Input Processing)**
90
- - *Operations.* The input is virtually split into left, right, and middle channels.
91
- Middle (central) channels are duplicated and concatenated to both left
92
- and right lateralized electrodes to form the two hemisphere inputs [eegsym2022]_.
93
- - *Role.* Prepares the data for the siamese-network approach,
94
- reducing the number of parameters in the spatial filters
95
- for the tempospatial analysis stage [eegsym2022]_.
96
-
97
- - `EEGSym.inception_block` **(Tempospatial Analysis - Temporal Feature Extraction)**
98
- - *Operations.* Uses :class:`_InceptionBlock` modules, which apply parallel
99
- temporal convolutions with different kernel sizes (scales) [eegsym2022]_.
100
- This is followed by concatenation, residual connections, and average
101
- pooling for temporal dimensionality reduction [eegsym2022]_.
102
- - *Role.* Captures detailed temporal relationships in the architecture,
103
- similarly to :class:`~braindecode.models.eeginception_mi.EEGInceptionMI`
104
- [eeginception2020]_. The first block uses large temporal kernels
105
- (e.g., 500 ms, 250 ms, 125 ms) [eegsym2022]_.
106
-
107
- - `EEGSym.residual_blocks` **(Tempospatial Analysis - Spatial Feature Extraction)**
108
- - *Operations.* Composed of multiple :class:`_ResidualBlock` modules (typically three instances)
109
- [eegsym2022]_. Each block applies temporal convolution, pooling, and a spatial analysis layer
110
- (convolution or grouped convolution) [eegsym2022]_.
111
- - *Role.* Enhances spatial feature extraction by incorporating residual
112
- connections across all CNN stages, which helps maintain the spatio-temporal
113
- structure of the signal through deeper layers [eegsym2022]_.
114
-
115
- - `EEGSym.channel_merging` **(Hemisphere Merging)**
116
- - *Operations.* The :class:`_ChannelMergingBlock` reduces the spatial dimensionality
117
- (Z and C) to 1, performing two residual convolutions followed by a final grouped
118
- convolution that merges the feature information from the two hemispheres [eegsym2022]_.
119
- - *Role.* Extracts complex relationships between channels of both hemispheres as part of the
120
- symmetry exploitation [eegsym2022]_.
121
-
122
- - `EEGSym.temporal_merging` **(Temporal Collapse)**
123
- - *Operations.* The :class:`_TemporalMergingBlock` uses residual convolution
124
- followed by grouped convolution to reduce the temporal dimension (S) to 1 [eegsym2022]_.
125
- - *Role.* Final step of temporal aggregation before the output module [eegsym2022]_.
126
-
127
- - `EEGSym.output_blocks` **(Output Processing)**
128
- - *Operations.* The :class:`_OutputBlock` applies four residual convolution iterations
129
- (1x1x1 convolutions) followed by flattening [eegsym2022]_.
130
- - *Role.* Final feature refinement through residual connections before the
131
- fully connected classification layer [eegsym2022]_.
132
-
133
- .. rubric:: How the information is encoded temporally, spatially, and spectrally
134
-
135
- * **Temporal.**
136
- Temporal features are extracted across multiple scales in the inception modules
137
- using different temporal convolution kernel sizes (e.g., corresponding to
138
- 500 ms, 250 ms, and 125 ms windows for a 128 Hz sampling rate), very similar to [eeginception2020]_.
139
- Subsequent pooling operations and residual blocks continue to reduce the temporal dimension
140
- [eegsym2022]_.
141
-
142
- * **Spatial.**
143
-
144
- Spatial features are extracted via two main mechanisms:
145
-
146
- - (1) The **siamese-network design** implicitly introduces brain symmetry by treating the two hemispheres
147
- equally during feature extraction [eegsym2022]_.
148
- - (2) **Residual connections** are utilized in the Tempospatial Analysis stage to enhance the extraction of
149
- spatial correlations between electrodes [eegsym2022]_.
150
-
151
- * **Spectral.**
152
- Spectral information is implicitly captured by the varying kernel sizes of the temporal convolutions
153
- in the inception modules [eegsym2022]_. These kernels filter the signal across different temporal windows,
154
- corresponding to different frequency characteristics.
155
-
156
- Notes
157
- -----
158
- * EEGSym achieved competitive accuracies across five large MI datasets [eegsym2022]_.
159
- * The model maintained high accuracy using a reduced set of electrodes (8 or 16 channels)
160
- [eegsym2022]_.
161
- * This is PyTorch implementation of the EEGSym model of the TensorFlow original [eegsym2022code]_.
162
-
163
- Parameters
164
- ----------
165
- filters_per_branch : int, optional
166
- Number of filters in each inception branch. Should be a multiple of 8.
167
- Default is 12 [eegsym2022]_.
168
- scales_time : tuple of int, optional
169
- Temporal scales (in milliseconds) for the temporal convolutions in the first
170
- inception module. Default is (500, 250, 125) [eegsym2022]_.
171
- drop_prob : float, optional
172
- Dropout probability. Default is 0.25 [eegsym2022]_.
173
- activation : type[nn.Module], optional
174
- Activation function class to use. Default is :class:`nn.ELU` [eegsym2022]_.
175
- spatial_resnet_repetitions : int, optional
176
- Number of repetitions of the spatial analysis operations at each step.
177
- Default is 5 [eegsym2022]_.
178
- left_right_chs : list of tuple of str, optional
179
- List of tuples pairing left and right hemisphere channel names,
180
- e.g., ``[('C3', 'C4'), ('FC5', 'FC6')]``. If not provided, channels
181
- are automatically split into left/right hemispheres using
182
- :func:`~braindecode.datautil.channel_utils.division_channels_idx` and
183
- :func:`~braindecode.datautil.channel_utils.match_hemisphere_chans`.
184
- Must be provided together with ``middle_chs`` [eegsym2022]_.
185
- middle_chs : list of str, optional
186
- List of midline (central) channel names that lie on the mid-sagittal plane,
187
- e.g., ``['FZ', 'CZ', 'PZ']``. These channels are duplicated and concatenated
188
- to both hemispheres. If not provided, channels are automatically identified
189
- using :func:`~braindecode.datautil.channel_utils.division_channels_idx`.
190
- Must be provided together with ``left_right_chs`` [eegsym2022]_.
191
-
192
- References
193
- ----------
194
- .. [eegsym2022] Pérez-Velasco, S., Santamaría-Vázquez, E., Martínez-Cagigal, V.,
195
- Marcos-Martínez, D., & Hornero, R. (2022). EEGSym: Overcoming inter-subject
196
- variability in motor imagery based BCIs with deep learning. IEEE Transactions
197
- on Neural Systems and Rehabilitation Engineering, 30, 1766-1775.
198
- .. [eegsym2022code] Pérez-Velasco, S., EEGSym source code.
199
- https://github.com/Serpeve/EEGSym
200
- .. [eeginception2020] Santamaría-Vázquez, E., Martínez-Cagigal, V.,
201
- Vaquerizo-Villar, F., & Hornero, R. (2020). EEG-Inception: A novel deep
202
- convolutional neural network for assistive ERP-based brain-computer interfaces.
203
- IEEE Transactions on Neural Systems and Rehabilitation Engineering, 28, 2773-2782.
204
-
205
- .. rubric:: Hugging Face Hub integration
206
-
207
- When the optional ``huggingface_hub`` package is installed, all models
208
- automatically gain the ability to be pushed to and loaded from the
209
- Hugging Face Hub. Install with::
210
-
211
- pip install braindecode[hub]
212
-
213
- **Pushing a model to the Hub:**
214
-
215
- .. code::
216
- from braindecode.models import EEGSym
217
-
218
- # Train your model
219
- model = EEGSym(n_chans=22, n_outputs=4, n_times=1000)
220
- # ... training code ...
221
-
222
- # Push to the Hub
223
- model.push_to_hub(
224
- repo_id="username/my-eegsym-model",
225
- commit_message="Initial model upload",
226
- )
227
-
228
- **Loading a model from the Hub:**
229
-
230
- .. code::
231
- from braindecode.models import EEGSym
232
-
233
- # Load pretrained model
234
- model = EEGSym.from_pretrained("username/my-eegsym-model")
235
-
236
- # Load with a different number of outputs (head is rebuilt automatically)
237
- model = EEGSym.from_pretrained("username/my-eegsym-model", n_outputs=4)
238
-
239
- **Extracting features and replacing the head:**
240
 
241
- .. code::
242
- import torch
243
 
244
- x = torch.randn(1, model.n_chans, model.n_times)
245
- # Extract encoder features (consistent dict across all models)
246
- out = model(x, return_features=True)
247
- features = out["features"]
248
 
249
- # Replace the classification head
250
- model.reset_head(n_outputs=10)
251
 
252
- **Saving and restoring full configuration:**
253
 
254
- .. code::
255
- import json
 
 
 
 
 
 
 
256
 
257
- config = model.get_config() # all __init__ params
258
- with open("config.json", "w") as f:
259
- json.dump(config, f)
260
 
261
- model2 = EEGSym.from_config(config) # reconstruct (no weights)
262
 
263
- All model parameters (both EEG-specific and model-specific such as
264
- dropout rates, activation functions, number of filters) are automatically
265
- saved to the Hub and restored when loading.
266
 
267
- See :ref:`load-pretrained-models` for a complete tutorial.</main>
268
- </div>
269
 
270
  ## Citation
271
 
272
- Please cite both the original paper for this architecture (see the
273
- *References* section above) and braindecode:
274
 
275
  ```bibtex
276
  @article{aristimunha2025braindecode,
 
13
 
14
  # EEGSym
15
 
16
+ EEGSym from Pérez-Velasco et al (2022) [eegsym2022].
17
 
18
+ > **Architecture-only repository.** Documents the
19
  > `braindecode.models.EEGSym` class. **No pretrained weights are
20
+ > distributed here.** Instantiate the model and train it on your own
21
+ > data.
 
22
 
23
  ## Quick start
24
 
 
37
  )
38
  ```
39
 
40
+ The signal-shape arguments above are illustrative defaults — adjust to
41
+ match your recording.
42
 
43
  ## Documentation
44
+ - Full API reference: <https://braindecode.org/stable/generated/braindecode.models.EEGSym.html>
45
+ - Interactive browser (live instantiation, parameter counts):
 
 
46
  <https://huggingface.co/spaces/braindecode/model-explorer>
47
  - Source on GitHub: <https://github.com/braindecode/braindecode/blob/master/braindecode/models/eegsym.py#L16>
48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
 
50
+ ## Architecture
 
51
 
52
+ ![EEGSym architecture](../../docs/_static/model/eegsym.png)
 
 
 
53
 
 
 
54
 
55
+ ## Parameters
56
 
57
+ | Parameter | Type | Description |
58
+ |---|---|---|
59
+ | `filters_per_branch` | int, optional | Number of filters in each inception branch. Should be a multiple of 8. Default is 12 [eegsym2022]. |
60
+ | `scales_time` | tuple of int, optional | Temporal scales (in milliseconds) for the temporal convolutions in the first inception module. Default is (500, 250, 125) [eegsym2022]. |
61
+ | `drop_prob` | float, optional | Dropout probability. Default is 0.25 [eegsym2022]. |
62
+ | `activation` | type[nn.Module], optional | Activation function class to use. Default is :class:`nn.ELU` [eegsym2022]. |
63
+ | `spatial_resnet_repetitions` | int, optional | Number of repetitions of the spatial analysis operations at each step. Default is 5 [eegsym2022]. |
64
+ | `left_right_chs` | list of tuple of str, optional | List of tuples pairing left and right hemisphere channel names, e.g., `[('C3', 'C4'), ('FC5', 'FC6')]`. If not provided, channels are automatically split into left/right hemispheres using :func:`~braindecode.datautil.channel_utils.division_channels_idx` and :func:`~braindecode.datautil.channel_utils.match_hemisphere_chans`. Must be provided together with `middle_chs` [eegsym2022]. |
65
+ | `middle_chs` | list of str, optional | List of midline (central) channel names that lie on the mid-sagittal plane, e.g., `['FZ', 'CZ', 'PZ']`. These channels are duplicated and concatenated to both hemispheres. If not provided, channels are automatically identified using :func:`~braindecode.datautil.channel_utils.division_channels_idx`. Must be provided together with `left_right_chs` [eegsym2022]. |
66
 
 
 
 
67
 
68
+ ## References
69
 
70
+ 1. Pérez-Velasco, S., Santamaría-Vázquez, E., Martínez-Cagigal, V., Marcos-Martínez, D., & Hornero, R. (2022). EEGSym: Overcoming inter-subject variability in motor imagery based BCIs with deep learning. IEEE Transactions on Neural Systems and Rehabilitation Engineering, 30, 1766-1775.
71
+ 2. Pérez-Velasco, S., EEGSym source code. https://github.com/Serpeve/EEGSym
72
+ 3. Santamaría-Vázquez, E., Martínez-Cagigal, V., Vaquerizo-Villar, F., & Hornero, R. (2020). EEG-Inception: A novel deep convolutional neural network for assistive ERP-based brain-computer interfaces. IEEE Transactions on Neural Systems and Rehabilitation Engineering, 28, 2773-2782.
73
 
 
 
74
 
75
  ## Citation
76
 
77
+ Cite the original architecture paper (see *References* above) and braindecode:
 
78
 
79
  ```bibtex
80
  @article{aristimunha2025braindecode,