Pipeline Deep Learning — Análise de Exames de Escoliose
Projeto de Laboratório em Engenharia Informática — UTAD
Aluno: Sérgio Miguel Pereira Moniz
Orientador: António Cunha | Coorientador: António Gouveia
Para testar o projeto — os modelos treinados e o dataset estão alojados no Hugging Face:
Recurso Link Modelo ( best.pth/last.pth)smonizzzz/scoliosis-hrnet Dataset (20 000 radiografias) smonizzzz/spinal-ai2024 Ver secção Início rápido para avaliação abaixo.
Descrição
Pipeline completo de Deep Learning para análise automática de radiografias de escoliose:
- Regressão direta dos ângulos de Cobb (torácico proximal, torácico principal e lombar)
- Classificação clínica automática (Normal / Leve / Moderada / Grave)
- Modelo principal: HRNet-W32 (High-Resolution Network)
- Dataset: Spinal AI 2024 (20 000 radiografias anotadas)
- API REST para integração com aplicações web
Estrutura do projeto
scoliosis_pipeline/
├── data/
│ └── dataset.py ← Dataset PyTorch + augmentação de dados
├── models/
│ └── hrnet.py ← Arquitetura HRNet-W32
├── configs/
│ └── hrnet_w32.json ← Configuração do modelo
├── results/
│ └── scoliosis_hrnet/ ← Checkpoints e métricas
├── main.py ← Entry point (treino / teste / inferência)
├── train.py ← Loop de treino com early stopping
├── evaluate.py ← Avaliação completa com gráficos
├── server.py ← API REST (FastAPI)
└── requirements.txt
Início rápido para avaliação
Para testar o projeto sem precisar de treinar o modelo:
# 1. Clonar o repositório
git clone https://github.com/smonizzzz/ProjetoFinal.git
cd ProjetoFinal
# 2. Instalar dependências
pip install -r requirements.txt
# 3. Descarregar o modelo treinado do Hugging Face
python -c "
from huggingface_hub import hf_hub_download
import os, shutil
os.makedirs('results/scoliosis_hrnet', exist_ok=True)
path = hf_hub_download(repo_id='smonizzzz/scoliosis-hrnet', filename='best.pth')
shutil.copy(path, 'results/scoliosis_hrnet/best.pth')
print('Modelo descarregado!')
"
# 4. Inferência numa radiografia
python main.py --mode infer \
--image caminho/para/radiografia.jpg \
--ckpt results/scoliosis_hrnet/best.pth
Para correr a avaliação completa no dataset de teste, descarregar também o dataset de smonizzzz/spinal-ai2024 e colocar em
data/spinal_ai2024/.
Instalação
# 1. Criar ambiente virtual
python -m venv venv
venv\Scripts\activate # Windows
# 2. Instalar dependências
pip install -r requirements.txt
# 3. (GPU) Instalar PyTorch com CUDA 12.1
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
Dataset — Spinal AI 2024
- Descarregar o dataset em Spinal AI 2024
- Colocar em:
data/
└── spinal_ai2024/
├── images/
│ ├── Spinal-AI2024-subset1/ ← treino
│ ├── Spinal-AI2024-subset2/ ← treino
│ ├── Spinal-AI2024-subset3/ ← treino
│ ├── Spinal-AI2024-subset4/ ← treino
│ └── Spinal-AI2024-subset5/ ← teste
├── Cobb_train_gt.csv/
└── Cobb_test_gt.csv/
Utilização
Treino completo
python main.py --mode train \
--data_root ./data \
--epochs 100 \
--batch 8 \
--lr 0.001
Durante o treino são guardados automaticamente:
results/scoliosis_hrnet/best.pth← melhor modelo (menor CMAE)results/scoliosis_hrnet/last.pth← último epoch (para retomar)results/scoliosis_hrnet/history.json← histórico de métricas
Retomar treino interrompido
python main.py --mode train \
--data_root ./data \
--resume results/scoliosis_hrnet/last.pth
Avaliação no conjunto de teste
python main.py --mode test \
--data_root ./data \
--ckpt results/scoliosis_hrnet/best.pth
Inferência numa radiografia
python main.py --mode infer \
--image caminho/para/radiografia.jpg \
--ckpt results/scoliosis_hrnet/best.pth
Servidor API REST
uvicorn server:app --host 0.0.0.0 --port 8000
Endpoint disponível:
POST /analyze
{
"estudoId": "uuid-do-estudo",
"imageUrl": "https://...signed-url..."
}
Resultados
| Métrica | Valor |
|---|---|
| CMAE médio | 2.83° |
| CMAE Torácico proximal (T1) | 2.62° |
| CMAE Torácico principal (T2) | 2.68° |
| CMAE Lombar | 3.18° |
| Referência | CMAE |
|---|---|
| AASCE Challenge SOTA | ~5–7° |
| Este modelo | 2.83° |
Interpretação clínica do ângulo de Cobb
| Ângulo | Severidade | Indicação |
|---|---|---|
| < 10° | Normal | — |
| 10°–25° | Leve | Observação periódica |
| 25°–40° | Moderada | Colete ortopédico |
| > 40° | Grave | Avaliação cirúrgica |
Arquitetura — HRNet-W32
- Mantém representações de alta resolução em paralelo durante todo o processamento
- 4 branches: [32, 64, 128, 256] canais
- ~29M parâmetros
- Cabeça de regressão: AdaptiveAvgPool → Linear(480, 256) → Linear(256, 3)
Referências
- Wang, J., et al. "Deep High-Resolution Representation Learning for Visual Recognition." TPAMI, 2020.
- MICCAI 2019 AASCE Challenge: Accurate Automated Spinal Curvature Estimation.
- Spinal AI 2024 Challenge Dataset.
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support