CheXNet: Radiologist-Level Pneumonia Detection on Chest X-Rays with Deep Learning
Paper โข 1711.05225 โข Published
An ensemble of three fine-tuned CNNs for multi-label classification of 14 chest pathologies from frontal chest X-rays.
Cura is an end-to-end medical imaging pipeline that performs automated analysis of chest X-rays. This repository contains the three-model ensemble (DenseNet121 + DenseNet169 + ConvNeXt-Tiny) that achieved mean AUC of 0.8539 on the resized NIH ChestX-ray14 test set images (224x224), surpassing the original CheXNet paper (0.841).
| Disease | AUC | F1 (optimal threshold) |
|---|---|---|
| Atelectasis | 0.8255 | 0.4323 |
| Cardiomegaly | 0.9067 | 0.3931 |
| Effusion | 0.8906 | 0.5815 |
| Infiltration | 0.7191 | 0.4156 |
| Mass | 0.8659 | 0.4295 |
| Nodule | 0.7784 | 0.3342 |
| Pneumonia | 0.7812 | 0.1053 |
| Pleural Thickening | 0.8256 | 0.2381 |
| Pneumothorax | 0.8687 | 0.3591 |
| Consolidation | 0.8065 | 0.2417 |
| Edema | 0.8870 | 0.2691 |
| Emphysema | 0.9218 | 0.4953 |
| Fibrosis | 0.8201 | 0.1787 |
| Hernia | 0.9127 | 0.6207 |
| Mean | 0.8539 | โ |
| Architecture | Mean AUC |
|---|---|
| ConvNeXt-Tiny | 0.8449 |
| DenseNet121 | 0.8435 |
| DenseNet169 | 0.8414 |
| ResNet50 | 0.8368 |
| EfficientNet-B0 | 0.8291 |
| 3-model ensemble | 0.8539 |
| CheXNet (2017) | 0.841 |
DISEASES = [
'Atelectasis', 'Cardiomegaly', 'Effusion', 'Infiltration',
'Mass', 'Nodule', 'Pneumonia', 'Pleural_Thickening',
'Pneumothorax', 'Consolidation', 'Edema', 'Emphysema',
'Fibrosis', 'Hernia'
]
from safetensors.torch import load_file
from huggingface_hub import hf_hub_download
import torch
import torchvision.models as models
REPO_ID = "mjrq/cura-chest-xray"
def load_model(architecture, device):
path = hf_hub_download(repo_id=REPO_ID,
filename=f"{architecture}_best.safetensors")
if architecture == 'densenet121':
model = models.densenet121(weights=None)
model.classifier = torch.nn.Sequential(
torch.nn.Dropout(0.2),
torch.nn.Linear(model.classifier.in_features, 14)
)
elif architecture == 'densenet169':
model = models.densenet169(weights=None)
model.classifier = torch.nn.Sequential(
torch.nn.Dropout(0.2),
torch.nn.Linear(model.classifier.in_features, 14)
)
elif architecture == 'convnext_tiny':
model = models.convnext_tiny(weights=None)
model.classifier[2] = torch.nn.Sequential(
torch.nn.Dropout(0.2),
torch.nn.Linear(model.classifier[2].in_features, 14)
)
state_dict = load_file(path, device=str(device))
model.load_state_dict(state_dict)
model.eval()
return model.to(device)
This model is intended as a clinical decision support tool. It is meant to be an aid to radiologists, not a replacement. It should not be used as the sole basis for clinical decisions.
If you use this model, please cite:
@software{cura2026,
author = {mjrq},
title = {Cura: An AI-Powered Application for Chest X-Ray Analysis},
year = {2026},
url = {https://github.com/mjrq/Cura}
}