grgngl commited on
Commit
8ce8a46
·
0 Parent(s):

Recto-surface 3D segmentation U-Net (ps256) — checkpoints + model card (arXiv:2606.29085)

Browse files
Files changed (4) hide show
  1. .gitattributes +35 -0
  2. README.md +83 -0
  3. checkpoint_inference_ready.pth +3 -0
  4. config.json +163 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ tags:
4
+ - arxiv:2606.29085
5
+ - vesuvius-challenge
6
+ - herculaneum
7
+ - papyrology
8
+ - computed-tomography
9
+ - surface-detection
10
+ - 3d-segmentation
11
+ - resenc-unet
12
+ - volumetric-imaging
13
+ pipeline_tag: image-segmentation
14
+ ---
15
+
16
+ # Recto-surface 3D segmentation U-Net (`ps256`)
17
+
18
+ Volumetric **3D U-Net** that segments the **recto writing surface** of carbonized
19
+ Herculaneum papyri directly in micro-CT volumes. It is the recto-surface predictor
20
+ used in the pipeline behind *"Complete virtual unwrapping and reading of a rolled
21
+ Herculaneum papyrus"* (Angelotti et al., **arXiv:2606.29085**, 2026).
22
+
23
+ ## Model details
24
+
25
+ | | |
26
+ |---|---|
27
+ | Architecture | nnU-Net-style **3D residual-encoder U-Net** with concurrent spatial+channel squeeze-and-excitation (scSE) |
28
+ | Instantiated via | `vesuvius` `NetworkFromConfig` (config bundled as `config.json`) |
29
+ | `model_name` | `ps256_bs2_msr_default` |
30
+ | Input | 1-channel CT, **256 × 256 × 256** patches, z-score normalised |
31
+ | Output | 2 channels (surface vs background), `ignore_label = 2` |
32
+ | 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 |
33
+ | Loss | Medial Surface Recall (Skeleton-Recall-style) + Dice/CE |
34
+ | Checkpoint | epoch 3504 · W&B run `d5jdo9n1` |
35
+
36
+ ## Training data
37
+
38
+ Manually annotated recto surfaces (voxelised from surface meshes) of
39
+ **PHerc. 0139, 1667, 0343P, 0500P2, MAN Bp** (~116.5k training / ~2.4k validation
40
+ patches). Full training configuration is in **Supplementary Table 1** of the paper.
41
+
42
+ ## Files
43
+
44
+ - `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`.
45
+ - `config.json` — architecture config for `NetworkFromConfig`.
46
+
47
+ ## How to load
48
+
49
+ ```python
50
+ import torch
51
+ ck = torch.load("checkpoint_inference_ready.pth", map_location="cpu", weights_only=False)
52
+ state = ck["model"] # state_dict
53
+ cfg = ck["model_config"] # == config.json
54
+ # Build the network with the vesuvius package (NetworkFromConfig(cfg)), then:
55
+ # net.load_state_dict(state)
56
+ ```
57
+ The `vesuvius` package and inference code are in <https://github.com/ScrollPrize/villa>.
58
+
59
+ ## Links
60
+
61
+ - **Paper:** Angelotti et al., *Complete virtual unwrapping and reading of a rolled Herculaneum papyrus.* arXiv:2606.29085 (2026). <https://arxiv.org/abs/2606.29085>
62
+ - **Code:** <https://github.com/ScrollPrize/villa>
63
+ - **Data:** <https://scrollprize.org/data_browser> · ESRF: <https://cultural-heritage.esrf.fr/tomo>
64
+ - **Vesuvius Challenge:** <https://scrollprize.org>
65
+
66
+ ## Citation
67
+
68
+ ```bibtex
69
+ @misc{angelotti2026unwrapping,
70
+ title = {Complete virtual unwrapping and reading of a rolled Herculaneum papyrus},
71
+ author = {Angelotti, Giorgio and others},
72
+ year = {2026},
73
+ eprint = {2606.29085},
74
+ archivePrefix = {arXiv},
75
+ primaryClass = {eess.IV},
76
+ doi = {10.48550/arXiv.2606.29085}
77
+ }
78
+ ```
79
+
80
+ ## License
81
+
82
+ **MIT** — released by the Vesuvius Challenge. Note: the underlying tomographic data
83
+ are distributed under **CC BY-NC 4.0** (see the data links above).
checkpoint_inference_ready.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dd36b3a89b2f4e21a6cafa14fea459f775f846a6ed036f75fb8e6b65aee3137b
3
+ size 1138388181
config.json ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "squeeze_excitation": true,
3
+ "squeeze_excitation_type": "scse",
4
+ "patch_size": [
5
+ 256,
6
+ 256,
7
+ 256
8
+ ],
9
+ "train_patch_size": [
10
+ 256,
11
+ 256,
12
+ 256
13
+ ],
14
+ "batch_size": 2,
15
+ "train_batch_size": 2,
16
+ "targets": {
17
+ "surface": {
18
+ "valid_patch_value": 1,
19
+ "activation": "none",
20
+ "ignore_label": 2,
21
+ "losses": [
22
+ {
23
+ "name": "MedialSurfaceRecall",
24
+ "weight": 1.0
25
+ }
26
+ ],
27
+ "out_channels": 2
28
+ }
29
+ },
30
+ "model_name": "ps256_bs2_msr_default",
31
+ "in_channels": 1,
32
+ "enable_deep_supervision": false,
33
+ "features_per_stage": [
34
+ 32,
35
+ 64,
36
+ 128,
37
+ 256,
38
+ 320,
39
+ 320,
40
+ 320
41
+ ],
42
+ "n_blocks_per_stage": [
43
+ 1,
44
+ 3,
45
+ 4,
46
+ 6,
47
+ 6,
48
+ 6,
49
+ 6
50
+ ],
51
+ "kernel_sizes": [
52
+ [
53
+ 3,
54
+ 3,
55
+ 3
56
+ ],
57
+ [
58
+ 3,
59
+ 3,
60
+ 3
61
+ ],
62
+ [
63
+ 3,
64
+ 3,
65
+ 3
66
+ ],
67
+ [
68
+ 3,
69
+ 3,
70
+ 3
71
+ ],
72
+ [
73
+ 3,
74
+ 3,
75
+ 3
76
+ ],
77
+ [
78
+ 3,
79
+ 3,
80
+ 3
81
+ ],
82
+ [
83
+ 3,
84
+ 3,
85
+ 3
86
+ ]
87
+ ],
88
+ "strides": [
89
+ [
90
+ 1,
91
+ 1,
92
+ 1
93
+ ],
94
+ [
95
+ 2,
96
+ 2,
97
+ 2
98
+ ],
99
+ [
100
+ 2,
101
+ 2,
102
+ 2
103
+ ],
104
+ [
105
+ 2,
106
+ 2,
107
+ 2
108
+ ],
109
+ [
110
+ 2,
111
+ 2,
112
+ 2
113
+ ],
114
+ [
115
+ 2,
116
+ 2,
117
+ 2
118
+ ],
119
+ [
120
+ 2,
121
+ 2,
122
+ 2
123
+ ]
124
+ ],
125
+ "pool_op_kernel_sizes": [
126
+ [
127
+ 1,
128
+ 1,
129
+ 1
130
+ ],
131
+ [
132
+ 2,
133
+ 2,
134
+ 2
135
+ ],
136
+ [
137
+ 2,
138
+ 2,
139
+ 2
140
+ ],
141
+ [
142
+ 2,
143
+ 2,
144
+ 2
145
+ ],
146
+ [
147
+ 2,
148
+ 2,
149
+ 2
150
+ ],
151
+ [
152
+ 2,
153
+ 2,
154
+ 2
155
+ ],
156
+ [
157
+ 2,
158
+ 2,
159
+ 2
160
+ ]
161
+ ],
162
+ "separate_decoders": true
163
+ }