AI-Powered Chest X-Ray Disease Detection
Research · Medical AIScroll ↓Overview
An end-to-end medical-imaging system that screens chest X-rays for 14 thoracic diseases and runs fully offline on an Android phone.
Details
- Role
- Design & development
- Category
- Research · Medical AI
- Links
- GitHub ↗
- 112Ktraining images (NIH ChestX-ray14)
- 0.832macro-AUC (ensemble)
- 14thoracic diseases screened
01 — Data & Training Pipeline
- Trained multi-label classifiers on NIH ChestX-ray14 (112,120 images, 14 disease labels) using transfer learning, sigmoid outputs, data augmentation, LR scheduling and best-checkpoint saving.
- Benchmarked six model configurations across DenseNet121/201, ResNet34, EfficientNet-B0 and EfficientNetV2-S on Kaggle T4 GPUs, using gradient checkpointing and gradient accumulation to fit within 12-hour session limits.
02 — Results & Research Findings
- Deployed model (EfficientNetV2-S) reaches 0.826 macro-AUC; a DenseNet201 + EfficientNetV2-S ensemble reaches 0.832 macro-AUC.
- Showed that all architectures plateau near 0.82 AUC with identical per-class difficulty rankings, attributing the ceiling to label noise in NLP-extracted labels rather than model capacity.
- Ran controlled loss-function studies: weighted BCE reduced macro-AUC (0.816 → 0.804), and Asymmetric Loss required per-class decision thresholds to avoid false-positive flooding.
03 — On-Device Android Deployment
- Exported the model to ONNX (opset 17) with INT8 quantization, running offline through ONNX Runtime Mobile + NNAPI; chose ONNX over TFLite because EfficientNetV2-S's SiLU layers did not convert cleanly to TFLite.
- Built a Kotlin / Jetpack Compose app with gallery upload and CameraX capture, per-disease confidence scores, Grad-CAM heatmaps, prediction history, PDF report export, and support for loading custom-trained models.
Built with
Python / PyTorch / Torchvision / Scikit-learn / Pandas / ONNX / ONNX Runtime Mobile / NNAPI / Kotlin / Jetpack Compose / Material 3 / CameraX / FastAPI