Skip to content

oalvarobraz/NeuroSeg-PyTorch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧠 NeuroSeg-PyTorch: Segmentação de Tumores Cerebrais

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.

Python PyTorch Medical Status


🗂️ Estrutura do Projeto

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

🛠️ Tecnologias Utilizadas

🔹 Deep Learning

  • PyTorch: Framework principal de Deep Learning
  • Torchvision: Utilitários e transformações
  • U-Net: Arquitetura especializada em segmentação

🔹 Data Augmentation

  • Albumentations: Pipeline de augmentation avançado
  • Transformações: Rotação, flip, ajuste de brilho, ruído gaussiano

🔹 Otimização

  • Mixed Precision (FP16): Aceleração de treinamento com AMP
  • ReduceLROnPlateau: Scheduler adaptativo de learning rate

🔹 Visualização & Análise

  • Matplotlib: Visualização de resultados
  • OpenCV: Processamento de imagens
  • Pandas: Análise de métricas
  • Scikit-learn: Métricas de avaliação

🧠 Sobre o Projeto

🔹 Motivaçã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.

🔹 Aplicação Clínica

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)

📊 Dataset

🔹 LGG MRI Segmentation

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)

🏗️ Arquitetura U-Net

A U-Net é uma arquitetura convolucional especializada em segmentação, caracterizada por sua forma de "U" e conexões skip.

🔹 Características

                    ┌─────────────┐
                    │   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:

  1. Encoder: Extrai features em múltiplas escalas
  2. Bottleneck: Representação mais compacta
  3. Decoder: Reconstrói a segmentação
  4. Skip Connections: Preserva detalhes espaciais

🎯 Treinamento

🔹 Loss Function

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 classification

Dice Loss:

Dice = 2 * |X ∩ Y| / (|X| + |Y|)
Dice Loss = 1 - Dice

🔹 Data Augmentation

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

🔹 Otimizaçã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

📈 Resultados

O modelo alcançou métricas competitivas, demonstrando capacidade de segmentação precisa.

🔹 Métricas Principais

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

🔹 Interpretação Clínica

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

⚙️ Como Executar

1️⃣ Clone o repositório

git clone https://github.com/oalvarobraz/NeuroSeg-PyTorch.git
cd NeuroSeg-PyTorch

2️⃣ Instale as dependências

pip install -r requirements.txt

3️⃣ Baixe o dataset

Acesse Kaggle - LGG MRI Segmentation e extraia em data/raw/

4️⃣ Treine o modelo

python src/train.py

Argumentos opcionais:

python src/train.py \
  --epochs 50 \
  --batch-size 16 \
  --lr 1e-4 \
  --device cuda

5️⃣ Execute inferência (CLI)

Segmentar uma imagem específica:

python src/predict.py --image data/raw/sample_image.tif

Com visualização:

python src/predict.py \
  --image data/raw/sample_image.tif \
  --output results/prediction.png \
  --visualize

6️⃣ Visualização interativa

Abra o notebook de demonstração:

jupyter notebook demo.ipynb

O notebook permite:

  • 📊 Visualizar predições lado a lado com ground truth
  • 🎨 Comparar múltiplas imagens
  • 📈 Analisar métricas por imagem
  • 🔍 Inspecionar casos difíceis

🎛️ Argumentos da Linha de Comando

Train Script

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

Predict Script

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

📦 Dependências Principais

# 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

🧪 Exemplo de Predição

Entrada → Processamento → Saída

┌─────────────────┐      ┌─────────────────┐      ┌─────────────────┐
│   MRI Image     │  →   │   U-Net Model   │  →   │  Tumor Mask     │
│   (256x256)     │      │  (Segmentation) │      │   (Binary)      │
└─────────────────┘      └─────────────────┘      └─────────────────┘

Visualização:

Original MRI          Ground Truth          Prediction
┌───────────┐        ┌───────────┐        ┌───────────┐
│           │        │           │        │           │
│    🧠     │   →    │   🔴🔴    │   ≈    │   🔴🔴    │
│           │        │           │        │           │
└───────────┘        └───────────┘        └───────────┘

🚀 Roadmap: Próximos Passos

🔹 1. Arquiteturas Avançadas

  • Implementar U-Net++ (nested U-Net)
  • Testar Attention U-Net (attention gates)
  • Experimentar TransUNet (Transformer + U-Net)

🔹 2. Multi-Class Segmentation

  • Expandir para múltiplas classes (tumor core, edema, necrose)
  • Dataset BraTS (Brain Tumor Segmentation)
  • Loss functions para multi-class

🔹 3. Ensemble Methods

  • Combinar predições de múltiplos modelos
  • Test-Time Augmentation (TTA)
  • Voting ou averaging strategies

🔹 4. 3D Segmentation

  • Migrar para volumes 3D completos (não slices 2D)
  • U-Net 3D com convoluções volumétricas
  • Maior contexto espacial

🔹 5. Deploy Clínico

  • 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)

✅ Principais Aprendizados

  • 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

🎯 Conclusão

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.


📌 Autor

Álvaro Braz

LinkedIn

Projeto desenvolvido para fins de estudo, pesquisa e portfólio profissional em Deep Learning aplicado à área médica.


📄 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.

⚠️ Aviso Importante: Este projeto é apenas para fins educacionais e de pesquisa. Não deve ser utilizado para diagnóstico médico real sem validação clínica e aprovação regulatória.


🙏 Agradecimentos

  • 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)

About

Segmentação de Tumores Cerebrais com U-Net e PyTorch. Pipeline completo com Data Augmentation avançado, treino com precisão mista e Dice Score de ~0.85.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors