Structure-preserving EEG Augmentation via Riemannian Conditional Generative Adversarial Networks (2026)

Open in webOpen in zoteroOpen pdf

1 Abstract

Electroencephalography (EEG) data are pivotal in brain–computer interfaces (BCIs), yet their utility is hindered by data scarcity arising from high acquisition costs, noise susceptibility, and privacy constraints. Traditional augmentation methods, such as noise injection and signal transformations, often fail to preserve task-relevant structure in multichannel EEG, while deep generative models may suffer from mode collapse or produce physiologically inconsistent samples. To address these limitations, we propose a Riemannian Conditional Generative Adversarial Network (RC-GAN) that enforces geometric consistency during signal generation. RC-GAN leverages the manifold of symmetric positive definite (SPD) covariance matrices to regularize synthetic EEG trials according to covariance-based representations widely used in BCI decoding. Evaluated on the BNCI 2014-001 motor imagery dataset, the proposed method outperforms state-of-the-art augmentation techniques, achieving a 12.0% improvement in classification accuracy. Qualitative and quantitative analyses demonstrate that RC-GAN generates diverse and realistic EEG samples while enhancing robustness at different augmentation levels. These results highlight the benefit of incorporating Riemannian structure into generative models for EEG augmentation and provide a principled framework for improving the reliability of BCI systems.

2 NOTES

Having just read the RGP-VAE paper it is funny to see another paper that uses the SPD matrices but doesn’t make use of Deep Riemannian Network (DRN). Instead, they build a traditional neural network, in here it is just the usual cGAN, receiving the EEG as a time series for the discriminator and the label, and for the generator the same: the label and the noise vector (dim 128). Couple relevant points:

  • However, I don’t really know for sure if it is a cGAN or a GAN, because in their architecture table the label is nowhere to be seen. For the discriminator it receives as input 22 channels (as seen in Conv2d-1), but since the BCI Competition IV Dataset 2a has 22 channels where is the label channel? Weird
  • When estimating the covariance matrices they use the Tikhonov-regularized spatial covariance: . (which is the diagonal loading)
  • The total generator loss is similar to the usual loss, but has a riemannian loss: where is the covariance of a matched real trial drawn from the data distribution and is the log-Euclidean geodesic distance. So, this is the only part where RG is used.
  • They override torch.linalg.eigh with a custom autograd function that clips both eigenvalues and their adjoint gradient. They also mention that during back-propagation they calculate , but most is done through automatic differentiation, so there is no need to change much. Still, would be nice to have the code to see all this stuff.
  • The results show that what has the biggest impact is the Riemannian Loss and the gradient clipping, and that using their model to augment the data by 50% achieved an increase of almost 6% over the baseline.