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.
Walk through it, six steps
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.
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.
- $62 October 1 to 28, measured, vs a six figure quote plus a monthly fee
- 0.82 best benchmarked model, a frozen ConvNeXt probe, patient grouped, 191 scans
- 2.2 s OpenVINO, measured on a laptop CPU
- 85% accuracy on a fixed holdout or the build fails
How it fits together.
Training
- PyTorch + Lightning + MONAI, six benchmarked architectures
- Frozen nnU-Net encoder + slice-sequence head
- DVC data versions · W&B and MLflow tracking
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
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
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.

