Projects

Guided tour

CBCT Scan Validator. In testing on real scans, with a pass, review or reject for each one.

An AI quality gate, in testing on real scans, that inspects each dental CBCT scan as 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.

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

Every name, transcript and document in this tour is synthetic, and so are the numbers on the sample screens. The numbers under The problem and Where it landed are real. The production system and its data stay private.

The problem.

Bad scans were slipping through: movement blur, cut-off fields of view, scanner artifacts. Each one discovered late costs a design-queue slot and a patient recall. A vendor had quoted a six figure build and a monthly fee to run it. The bet: build it in house on commodity cloud.

  • Google Cloud $62 October 1 to 28, measured, vs a six figure quote plus a monthly fee
  • Best AUROC 0.82 best benchmarked model, a frozen ConvNeXt probe, patient grouped, 191 scans
  • Inference 2.2 s OpenVINO, measured on a laptop CPU
  • 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 · about 27 s upload to verdict on a real scan
  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.

The integration work landed in April, ahead of a June plan, and it ran at $62 of Google Cloud in October, against a six figure vendor quote plus a monthly fee. The honest part: after cleaning label leakage the best benchmarked 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