Chest X-Ray MLOps System
Classify chest X-rays as normal or abnormal through a deployable medical computer vision workflow.

- Problem
- Medical-CV repos usually stop at notebook inference.
- What I built
- A DenseNet121 classifier with a FastAPI service, Streamlit UI, and Grad-CAM output.
- My role
- Project author: inference service, Grad-CAM, Docker, and CI/CD delivery.
- Result
- Hosted Streamlit demo returning a prediction with a Grad-CAM heatmap.
Problem
What this project had to solve
Most medical-CV repos stop at notebook inference. This project packages chest X-ray classification with a model service, a usable front end, explainability output, and a repeatable deployment path.
Role / contribution
What I owned in the system
Project author responsible for the inference service, Grad-CAM integration, containerization strategy, frontend/backend separation, and the CI/CD path described in the repository.
Architecture flow
System flow from input to output
Image upload
What happens
A user submits a chest X-ray through the Streamlit interface.
Why it matters
This is the entry point that turns the model into a usable product flow instead of a notebook-only inference script.
Related tools
Engineering decisions
Tradeoffs that shaped the build
Decision 01
Separate frontend and backend
Decoupling the Streamlit UI from the FastAPI service keeps inference and presentation concerns independent.
Decision 02
Keep explainability in the response path
Grad-CAM is treated as part of the product behavior rather than an optional offline analysis step.
Decision 03
Automate deployment instead of shipping a notebook
CI/CD and Docker make the repo a deployable system rather than a one-off experiment.
Technical implementation
How the system is built
DenseNet121 runs behind a FastAPI service that handles image upload, preprocessing, prediction, and Grad-CAM generation.
A Streamlit interface acts as the user-facing layer so the app can expose predictions and visual explanations without coupling UI concerns to the backend service.
The runtime is containerized with Docker, and GitHub Actions builds and deploys the system through the repository's automated delivery path.
Stack
Core tools and system layers
Limits and next steps
What is not done yet
- Add stronger smoke tests around model artifact changes and image validation failure cases.
- Expand operational monitoring around prediction latency and malformed upload behavior.
- Document rollback and model-version promotion more explicitly.
Project explainer
Ask about this project
A case-study guide to the architecture and decisions behind Chest X-Ray MLOps System.