Chest X-ray Triage Before the Report Exists: Distilling a Multimodal Teacher into an Edge Model

Xinye Yang · · 8 min read

TL;DR. In an emergency department, chest X-rays are triaged before anyone writes the report, so a model that needs image and text cannot run at the moment it is needed. In our Smart Health paper (oral at IEEE/ACM CHASE 2026) we train an image-only student from a multimodal teacher, and we make the teacher's target the average of its predictions over five reports that MedGemma-27B writes for the same image. We call this Variational Risk Minimization (VRM). The student is 75 MB, runs in 14 ms on an RTX 2060, and reaches AUC 0.842 on MIMIC-CXR. Sending the 20.3% of cases it is unsure about to the cloud teacher gives AUC 0.941 at 103 ms average latency. Code: vrm-edge-triage.


The problem: the report comes after the decision

Multimodal models such as BiomedCLIP and Med-SigLIP are strongest when they see the image and the radiology report together. Triage is the step that decides which study a radiologist reads first, so at triage time the report does not exist yet. The text is not missing at random; the workflow removes it every time. We call this structural modality censorship: a train-test mismatch built into the clinical process.

Deployment adds a second constraint. A large model in the cloud brings latency, a network dependency and data-governance work. A model on the reading-room workstation is fast and keeps data local, but it has to be small, and it still has no report.

Two obvious fixes, and why they fall short

The idea: average over the reports you could have written

Treat the missing report as a latent variable. For each training image, sample K reports from a vision-language model, run the multimodal teacher on the image with each one, and average:

target(x) = (1/K) · Σ_k teacher(x, report_k),   report_k ~ LVLM(x)

This is a Monte Carlo estimate of the teacher's prediction marginalized over plausible readings of the image. Its variance shrinks roughly as 1/K, and one bad report moves it by a fifth instead of all the way.

The concrete setup in the paper:

What averaging buys

The clearest evidence is in how the target behaves as K grows:

TargetMean AUCStd over 100 drawsRange
One random report (K = 1)0.8080.0190.755–0.852
Three reports (K = 3)0.8250.0110.798–0.852
Five reports (K = 5, VRM)0.8420.0050.829–0.855

Three more results point the same way:

Returns flatten after five: the paper reports a 6.2% AUC gain from K = 1 to K = 5 and 0.3% more at K = 10, while sampling and training cost grow linearly.

Results against the baselines

ModelMIMIC-CXR AUCExternal avg AUCLatency
Standard KD (logits + features)0.7480.70816 ms
DINOv2-RadBench, fine-tuned0.8210.78024 ms
CXR Foundation, fine-tuned0.8240.78422 ms
EVA-X, fine-tuned0.8280.78829 ms
MC Dropout (EVA-X, 20 passes)0.8330.794412 ms
VRM student0.8420.80614 ms
MedGemma-27B, few-shot, asked directly0.7620.7311,930 ms
Llama-3.2-11B-Vision, few-shot0.4360.4121,850 ms

The external average covers CheXpert, IU-CXR, PadChest and a private hospital cohort. The comparison follows an encoder-transfer protocol: the VRM student starts from the same encoder family as the fine-tuned baseline it is compared with, so the difference reflects how it was supervised, not which backbone it started from.

The gain over the best fine-tuned encoder is small in AUC: 1.4 points, significant under a paired DeLong test (p = 0.008). The larger differences show up where triage needs them:

Asking a large vision-language model directly is not a substitute: MedGemma-27B reached 0.762 with four examples in the prompt, at more than a hundred times the student's latency, and general-purpose models scored below 0.44.

A cascade: edge first, cloud when unsure

The student runs on every study. If its confidence is high and its predictive entropy is low, its answer stands; otherwise the study goes to the cloud teacher. The two thresholds were set on the validation split to escalate about one case in five and then frozen.

ConfigurationMIMIC-CXR AUCExternal avg AUCEscalatedAvg latency
Student only0.8420.8060%14 ms
Teacher only0.9620.915100%450 ms
Cascade0.9410.89220.3%103 ms

Average latency follows from the escalation rate: 0.797 × 14 ms + 0.203 × 450 ms ≈ 103 ms. The threshold is a dial: escalate more to approach the teacher's accuracy, less to stay local. In the paper's setup, escalated cases are de-identified at the edge or sent to the hospital's private cloud.

What it does not fix

When this pattern applies

The setting is not specific to chest X-rays. Any time a modality is available for training but structurally absent when the decision is made, you can sample the missing modality from a generative model and distill from the averaged teacher: lab results that return hours later, notes written at discharge, reads that arrive after a scan is scheduled. A short checklist:

Try it

The repository vrm-edge-triage has the teacher (BiomedCLIP with Latent Query Alignment), the student with EVA-X encoder transfer, the VRM losses and the scripts for each step:

python scripts/generate_variational_samples.py --data_root data/mimic_cxr --split train \
  --k_samples 5 --output_file data/mimic_cxr/train_variational_samples.json
python scripts/train_teacher.py --data_root data/mimic_cxr --output_dir outputs/teacher
python scripts/train_student_vrm.py --data_root data/mimic_cxr \
  --teacher_checkpoint outputs/teacher/best_model.pt \
  --samples_file data/mimic_cxr/train_variational_samples.json \
  --output_dir outputs/student_vrm
python scripts/evaluate.py --model student --checkpoint outputs/student_vrm/best_model.pt \
  --data_root data/mimic_cxr

Training needs your own credentialed copy of MIMIC-CXR. The repository README lists the data layout and the EVA-X checkpoint the student starts from. Q-DISTILL, from the same line of work, is a self-supervised Q-Former distillation for image-only chest X-ray triage using MedGemma pseudo-reports.

FAQ

How do you train an image-only model when reports are only available at training time? Train a multimodal teacher on image and report, then distill it into an image-only student. VRM makes the teacher target an average over several reports sampled from a vision-language model for the same image, instead of one report, so the student learns from a stable, uncertainty-aware target.

How is VRM different from standard knowledge distillation? Standard distillation matches one teacher output per image. VRM matches the teacher's prediction averaged over K sampled reports. On MIMIC-CXR this gave AUC 0.842, against 0.748 for standard KD and a mean of 0.808 when one randomly chosen report is used instead of five.

How many sampled reports are needed? Five was the practical choice in our experiments: the paper reports a 6.2% AUC gain from K = 1 to K = 5 and only 0.3% more at K = 10, while training time grows linearly with K.

Does the deployed model need a report or a language model at inference? No. The student reads the image only: 75 MB and 14 ms per image on an RTX 2060. In the cascade, only cases the student is unsure about (20.3%) go to the cloud teacher.

Is the code available? Yes, at github.com/Yangxinyee/vrm-edge-triage: the teacher, the student, the VRM losses, offline report sampling, and training and evaluation scripts. Training needs your own credentialed copy of MIMIC-CXR.