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

  1. Descarregar o dataset em Spinal AI 2024
  2. 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

  1. Wang, J., et al. "Deep High-Resolution Representation Learning for Visual Recognition." TPAMI, 2020.
  2. MICCAI 2019 AASCE Challenge: Accurate Automated Spinal Curvature Estimation.
  3. Spinal AI 2024 Challenge Dataset.
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support