An interpretable, CPU-only, real-time freezing-of-gait detector for Parkinson's disease, with an honestly validated benchmark showing it matches deep learning at a fraction of the cost.
Freezing of gait (FoG) is one of the most disabling symptoms of advanced Parkinson's. Patients describe their feet as "glued to the floor" mid-stride. It affects roughly half of PD patients, up to about 80% in advanced disease, and is a leading cause of falls. A wearable that detects freezing in real time can fire a cue, such as an auditory metronome, a vibrotactile pulse, or a laser line, to help the patient keep moving. But that device has to run for hours on a coin cell, infer on a microcontroller with no GPU and no ML runtime, and be trustworthy enough for clinical use.
CryoGait is built around that constraint. The inference engine is pure Rust with no native ML runtime, just a few hundred floating-point comparisons per window. From a 4-second IMU window it extracts a 123-feature spectral and time-domain descriptor (band powers, Freeze Index, dominant frequency, spectral entropy, jerk), applies unsupervised per-recording rank normalization to remove inter-patient distribution shift, classifies with histogram gradient-boosted trees, and refines the probability with a causal EMA that exploits the build-up of freezing.
Two ideas do most of the work, confirmed by ablation: the multi-channel descriptor (versus a single Freeze Index) and the causal-EMA temporal refinement (+0.09 mAP). Everything is evaluated patient-independent, with no patient appearing in both train and test. That is the main guard against the leakage that inflates many published FoG results.
Under strict patient-independent evaluation the detector reaches mAP 0.88, ROC-AUC 0.93, F1 0.80. That is statistically indistinguishable from a bidirectional GRU (mAP 0.90), while running about 29× faster at inference (63 µs vs. 1,815 µs/window, both CPU), about 10× faster to train, and using zero GPU memory. It clearly beats the classical Freeze-Index, logistic, and random-forest baselines (vs. Freeze Index ΔmAP +0.141, p<0.0001).