Disclaimer: This article was created for the purpose of entering the All Things Agentic Hackathon hosted by Google Cloud and Devpost.
π‘ The Problem: Radiologist Burnout & DICOM Bottlenecks
Radiologists worldwide face extreme burnout, evaluating 50+ volumetric MRI scans daily. Each scan contains 24 to 40 high-resolution DICOM slices. Manually inspecting every plane, checking ligament continuity across depth slices, and dictating repetitive clinical reports takes 10 to 15 minutes per study.
We built RadScan AI to eliminate this workflow bottleneck.
By combining GCP Cloud Run (L4 GPU scale-to-zero microservices), a 2.5D Volumetric CNN-BiGRU Neural Network (trained on 819,100 DICOMs / 530 GB data), and Vertex AI Gemini 3.5 Flash / 1.5 Pro, RadScan AI acts as an autonomous radiology co-pilot that performs 12-target pathology detection, pinpoints lesion coordinates with Grad-CAM visual heatmaps, and drafts structured DICOM reports in under 3 secondsβsaving radiologists ~6 minutes per scan.
ποΈ System Architecture & GCP Infrastructure
RadScan AI is architected as two decoupled, serverless microservices on Google Cloud Platform:
flowchart TD
subgraph Client ["Next.js 14 Medical Workspace"]
A[1-Click Sample Buttons / DICOM Upload] --> B[Multi-Planar Slice Slider]
B --> C[Grad-CAM Heatmap Opacity Layer]
B --> D[Gemini Clinical Report Generator]
end
subgraph Backend ["FastAPI Microservice (GCP Cloud Run L4 GPU)"]
E[POST /api/v1/predict] --> F[2.5D Volumetric CNN-BiGRU Engine]
F --> G[Grad-CAM Heatmap Synthesizer]
E --> H[POST /api/v1/report]
H --> I[Google ADK / Vertex AI Gemini 3.5 SDK]
end
Client --> Backend
Key Technical Highlights:
- Frontend: Built with Next.js 14 (App Router), React 18, and Tailwind CSS. Features an interactive 24-slice DICOM viewer slider, Grad-CAM opacity toggles, and an interactive 6-step guided tour.
- Backend Microservice: Built with FastAPI and PyTorch, packaged in a multi-stage Docker container deployed to GCP Cloud Run with NVIDIA L4 GPU acceleration and scale-to-zero support ($0.00 idle cost).
-
LLM Engine: Vertex AI Gemini 3.5 Flash accessed via
google-cloud-aiplatformandgoogle-genaiSDK in native JSON mode (response_mime_type="application/json").
π§ The Math Behind the 2.5D Volumetric Neural Engine
Single 2D MRI slices often mimic tears due to volume averaging artifacts. RadScan AI processes 24 parallel depth slices across Sagittal, Coronal, and Axial planes simultaneously:
1. Depth-Wise BiGRU Temporal Slice Attention
For a 3D MRI volume stack S = {s1, s2, ..., s24}, spatial CNN features f_t = CNN(s_t) are fed into a Bidirectional GRU to track ligament continuity across consecutive depth slices:
- Forward Hidden State: h_fw(t) = GRU_fw(f_t, h_fw(t-1))
- Backward Hidden State: h_bw(t) = GRU_bw(f_t, h_bw(t+1))
- Combined Depth Feature: h_t = [h_fw(t) || h_bw(t)]
2. Grad-CAM Visual Explainability Heatmaps
The explainability weights alpha_k^c for target class c at feature map A^k are computed via backpropagated gradients across feature channels:
- Feature Gradient Weight: alpha_k^c = (1/Z) * sum_i sum_j ( dY^c / dA_{i,j}^k )
- Heatmap Activation: L_Grad-CAM = ReLU( sum_k ( alpha_k^c * A^k ) )---
β‘ Deployment & Scalability
Deploying to GCP Cloud Run ensures our backend scales down to 0 instances when idle, keeping cloud costs at virtually $0/month while serving fast, sub-second inference on demand:
# Build & Deploy Backend Microservice to Cloud Run
gcloud run deploy radscan-ai-backend \
--image gcr.io/YOUR_GCP_PROJECT_ID/radscan-ai-backend:v1 \
--platform managed \
--region us-central1 \
--memory 2Gi \
--cpu 2 \
--allow-unauthenticated
π Learnings & Future Roadmap
Building RadScan AI for the All Things Agentic Hackathon proved that combining high-performance computer vision with structured Gemini 3.5 LLM agents creates production-grade medical automation.
- GitHub Repository: https://github.com/Sahil5273/RadScan-AI
- Live Demo: https://radscan-ai-frontend-388740016983.us-central1.run.app
#AllThingsAgenticHackathon #GoogleCloud #VertexAI #Gemini #FastAPI #NextJS #AIHealthcare
This article was originally published by DEV Community and written by Sahil.
Read original article on DEV Community