Back to featured work
Medical Computer Vision · MLOpsPrototype
Chest X-Ray MLOps interface displaying a chest radiograph alongside a Grad-CAM heatmap highlighting image regions that influenced the model prediction.
Grad-CAM explainability output. Recorded prototype output: the classifier returns Normal with a Grad-CAM visualization. The API calls 0.4068 abnormality_probability and uses 0.5 as the decision threshold; the captured interface labels that value “Confidence,” so this caption preserves the field's actual meaning.
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.
DenseNet121Grad-CAMFastAPI APIStreamlit UIDockerizedAzure delivery pathGitHub Actions

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

Step 01

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

Streamlit

Engineering decisions

Tradeoffs that shaped the build

  1. Decision 01

    Separate frontend and backend

    Decoupling the Streamlit UI from the FastAPI service keeps inference and presentation concerns independent.

  2. 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.

  3. 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

PyTorchDenseNet121FastAPIStreamlitDockerAzureGitHub ActionsGrad-CAM

Project explainer

Ask about this project

A case-study guide to the architecture and decisions behind Chest X-Ray MLOps System.