Note
Go to the end to download the full example code.
Track 4 – EMG-to-Text (cross-subject keystroke decoding)¶
Given surface EMG (sEMG) recorded from two wristbands while a user types prompted text on a physical QWERTY keyboard, decode the keystroke sequence. The competition tests cross-subject generalisation: train users and test users are disjoint.
Shift: seen users -> unseen users.
Headline metric: corpus-level character error rate (CER), with insertion / deletion / substitution rates and rendered-text CER as diagnostics. Lower is better.
Data:
emg2qwertyfor training and local validation (108 users, two differential dry-electrode sEMG wristbands, 2 kHz). The hidden evaluation set contains 100 new users with the same hardware and paradigm.
Note
The official Track 4 evaluation set (100 new users on the same
hardware) is not public yet, so this page runs on the released
emg2qwerty training data as the closest open analog.
NeuralBench mapping¶
The entry point is:
CLI:
neuralbench emg typingDefault dataset:
Sivakumar2024Emg2qwerty(108 users, 32-channel EMG, 2 kHz, ~1135 sessions, BIDS-converted from the original HDF5 release).Target: keystroke token sequence over an alphabet of keyboard symbols (space, punctuation, backspace).
Headline metric key:
test/cer(character error rate).
The study itself is already documented:
Sivakumar2024Emg2qwerty. It exposes
three event types: Emg (raw signal), Sentence (prompt), and
Keystroke (token + timestamp).
Reproducing the baseline¶
# 1. Download emg2qwerty / NM000104 (~239 GB, via eegdash/NEMAR)
neuralbench emg typing --download
# 2. Prepare the preprocessing cache
neuralbench emg typing --prepare
# 3. Quick local sanity check
neuralbench emg typing --debug
# 4. Full baseline -- task-specific model (EMG2QwertyNet)
neuralbench emg typing -m emg2qwertynet
Unlike the EEG tracks, the headline metric is sequence-level: the model must output a sequence of keystrokes, not a per-window label. Any sequence-supervised objective is permitted (CTC, RNN-T, alignment-supervised, LM-assisted, …).
Total running time of the script: (0 minutes 0.000 seconds)