EVA¶
Maps to task: Classification — frozen-tile linear-probe runs of the binary / multiclass classification heads reproducing the kaiko-ai/eva patch-classification leaderboard.
Note
This page is generated from the registered benchmark definition — the protocol
summary and reference numbers from the Benchmark object’s expected() rows
(packaged soma/benchmarks/reference/eva.csv), and the command from the benchmark name. Edit the registry
(soma/benchmarks/eva.py) and the CSV, not this page; python docs/_generate_reference.py
re-emits it and tests/test_docs.py guards the two from drifting.
EVA is registered as one sub-benchmark per dataset (eva/<dataset>), each
sharing the same offline linear-probe recipe and varying only the encoder axis.
soma reproduce eva fans out over the whole family; a single eva/<dataset>
reproduces one dataset.
The frozen-tile-probe protocol¶
Stated once, shared by every dataset:
Setting |
Value |
|---|---|
head |
linear probe ( |
optimizer |
AdamW, lr |
batch size |
|
budget |
eva’s |
metric |
|
varied axis |
|
primary metric |
|
canonical seeds |
|
Encoders¶
The encoder axis maps a soma encoder onto an EVA leaderboard backbone:
Encoder |
EVA backbone |
|---|---|
|
eva |
|
eva |
Datasets¶
Where EVA ships only train/validation, the EVA validation split becomes soma
test and the run sets tune_is_test: true (train-on-all-train /
evaluate-on-validation); patch_camelyon has a real held-out test split:
Benchmark |
Task head |
Eval split |
|---|---|---|
|
|
EVA validation ( |
|
|
EVA validation ( |
|
|
EVA validation ( |
|
|
EVA validation ( |
|
|
EVA validation ( |
|
|
EVA test (real val + test) |
Reproduced numbers¶
What soma has actually measured, recorded by soma reproduce --record into the
packaged results ledger (soma/benchmarks/results/eva.csv) alongside the commit
and slide2vec version that produced each number. The Reference column is the
published EVA balanced-accuracy band (keyed by dataset × encoder, from kaiko-ai/eva pathology leaderboard); only cells that have been run appear, each with its delta to that band:
Dataset |
Encoder |
soma (mean ± std) |
Seeds |
Reference |
Δ |
Recorded (date @ commit) |
|---|---|---|---|---|---|---|
bach |
uni2 |
0.914 ± 0.007 |
5 |
0.915 |
-0.001 |
2026-06-19 @ |
bach |
virchow2 |
0.870 ± 0.010 |
5 |
0.883 |
-0.013 |
2026-06-19 @ |
breakhis |
uni2 |
0.855 ± 0.006 |
5 |
0.859 |
-0.004 |
2026-06-19 @ |
breakhis |
virchow2 |
0.812 ± 0.008 |
5 |
0.821 |
-0.009 |
2026-06-19 @ |
crc |
uni2 |
0.966 ± 0.001 |
5 |
0.965 |
+0.001 |
2026-06-19 @ |
crc |
virchow2 |
0.966 ± 0.001 |
5 |
0.967 |
-0.001 |
2026-06-19 @ |
gleason_arvaniti |
virchow2 |
0.778 ± 0.010 |
5 |
0.783 |
-0.005 |
2026-07-09 @ |
gleason_arvaniti |
uni2 |
0.779 ± 0.005 |
5 |
0.775 |
+0.004 |
2026-07-09 @ |
Reproduce¶
soma reproduce curates the raw layout, trains the linear probe over the
canonical seeds, reads test/balanced_accuracy from summary.json, and
tolerance-checks it against the band above. Reproduce one dataset:
soma reproduce eva/bach --raw-root /path/to/eva/bach
soma reproduce eva/breakhis --raw-root /path/to/eva/breakhis
soma reproduce eva/crc --raw-root /path/to/eva/crc
soma reproduce eva/gleason_arvaniti --raw-root /path/to/eva/gleason_arvaniti
soma reproduce eva/mhist --raw-root /path/to/eva/mhist
soma reproduce eva/patch_camelyon --raw-root /path/to/eva/patch_camelyon
…or fan out over the whole family in one go (each member owns a per-dataset subdirectory):
soma reproduce eva --raw-root /path/to/eva
Pick the encoder axis with --encoder (default uni2); --seeds 1 runs a single-seed smoke.
See also
Classification — the task heads the probe trains (binary, multiclass).
Benchmarking — the shared curate → run → leaderboard → reproduce guide.
Curation — the EVA curators and split policy.