The research behind Astraea Health

01What it does

cell-level triage for leukemia screening

The cells that matter most, seen first.

Acute lymphoblastic leukemia is diagnosed by examining a blood smear one cell at a time. This network ranks every cell by how closely it resembles a leukemic lymphoblast, so the reviewer reaches the most suspicious ones sooner — running entirely in the browser, with no image ever leaving the device.

Same cells, same reviewer, better order.

The model takes one already-isolated cell image and returns a number between 0 and 1: how closely it resembles the leukemic lymphoblasts it was trained on. Run across a smear, those numbers give an order — the cells most worth a second look, first.

That is the whole idea, and it is deliberately modest. Nothing is removed from the review. Nothing is decided. The reviewer still sees every cell on the slide; they simply reach the interesting ones earlier instead of working through in arbitrary order. On a slide carrying hundreds of cells, the order you meet them in is most of the work.

It also runs in a place that matters. The whole network is 47.7 MB and executes inside the browser tab, on the visitor's own machine. There is no server, no upload, and no account — which means no patient image ever leaves the device it was opened on, and the tool works anywhere a browser does.

02Background

background

The hardest part is telling two very similar cells apart.

Acute lymphoblastic leukemia is the most common cancer in children. It begins in the bone marrow, which starts producing immature lymphocytes — lymphoblasts — in enormous numbers, crowding out the healthy blood cells the body needs.

Diagnosis starts at a microscope. A stained smear of blood or marrow is examined cell by cell, and each cell has to be placed on one side of a line: is this a malignant lymphoblast, or something benign?

That question is much harder than it sounds. Healthy marrow — particularly in children, and particularly while recovering from an illness — produces hematogones, entirely ordinary immature B-cells. Under the microscope they look very similar to lymphoblasts: same rough size, same high ratio of nucleus to cytoplasm, same fine chromatin.

Telling them apart reliably is a learned skill that takes years, and the people who have it are concentrated in a small number of centres.

03Results

measured on held-out patients

Eleven patients the network had never seen.

held-out test setsubject-disjoint

dataset
C-NMC 2019 · ISBI challenge, paediatric B-ALL
patients
11 test · 51 train · 11 validation
cells
1,882 · 1,094 leukemic · 788 normal
split
by patient, 70/15/15 · seed 42
threshold
0.770 · chosen on validation patients
  • 851 flagged
  • 243 missed
  • 36 false flags
  • 752 cleared
One mark per test cell. The full field, grouped by outcome, is below.
1,882

single cells in the test set, from 11 patients held out of training entirely

0.959

precision — of every 100 cells it flags, about 96 really are leukemic

0.858

ROC AUC — how well it ranks cells, independent of any threshold

47.7MB

the whole network, downloaded once and run inside your browser

At the 0.770 threshold it missed 243 of 1,094 leukemic cells in the test set — sensitivity 0.778. An unflagged cell has not been cleared; the reviewer still reads every one.

1,882 cells, and what happened to each one

Every cell in the test set is one mark. The upper block is the 1,094 cells that actually were leukemic; the lower block is the 788 that were not. Violet is a leukemic cell the model flagged, rose a leukemic cell it missed, and a steel ring a normal cell it flagged in error.

Select a group to isolate it. Only 36 of the 788 healthy cells were flagged in error, which is what keeps the flagged list worth reading.

The confusion matrix

Counts at the decision threshold of 0.770. Rows are what the cell was; columns are what the model said.

Model flaggedModel did not flagTotal
Actually leukemic 851true positives 243false negatives 1,094
Actually normal 36false positives 752true negatives 788
Total8879951,882

The metrics

MeasureValueIn cells
Precision0.959 Of the 887 cells it flagged, 851 really were leukemic.
Specificity0.954 Of 788 normal cells it cleared 752 and falsely flagged 36.
Sensitivity0.778 Of 1,094 leukemic cells it flagged 851.
F10.859 Harmonic mean of precision and sensitivity.
ROC AUC0.858 Threshold-independent ranking quality.
Accuracy0.852 1,603 of 1,882 cells put on the right side. The least useful line in this table — the classes are unbalanced and the two errors are not equally bad.

Precision is what makes the ordering useful. At the 0.770 threshold, 96 of every 100 flagged cells really are leukemic, so a reviewer working down the flagged list meets real lymphoblasts almost immediately rather than wading through false alarms. Sensitivity of 0.778 is the reason this is a starting order and not a filter: the reviewer reads the whole slide either way, and the ranking only changes what they see first.

the full trade-off

Every threshold is a choice about which errors you prefer.

Lowering it catches more leukemic cells and raises the false alarms a reviewer has to wade through. Raising it does the reverse. 0.770 is one point on that curve, and it was chosen on validation patients, never on these.

ROC on the subject-disjoint test set, AUC 0.858. The marked point is the operating threshold of 0.770 — a false-positive rate of 0.046 for a true-positive rate of 0.778. Curve and operating point are both read off the project's own plot, the curve traced to about one pixel.

04Method

How it was built, in nine decisions.

01

Data

C-NMC 2019, the ISBI challenge set of single-cell images from paediatric B-lineage ALL, colour-normalised and pre-segmented.

02

Split

By patient, 70/15/15, stratified by class, seed 42 — 51 training, 11 validation, 11 test. Subject-disjointness verified before training, not assumed.

03

Architecture

ResNet-50 pretrained on ImageNet, fine-tuned end to end.

04

Input

224×224×3 NHWC float32, Caffe-style: RGB to BGR, then per-channel means [103.939, 116.779, 123.68] subtracted. No 0–1 rescale.

05

Loss

Focal loss weighted toward the leukemic class, so the class imbalance could not quietly optimise the model into ignoring positives.

06

Output

A single sigmoid giving P(normal), since class index 1 is normal. Everything here uses P(leukemic) = 1 − that.

07

Threshold

0.770, chosen on a stratified subset of the validation patients. The test set was scored once, at that threshold, and never used to pick it.

08

Evaluation

1,882 cells from the 11 test patients: 1,094 leukemic, 788 normal.

09

Demo weights

The browser copy stores weights at float16 — half the bytes, scores differing by up to about 0.002. Every metric here came from the float32 export.

validation method

How it was tested.

C-NMC contains many cells per patient. Dividing the images at random would place cells from the same patient in both the training set and the test set, so the evaluation here splits by patient instead.

Cells from one patient share a blood draw, a staining batch, a slide, a microscope, and a lighting setup. Those leave a signature on every image — a cast, a texture, a background tint — that has nothing to do with whether the cell is malignant. A network with cells from patient 07 in its training set does not have to learn what a lymphoblast is in order to score patient 07's test cells; it can learn what patient 07 looks like, and recall the label.

The first version of the split was by image. The published split is by patient, verified subject-disjoint before training began. Every number on this page comes from eleven patients the network had never seen in any form.

Schematic, not data. Under a random split by image, patient 07's cells are on both sides and the label can be recovered by recognising the patient. Under a split by patient, patient 07 is on one side only, and the test set asks a question the network has not already been given the answer to.

The same architecture, the same data, the same recipe. The only change was which folder each file went into.

Measure Split by imagethe easy score Split by patientwhat is published Change
F1 0.9530.859 −0.094
Sensitivity 0.9470.778 −0.169

A patient-level split scores lower, and it is the split that matches the question a clinic would ask: how does this behave on someone it has never met? The published figures are measured that way.

05Limits

scope

Where this applies, and where it doesn't.

Everything below is a boundary on what has actually been measured. It is here so the results above can be read for what they are.

01 Has it been validated clinically?

No. No prospective study, no reader study, no hospital, no regulatory review of any kind. Nothing here establishes that it helps a real pathologist on a real case.

02 How many datasets has it seen?

One — C-NMC 2019. Performance on images from a different hospital, scanner, stain protocol, or segmentation pipeline is unknown, and the split-by-patient result above is a direct reminder of how much acquisition can matter.

03 Can it find cells in a whole slide?

No. The input has to be pre-segmented — individual cells, already cut out and centred. Finding and isolating the cells is a separate problem this project does not touch.

04 What about stain variation?

The images are colour-normalised; C-NMC ships that way. Raw slide images with their real stain variation are a different distribution.

05 Which patients does it apply to?

Paediatric B-lineage only. The dataset is childhood B-cell ALL. T-lineage disease, adult patients, and other malignancies are outside anything that was measured.

06 Can it say "this is not a cell"?

No. The two classes are the only two options. It cannot say "this is a neutrophil", "this is a smudge cell", or "this image is not a cell". It sorts everything onto a leukemic/normal axis, including things that belong on neither.

07 What does a cell it doesn't flag mean?

It means the model did not rank that cell highly — nothing more. At the published threshold it flagged 851 of 1,094 leukemic cells, so an unflagged cell has not been cleared of anything. This is a ranking aid for a reviewer who reads every cell, and it only works as one.