Status: Concluído ✅
Modelo: U-Net (Implementação do Zero)
Dice Score: ~0.85 (Validação)
Aplicação: Segmentação Médica em Imagens de MRI
O NeuroSeg-PyTorch é um projeto de Visão Computacional aplicado à área médica, implementando uma rede neural U-Net do zero para segmentação automática de tumores cerebrais em imagens de ressonância magnética (MRI).
O sistema utiliza técnicas avançadas de Deep Learning incluindo Mixed Precision Training, Data Augmentation robusto e loss functions especializadas para segmentação médica, alcançando métricas competitivas no dataset LGG MRI Segmentation.
neuroseg-pytorch/
│
├── data/
│ └── raw/ # Imagens MRI originais
│
├── models/ # Checkpoints dos modelos treinados
│
├── src/
│ ├── model.py # Arquitetura U-Net
│ ├── dataset.py # Custom Dataset para MRI
│ ├── train.py # Loop de treinamento
│ ├── predict.py # Script de inferência (CLI)
│ └── utils.py # Funções auxiliares
│
├── demo.ipynb # Visualização interativa dos resultados
│
├── requirements.txt # Dependências
│
└── README.md # Este arquivo
- PyTorch: Framework principal de Deep Learning
- Torchvision: Utilitários e transformações
- U-Net: Arquitetura especializada em segmentação
- Albumentations: Pipeline de augmentation avançado
- Transformações: Rotação, flip, ajuste de brilho, ruído gaussiano
- Mixed Precision (FP16): Aceleração de treinamento com AMP
- ReduceLROnPlateau: Scheduler adaptativo de learning rate
- Matplotlib: Visualização de resultados
- OpenCV: Processamento de imagens
- Pandas: Análise de métricas
- Scikit-learn: Métricas de avaliação
A segmentação automática de tumores cerebrais em imagens de ressonância magnética é um desafio crítico na área médica. Este projeto demonstra como Deep Learning pode auxiliar radiologistas na identificação precisa e rápida de regiões tumorais.
Benefícios:
- ⚡ Redução significativa do tempo de análise
- 🎯 Maior precisão na delimitação de tumores
- 📊 Quantificação objetiva do volume tumoral
- 🔄 Monitoramento da evolução do tumor ao longo do tempo
Desafios:
- Variabilidade de formas e tamanhos dos tumores
- Diferentes tipos de MRI (T1, T2, FLAIR)
- Artefatos e ruído nas imagens
- Necessidade de alta precisão (contexto médico)
O dataset utilizado contém imagens de ressonância magnética de gliomas de baixo grau (Low-Grade Glioma - LGG).
Características:
- 📷 Total de Imagens: ~3.000 pares (imagem + máscara)
- 🎯 Formato: TIFF (256x256 pixels)
- 🏥 Fonte: Repositórios médicos públicos
- ⚕️ Anotação: Máscaras binárias segmentadas por especialistas
Classes:
0→ Background (Tecido saudável)1→ Tumor (Região segmentada)
A U-Net é uma arquitetura convolucional especializada em segmentação, caracterizada por sua forma de "U" e conexões skip.
┌─────────────┐
│ Input │
│ (256x256) │
└──────┬──────┘
│
┌──────────▼──────────┐
│ Encoder Path │
│ (Downsampling) │
│ │
│ Conv + ReLU + Pool │
│ 64 → 128 → 256 → │
│ 512 → 1024 │
└──────────┬──────────┘
│
┌──────▼──────┐
│ Bottleneck │
└──────┬──────┘
│
┌──────────▼──────────┐
│ Decoder Path │
│ (Upsampling) │
│ │
│ UpConv + Concat │
│ (Skip Connections) │
│ 1024 → 512 → 256 │
│ → 128 → 64 │
└──────────┬──────────┘
│
┌──────▼──────┐
│ Output │
│ (Sigmoid) │
└─────────────┘
Componentes Principais:
- Encoder: Extrai features em múltiplas escalas
- Bottleneck: Representação mais compacta
- Decoder: Reconstrói a segmentação
- Skip Connections: Preserva detalhes espaciais
O modelo utiliza uma loss combinada especializada em segmentação:
total_loss = dice_loss + binary_cross_entropy_loss
# Onde:
# - Dice Loss: Otimiza o Dice Score diretamente
# - BCE Loss: Penaliza pixel-wise classificationDice Loss:
Dice = 2 * |X ∩ Y| / (|X| + |Y|)
Dice Loss = 1 - Dice
Pipeline robusto implementado com Albumentations:
augmentations = Compose([
HorizontalFlip(p=0.5),
VerticalFlip(p=0.5),
RandomRotate90(p=0.5),
RandomBrightnessContrast(p=0.3),
GaussNoise(p=0.2),
ElasticTransform(p=0.2),
])Justificativa:
- Aumenta variabilidade do dataset
- Simula diferentes condições de captura
- Previne overfitting
- Melhora generalização
Técnicas Implementadas:
- ✅ Mixed Precision (FP16): Treino ~2x mais rápido
- ✅ Adam Optimizer: Learning rate inicial de 1e-4
- ✅ ReduceLROnPlateau: Reduz LR quando o loss estagna
- ✅ Early Stopping: Paciência de 10 épocas
- ✅ Gradient Clipping: Evita explosão de gradientes
O modelo alcançou métricas competitivas, demonstrando capacidade de segmentação precisa.
| Métrica | Valor | Status |
|---|---|---|
| Dice Score (Validação) | ~0.85 | 🟢 Excelente |
| IoU (Intersection over Union) | ~0.74 | 🟢 Bom |
| Pixel Accuracy | ~0.96 | 🟢 Excelente |
| Precision | ~0.87 | 🟢 Bom |
| Recall | ~0.84 | 🟢 Bom |
Dice Score de 0.85 significa:
- ✅ Alta concordância entre predição e ground truth
- ✅ Sobreposição de ~85% das áreas tumorais
- ✅ Adequado para assistência clínica (com supervisão)
Análise Qualitativa:
- ✅ Delimita bem bordas de tumores grandes
- ✅ Identifica múltiplas regiões tumorais
⚠️ Pode ter dificuldade com tumores muito pequenos (<5mm)⚠️ Requer validação em diferentes tipos de MRI
git clone https://github.com/oalvarobraz/NeuroSeg-PyTorch.git
cd NeuroSeg-PyTorchpip install -r requirements.txtAcesse Kaggle - LGG MRI Segmentation e extraia em data/raw/
python src/train.pyArgumentos opcionais:
python src/train.py \
--epochs 50 \
--batch-size 16 \
--lr 1e-4 \
--device cudaSegmentar uma imagem específica:
python src/predict.py --image data/raw/sample_image.tifCom visualização:
python src/predict.py \
--image data/raw/sample_image.tif \
--output results/prediction.png \
--visualizeAbra o notebook de demonstração:
jupyter notebook demo.ipynbO notebook permite:
- 📊 Visualizar predições lado a lado com ground truth
- 🎨 Comparar múltiplas imagens
- 📈 Analisar métricas por imagem
- 🔍 Inspecionar casos difíceis
| Argumento | Descrição | Padrão |
|---|---|---|
--epochs |
Número de épocas | 50 |
--batch-size |
Tamanho do batch | 16 |
--lr |
Learning rate inicial | 1e-4 |
--device |
GPU ou CPU | cuda |
--checkpoint |
Caminho para checkpoint | None |
| Argumento | Descrição | Padrão |
|---|---|---|
--image |
Caminho da imagem MRI | - |
--model |
Caminho do modelo | models/best.pth |
--output |
Arquivo de saída | prediction.png |
--visualize |
Mostrar resultado | False |
--threshold |
Limiar de binarização | 0.5 |
# Deep Learning
torch>=2.0.0
torchvision>=0.15.0
# Data Augmentation
albumentations>=1.3.0
# Image Processing
opencv-python>=4.8.0
pillow>=10.0.0
# Visualization
matplotlib>=3.7.0
seaborn>=0.12.0
# Utilities
numpy>=1.24.0
pandas>=2.0.0
scikit-learn>=1.3.0
tqdm>=4.66.0
# Jupyter
jupyter>=1.0.0
ipywidgets>=8.0.0
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ MRI Image │ → │ U-Net Model │ → │ Tumor Mask │
│ (256x256) │ │ (Segmentation) │ │ (Binary) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
Visualização:
Original MRI Ground Truth Prediction
┌───────────┐ ┌───────────┐ ┌───────────┐
│ │ │ │ │ │
│ 🧠 │ → │ 🔴🔴 │ ≈ │ 🔴🔴 │
│ │ │ │ │ │
└───────────┘ └───────────┘ └───────────┘
- Implementar U-Net++ (nested U-Net)
- Testar Attention U-Net (attention gates)
- Experimentar TransUNet (Transformer + U-Net)
- Expandir para múltiplas classes (tumor core, edema, necrose)
- Dataset BraTS (Brain Tumor Segmentation)
- Loss functions para multi-class
- Combinar predições de múltiplos modelos
- Test-Time Augmentation (TTA)
- Voting ou averaging strategies
- Migrar para volumes 3D completos (não slices 2D)
- U-Net 3D com convoluções volumétricas
- Maior contexto espacial
- Interface web com Streamlit ou Gradio
- Integração com PACS (Picture Archiving and Communication System)
- Validação por radiologistas
- Certificação regulatória (FDA, ANVISA)
- Arquitetura U-Net: Implementação completa do zero de uma arquitetura especializada
- Segmentação médica: Desafios específicos de imagens médicas (ruído, variabilidade)
- Loss functions especializadas: Dice Loss otimiza diretamente a métrica de interesse
- Mixed Precision: Aceleração significativa de treinamento (2x faster)
- Data Augmentation: Crucial para generalização com datasets médicos limitados
- Métricas médicas: Dice Score, IoU são padrão ouro em segmentação médica
O NeuroSeg-PyTorch demonstra com sucesso a aplicação de Deep Learning em segmentação médica, alcançando Dice Score de 0.85 em imagens de ressonância magnética.
Conquistas:
- ✅ Implementação completa da arquitetura U-Net do zero
- ✅ Pipeline de treinamento otimizado com Mixed Precision
- ✅ Data Augmentation robusto para imagens médicas
- ✅ Métricas competitivas no dataset LGG MRI
Impacto Potencial:
- 🏥 Assistência a radiologistas na análise de exames
- ⚡ Redução do tempo de diagnóstico
- 📊 Quantificação objetiva de tumores
- 🔬 Base para pesquisas em oncologia
Este projeto serve como base sólida para sistemas de auxílio ao diagnóstico médico, com potencial de expansão para outros tipos de segmentação e modalidades de imagem.
Álvaro Braz
Projeto desenvolvido para fins de estudo, pesquisa e portfólio profissional em Deep Learning aplicado à área médica.
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
- Kaggle: Dataset LGG MRI Segmentation
- PyTorch Team: Framework excepcional
- Albumentations: Biblioteca poderosa de augmentation
- Comunidade Médica Open Source: Por compartilhar conhecimento sobre AI em medicina
- Ronneberger et al.: Pela arquitetura U-Net original (2015)