Deep Learning · Medical Imaging

Brain Tumor
Segmentation

Automated tumor detection and segmentation from MRI scans using a U-Net convolutional architecture trained on brain tumor datasets.

U-NetArchitecture
256²Input Resolution
5Training Epochs
BCELoss Function

Upload an MRI Scan

Upload a brain MRI image to visualize the segmentation process. The demo shows how the model identifies and highlights tumor regions.

🧠
Click or drag & drop PNG, JPG, WEBP supported
◉ Awaiting input
─────────────
Upload MRI to begin
Original

Processing Pipeline

01

Data Acquisition

MRI brain scans sourced from Kaggle's Brain Tumor Segmentation dataset. Images include paired grayscale masks marking tumor boundaries.

Kaggle Dataset
02

Pre-processing

Images are loaded, cropped to region of interest (rows 90–450, cols 150–406), resized to 256×256, and normalized to [0,1]. Masks converted to binary boolean arrays.

NumPy · TensorFlow
03

U-Net Training

5-block encoder–decoder with skip connections. Adam optimizer, binary cross-entropy loss. EarlyStopping with patience=2 prevents overfitting. 10% validation split.

Keras · EarlyStopping
04

Prediction & Visualization

Model outputs a sigmoid probability mask. Predictions visualized as standalone mask and alpha-blended overlay on the original scan.

Matplotlib · cv2

U-Net Architecture

Encoder–decoder with skip connections enabling precise spatial localization.

📉

Encoder (Contraction)

5 levels: 16→32→64→128→256 filters. Each block has 2× Conv2D (3×3, ReLU) + Dropout + MaxPooling. Progressively captures abstract features.

📈

Decoder (Expansion)

Conv2DTranspose upsamples feature maps. Concatenated with encoder skip connections to recover fine spatial details lost during pooling.

🔗

Skip Connections

Direct connections from encoder to decoder at each level. Ensures high-resolution spatial information is preserved for precise segmentation boundaries.

🎯

Output Layer

1×1 Conv2D with sigmoid activation produces a single-channel probability map. Threshold at 0.5 for binary tumor/non-tumor classification.

Python · TensorFlow
# U-Net Output Head
outputs = tf.keras.layers.Conv2D(1, (1, 1), activation='sigmoid')(c9)
model   = tf.keras.Model(inputs=[inputs], outputs=[outputs])
model.compile(
    optimizer='adam',
    loss='binary_crossentropy',
    metrics=['accuracy']
)

# Training with EarlyStopping
history = model.fit(
    X_train, y_train,
    validation_split=0.1,
    batch_size=32,
    epochs=5,
    callbacks=[EarlyStopping(monitor='val_loss', patience=2)]
)