Update README.md
Browse files
README.md
CHANGED
|
@@ -1,3 +1,95 @@
|
|
| 1 |
-
---
|
| 2 |
-
|
| 3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
language: en
|
| 3 |
+
license: mit
|
| 4 |
+
library_name: pytorch
|
| 5 |
+
tags:
|
| 6 |
+
- medical-imaging
|
| 7 |
+
- mri
|
| 8 |
+
- 3d-resnet
|
| 9 |
+
- monai
|
| 10 |
+
- oncology
|
| 11 |
+
- breast-cancer
|
| 12 |
+
datasets:
|
| 13 |
+
- odelia
|
| 14 |
+
metrics:
|
| 15 |
+
- roc_auc
|
| 16 |
+
pipeline_tag: image-classification
|
| 17 |
+
---
|
| 18 |
+
|
| 19 |
+
# 3D ResNet-18 for ODELIA MRI Classification
|
| 20 |
+
|
| 21 |
+
This repository contains the weights for a 3D ResNet-18 model trained for the ODELIA dataset (multi-parametric MRI). The model was developed to classify medical images into 3 distinct classes using 5-fold cross-validation.
|
| 22 |
+
|
| 23 |
+
## Model Description
|
| 24 |
+
|
| 25 |
+
- **Developed by:** THOUAN Simon
|
| 26 |
+
- **Model type:** 3D Convolutional Neural Network (ResNet-18 architecture)
|
| 27 |
+
- **Framework:** PyTorch & MONAI
|
| 28 |
+
- **Task:** Multi-class 3D Image Classification (3 classes)
|
| 29 |
+
- **Input:** 5 MRI sequences (Pre, Post_1, Post_2, Sub_1, T2) concatenated as channels.
|
| 30 |
+
- **Input Size:** (128, 128, 64)
|
| 31 |
+
|
| 32 |
+
## Architecture Details
|
| 33 |
+
|
| 34 |
+
The model is a 3D adaptation of the ResNet architecture provided by the **MONAI** library:
|
| 35 |
+
- **Blocks:** Basic block
|
| 36 |
+
- **Layers:** [2, 2, 2, 2] (Equivalent to ResNet-18)
|
| 37 |
+
- **In-planes:** [64, 128, 256, 512]
|
| 38 |
+
- **Input Channels:** 5
|
| 39 |
+
- **Spatial Dimensions:** 3D
|
| 40 |
+
|
| 41 |
+
## Training Procedure
|
| 42 |
+
|
| 43 |
+
The model was trained on a high-performance computing cluster (IDUN) using the following configuration:
|
| 44 |
+
|
| 45 |
+
### Hyperparameters
|
| 46 |
+
| Parameter | Value |
|
| 47 |
+
| :--- | :--- |
|
| 48 |
+
| **Optimizer** | Adam |
|
| 49 |
+
| **Learning Rate** | 1e-4 |
|
| 50 |
+
| **Loss Function** | CrossEntropyLoss |
|
| 51 |
+
| **Batch Size** | 4 (Training) / 2 (Validation) |
|
| 52 |
+
| **Epochs** | 50 |
|
| 53 |
+
| **Validation** | Every 2 epochs |
|
| 54 |
+
|
| 55 |
+
### Cross-Validation Strategy
|
| 56 |
+
The dataset was split into 5 folds (A, B, C, D, E) to ensure robustness.
|
| 57 |
+
- **Fold 0:** Val = A, Train = B+C+D+E
|
| 58 |
+
- **Fold 1:** Val = B, Train = A+C+D+E
|
| 59 |
+
- *(Continuing for all 5 folds)*
|
| 60 |
+
|
| 61 |
+
### Preprocessing (MONAI Transforms)
|
| 62 |
+
- **Resizing:** All volumes resized to $128 \times 128 \times 64$.
|
| 63 |
+
- **Normalization:** Intensity scaling for each sequence.
|
| 64 |
+
- **Concatenation:** The 5 MRI sequences are stacked into a single 5-channel tensor.
|
| 65 |
+
|
| 66 |
+
## Evaluation Results
|
| 67 |
+
|
| 68 |
+
The primary metric used is **ROC AUC** (Area Under the Receiver Operating Analytic Curve).
|
| 69 |
+
Detailed performance graphs and confusion matrices for the ensemble can be found in the associated [GitHub Repository](URL_DE_TON_GITHUB).
|
| 70 |
+
|
| 71 |
+
## How to Load the Model
|
| 72 |
+
|
| 73 |
+
```python
|
| 74 |
+
import torch
|
| 75 |
+
from monai.networks.nets import ResNet
|
| 76 |
+
|
| 77 |
+
# Initialize architecture
|
| 78 |
+
model = ResNet(
|
| 79 |
+
block="basic",
|
| 80 |
+
layers=[2, 2, 2, 2],
|
| 81 |
+
block_inplanes=[64, 128, 256, 512],
|
| 82 |
+
n_input_channels=5,
|
| 83 |
+
num_classes=3,
|
| 84 |
+
spatial_dims=3
|
| 85 |
+
)
|
| 86 |
+
|
| 87 |
+
# Load weights
|
| 88 |
+
state_dict = torch.load("weights/best_resnet_odelia_fold0.pth", map_location="cpu")
|
| 89 |
+
model.load_state_dict(state_dict)
|
| 90 |
+
model.eval()
|
| 91 |
+
|
| 92 |
+
```
|
| 93 |
+
|
| 94 |
+
## Limitations & Ethical Considerations
|
| 95 |
+
This model is for research purposes only. It was trained on the ODELIA proprietary dataset. Predictions should not be used for clinical diagnosis without professional medical supervision.
|