Instructions to use nessi10/chestxray14-cnn-vs-transformers with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- timm
How to use nessi10/chestxray14-cnn-vs-transformers with timm:
import timm model = timm.create_model("hf-hub:nessi10/chestxray14-cnn-vs-transformers", pretrained=True) - Notebooks
- Google Colab
- Kaggle
CNN vs. Transformers vs. Híbrido en radiografías de tórax (ChestX-ray14)
Los cuatro modelos entrenados de mi proyecto final de Aprendizaje Profundo (Maestría en Inteligencia Artificial, Universidad Panamericana, octubre de 2026). Cada uno lee una radiografía de tórax y da la probabilidad de 14 enfermedades a la vez. Comparé una red por familia, con la misma receta, los mismos datos y los mismos pesos de partida (ImageNet-1k):
| Carpeta | Familia | Parámetros | AUROC validación | AUROC test (IC 95 %) |
|---|---|---|---|---|
densenet121-leakyrelu |
CNN, hecha a mano capa por capa (LeakyReLU 0.01) | 7.0 M | 0.835 | 0.805 (0.799–0.811) |
deit-s |
Transformer puro | 21.7 M | 0.815 | 0.785 (0.776–0.791) |
swin-t |
Transformer jerárquico (atención en ventanas) | 27.5 M | 0.832 | 0.808 (0.803–0.813) |
coatnet-0 |
Híbrido (convolución y luego atención) | 26.7 M | 0.829 | 0.809 (0.803–0.814) |
El AUROC es el promedio de las 14 enfermedades en el test oficial de ChestX-ray14 (25,596 radiografías). El intervalo sale de 200 remuestreos de los pacientes del test.
- Código, notebooks e instrucciones: https://github.com/NestorHernandezRojo/proyecto-final-deep-learning-chestxray14
- Artículo (IEEE):
docs/articulo_final.pdfen ese mismo repositorio.
Cómo usarlos
# pip install torch torchvision timm safetensors pillow huggingface_hub
import sys
from huggingface_hub import snapshot_download
carpeta = snapshot_download("nessi10/chestxray14-cnn-vs-transformers")
sys.path.insert(0, carpeta)
from modelos_chestxray14 import cargar_modelo, predecir
modelo = cargar_modelo("densenet121-leakyrelu", carpeta) # o "deit-s", "swin-t", "coatnet-0"
print(predecir(modelo, "radiografia.png")) # {"Atelectasis": 0.12, "Cardiomegaly": 0.03, ...}
- Entrada: la radiografía se convierte a 3 canales, se lleva a 224×224 y a valores en [0, 1]. La normalización de cada modelo (la de ImageNet; 0.5 en CoAtNet-0) ya viene dentro del modelo, en los tensores
meanystd. - Salida: 14 logits; la sigmoide de cada uno es la probabilidad de esa enfermedad. Están en este orden: Atelectasis, Cardiomegaly, Effusion, Infiltration, Mass, Nodule, Pneumonia, Pneumothorax, Consolidation, Edema, Emphysema, Fibrosis, Pleural_Thickening y Hernia.
- Archivos de cada carpeta:
model.safetensors: los pesos.config.json: la arquitectura, el nombre en timm, la normalización, la mejor época y los AUROC.
- Carga:
- DeiT-S, Swin-T y CoAtNet-0 se arman con
timm.create_model(..., num_classes=14). - DenseNet-121 es mi implementación a mano, que está en
modelos_chestxray14.py.
- DeiT-S, Swin-T y CoAtNet-0 se arman con
Comprobé que estos archivos reproducen las probabilidades que guardé en Kaggle. La diferencia con las de Kaggle es menor a 0.002, y viene de que en Kaggle se calcularon con media precisión en GPU.
Cómo se entrenaron
Datos:
- 112,120 radiografías de 30,805 pacientes de ChestX-ray14, en su versión de 224×224.
- Separación oficial por paciente para el test; la validación también se separó por paciente.
Punto de partida: pesos de ImageNet-1k de timm:
densenet121.tv_in1kdeit_small_patch16_224.fb_in1kswin_tiny_patch4_window7_224.ms_in1kcoatnet_0_rw_224.sw_in1k
Se ajusta toda la red y se cambia la capa final por una de 14 salidas.
Receta (igual para los cuatro):
- AdamW con tasa de 1e-4, weight decay de 0.05 y coseno.
- Hasta 10 épocas con early stopping (paciencia de 3); se guarda la época con mejor AUROC de validación.
- Lotes de 32 y precisión mixta.
- BCE con peso √(N⁻/N⁺) por enfermedad.
- Aumento de datos: recorte de 80–100 %, rotación de ±7° y brillo y contraste de ±10 %.
- Semilla 42, en una Tesla T4 de Kaggle.
Limitaciones
- Uso académico, no clínico. No sirven para diagnosticar.
- Las etiquetas se extrajeron de forma automática de los informes. Su precisión estimada es mayor a 90 %, pero traen ruido.
- Los datos son de un solo hospital (NIH Clinical Center). La resolución de 224 píxeles puede borrar hallazgos pequeños, como los nódulos.
- Se usó una sola semilla por modelo. En una muestra de los pacientes, la misma receta varía con una desviación estándar de 0.005 de AUROC, así que las tres mejores quedan dentro de ese ruido.
- Los mapas Grad-CAM de estos modelos aciertan la caja del radiólogo en menos del 40 % de los casos: se leen con cautela.
Licencia y origen
- Pesos: son ajustes finos de los pesos de ImageNet-1k que publica timm, cuyas licencias se conservan:
- BSD-3-Clause para DenseNet-121 (torchvision);
- Apache-2.0 para DeiT-S y CoAtNet-0;
- MIT para Swin-T.
- Datos: ChestX-ray14 es del NIH Clinical Center (Wang et al., CVPR 2017).
- Uso: solo para fines académicos y de investigación.
Cita
Hernández Rojo, N. I. (2026). CNN (DenseNet-121) vs. Transformers (DeiT-S vs. Swin-T) vs. Híbrido (CoAtNet-0) en radiografías de tórax. Proyecto final de Aprendizaje Profundo, Maestría en Inteligencia Artificial, Universidad Panamericana.