Projects

Live demo

CBCT Scan Validator. A pass, review or reject on every scan as it lands.

An AI quality gate that inspects every incoming dental CBCT scan the moment it lands and returns a pass, review, or reject verdict, with the specific defect class and the exact action a technician should take, ideally before the patient leaves the chair.

Medical imaging AI · Quality gate 6 steps · synthetic data

Walk through it, six steps

Step 1 of 6

A scan lands

Studies arrive from the scanner via a chrooted SFTP endpoint or a scheduled drive mirror. An object-finalize event wakes the inference service, which scales from zero. Everything here is synthetic; real scans never leave the private environment.

UploadSynthetic data
SYNTH-0042.zip · DICOM series
event received · preprocessing
Step 1 of 6

Every name, number, transcript and document in this tour is synthetic. The mechanisms, thresholds and architecture are real. The production system and its data stay private.

The problem.

Bad scans had been slipping through for a decade: movement blur, cut-off fields of view, scanner artifacts. Each one discovered late costs a design-queue slot and a patient recall. A vendor quoted $98,200 upfront plus $2,200 a month to solve it. The bet: build it in-house on commodity cloud for two orders of magnitude less.

  • Cost vs vendor ~$50/mo vs $124,600 vendor year one, ~99% cheaper over 3 years
  • Best AUROC 0.82 patient-grouped, leakage-free eval, 191 scans
  • Inference 2.2 s OpenVINO on CPU, scale-to-zero Cloud Run
  • CI gate 85% accuracy on a fixed holdout or the build fails

How it fits together.

4 layers, left to right
  1. Training

    • PyTorch + Lightning + MONAI, six benchmarked architectures
    • Frozen nnU-Net encoder + slice-sequence head
    • DVC data versions · W&B and MLflow tracking
  2. Serving

    • FastAPI on Cloud Run, CPU only, scale to zero
    • PyTorch → ONNX → OpenVINO IR baked into the image
    • 2.2 s encoder pass · ~20 s event to verdict
  3. Data flow

    • SFTP endpoint + scheduled drive mirror into object storage
    • Lifecycle prefixes: intake, tensors, checkpoints, holdout, archive
    • Idempotent, self-healing sync with quarantine on repeat failure
  4. Guardrails

    • Header rules for defects the model cannot see
    • Confidence gates: 0.80 auto, 0.50 review
    • 85% CT gate in CI · tag-triggered releases

Where it landed.

Shipped about eight weeks ahead of the original schedule, at roughly $50 a month against a vendor's $124,600 first year. The honest part: after cleaning label leakage the best model sits at 0.82 AUROC, the benchmark showed the ceiling is training data rather than architecture, and the system is framed accordingly, a workflow quality gate with a human in the loop, not a diagnostic device. Every scan, name, and number in this tour is synthetic.

Concepts

3D medical imagingAnomaly detectionActive learningTrain/inference parityModel benchmarkingContinuous training gatesHonest evals

Stack

PyTorchMONAInnU-Net encoderOpenVINOFastAPICloud RunDVCW&BMLflowGitHub Actions