Convolutional Neural Network for Automated Parkinson's Disease Detection from Structural 3D MRI
A MATLAB-based deep learning toolbox that uses 3D ResNet-18 transfer learning for binary classification of Parkinson's disease (PD) vs. healthy controls from structural MRI scans.
- Overview
- Features
- Requirements
- Installation
- Usage
- Data Format
- Model Architecture
- File Descriptions
- Citation
- License
- Contact
CNN-PD-3D is a deep learning framework designed for automated detection of Parkinson's disease from structural 3D MRI brain scans. The tool leverages transfer learning from a pre-trained 3D ResNet-18 architecture, adapted for volumetric neuroimaging data.
- 3D Transfer Learning: Adapts 2D ResNet-18 weights for 3D volumetric MRI analysis
- Data Augmentation: Implements 3D spatial transformations (rotation, scaling, translation) for robust training
- User-Friendly GUI: Provides an intuitive graphical interface for clinical use
- Two-Stage Training: Supports iterative training to improve model accuracy
- π§ 3D Convolutional Neural Network based on ResNet-18 architecture
- π Transfer Learning from pre-trained ImageNet weights adapted for 3D
- π Data Augmentation Pipeline with randomized 3D affine transformations
- π₯οΈ MATLAB GUI for easy clinical deployment
- π GPU Acceleration for faster training and inference
- π NIfTI Support for standard neuroimaging file formats
- MATLAB R2020b or later
- Deep Learning Toolbox
- Image Processing Toolbox
- Computer Vision Toolbox (optional, for some augmentations)
- RAM: Minimum 16 GB (32 GB recommended)
- GPU: NVIDIA GPU with CUDA support (recommended for training)
- Storage: ~5 GB for model weights and sample data
% Check required toolboxes
ver('nnet') % Deep Learning Toolbox
ver('images') % Image Processing Toolbox-
Clone the repository
git clone https://github.com/yourusername/CNN-PD-3D.git cd CNN-PD-3D -
Download pre-trained weights
- Ensure
params.mat(pre-trained 3D ResNet-18 weights) is in the root directory - The trained PD model
3DPretrainedModel.matwill be generated after training
- Ensure
-
Add to MATLAB path
addpath(genpath('CNN-PD-3D'));
Launch the graphical user interface for single-subject inference:
CNN_3D_PD- Click the Load Image button
- Select a NIfTI (.nii) file containing the 3D MRI scan
- View the probability of Parkinson's disease
For initial model training with your dataset:
% Run the first training pipeline
run('Pipeline3D_for1stTimeONLY_Training.m')This script will:
- Load MRI data from
Dataset_Updated/Processed images - 1st session/ - Initialize 3D ResNet-18 with transfer learning
- Train with data augmentation
- Save the model as
3DPretrainedModel.mat
To improve accuracy with additional data sessions:
% Run 2-3 times for improved accuracy
run('Pipeline3D_forREST_Training.m')| Parameter | Default | Description |
|---|---|---|
initLearnRate |
0.001 | Initial learning rate |
maxEpochs |
15 | Maximum training epochs |
miniBatchSize |
Auto | Calculated based on dataset size |
valFrequency |
4 | Validation frequency per epoch |
For programmatic inference on new data:
% Load trained model
load('3DPretrainedModel.mat');
% Set up datastore for test image
inputSize = mriNet.Layers(1).InputSize;
imds = imageDatastore('path/to/image.nii', ...
'FileExtensions', '.nii', ...
'ReadFcn', @niftiread, ...
'ReadSize', 10);
% Preprocess and classify
augimdsTest = transform(imds, @(data)classification3DAugmentationPipeline1(data, inputSize, 'test'));
[label, probs] = classify(mriNet, augimdsTest);
% Display result
fprintf('PD Probability: %.2f%%\n', 100*probs(2));Dataset_Updated/
βββ Processed images - 1st session/
β βββ Subject001_Healthy.nii
β βββ Subject002_Healthy.nii
β βββ ...
β βββ Subject026_Parkinson.nii
β βββ Subject027_Parkinson.nii
βββ Processed images - 2nd session/
βββ [Same structure]
| Specification | Value |
|---|---|
| File Format | NIfTI (.nii) |
| Input Size | 224 Γ 224 Γ 224 Γ 1 |
| Preprocessing | Z-score normalization |
| Cropping Region | [7, 6, 6] to [94, 78, 78] |
Input Layer (224Γ224Γ224Γ1)
β
βΌ
Conv3D (7Γ7Γ7, 64) β BN β ReLU β MaxPool3D
β
βΌ
[ResBlock Γ 2] (64 filters)
β
βΌ
[ResBlock Γ 2] (128 filters)
β
βΌ
[ResBlock Γ 2] (256 filters)
β
βΌ
[ResBlock Γ 2] (512 filters)
β
βΌ
Global Average Pooling 3D
β
βΌ
Fully Connected (2 classes)
β
βΌ
Softmax β Classification Output
- Rotation: Β±15Β°
- Scaling: 0.85Γ to 1.15Γ
- Translation: Β±15 voxels (X, Y, Z)
| File | Description |
|---|---|
CNN_3D_PD.m |
Main GUI application for PD classification |
CNN_3D_PD.fig |
MATLAB GUI layout file |
Pipeline3D_for1stTimeONLY_Training.m |
Initial training pipeline script |
Pipeline3D_forREST_Training.m |
Iterative fine-tuning pipeline |
classification3DAugmentationPipeline.m |
Data augmentation for train/val/test |
classification3DAugmentationPipeline1.m |
Simplified preprocessing for inference |
resnet18TL3Dfunction.m |
3D ResNet-18 architecture definition |
params.mat |
Pre-trained 3D ResNet-18 weights |
3DPretrainedModel.mat |
Trained PD classification model |
If you use this tool in your research, please cite:
@software{cnn_pd_3d,
author = {Negida, Ahmed},
title = {CNN-PD-3D: Convolutional Neural Network for Automated Parkinson's Disease Detection from Structural 3D MRI},
year = {2026},
url = {https://github.com/yourusername/CNN-PD-3D}
}This project is licensed under the MIT License - see the LICENSE file for details.
Ahmed Negida, MD, PhD
- π Website: https://negidamd.github.io
- π¬ ORCID: 0000-0001-5363-6369
- MATLAB Deep Learning Toolbox team for the transfer learning framework
- Contributors to the original ResNet architecture
Advancing precision medicine in Parkinson's disease through computational neuroscience