Data for: Leveraging Deep Learning Techniques to Improve P300-Based Brain Computer Interfaces
Brain-Computer Interface (BCI) has become an established technology to interconnect a human brain and an external device. One of the most popular protocols for BCI is based on the extraction of the so-called P300 wave from EEG recordings. P300 wave is an event-related potential with a latency of 300 ms after the onset of a rare stimulus. In this paper, we used deep learning architectures, namely convolutional neural networks (CNNs), to improve P300-based BCIs. We propose a novel BCI classifier, called P3CNET, that improved P300 classification accuracy performances of the best state-of-the-art classifier. In addition, we explored pre-processing and training choices that improved the usability of BCI systems. For the pre-processing of EEG data, we explored the optimal signal interval that would improve classification accuracies. Then, we explored the minimum number of calibration sessions to balance higher accuracy and shorter calibration time. To improve the explainability of deep learning architectures, we analyzed the saliency maps of the input EEG signal leading to a correct P300 classification and we observed that the elimination of less informative electrode channels from the data did not result in better accuracy. All the methodologies and explorations were performed and validated on two different CNN classifiers, demonstrating the generalizability of the obtained results. Finally, we showed the advantages given by transfer learning when using the proposed novel architecture on other P300 data sets. The presented architectures and practical suggestions can be used by BCI practitioners to improve its effectiveness.
Required Python libraries: numpy, scipy, pandas, matplotlib, openpyxl, jupyter
1. Extract the whole content of the zip file into a folder
2. Run the Jupyter Notebook: Analysis_and_Figures_P3CNET_Paper.ipynb
3. The notebook generates all the figures and data reported in the paper.
The dataset contains also the Python code to implement the two CNNs with Tensorflow and Keras: