DaT SPECT Abnormality Classification
A 3D CNN ensemble with striatal binding-ratio features
Abstract
Dopamine-transporter (DaT) SPECT imaging supports the diagnosis of parkinsonian syndromes, and the task is to classify each scan as normal or abnormal from the image alone. We built an end-to-end pipeline for the DrivenData DaT Parkinson's Challenge, which scores predictions by log loss on scans from several hospitals and scanner types.
Each scan is preprocessed on its own: masked, centred on the striatum and normalized by its own non-specific reference level, since intensities are not comparable across sites. Four CNN families (DatNet, a Siamese hemisphere model, SliceNet and a MedicalNet ResNet-10) are averaged and fused in logit space with a LightGBM model on 20 striatal binding-ratio features. All model selection uses site-grouped cross-validation.
The final submission reached an AUROC of 0.9379 and a private log loss of 0.3054, ranking 59th of 1,009 participants.
Keywords: DaT SPECT · Parkinson's disease · 3D CNN ensemble · striatal binding ratio · domain shift
Method
- Preprocess each scan on its own. Decode, mask and centre on the striatum, then divide by the scan’s own non-specific reference level, since intensity is not comparable across sites.
- Two grids. Resample to 96³ for the CNNs and 64³ for the binding-ratio head.
- Four CNN families. DatNet (3D CNN), a Siamese hemisphere comparison, SliceNet (2.5D) and a MedicalNet-initialised ResNet-10.
- Fuse. Average the CNNs and combine them with a LightGBM model on 20 striatal-binding-ratio features, weighted 0.8 to 0.2 in logit space.
Table 1: Out-of-fold log loss per model family (lower is better)
| Family | Architecture | Checkpoints | OOF log loss |
|---|---|---|---|
| DatNet | 3D CNN with stride-3 stem | 15 | 0.2694 |
| Siamese | Shared-weight hemisphere comparison | 15 | 0.2740 |
| MedicalNet | ResNet-10, MedicalNet initialisation | 15 | 0.2833 |
| SliceNet | 2.5D slice encoder | 15 | 0.2917 |
| SBR head | LightGBM on 20 striatal-binding-ratio features | 15 | 0.4404 |
Data
Table 2: Challenge data.
| Item | Value |
|---|---|
| Training scans | 1,362 (747 abnormal, 615 normal) |
| Sources | Several hospitals and scanner types |
| Public leaderboard split | about 145 scans |
| Metric | Log loss |
| Participants | 1,009 |
Scanner metadata alone gives an AUROC of 0.726 under random folds but 0.533 under site-grouped folds: random folds leak site information, so all reported numbers use grouped cross-validation.
Results
Table 3: Log loss by submission (lower is better)
| Submission | Grouped CV | Public | Private |
|---|---|---|---|
| 008a (base) | 0.2472 | 0.2653 | 0.3054 |
| 011 (+ count-noise augmentation) | 0.2448 | 0.2665 | — |
| 012 (+ 50-feature SBR head) | 0.2426 | 0.2702 | — |
Key findings
- Final standing: the 008a submission ranked 59th on the private leaderboard with AUROC 0.9379.
- CV vs leaderboard: each later model improved cross-validation but scored worse on the public leaderboard.
- Every member counts: removing the weakest member, the binding-ratio head, costs 0.0055 log loss.
- No calibration: cross-fitted temperature scaling measured worse, so none is applied.
Code
The full pipeline, training recipes and figures are on GitHub, with the final submission tagged as release v1.0.


