--- license: mit tags: - arxiv:2606.29085 - vesuvius-challenge - herculaneum - papyrology - computed-tomography - surface-detection - 3d-segmentation - resenc-unet - volumetric-imaging pipeline_tag: image-segmentation --- # Recto-surface 3D segmentation U-Net (`ps256`) Volumetric **3D U-Net** that segments the **recto writing surface** of carbonized Herculaneum papyri directly in micro-CT volumes. It is the recto-surface predictor used in the pipeline behind *"Complete virtual unwrapping and reading of a rolled Herculaneum papyrus"* (Angelotti et al., **arXiv:2606.29085**, 2026). ## Model details | | | |---|---| | Architecture | nnU-Net-style **3D residual-encoder U-Net** with concurrent spatial+channel squeeze-and-excitation (scSE) | | Instantiated via | `vesuvius` `NetworkFromConfig` (config bundled as `config.json`) | | `model_name` | `ps256_bs2_msr_default` | | Input | 1-channel CT, **256 × 256 × 256** patches, z-score normalised | | Output | 2 channels (surface vs background), `ignore_label = 2` | | Encoder | `features_per_stage` [32, 64, 128, 256, 320, 320, 320]; `n_blocks_per_stage` [1, 3, 4, 6, 6, 6, 6]; 3×3×3 kernels; stride-2 downsampling | | Loss | Medial Surface Recall (Skeleton-Recall-style) + Dice/CE | | Checkpoint | epoch 3504 · W&B run `d5jdo9n1` | ## Training data Manually annotated recto surfaces (voxelised from surface meshes) of **PHerc. 0139, 1667, 0343P, 0500P2, MAN Bp** (~116.5k training / ~2.4k validation patches). Full training configuration is in **Supplementary Table 1** of the paper. ## Files - `checkpoint_inference_ready.pth` — full checkpoint; network weights are under key `model` (808 tensors). The architecture config is embedded under `model_config` and mirrored in `config.json`. - `config.json` — architecture config for `NetworkFromConfig`. ## How to load ```python import torch ck = torch.load("checkpoint_inference_ready.pth", map_location="cpu", weights_only=False) state = ck["model"] # state_dict cfg = ck["model_config"] # == config.json # Build the network with the vesuvius package (NetworkFromConfig(cfg)), then: # net.load_state_dict(state) ``` The `vesuvius` package and inference code are in . ## Links - **Paper:** Angelotti et al., *Complete virtual unwrapping and reading of a rolled Herculaneum papyrus.* arXiv:2606.29085 (2026). - **Code:** - **Data:** · ESRF: - **Vesuvius Challenge:** ## Citation ```bibtex @misc{angelotti2026unwrapping, title = {Complete virtual unwrapping and reading of a rolled Herculaneum papyrus}, author = {Angelotti, Giorgio and others}, year = {2026}, eprint = {2606.29085}, archivePrefix = {arXiv}, primaryClass = {eess.IV}, doi = {10.48550/arXiv.2606.29085} } ``` ## License **MIT** — released by the Vesuvius Challenge. Note: the underlying tomographic data are distributed under **CC BY-NC 4.0** (see the data links above).