Brain Tumor Segmentation β DeepLabv3+ (ResNet-34 + ASPP + WBCE)
An implementation of the architecture and training recipe described in Soomro et al., "Boosting Brain Tumor Detection Accuracy in MRI Using Transfer Learning and Fine-Tuned DeepLabv3+" (IEEE Open Journal of the Computer Society, 2026), trained on the CE-MRI brain tumor dataset (Cheng et al., 233 patients, 3,064 T1-weighted contrast-enhanced axial slices: glioma, meningioma, pituitary tumors).
This is a personal/academic reproduction project β not the original authors' model, not clinically validated, and not for medical use. See Honest results below before using this for anything beyond learning/experimentation.
Model architecture
- ResNet-34 encoder, initialized from ImageNet-pretrained weights
- Atrous Spatial Pyramid Pooling (ASPP), rates 12/16/18 + global image pooling
- Lightweight decoder fusing low-level and ASPP features (DeepLabv3+ design)
- Binary output: tumor vs. background, per pixel
- Trained with Weighted Binary Cross-Entropy (WBCE) loss, with per-slice adaptive class-imbalance weighting
Training setup
- 100 epochs, Adam optimizer (Ξ²1=0.9, Ξ²2=0.999, weight decay 1e-5),
initial LR 1e-4 with
ReduceLROnPlateau - Patient-wise 70/15/15 train/val/test split (163/35/35 patients) β no patient's slices appear in more than one split, avoiding data leakage
- Image size 512Γ512, batch size 8
- Trained on a single Kaggle GPU session (T4Γ2)
Full training/evaluation code: [link to your GitHub repo here]
Honest results vs. the paper
The paper reports ~98% DSC and ~99.3% sensitivity. This reproduction falls meaningfully short of that on the two metrics that matter most for segmentation quality (DSC, sensitivity), while matching closely on accuracy/specificity β which is expected, since ~98% of pixels in these images are background, so accuracy/specificity are dominated by the easy majority class rather than tumor-finding ability.
| Metric | This model (test set, 35 held-out patients) | Paper |
|---|---|---|
| DSC (overall) | 75.6% | 98.0% |
| Sensitivity | 88.95% | 99.3% |
| Specificity | 99.34% | 98.99% |
| Accuracy | 99.11% | 99.1% |
Per-tumor-type DSC: glioma 70.2%, meningioma 85.5%, pituitary 74.6% β the same relative ordering (meningioma easiest, glioma hardest) as the paper reports, which is a useful internal consistency check even though absolute numbers differ.
Why the gap likely exists (in rough order of suspected impact):
- The paper doesn't fully specify some architectural details (exact decoder channel widths, output stride choice, precise augmentation policy) β this implementation fills those gaps with standard DeepLabv3+ conventions, which may not match the authors' exact setup.
- Training was extended from 40 to 100 epochs and DSC barely moved (74.3% β 75.6%), suggesting the model has converged for this configuration β the remaining gap is not simply "needs more training."
- Possible differences in preprocessing intensity (the paper mentions CLAHE contrast enhancement; exact parameters aren't given) or data augmentation strength.
This gap is reported transparently rather than hidden β reproducing a paper's exact numbers without the authors' full implementation details is a known hard problem in ML research, and getting a rigorous, honest measurement of how far off a reproduction is is itself the useful skill being demonstrated here.
Intended use
- Educational / portfolio demonstration of a segmentation pipeline (transfer learning, class-imbalance-aware loss, patient-wise evaluation discipline)
- Starting point for further experimentation (e.g. testing architectural variants, better augmentation, longer training with a different LR schedule)
Out of scope / not suitable for
- Any clinical, diagnostic, or medical decision-making use
- Deployment without independent validation on a properly consented, IRB-approved clinical dataset
- Use as a certified medical device (it is not one, and has not been evaluated as one)
How to use
import torch
from model import DeepLabV3Plus # from this repo's model.py
model = DeepLabV3Plus(num_classes=1, use_imagenet_init=False)
state = torch.load("pytorch_model.pt", map_location="cpu", weights_only=False)
model.load_state_dict(state)
model.eval()
# image: torch.Tensor, shape (1, 3, 512, 512), ImageNet-normalized
with torch.no_grad():
logits = model(image)
mask = (torch.sigmoid(logits) > 0.5).float()
See the GitHub repo for the full dataset.py preprocessing pipeline
(CLAHE + ImageNet normalization) needed to prepare inputs correctly.
Dataset
Trained on the CE-MRI brain tumor dataset (Cheng et al., 2017, "Enhanced performance of brain tumor classification via tumor region augmentation and partition," PLoS ONE). This repository does not redistribute the dataset β see the original publication for access.
Citation
If referencing the original paper this reproduces:
Soomro et al., "Boosting Brain Tumor Detection Accuracy in MRI Using
Transfer Learning and Fine-Tuned DeepLabv3+," IEEE Open Journal of the
Computer Society, vol. 7, 2026.
This repository is an independent reproduction and is not affiliated with the original authors.