🦴 Detección de fracturas óseas — MobileNetV2

Modelo de clasificación binaria (fractura / normal) sobre radiografías óseas. Desarrollado como proyecto final de Aprendizaje Computacional (Ingeniería de Sistemas, Universidad de Córdoba).

Arquitectura: MobileNetV2 con transfer learning desde ImageNet + cabeza de clasificación personalizada. Umbral de decisión ajustado a 0.310 para priorizar la sensibilidad clínica (recall ≥ 0.95).

⚠️ Demostración académica. No es un dispositivo médico ni está validado clínicamente. No debe usarse para decisiones clínicas reales.

Demo interactiva

Prueba el modelo en el Space de Hugging Face: 👉 stevenrq8/fracturas-rayos-x

Uso

from huggingface_hub import hf_hub_download
from tensorflow import keras
import numpy as np
from PIL import Image

model = keras.models.load_model(
    hf_hub_download("stevenrq8/fracturas-modelo", "best_mobilenet.keras")
)

UMBRAL = 0.310
IMG_SIZE = (224, 224)

img = Image.open("radiografia.jpg").convert("RGB").resize(IMG_SIZE)
arr = np.asarray(img, dtype="float32")[None, ...]
p = float(model.predict(arr).ravel()[0])
etiqueta = "FRACTURA" if p >= UMBRAL else "NORMAL"
print(f"{etiqueta}  —  P(fractura) = {p:.1%}")

Datos de entrenamiento

Dataset base: Bone Fracture Multi-Region X-ray Data (Kaggle, bmadushanirodrigo, licencia ODC-By v1.0).

El split oficial tenía 63 % de duplicados y 873 grupos con fuga entre train/val/test. Se deduplicó y re-dividió antes del entrenamiento:

Split Normal Fractura Total
Train 1 611 1 127 2 738
Val 343 244 587
Test 328 235 563

Desbalance leve (59 % normal / 41 % fractura) corregido con class_weight.

Resultados (test set, umbral 0.310)

Métrica Valor
Accuracy 0.815
Recall (fractura) 0.953
Especificidad 0.649
Precision 0.661
F1 0.781
AUC-ROC 0.910
Tiempo inferencia (CPU) 0.070 s
Tamaño del modelo 9.3 MB

Comparativa de modelos (umbral 0.5)

Modelo Accuracy Recall AUC Tamaño
CNN desde cero 0.673 0.243 0.820 1.2 MB
MobileNetV2 0.815 0.796 0.910 9.3 MB
EfficientNetB0 0.798 0.681 0.919 43.4 MB

Se eligió MobileNetV2 por su mejor equilibrio entre recall, AUC y tamaño (viable en hardware CPU gratuito).

Entrenamiento

  • Framework: TensorFlow / Keras
  • Hardware: Google Colab (GPU T4)
  • Épocas: EarlyStopping (paciencia 5) + ReduceLROnPlateau
  • Regularización: Dropout 0.3, data augmentation, class_weight
  • Fine-tuning: descongelación de las últimas capas de MobileNetV2

Limitaciones

  • Dataset pequeño (3 888 imágenes únicas) — sobreajuste moderado (train AUC ~0.96 vs val ~0.84)
  • Mezcla de regiones anatómicas sin etiqueta explícita (muñeca, hombro, rodilla…)
  • Sin validación clínica por radiólogos
  • Una sola vista por caso, sin datos demográficos del paciente

Archivos

Archivo Descripción
best_mobilenet.keras Modelo final elegido para despliegue

Licencia

MIT — ver LICENSE.

Downloads last month
41
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for stevenrq8/fracturas-modelo

Finetuned
(84)
this model

Spaces using stevenrq8/fracturas-modelo 2

Evaluation results