File size: 3,158 Bytes
8ce8a46
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
---
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 <https://github.com/ScrollPrize/villa>.

## Links

- **Paper:** Angelotti et al., *Complete virtual unwrapping and reading of a rolled Herculaneum papyrus.* arXiv:2606.29085 (2026). <https://arxiv.org/abs/2606.29085>
- **Code:** <https://github.com/ScrollPrize/villa>
- **Data:** <https://scrollprize.org/data_browser> · ESRF: <https://cultural-heritage.esrf.fr/tomo>
- **Vesuvius Challenge:** <https://scrollprize.org>

## 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).