ink9-depth-window — checkpoints
Five arms measuring how much depth the 9 µm ink model actually needs, and what happens when the z-jitter does not shrink with the window.
Full method, blind judgement protocol, sealed preregistrations and results: https://github.com/pscamillo/ink9-depth-window
Which file is which
Every arm is the official aligned21_hybrid_3d2d recipe with one thing
changed. Same corpus, same seed (42), same 78,125 iterations at batch 64.
| file | window | jitter | verdict vs. m17 |
|---|---|---|---|
m17-step077500.pth |
17 slices, 163.1 µm | ±2 | baseline — replica of the official recipe |
b13-step077500.pth |
13 slices, 124.7 µm | ±2 | indistinguishable, 60/60 ties |
b09-step077500.pth |
9 slices, 86.4 µm | ±2 | indistinguishable, 60/60 ties |
b05-step077500.pth |
5 slices, 48.0 µm | ±2 | breaks, 58–0, p = 0.0000 |
b05j0-step077500.pth |
5 slices, 48.0 µm | 0 | indistinguishable, 60/60 ties |
m17L-step077500.pth |
17 slices, 163.1 µm | ±2 | indistinguishable, 60/60 ties — trained on the corrected labels of 2026-08-18 |
b05 and b05j0 have the same window. The only difference is
flat_z_window_jitter.max_offset, 2 against 0. That pair is the point of the
whole thing: at 5 slices, ±2 shifts the window by 40% of its own width, and that
— not the missing depth — is what breaks it.
Running one
The checkpoints embed their training config, so inference rebuilds the model and its normalisation contract on its own. Same CLI as the official release:
python -m koine_machines.inference.infer \
<segment_9um_iso.zarr> b05j0-step077500.pth out.tif \
--overlap 0.5 --blend-mode hann --batch-size 4 --no-compile
Each arm reads the depth it was trained with from the same 21-slice pooled input, so nothing about the input has to change between them.
Display: with bce_label_smoothing 0.5 the confident background sits near
64, not 0. Rescale with (p − 64) / 128 clipped to [0,1] or the maps look like
uniform grey even when they carry signal.
Two things to know before comparing against anything else
Step 77,500, not 78,125. With num_iterations: 78125 and
save_every: 2500, the trainer writes at multiples of 2,500, so the last file
is 77,500 — 99.2% of training. All five arms are at the same step, so the
comparisons among them are clean. Worth knowing when comparing against the
released checkpoints, which follow the same pattern at save_every: 5000.
Labels. The five depth-axis arms trained on the ink_9um labels as they
stood before the 2026-08-18 correction, when the seam regions from the alignment pipeline
were unmasked. The defect is common to every arm — each comparison is between
two models that saw identical supervision — but these weights are not
directly comparable with models trained after the fix. m17L-step077500.pth is the 17-slice arm retrained on the corrected labels:
60 ties out of 60 against m17 under the same blind protocol, so the change
does not move the model. Measured impact per segment is in
results/label_correction_impact.json in the GitHub repo: median change 0.0%,
mean +2.5% pulled by a single outlier.
Limits
One seed per arm. One judge for all 300 blind comparisons. Region-held-out rather than segment-held-out validation, so nothing here speaks to cross-scroll generalisation. The full list is in the repository README, worth reading alongside these weights.
Derived from Vesuvius Challenge data and models (scrollprize/ink_9um, the
open-data S3 bucket) and subject to the terms of those sources. Code and
results in the GitHub repo are MIT.
Model tree for pscamillo/ink9-depth-window
Base model
scrollprize/ink_9um