# TSM student checkpoint: Paris 4, bands-only recipe, 50k of a 100k run (2026-09-11) Same architecture and head layout as tsm_paris4_rvfw_30k (multi-head 3D conv student, ~20M params, 2.4 um, 128^3 crops): two-face surface SDF (sdf_in/sdf_out + valid), ink, winding (sin/cos/density/normal/conf), fibre (vt/hz). Trained on the PHercParis4 slab (z 34176..34432, 6144^2 xy) with bands-only face labels, merged winding source, fibre class head and strong augmentation; train_config.json is the exact config. Why 50k and not the final 100k: on the held-out Paris 4 region the voxel metrics keep improving with steps (in-face Dice@2 0.53 -> 0.55 -> 0.56 -> 0.57 at 30k/50k/70k/100k, ink AUPRC 0.69 -> 0.76) but the surface zero-crossing fragments into spurious sheets inside crumpled regions (spurious sheets per 100 label sheets 14 -> 31 -> 52 -> 59). 50k is the compromise: fewest merges (14/100), fewest missed sheets (3/100), best fibre accuracy (0.63). Use tsm_paris4_rvfw_30k if you want the cleanest surface topology. The 100k metrics are included for reference (Paris 4 held-out and a never-seen PHerc1667 region). - ckpt_50000.pt: torch checkpoint; load with tsm.infer.load_student (https://github.com/SuperOptimizer/tsm, main). - Output byte encodings: sdf (u-128)*clip/127 (clip 20), probabilities u/255, signed (u-127.5)/127.5, density u/1000.