Daniele Picone commited on
Commit
b9502f4
·
1 Parent(s): 87db065

Refresh DeepDeWedge tutorial checkpoint to format 2

Browse files
ATTRIBUTION.md CHANGED
@@ -2,47 +2,30 @@
2
 
3
  ## Original material
4
 
5
- **DeepDeWedge Tutorial Data**
6
- Creator: Simon Wiedemann
7
- DOI: <https://doi.org/10.6084/m9.figshare.25043435.v1>
8
- Figshare file: `tutorial_data.zip`, file id `45582309`
9
- Checkpoint member: `tutorial_data/fitted_model.ckpt`
10
- License: Creative Commons Attribution 4.0 International
11
- License URI: <https://creativecommons.org/licenses/by/4.0/>
12
-
13
- The original checkpoint accompanies:
14
-
15
- Simon Wiedemann and Reinhard Heckel, “A deep learning method for simultaneous
16
- denoising and missing wedge reconstruction in cryogenic electron tomography,”
17
- Nature Communications 15, 8255 (2024).
18
- <https://doi.org/10.1038/s41467-024-51438-y>
19
-
20
- The upstream DeepDeWedge implementation is available at
21
- <https://github.com/MLI-lab/DeepDeWedge> and was reviewed at revision
22
- `072075692a44a8f17394214369e6e762abe52bc3`.
23
-
24
- ## Changes made by scitomo
25
-
26
- The original PyTorch Lightning checkpoint was converted into a
27
- scitomo-native package:
28
-
29
- - executable/pickled training metadata was excluded;
30
- - tensor state was exported in Safetensors format;
31
- - 56 vendor state names were mapped through a reviewed explicit mapping to the
32
- native scitomo `UNet3D` state;
33
- - the vendor `unet.` namespace was removed;
34
- - the second bottleneck convolution was mapped from vendor sequence index `2`
35
- to the semantically equivalent native sequence index `4`;
36
- - two learned normalization values changed storage role from non-trainable
37
- parameters to native buffers without changing their values; and
38
- - strict construction, inference, conversion, validation, provenance, and
39
- tensor-inventory records were added.
40
-
41
- No tensor value was intentionally changed. Synthetic forward output was
42
- bit-exact, and a frozen real tutorial-volume crop passed the predetermined
43
- relative-L2 parity threshold.
44
-
45
- The converted package is distributed under the source material's CC BY 4.0
46
- terms. No endorsement by Simon Wiedemann, Reinhard Heckel, the Machine Learning
47
- and Information Processing Laboratory, Nature Communications, or Figshare is
48
- stated or implied.
 
2
 
3
  ## Original material
4
 
5
+ **DeepDeWedge Tutorial Data**
6
+ Creator: Simon Wiedemann
7
+ DOI: <https://doi.org/10.6084/m9.figshare.25043435.v1>
8
+ Figshare file id: `45582309`
9
+ Archive member: `tutorial_data/fitted_model.ckpt`
10
+ License: Creative Commons Attribution 4.0 International
11
+
12
+ The method is described by Simon Wiedemann and Reinhard Heckel, *A deep
13
+ learning method for simultaneous denoising and missing wedge reconstruction in
14
+ cryogenic electron tomography*, Nature Communications 15, 8255 (2024),
15
+ <https://doi.org/10.1038/s41467-024-51438-y>.
16
+
17
+ Pinned upstream code: <https://github.com/MLI-lab/DeepDeWedge/tree/072075692a44a8f17394214369e6e762abe52bc3>
18
+ (BSD-2-Clause).
19
+
20
+ ## Changes in this package
21
+
22
+ On 2026-09-04 Scitomo freshly converted only the authoritative checkpoint
23
+ `official/fitted_model.ckpt`, after byte-size and SHA-256 verification, through
24
+ the exact pinned upstream source and current generic FORMAT 2 exporter. The
25
+ 54 U-Net state tensors were explicitly mapped into canonical Network state.
26
+ The two fitted affine quantities were preserved as external DeepDeWedge
27
+ inference-profile state; they are not Network state. No old Hugging Face
28
+ Safetensors or format-1 package artifact was conversion input.
29
+
30
+ No endorsement by the cited authors, the Machine Learning and Information
31
+ Processing Laboratory, Figshare, or the rights holders is implied.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
README.md CHANGED
@@ -1,160 +1,82 @@
1
  ---
2
  license: cc-by-4.0
3
  library_name: scitomo
4
- tags: [cryo-electron-tomography, denoising, missing-wedge, safetensors, scitomo]
5
  ---
6
 
7
- # DeepDeWedge tutorial checkpoint for scitomo
8
-
9
- This repository contains the official DeepDeWedge tutorial checkpoint converted
10
- to a scitomo-native, non-executable Safetensors package. It reinstantiates the
11
- scitomo `UNet3D` used by the `deepdewedge` restoration method. It is not a
12
- PyTorch Lightning trainer-resume checkpoint and does not contain optimizer,
13
- scheduler, callback, random-number-generator, or dataloader state.
14
-
15
- Package identity:
16
-
17
- - scitomo catalog name: `deepdewedge_tutorial`
18
- - native package id: `deepdewedge_tutorial`
19
- - package revision: `2`
20
- - minimum scitomo version: `0.6.2`
21
- - learned-checkpoint format: `1`
22
- - learned-checkpoint manifest schema: `2`
23
- - source package revision: `1` (manifest schema `1`)
24
- - method: restoration / `deepdewedge`
25
- - construction fingerprint:
26
- `sha256:c9da7decd489f0f4f893dce565f37db25abc63d0d3efcacad9835305ffd97cb2`
27
- - inference fingerprint:
28
- `sha256:c2c5eba72579510265258dcfce3a5be2f851f9276c7e53d92330d78eb37720dd`
29
-
30
- ## Source and attribution
31
-
32
- The original checkpoint is part of **DeepDeWedge Tutorial Data**, authored by
33
- Simon Wiedemann and published on Figshare under CC BY 4.0:
34
-
35
- - DOI: <https://doi.org/10.6084/m9.figshare.25043435.v1>
36
- - Figshare file id: `45582309`
37
- - archive: `tutorial_data.zip`
38
- - archive member: `tutorial_data/fitted_model.ckpt`
39
- - archive SHA-256:
40
- `7c871342e51f5a66a773fe427d72944b5d2cc8ff41c5b7415ab38dbfc9ac6d58`
41
- - original checkpoint SHA-256:
42
- `5262f6c11e85fd662b02e59efe936fa7b69913758e841235be2683f7bd03ec76`
43
-
44
- The method and upstream implementation are described by:
45
-
46
- > Simon Wiedemann and Reinhard Heckel. “A deep learning method for
47
- > simultaneous denoising and missing wedge reconstruction in cryogenic
48
- > electron tomography.” Nature Communications 15, 8255 (2024).
49
- > <https://doi.org/10.1038/s41467-024-51438-y>
50
-
51
- Upstream code:
52
- <https://github.com/MLI-lab/DeepDeWedge/tree/072075692a44a8f17394214369e6e762abe52bc3>
53
-
54
- The conversion changed the serialization, state names, and executable
55
- construction mechanism. It did not intentionally alter tensor values. Two
56
- learned normalization values that upstream stored as non-trainable parameters
57
- are native scitomo buffers with identical values. See `ATTRIBUTION.md`,
58
- `conversion/conversion-record.json`, and `LICENSES/`.
59
-
60
- ## Package migration
61
-
62
- Revision 2 migrates the native package manifest from schema 1 to schema 2
63
- and raises the minimum Scitomo version accordingly. The construction and
64
- inference records and `weights.safetensors` are byte-for-byte unchanged.
65
- `migration/migration-record.json` binds the immutable source manifest and
66
- provider revision to this package and records the unchanged file identities.
67
-
68
- ## Native construction and inference
69
-
70
- `construction.json` specifies a residual single-input/single-output 3D U-Net
71
- with 64 initial channels, three downsampling blocks, strided-convolution
72
- downsampling, transposed-convolution upsampling, leaky-ReLU activations, and
73
- the learned input-normalization location and scale from the tutorial
74
- checkpoint.
75
-
76
- Volume tensors use scitomo's canonical trailing-axis layout `(..., Z, Y, X)`.
77
- The network layout is `(..., C, Z, Y, X)`, with one scalar volume channel.
78
- The canonical rotation axis is `Z`; at theta zero the beam axis is `Y`, and
79
- detector `(V, U)` corresponds to `(Z, X)`.
80
-
81
- The frozen DeepDeWedge inference profile requires:
82
-
83
- - paired half-tomograms, refined separately and averaged;
84
- - a 50-degree full-width missing-wedge Fourier mask on each half;
85
- - `96 x 96 x 96` patches with overlap `32 x 32 x 32`;
86
- - trailing reflection padding for full coverage;
87
- - patch-statistic normalization and network denormalization;
88
- - linear-ramp weighted patch reassembly; and
89
- - no full-tomogram standardization.
90
-
91
- The package was converted from the tutorial's fitted network. It assumes the
92
- same scientific meaning, preprocessing, normalization, missing-wedge
93
- convention, and paired-half workflow. It is not a general-purpose cryo-ET
94
- foundation model.
95
-
96
- ## Files and identities
97
-
98
- | File | Bytes | SHA-256 |
99
- | --- | ---: | --- |
100
- | `construction.json` | 2,175 | `d4c7eced057042438827de168d47b7900311fba742ce52445675be7f40343432` |
101
- | `inference.json` | 968 | `217636919d17d9332aa49474e893064ed1dfb29f016a468cf22d439cf16887a0` |
102
- | `weights.safetensors` | 109,294,940 | `2a34aeb61dba5da5c7b78f4cc26de9b8a9134ac12dc08876a8e93bf02776c795` |
103
- | `conversion/conversion-record.json` | 13,953 | `c2204fdd346b416966d7c14d5746a305e80649a7f381f173c7ad4d9482f3e66d` |
104
- | `validation/validation-record.json` | 1,946 | `7e018bc98518e898cb723b7c608024e101999a1217e7256a9f3ff6c6da20215e` |
105
- | `migration/migration-record.json` | 1,518 | `fdabc791f22826bc13622199c73890cb05f89cc7797ae9c62ea5fd40f1f4fd4d` |
106
-
107
- `manifest.json` binds these files plus this model card, attribution, and
108
- license resources by exact size and SHA-256. The immutable Hugging Face commit
109
- and scitomo learned-weight catalog bind the complete distribution, including
110
- the manifest and documentation resources, without a self-referential checksum
111
- inside this README.
112
-
113
- ## Validation
114
-
115
- All 56 source tensors were mapped one-to-one and exactly matched after native
116
- assignment.
117
-
118
- Predetermined CPU float32 checks:
119
-
120
- | Case | Tolerance | Result |
121
- | --- | --- | --- |
122
- | Synthetic forward parity | `atol=1e-6`, `rtol=1e-5` | bit-exact; max absolute error `0`; relative L2 `0` |
123
- | Real tutorial-volume crop | relative L2 `<=1e-4` | max absolute error `7.152557373046875e-7`; relative L2 `1.2612566990810592e-7` |
124
-
125
- The real-data case used a centered `32 x 32 x 32` crop from
126
- `tutorial_data/tomo_even_frames.rec`. Vendor and native outputs were finite,
127
- had identical shapes, and had the same absolute-peak spatial landmark at
128
- `(Z, Y, X) = (25, 13, 0)`.
129
-
130
- The evidence proves native network-state and reviewed forward parity for the
131
- frozen inputs. It does not establish accuracy on every microscope, specimen,
132
- acquisition protocol, missing-wedge angle, or preprocessing pipeline, nor does
133
- it replace validation of a complete user workflow.
134
-
135
- ## Safe loading
136
-
137
- The repository contains declared data files only. Loading does not execute
138
- remote code, import the vendor project, or use Python pickle. scitomo requires
139
- the exact catalog commit and verifies every declared size and SHA-256 before
140
- opening `weights.safetensors`. Hugging Face `trust_remote_code` is never used.
141
-
142
- Install the learned and catalog extras before resolving the catalog package:
143
-
144
- ```text
145
- pip install "scitomo[learned,catalog]"
146
  ```
147
 
148
- Normal runtime loading is owned by scitomo's central learned-checkpoint API.
149
- Do not load the original Lightning checkpoint in an ordinary runtime.
150
-
151
- ## Licenses
152
-
153
- - Converted weights and their source tutorial dataset: CC BY 4.0. See
154
- `LICENSES/DeepDeWedge-Tutorial-Data-CC-BY-4.0.txt`.
155
- - Upstream DeepDeWedge code and behavior used for construction/conversion:
156
- BSD 2-Clause. See `LICENSES/DeepDeWedge-Code-BSD-2-Clause.txt`.
157
-
158
- The CC BY 4.0 attribution and modification notice are provided in
159
- `ATTRIBUTION.md`. No endorsement by the original authors or rights holders is
160
- implied.
 
1
  ---
2
  license: cc-by-4.0
3
  library_name: scitomo
4
+ tags: [cryo-electron-tomography, deepdewedge, safetensors, scitomo, format-2]
5
  ---
6
 
7
+ # DeepDeWedge tutorial checkpoint — fresh Scitomo FORMAT 2 package
8
+
9
+ This is a fresh FORMAT 2 export from the authoritative original Lightning
10
+ checkpoint, not a migration of any earlier Hugging Face package. Normal runtime
11
+ uses Scitomo's generic FORMAT 2 loader and Safetensors only; it does not require
12
+ PyTorch Lightning or the upstream DeepDeWedge source checkout.
13
+
14
+ ## Package identity
15
+
16
+ - package id: `deepdewedge_tutorial`; package revision: `3`
17
+ - learned-checkpoint format: `2`; manifest schema: `4`
18
+ - Scitomo conversion checkout: `2832957f69daff0d7baec5df17a7c54954623eed`
19
+ - minimum Scitomo version: `0.7.3`
20
+ - previous Hugging Face commit: `87db06570dd874a99af1289e62b79ea99f87f006` — **HISTORICAL ONLY; NOT CONVERSION INPUT**
21
+
22
+ ## Authoritative provenance
23
+
24
+ - upstream repository: <https://github.com/MLI-lab/DeepDeWedge>
25
+ - upstream revision: `072075692a44a8f17394214369e6e762abe52bc3`
26
+ - Figshare DOI: <https://doi.org/10.6084/m9.figshare.25043435.v1>; file id: `45582309`
27
+ - original archive SHA-256: `7c871342e51f5a66a773fe427d72944b5d2cc8ff41c5b7415ab38dbfc9ac6d58`
28
+ - original checkpoint member: `tutorial_data/fitted_model.ckpt`
29
+ - original checkpoint size: `327952642` bytes
30
+ - original checkpoint SHA-256: `5262f6c11e85fd662b02e59efe936fa7b69913758e841235be2683f7bd03ec76`
31
+
32
+ DeepDeWedge Tutorial Data is attributed to Simon Wiedemann and is distributed
33
+ under CC BY 4.0. The pinned DeepDeWedge implementation is BSD-2-Clause; its
34
+ license text is included below `LICENSES/`. See `ATTRIBUTION.md`.
35
+
36
+ ## Scientific inference semantics
37
+
38
+ The pure persisted Network owns only the lowered U-Net architecture and its 54
39
+ canonical tensors. The fitted affine values remain outside Network state in the
40
+ typed `deepdewedge_inference` profile:
41
+
42
+ - `network_affine_loc`: `-0.14898751676082611`
43
+ - `network_affine_scale`: `1.3237642049789429`
44
+ - input layout: `(..., Z, Y, X)`; Network layout: `(..., C, Z, Y, X)`
45
+ - paired halves are refined independently then averaged; full-width missing wedge: 50 degrees
46
+ - 96³ patches, 32³ overlap, trailing-reflection coverage, linear-ramp reassembly
47
+ - preconditioning recomputes patch statistics; output uses the checkpoint-fitted affine
48
+
49
+ ## Fresh conversion and validation
50
+
51
+ `refresh_format2.py` is the exact one-off implementation and records
52
+ the verified source, explicit 54-tensor mapping, strict Network lowering, and
53
+ generic export. It was run with Python `3.12.13`, Torch
54
+ `2.12.1+cpu`, Lightning `2.6.5`, Safetensors
55
+ `0.8.0`, and Scitomo `0.7.3.dev0` on `Windows-11-10.0.22631-SP0`.
56
+
57
+ The generic exporter freshly serializes `weights.safetensors`; no previous
58
+ Hugging Face Safetensors, manifest, construction, or inference record is read.
59
+ The conversion record lists every source checkpoint tensor to canonical target
60
+ mapping. The validation record binds package state closure, generic loader
61
+ reload, external-affine semantics, and deterministic forward parity.
62
+
63
+ For a deterministic directional, non-symmetric CPU float32 input of 4,096 elements,
64
+ authoritative upstream output versus FORMAT 2 pure-Network-plus-profile output
65
+ passed `rtol=1e-5`, `atol=1e-6`: maximum absolute error
66
+ `0`, relative L2 error `0`.
67
+
68
+ ## Files and closure
69
+
70
+ `manifest.json` is the authoritative, closed inventory of every package file,
71
+ with each fresh size and SHA-256. It declares only FORMAT 2 construction,
72
+ inference, Safetensors, conversion, validation, and documentation/license
73
+ resources; there is no format-1 or migration artifact. Validate and load with:
74
+
75
+ ```python
76
+ import scitomo as st
77
+ loaded = st.api.load_learned_network("/path/to/package")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  ```
79
 
80
+ This operation uses the generic Scitomo FORMAT 2 loader and does not import
81
+ Lightning or DeepDeWedge. It is a checkpoint package, not a claim of scientific
82
+ approval for a new dataset or acquisition protocol.
 
 
 
 
 
 
 
 
 
 
construction.json CHANGED
@@ -1,92 +1,1726 @@
1
  {
2
- "fingerprint": "sha256:c9da7decd489f0f4f893dce565f37db25abc63d0d3efcacad9835305ffd97cb2",
3
  "kind": "scitomo_network_construction",
4
- "schema_version": 1,
5
- "spec": {
6
- "bottleneck_block": {
7
- "activate_last": false,
8
- "activation": {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  "inplace": true,
10
  "kind": "leaky_relu",
11
- "negative_slope": 0.05
 
 
 
 
 
 
 
 
 
 
12
  },
13
- "bias": true,
14
- "dropout": 0.0,
15
- "kernel_size": 3,
16
- "normalization": {
17
- "kind": "none"
 
18
  },
19
- "padding": 1,
20
- "repetitions": 2
21
- },
22
- "decoder_block": {
23
- "activate_last": true,
24
- "activation": {
 
 
 
25
  "inplace": true,
26
  "kind": "leaky_relu",
27
- "negative_slope": 0.05
 
 
 
28
  },
29
- "bias": true,
30
- "dropout": 0.0,
31
- "kernel_size": 3,
32
- "normalization": {
33
- "affine": false,
34
- "eps": 1e-05,
35
- "kind": "instance",
36
- "track_running_stats": false
 
 
 
 
 
37
  },
38
- "padding": 1,
39
- "repetitions": 3
40
- },
41
- "downsampling": {
42
- "activation": {
 
 
 
 
43
  "inplace": true,
44
  "kind": "leaky_relu",
45
- "negative_slope": 0.05
 
 
 
 
 
 
 
 
 
 
46
  },
47
- "kernel_size": 3,
48
- "kind": "strided_convolution",
49
- "padding": 1,
50
- "stride": 2
51
- },
52
- "encoder_block": {
53
- "activate_last": true,
54
- "activation": {
55
  "inplace": true,
56
  "kind": "leaky_relu",
57
- "negative_slope": 0.05
 
 
 
58
  },
59
- "bias": true,
60
- "dropout": 0.0,
61
- "kernel_size": 3,
62
- "normalization": {
63
- "affine": false,
64
- "eps": 1e-05,
65
- "kind": "instance",
66
- "track_running_stats": false
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  },
68
- "padding": 1,
69
- "repetitions": 3
70
- },
71
- "in_channels": 1,
72
- "initial_channels": 64,
73
- "initial_normalization_loc": -0.1489875167608261,
74
- "initial_normalization_scale": 1.3237642049789429,
75
- "kind": "unet_3d",
76
- "num_downsampling_blocks": 3,
77
- "out_channels": 1,
78
- "residual": true,
79
- "upsampling": {
80
- "kernel_size": 3,
81
- "kind": "transposed_convolution",
82
- "output_padding": 1,
83
- "padding": 1,
84
- "post_concat_activation": {
85
  "inplace": true,
86
  "kind": "leaky_relu",
87
- "negative_slope": 0.05
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  },
89
- "stride": 2
90
- }
91
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  }
 
1
  {
2
+ "fingerprint": "sha256:644b162de70d014f9273c992fd583ee4fdfb8ae425a35fba26b3fbd41d560f28",
3
  "kind": "scitomo_network_construction",
4
+ "program": {
5
+ "inputs": [
6
+ {
7
+ "channels": 1,
8
+ "leading_dimensions": "flatten_to_batch",
9
+ "minimum_spatial_shape": [
10
+ 8,
11
+ 8,
12
+ 8
13
+ ],
14
+ "name": "input",
15
+ "spatial_divisibility": [
16
+ 8,
17
+ 8,
18
+ 8
19
+ ],
20
+ "spatial_rank": 3
21
+ }
22
+ ],
23
+ "kind": "scitomo_network_program",
24
+ "modules": [
25
+ {
26
+ "bias": true,
27
+ "dilation": [
28
+ 1,
29
+ 1,
30
+ 1
31
+ ],
32
+ "groups": 1,
33
+ "id": "down_0_conv_0",
34
+ "in_channels": 1,
35
+ "kernel_size": [
36
+ 3,
37
+ 3,
38
+ 3
39
+ ],
40
+ "kind": "conv3d",
41
+ "out_channels": 64,
42
+ "padding": [
43
+ 1,
44
+ 1,
45
+ 1
46
+ ],
47
+ "padding_mode": "zeros",
48
+ "primitive_version": 1,
49
+ "stride": [
50
+ 1,
51
+ 1,
52
+ 1
53
+ ]
54
+ },
55
+ {
56
+ "affine": false,
57
+ "channels": 64,
58
+ "eps": 1e-05,
59
+ "id": "down_0_norm_0",
60
+ "kind": "instance_norm3d",
61
+ "primitive_version": 1,
62
+ "track_running_stats": false
63
+ },
64
+ {
65
+ "bias": true,
66
+ "dilation": [
67
+ 1,
68
+ 1,
69
+ 1
70
+ ],
71
+ "groups": 1,
72
+ "id": "down_0_conv_1",
73
+ "in_channels": 64,
74
+ "kernel_size": [
75
+ 3,
76
+ 3,
77
+ 3
78
+ ],
79
+ "kind": "conv3d",
80
+ "out_channels": 64,
81
+ "padding": [
82
+ 1,
83
+ 1,
84
+ 1
85
+ ],
86
+ "padding_mode": "zeros",
87
+ "primitive_version": 1,
88
+ "stride": [
89
+ 1,
90
+ 1,
91
+ 1
92
+ ]
93
+ },
94
+ {
95
+ "affine": false,
96
+ "channels": 64,
97
+ "eps": 1e-05,
98
+ "id": "down_0_norm_1",
99
+ "kind": "instance_norm3d",
100
+ "primitive_version": 1,
101
+ "track_running_stats": false
102
+ },
103
+ {
104
+ "bias": true,
105
+ "dilation": [
106
+ 1,
107
+ 1,
108
+ 1
109
+ ],
110
+ "groups": 1,
111
+ "id": "down_0_conv_2",
112
+ "in_channels": 64,
113
+ "kernel_size": [
114
+ 3,
115
+ 3,
116
+ 3
117
+ ],
118
+ "kind": "conv3d",
119
+ "out_channels": 64,
120
+ "padding": [
121
+ 1,
122
+ 1,
123
+ 1
124
+ ],
125
+ "padding_mode": "zeros",
126
+ "primitive_version": 1,
127
+ "stride": [
128
+ 1,
129
+ 1,
130
+ 1
131
+ ]
132
+ },
133
+ {
134
+ "affine": false,
135
+ "channels": 64,
136
+ "eps": 1e-05,
137
+ "id": "down_0_norm_2",
138
+ "kind": "instance_norm3d",
139
+ "primitive_version": 1,
140
+ "track_running_stats": false
141
+ },
142
+ {
143
+ "bias": true,
144
+ "dilation": [
145
+ 1,
146
+ 1,
147
+ 1
148
+ ],
149
+ "groups": 1,
150
+ "id": "downsample_0",
151
+ "in_channels": 64,
152
+ "kernel_size": [
153
+ 3,
154
+ 3,
155
+ 3
156
+ ],
157
+ "kind": "conv3d",
158
+ "out_channels": 64,
159
+ "padding": [
160
+ 1,
161
+ 1,
162
+ 1
163
+ ],
164
+ "padding_mode": "zeros",
165
+ "primitive_version": 1,
166
+ "stride": [
167
+ 2,
168
+ 2,
169
+ 2
170
+ ]
171
+ },
172
+ {
173
+ "bias": true,
174
+ "dilation": [
175
+ 1,
176
+ 1,
177
+ 1
178
+ ],
179
+ "groups": 1,
180
+ "id": "down_1_conv_0",
181
+ "in_channels": 64,
182
+ "kernel_size": [
183
+ 3,
184
+ 3,
185
+ 3
186
+ ],
187
+ "kind": "conv3d",
188
+ "out_channels": 128,
189
+ "padding": [
190
+ 1,
191
+ 1,
192
+ 1
193
+ ],
194
+ "padding_mode": "zeros",
195
+ "primitive_version": 1,
196
+ "stride": [
197
+ 1,
198
+ 1,
199
+ 1
200
+ ]
201
+ },
202
+ {
203
+ "affine": false,
204
+ "channels": 128,
205
+ "eps": 1e-05,
206
+ "id": "down_1_norm_0",
207
+ "kind": "instance_norm3d",
208
+ "primitive_version": 1,
209
+ "track_running_stats": false
210
+ },
211
+ {
212
+ "bias": true,
213
+ "dilation": [
214
+ 1,
215
+ 1,
216
+ 1
217
+ ],
218
+ "groups": 1,
219
+ "id": "down_1_conv_1",
220
+ "in_channels": 128,
221
+ "kernel_size": [
222
+ 3,
223
+ 3,
224
+ 3
225
+ ],
226
+ "kind": "conv3d",
227
+ "out_channels": 128,
228
+ "padding": [
229
+ 1,
230
+ 1,
231
+ 1
232
+ ],
233
+ "padding_mode": "zeros",
234
+ "primitive_version": 1,
235
+ "stride": [
236
+ 1,
237
+ 1,
238
+ 1
239
+ ]
240
+ },
241
+ {
242
+ "affine": false,
243
+ "channels": 128,
244
+ "eps": 1e-05,
245
+ "id": "down_1_norm_1",
246
+ "kind": "instance_norm3d",
247
+ "primitive_version": 1,
248
+ "track_running_stats": false
249
+ },
250
+ {
251
+ "bias": true,
252
+ "dilation": [
253
+ 1,
254
+ 1,
255
+ 1
256
+ ],
257
+ "groups": 1,
258
+ "id": "down_1_conv_2",
259
+ "in_channels": 128,
260
+ "kernel_size": [
261
+ 3,
262
+ 3,
263
+ 3
264
+ ],
265
+ "kind": "conv3d",
266
+ "out_channels": 128,
267
+ "padding": [
268
+ 1,
269
+ 1,
270
+ 1
271
+ ],
272
+ "padding_mode": "zeros",
273
+ "primitive_version": 1,
274
+ "stride": [
275
+ 1,
276
+ 1,
277
+ 1
278
+ ]
279
+ },
280
+ {
281
+ "affine": false,
282
+ "channels": 128,
283
+ "eps": 1e-05,
284
+ "id": "down_1_norm_2",
285
+ "kind": "instance_norm3d",
286
+ "primitive_version": 1,
287
+ "track_running_stats": false
288
+ },
289
+ {
290
+ "bias": true,
291
+ "dilation": [
292
+ 1,
293
+ 1,
294
+ 1
295
+ ],
296
+ "groups": 1,
297
+ "id": "downsample_1",
298
+ "in_channels": 128,
299
+ "kernel_size": [
300
+ 3,
301
+ 3,
302
+ 3
303
+ ],
304
+ "kind": "conv3d",
305
+ "out_channels": 128,
306
+ "padding": [
307
+ 1,
308
+ 1,
309
+ 1
310
+ ],
311
+ "padding_mode": "zeros",
312
+ "primitive_version": 1,
313
+ "stride": [
314
+ 2,
315
+ 2,
316
+ 2
317
+ ]
318
+ },
319
+ {
320
+ "bias": true,
321
+ "dilation": [
322
+ 1,
323
+ 1,
324
+ 1
325
+ ],
326
+ "groups": 1,
327
+ "id": "down_2_conv_0",
328
+ "in_channels": 128,
329
+ "kernel_size": [
330
+ 3,
331
+ 3,
332
+ 3
333
+ ],
334
+ "kind": "conv3d",
335
+ "out_channels": 256,
336
+ "padding": [
337
+ 1,
338
+ 1,
339
+ 1
340
+ ],
341
+ "padding_mode": "zeros",
342
+ "primitive_version": 1,
343
+ "stride": [
344
+ 1,
345
+ 1,
346
+ 1
347
+ ]
348
+ },
349
+ {
350
+ "affine": false,
351
+ "channels": 256,
352
+ "eps": 1e-05,
353
+ "id": "down_2_norm_0",
354
+ "kind": "instance_norm3d",
355
+ "primitive_version": 1,
356
+ "track_running_stats": false
357
+ },
358
+ {
359
+ "bias": true,
360
+ "dilation": [
361
+ 1,
362
+ 1,
363
+ 1
364
+ ],
365
+ "groups": 1,
366
+ "id": "down_2_conv_1",
367
+ "in_channels": 256,
368
+ "kernel_size": [
369
+ 3,
370
+ 3,
371
+ 3
372
+ ],
373
+ "kind": "conv3d",
374
+ "out_channels": 256,
375
+ "padding": [
376
+ 1,
377
+ 1,
378
+ 1
379
+ ],
380
+ "padding_mode": "zeros",
381
+ "primitive_version": 1,
382
+ "stride": [
383
+ 1,
384
+ 1,
385
+ 1
386
+ ]
387
+ },
388
+ {
389
+ "affine": false,
390
+ "channels": 256,
391
+ "eps": 1e-05,
392
+ "id": "down_2_norm_1",
393
+ "kind": "instance_norm3d",
394
+ "primitive_version": 1,
395
+ "track_running_stats": false
396
+ },
397
+ {
398
+ "bias": true,
399
+ "dilation": [
400
+ 1,
401
+ 1,
402
+ 1
403
+ ],
404
+ "groups": 1,
405
+ "id": "down_2_conv_2",
406
+ "in_channels": 256,
407
+ "kernel_size": [
408
+ 3,
409
+ 3,
410
+ 3
411
+ ],
412
+ "kind": "conv3d",
413
+ "out_channels": 256,
414
+ "padding": [
415
+ 1,
416
+ 1,
417
+ 1
418
+ ],
419
+ "padding_mode": "zeros",
420
+ "primitive_version": 1,
421
+ "stride": [
422
+ 1,
423
+ 1,
424
+ 1
425
+ ]
426
+ },
427
+ {
428
+ "affine": false,
429
+ "channels": 256,
430
+ "eps": 1e-05,
431
+ "id": "down_2_norm_2",
432
+ "kind": "instance_norm3d",
433
+ "primitive_version": 1,
434
+ "track_running_stats": false
435
+ },
436
+ {
437
+ "bias": true,
438
+ "dilation": [
439
+ 1,
440
+ 1,
441
+ 1
442
+ ],
443
+ "groups": 1,
444
+ "id": "downsample_2",
445
+ "in_channels": 256,
446
+ "kernel_size": [
447
+ 3,
448
+ 3,
449
+ 3
450
+ ],
451
+ "kind": "conv3d",
452
+ "out_channels": 256,
453
+ "padding": [
454
+ 1,
455
+ 1,
456
+ 1
457
+ ],
458
+ "padding_mode": "zeros",
459
+ "primitive_version": 1,
460
+ "stride": [
461
+ 2,
462
+ 2,
463
+ 2
464
+ ]
465
+ },
466
+ {
467
+ "bias": true,
468
+ "dilation": [
469
+ 1,
470
+ 1,
471
+ 1
472
+ ],
473
+ "groups": 1,
474
+ "id": "bottleneck_conv_0",
475
+ "in_channels": 256,
476
+ "kernel_size": [
477
+ 3,
478
+ 3,
479
+ 3
480
+ ],
481
+ "kind": "conv3d",
482
+ "out_channels": 512,
483
+ "padding": [
484
+ 1,
485
+ 1,
486
+ 1
487
+ ],
488
+ "padding_mode": "zeros",
489
+ "primitive_version": 1,
490
+ "stride": [
491
+ 1,
492
+ 1,
493
+ 1
494
+ ]
495
+ },
496
+ {
497
+ "bias": true,
498
+ "dilation": [
499
+ 1,
500
+ 1,
501
+ 1
502
+ ],
503
+ "groups": 1,
504
+ "id": "bottleneck_conv_1",
505
+ "in_channels": 512,
506
+ "kernel_size": [
507
+ 3,
508
+ 3,
509
+ 3
510
+ ],
511
+ "kind": "conv3d",
512
+ "out_channels": 256,
513
+ "padding": [
514
+ 1,
515
+ 1,
516
+ 1
517
+ ],
518
+ "padding_mode": "zeros",
519
+ "primitive_version": 1,
520
+ "stride": [
521
+ 1,
522
+ 1,
523
+ 1
524
+ ]
525
+ },
526
+ {
527
+ "bias": true,
528
+ "dilation": [
529
+ 1,
530
+ 1,
531
+ 1
532
+ ],
533
+ "groups": 1,
534
+ "id": "upsample_0",
535
+ "in_channels": 256,
536
+ "kernel_size": [
537
+ 3,
538
+ 3,
539
+ 3
540
+ ],
541
+ "kind": "conv_transpose3d",
542
+ "out_channels": 256,
543
+ "output_padding": [
544
+ 1,
545
+ 1,
546
+ 1
547
+ ],
548
+ "padding": [
549
+ 1,
550
+ 1,
551
+ 1
552
+ ],
553
+ "primitive_version": 1,
554
+ "stride": [
555
+ 2,
556
+ 2,
557
+ 2
558
+ ]
559
+ },
560
+ {
561
+ "bias": true,
562
+ "dilation": [
563
+ 1,
564
+ 1,
565
+ 1
566
+ ],
567
+ "groups": 1,
568
+ "id": "up_0_conv_0",
569
+ "in_channels": 512,
570
+ "kernel_size": [
571
+ 3,
572
+ 3,
573
+ 3
574
+ ],
575
+ "kind": "conv3d",
576
+ "out_channels": 256,
577
+ "padding": [
578
+ 1,
579
+ 1,
580
+ 1
581
+ ],
582
+ "padding_mode": "zeros",
583
+ "primitive_version": 1,
584
+ "stride": [
585
+ 1,
586
+ 1,
587
+ 1
588
+ ]
589
+ },
590
+ {
591
+ "affine": false,
592
+ "channels": 256,
593
+ "eps": 1e-05,
594
+ "id": "up_0_norm_0",
595
+ "kind": "instance_norm3d",
596
+ "primitive_version": 1,
597
+ "track_running_stats": false
598
+ },
599
+ {
600
+ "bias": true,
601
+ "dilation": [
602
+ 1,
603
+ 1,
604
+ 1
605
+ ],
606
+ "groups": 1,
607
+ "id": "up_0_conv_1",
608
+ "in_channels": 256,
609
+ "kernel_size": [
610
+ 3,
611
+ 3,
612
+ 3
613
+ ],
614
+ "kind": "conv3d",
615
+ "out_channels": 256,
616
+ "padding": [
617
+ 1,
618
+ 1,
619
+ 1
620
+ ],
621
+ "padding_mode": "zeros",
622
+ "primitive_version": 1,
623
+ "stride": [
624
+ 1,
625
+ 1,
626
+ 1
627
+ ]
628
+ },
629
+ {
630
+ "affine": false,
631
+ "channels": 256,
632
+ "eps": 1e-05,
633
+ "id": "up_0_norm_1",
634
+ "kind": "instance_norm3d",
635
+ "primitive_version": 1,
636
+ "track_running_stats": false
637
+ },
638
+ {
639
+ "bias": true,
640
+ "dilation": [
641
+ 1,
642
+ 1,
643
+ 1
644
+ ],
645
+ "groups": 1,
646
+ "id": "up_0_conv_2",
647
+ "in_channels": 256,
648
+ "kernel_size": [
649
+ 3,
650
+ 3,
651
+ 3
652
+ ],
653
+ "kind": "conv3d",
654
+ "out_channels": 256,
655
+ "padding": [
656
+ 1,
657
+ 1,
658
+ 1
659
+ ],
660
+ "padding_mode": "zeros",
661
+ "primitive_version": 1,
662
+ "stride": [
663
+ 1,
664
+ 1,
665
+ 1
666
+ ]
667
+ },
668
+ {
669
+ "affine": false,
670
+ "channels": 256,
671
+ "eps": 1e-05,
672
+ "id": "up_0_norm_2",
673
+ "kind": "instance_norm3d",
674
+ "primitive_version": 1,
675
+ "track_running_stats": false
676
+ },
677
+ {
678
+ "bias": true,
679
+ "dilation": [
680
+ 1,
681
+ 1,
682
+ 1
683
+ ],
684
+ "groups": 1,
685
+ "id": "upsample_1",
686
+ "in_channels": 256,
687
+ "kernel_size": [
688
+ 3,
689
+ 3,
690
+ 3
691
+ ],
692
+ "kind": "conv_transpose3d",
693
+ "out_channels": 128,
694
+ "output_padding": [
695
+ 1,
696
+ 1,
697
+ 1
698
+ ],
699
+ "padding": [
700
+ 1,
701
+ 1,
702
+ 1
703
+ ],
704
+ "primitive_version": 1,
705
+ "stride": [
706
+ 2,
707
+ 2,
708
+ 2
709
+ ]
710
+ },
711
+ {
712
+ "bias": true,
713
+ "dilation": [
714
+ 1,
715
+ 1,
716
+ 1
717
+ ],
718
+ "groups": 1,
719
+ "id": "up_1_conv_0",
720
+ "in_channels": 256,
721
+ "kernel_size": [
722
+ 3,
723
+ 3,
724
+ 3
725
+ ],
726
+ "kind": "conv3d",
727
+ "out_channels": 128,
728
+ "padding": [
729
+ 1,
730
+ 1,
731
+ 1
732
+ ],
733
+ "padding_mode": "zeros",
734
+ "primitive_version": 1,
735
+ "stride": [
736
+ 1,
737
+ 1,
738
+ 1
739
+ ]
740
+ },
741
+ {
742
+ "affine": false,
743
+ "channels": 128,
744
+ "eps": 1e-05,
745
+ "id": "up_1_norm_0",
746
+ "kind": "instance_norm3d",
747
+ "primitive_version": 1,
748
+ "track_running_stats": false
749
+ },
750
+ {
751
+ "bias": true,
752
+ "dilation": [
753
+ 1,
754
+ 1,
755
+ 1
756
+ ],
757
+ "groups": 1,
758
+ "id": "up_1_conv_1",
759
+ "in_channels": 128,
760
+ "kernel_size": [
761
+ 3,
762
+ 3,
763
+ 3
764
+ ],
765
+ "kind": "conv3d",
766
+ "out_channels": 128,
767
+ "padding": [
768
+ 1,
769
+ 1,
770
+ 1
771
+ ],
772
+ "padding_mode": "zeros",
773
+ "primitive_version": 1,
774
+ "stride": [
775
+ 1,
776
+ 1,
777
+ 1
778
+ ]
779
+ },
780
+ {
781
+ "affine": false,
782
+ "channels": 128,
783
+ "eps": 1e-05,
784
+ "id": "up_1_norm_1",
785
+ "kind": "instance_norm3d",
786
+ "primitive_version": 1,
787
+ "track_running_stats": false
788
+ },
789
+ {
790
+ "bias": true,
791
+ "dilation": [
792
+ 1,
793
+ 1,
794
+ 1
795
+ ],
796
+ "groups": 1,
797
+ "id": "up_1_conv_2",
798
+ "in_channels": 128,
799
+ "kernel_size": [
800
+ 3,
801
+ 3,
802
+ 3
803
+ ],
804
+ "kind": "conv3d",
805
+ "out_channels": 128,
806
+ "padding": [
807
+ 1,
808
+ 1,
809
+ 1
810
+ ],
811
+ "padding_mode": "zeros",
812
+ "primitive_version": 1,
813
+ "stride": [
814
+ 1,
815
+ 1,
816
+ 1
817
+ ]
818
+ },
819
+ {
820
+ "affine": false,
821
+ "channels": 128,
822
+ "eps": 1e-05,
823
+ "id": "up_1_norm_2",
824
+ "kind": "instance_norm3d",
825
+ "primitive_version": 1,
826
+ "track_running_stats": false
827
+ },
828
+ {
829
+ "bias": true,
830
+ "dilation": [
831
+ 1,
832
+ 1,
833
+ 1
834
+ ],
835
+ "groups": 1,
836
+ "id": "upsample_2",
837
+ "in_channels": 128,
838
+ "kernel_size": [
839
+ 3,
840
+ 3,
841
+ 3
842
+ ],
843
+ "kind": "conv_transpose3d",
844
+ "out_channels": 64,
845
+ "output_padding": [
846
+ 1,
847
+ 1,
848
+ 1
849
+ ],
850
+ "padding": [
851
+ 1,
852
+ 1,
853
+ 1
854
+ ],
855
+ "primitive_version": 1,
856
+ "stride": [
857
+ 2,
858
+ 2,
859
+ 2
860
+ ]
861
+ },
862
+ {
863
+ "bias": true,
864
+ "dilation": [
865
+ 1,
866
+ 1,
867
+ 1
868
+ ],
869
+ "groups": 1,
870
+ "id": "up_2_conv_0",
871
+ "in_channels": 128,
872
+ "kernel_size": [
873
+ 3,
874
+ 3,
875
+ 3
876
+ ],
877
+ "kind": "conv3d",
878
+ "out_channels": 64,
879
+ "padding": [
880
+ 1,
881
+ 1,
882
+ 1
883
+ ],
884
+ "padding_mode": "zeros",
885
+ "primitive_version": 1,
886
+ "stride": [
887
+ 1,
888
+ 1,
889
+ 1
890
+ ]
891
+ },
892
+ {
893
+ "affine": false,
894
+ "channels": 64,
895
+ "eps": 1e-05,
896
+ "id": "up_2_norm_0",
897
+ "kind": "instance_norm3d",
898
+ "primitive_version": 1,
899
+ "track_running_stats": false
900
+ },
901
+ {
902
+ "bias": true,
903
+ "dilation": [
904
+ 1,
905
+ 1,
906
+ 1
907
+ ],
908
+ "groups": 1,
909
+ "id": "up_2_conv_1",
910
+ "in_channels": 64,
911
+ "kernel_size": [
912
+ 3,
913
+ 3,
914
+ 3
915
+ ],
916
+ "kind": "conv3d",
917
+ "out_channels": 64,
918
+ "padding": [
919
+ 1,
920
+ 1,
921
+ 1
922
+ ],
923
+ "padding_mode": "zeros",
924
+ "primitive_version": 1,
925
+ "stride": [
926
+ 1,
927
+ 1,
928
+ 1
929
+ ]
930
+ },
931
+ {
932
+ "affine": false,
933
+ "channels": 64,
934
+ "eps": 1e-05,
935
+ "id": "up_2_norm_1",
936
+ "kind": "instance_norm3d",
937
+ "primitive_version": 1,
938
+ "track_running_stats": false
939
+ },
940
+ {
941
+ "bias": true,
942
+ "dilation": [
943
+ 1,
944
+ 1,
945
+ 1
946
+ ],
947
+ "groups": 1,
948
+ "id": "up_2_conv_2",
949
+ "in_channels": 64,
950
+ "kernel_size": [
951
+ 3,
952
+ 3,
953
+ 3
954
+ ],
955
+ "kind": "conv3d",
956
+ "out_channels": 64,
957
+ "padding": [
958
+ 1,
959
+ 1,
960
+ 1
961
+ ],
962
+ "padding_mode": "zeros",
963
+ "primitive_version": 1,
964
+ "stride": [
965
+ 1,
966
+ 1,
967
+ 1
968
+ ]
969
+ },
970
+ {
971
+ "affine": false,
972
+ "channels": 64,
973
+ "eps": 1e-05,
974
+ "id": "up_2_norm_2",
975
+ "kind": "instance_norm3d",
976
+ "primitive_version": 1,
977
+ "track_running_stats": false
978
+ },
979
+ {
980
+ "bias": true,
981
+ "dilation": [
982
+ 1,
983
+ 1,
984
+ 1
985
+ ],
986
+ "groups": 1,
987
+ "id": "final_conv",
988
+ "in_channels": 64,
989
+ "kernel_size": [
990
+ 1,
991
+ 1,
992
+ 1
993
+ ],
994
+ "kind": "conv3d",
995
+ "out_channels": 1,
996
+ "padding": [
997
+ 0,
998
+ 0,
999
+ 0
1000
+ ],
1001
+ "padding_mode": "zeros",
1002
+ "primitive_version": 1,
1003
+ "stride": [
1004
+ 1,
1005
+ 1,
1006
+ 1
1007
+ ]
1008
+ }
1009
+ ],
1010
+ "operations": [
1011
+ {
1012
+ "kind": "call_module",
1013
+ "module": "down_0_conv_0",
1014
+ "output": "down_0_conv_0_out",
1015
+ "primitive_version": 1,
1016
+ "value": "input"
1017
+ },
1018
+ {
1019
+ "kind": "call_module",
1020
+ "module": "down_0_norm_0",
1021
+ "output": "down_0_norm_0_out",
1022
+ "primitive_version": 1,
1023
+ "value": "down_0_conv_0_out"
1024
+ },
1025
+ {
1026
+ "inplace": false,
1027
+ "kind": "dropout3d",
1028
+ "output": "down_0_dropout_0_out",
1029
+ "primitive_version": 1,
1030
+ "probability": 0.0,
1031
+ "value": "down_0_norm_0_out"
1032
+ },
1033
+ {
1034
  "inplace": true,
1035
  "kind": "leaky_relu",
1036
+ "negative_slope": 0.05,
1037
+ "output": "down_0_activation_0_out",
1038
+ "primitive_version": 1,
1039
+ "value": "down_0_dropout_0_out"
1040
+ },
1041
+ {
1042
+ "kind": "call_module",
1043
+ "module": "down_0_conv_1",
1044
+ "output": "down_0_conv_1_out",
1045
+ "primitive_version": 1,
1046
+ "value": "down_0_activation_0_out"
1047
  },
1048
+ {
1049
+ "kind": "call_module",
1050
+ "module": "down_0_norm_1",
1051
+ "output": "down_0_norm_1_out",
1052
+ "primitive_version": 1,
1053
+ "value": "down_0_conv_1_out"
1054
  },
1055
+ {
1056
+ "inplace": false,
1057
+ "kind": "dropout3d",
1058
+ "output": "down_0_dropout_1_out",
1059
+ "primitive_version": 1,
1060
+ "probability": 0.0,
1061
+ "value": "down_0_norm_1_out"
1062
+ },
1063
+ {
1064
  "inplace": true,
1065
  "kind": "leaky_relu",
1066
+ "negative_slope": 0.05,
1067
+ "output": "down_0_activation_1_out",
1068
+ "primitive_version": 1,
1069
+ "value": "down_0_dropout_1_out"
1070
  },
1071
+ {
1072
+ "kind": "call_module",
1073
+ "module": "down_0_conv_2",
1074
+ "output": "down_0_conv_2_out",
1075
+ "primitive_version": 1,
1076
+ "value": "down_0_activation_1_out"
1077
+ },
1078
+ {
1079
+ "kind": "call_module",
1080
+ "module": "down_0_norm_2",
1081
+ "output": "down_0_norm_2_out",
1082
+ "primitive_version": 1,
1083
+ "value": "down_0_conv_2_out"
1084
  },
1085
+ {
1086
+ "inplace": false,
1087
+ "kind": "dropout3d",
1088
+ "output": "down_0_dropout_2_out",
1089
+ "primitive_version": 1,
1090
+ "probability": 0.0,
1091
+ "value": "down_0_norm_2_out"
1092
+ },
1093
+ {
1094
  "inplace": true,
1095
  "kind": "leaky_relu",
1096
+ "negative_slope": 0.05,
1097
+ "output": "down_0_activation_2_out",
1098
+ "primitive_version": 1,
1099
+ "value": "down_0_dropout_2_out"
1100
+ },
1101
+ {
1102
+ "kind": "call_module",
1103
+ "module": "downsample_0",
1104
+ "output": "downsample_0_out",
1105
+ "primitive_version": 1,
1106
+ "value": "down_0_activation_2_out"
1107
  },
1108
+ {
 
 
 
 
 
 
 
1109
  "inplace": true,
1110
  "kind": "leaky_relu",
1111
+ "negative_slope": 0.05,
1112
+ "output": "downsample_0_activation_out",
1113
+ "primitive_version": 1,
1114
+ "value": "downsample_0_out"
1115
  },
1116
+ {
1117
+ "kind": "call_module",
1118
+ "module": "down_1_conv_0",
1119
+ "output": "down_1_conv_0_out",
1120
+ "primitive_version": 1,
1121
+ "value": "downsample_0_activation_out"
1122
+ },
1123
+ {
1124
+ "kind": "call_module",
1125
+ "module": "down_1_norm_0",
1126
+ "output": "down_1_norm_0_out",
1127
+ "primitive_version": 1,
1128
+ "value": "down_1_conv_0_out"
1129
+ },
1130
+ {
1131
+ "inplace": false,
1132
+ "kind": "dropout3d",
1133
+ "output": "down_1_dropout_0_out",
1134
+ "primitive_version": 1,
1135
+ "probability": 0.0,
1136
+ "value": "down_1_norm_0_out"
1137
  },
1138
+ {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1139
  "inplace": true,
1140
  "kind": "leaky_relu",
1141
+ "negative_slope": 0.05,
1142
+ "output": "down_1_activation_0_out",
1143
+ "primitive_version": 1,
1144
+ "value": "down_1_dropout_0_out"
1145
+ },
1146
+ {
1147
+ "kind": "call_module",
1148
+ "module": "down_1_conv_1",
1149
+ "output": "down_1_conv_1_out",
1150
+ "primitive_version": 1,
1151
+ "value": "down_1_activation_0_out"
1152
+ },
1153
+ {
1154
+ "kind": "call_module",
1155
+ "module": "down_1_norm_1",
1156
+ "output": "down_1_norm_1_out",
1157
+ "primitive_version": 1,
1158
+ "value": "down_1_conv_1_out"
1159
+ },
1160
+ {
1161
+ "inplace": false,
1162
+ "kind": "dropout3d",
1163
+ "output": "down_1_dropout_1_out",
1164
+ "primitive_version": 1,
1165
+ "probability": 0.0,
1166
+ "value": "down_1_norm_1_out"
1167
+ },
1168
+ {
1169
+ "inplace": true,
1170
+ "kind": "leaky_relu",
1171
+ "negative_slope": 0.05,
1172
+ "output": "down_1_activation_1_out",
1173
+ "primitive_version": 1,
1174
+ "value": "down_1_dropout_1_out"
1175
+ },
1176
+ {
1177
+ "kind": "call_module",
1178
+ "module": "down_1_conv_2",
1179
+ "output": "down_1_conv_2_out",
1180
+ "primitive_version": 1,
1181
+ "value": "down_1_activation_1_out"
1182
+ },
1183
+ {
1184
+ "kind": "call_module",
1185
+ "module": "down_1_norm_2",
1186
+ "output": "down_1_norm_2_out",
1187
+ "primitive_version": 1,
1188
+ "value": "down_1_conv_2_out"
1189
+ },
1190
+ {
1191
+ "inplace": false,
1192
+ "kind": "dropout3d",
1193
+ "output": "down_1_dropout_2_out",
1194
+ "primitive_version": 1,
1195
+ "probability": 0.0,
1196
+ "value": "down_1_norm_2_out"
1197
+ },
1198
+ {
1199
+ "inplace": true,
1200
+ "kind": "leaky_relu",
1201
+ "negative_slope": 0.05,
1202
+ "output": "down_1_activation_2_out",
1203
+ "primitive_version": 1,
1204
+ "value": "down_1_dropout_2_out"
1205
+ },
1206
+ {
1207
+ "kind": "call_module",
1208
+ "module": "downsample_1",
1209
+ "output": "downsample_1_out",
1210
+ "primitive_version": 1,
1211
+ "value": "down_1_activation_2_out"
1212
+ },
1213
+ {
1214
+ "inplace": true,
1215
+ "kind": "leaky_relu",
1216
+ "negative_slope": 0.05,
1217
+ "output": "downsample_1_activation_out",
1218
+ "primitive_version": 1,
1219
+ "value": "downsample_1_out"
1220
+ },
1221
+ {
1222
+ "kind": "call_module",
1223
+ "module": "down_2_conv_0",
1224
+ "output": "down_2_conv_0_out",
1225
+ "primitive_version": 1,
1226
+ "value": "downsample_1_activation_out"
1227
+ },
1228
+ {
1229
+ "kind": "call_module",
1230
+ "module": "down_2_norm_0",
1231
+ "output": "down_2_norm_0_out",
1232
+ "primitive_version": 1,
1233
+ "value": "down_2_conv_0_out"
1234
+ },
1235
+ {
1236
+ "inplace": false,
1237
+ "kind": "dropout3d",
1238
+ "output": "down_2_dropout_0_out",
1239
+ "primitive_version": 1,
1240
+ "probability": 0.0,
1241
+ "value": "down_2_norm_0_out"
1242
+ },
1243
+ {
1244
+ "inplace": true,
1245
+ "kind": "leaky_relu",
1246
+ "negative_slope": 0.05,
1247
+ "output": "down_2_activation_0_out",
1248
+ "primitive_version": 1,
1249
+ "value": "down_2_dropout_0_out"
1250
+ },
1251
+ {
1252
+ "kind": "call_module",
1253
+ "module": "down_2_conv_1",
1254
+ "output": "down_2_conv_1_out",
1255
+ "primitive_version": 1,
1256
+ "value": "down_2_activation_0_out"
1257
+ },
1258
+ {
1259
+ "kind": "call_module",
1260
+ "module": "down_2_norm_1",
1261
+ "output": "down_2_norm_1_out",
1262
+ "primitive_version": 1,
1263
+ "value": "down_2_conv_1_out"
1264
+ },
1265
+ {
1266
+ "inplace": false,
1267
+ "kind": "dropout3d",
1268
+ "output": "down_2_dropout_1_out",
1269
+ "primitive_version": 1,
1270
+ "probability": 0.0,
1271
+ "value": "down_2_norm_1_out"
1272
+ },
1273
+ {
1274
+ "inplace": true,
1275
+ "kind": "leaky_relu",
1276
+ "negative_slope": 0.05,
1277
+ "output": "down_2_activation_1_out",
1278
+ "primitive_version": 1,
1279
+ "value": "down_2_dropout_1_out"
1280
+ },
1281
+ {
1282
+ "kind": "call_module",
1283
+ "module": "down_2_conv_2",
1284
+ "output": "down_2_conv_2_out",
1285
+ "primitive_version": 1,
1286
+ "value": "down_2_activation_1_out"
1287
+ },
1288
+ {
1289
+ "kind": "call_module",
1290
+ "module": "down_2_norm_2",
1291
+ "output": "down_2_norm_2_out",
1292
+ "primitive_version": 1,
1293
+ "value": "down_2_conv_2_out"
1294
+ },
1295
+ {
1296
+ "inplace": false,
1297
+ "kind": "dropout3d",
1298
+ "output": "down_2_dropout_2_out",
1299
+ "primitive_version": 1,
1300
+ "probability": 0.0,
1301
+ "value": "down_2_norm_2_out"
1302
+ },
1303
+ {
1304
+ "inplace": true,
1305
+ "kind": "leaky_relu",
1306
+ "negative_slope": 0.05,
1307
+ "output": "down_2_activation_2_out",
1308
+ "primitive_version": 1,
1309
+ "value": "down_2_dropout_2_out"
1310
+ },
1311
+ {
1312
+ "kind": "call_module",
1313
+ "module": "downsample_2",
1314
+ "output": "downsample_2_out",
1315
+ "primitive_version": 1,
1316
+ "value": "down_2_activation_2_out"
1317
+ },
1318
+ {
1319
+ "inplace": true,
1320
+ "kind": "leaky_relu",
1321
+ "negative_slope": 0.05,
1322
+ "output": "downsample_2_activation_out",
1323
+ "primitive_version": 1,
1324
+ "value": "downsample_2_out"
1325
+ },
1326
+ {
1327
+ "kind": "call_module",
1328
+ "module": "bottleneck_conv_0",
1329
+ "output": "bottleneck_conv_0_out",
1330
+ "primitive_version": 1,
1331
+ "value": "downsample_2_activation_out"
1332
+ },
1333
+ {
1334
+ "inplace": false,
1335
+ "kind": "dropout3d",
1336
+ "output": "bottleneck_dropout_0_out",
1337
+ "primitive_version": 1,
1338
+ "probability": 0.0,
1339
+ "value": "bottleneck_conv_0_out"
1340
+ },
1341
+ {
1342
+ "inplace": true,
1343
+ "kind": "leaky_relu",
1344
+ "negative_slope": 0.05,
1345
+ "output": "bottleneck_activation_0_out",
1346
+ "primitive_version": 1,
1347
+ "value": "bottleneck_dropout_0_out"
1348
+ },
1349
+ {
1350
+ "kind": "call_module",
1351
+ "module": "bottleneck_conv_1",
1352
+ "output": "bottleneck_conv_1_out",
1353
+ "primitive_version": 1,
1354
+ "value": "bottleneck_activation_0_out"
1355
+ },
1356
+ {
1357
+ "kind": "call_module",
1358
+ "module": "upsample_0",
1359
+ "output": "upsample_0_out",
1360
+ "primitive_version": 1,
1361
+ "value": "bottleneck_conv_1_out"
1362
+ },
1363
+ {
1364
+ "dimension": 1,
1365
+ "kind": "concat",
1366
+ "output": "upsample_0_concat",
1367
+ "primitive_version": 1,
1368
+ "values": [
1369
+ "upsample_0_out",
1370
+ "down_2_activation_2_out"
1371
+ ]
1372
+ },
1373
+ {
1374
+ "inplace": true,
1375
+ "kind": "leaky_relu",
1376
+ "negative_slope": 0.05,
1377
+ "output": "upsample_0_activation_out",
1378
+ "primitive_version": 1,
1379
+ "value": "upsample_0_concat"
1380
+ },
1381
+ {
1382
+ "kind": "call_module",
1383
+ "module": "up_0_conv_0",
1384
+ "output": "up_0_conv_0_out",
1385
+ "primitive_version": 1,
1386
+ "value": "upsample_0_activation_out"
1387
+ },
1388
+ {
1389
+ "kind": "call_module",
1390
+ "module": "up_0_norm_0",
1391
+ "output": "up_0_norm_0_out",
1392
+ "primitive_version": 1,
1393
+ "value": "up_0_conv_0_out"
1394
+ },
1395
+ {
1396
+ "inplace": false,
1397
+ "kind": "dropout3d",
1398
+ "output": "up_0_dropout_0_out",
1399
+ "primitive_version": 1,
1400
+ "probability": 0.0,
1401
+ "value": "up_0_norm_0_out"
1402
+ },
1403
+ {
1404
+ "inplace": true,
1405
+ "kind": "leaky_relu",
1406
+ "negative_slope": 0.05,
1407
+ "output": "up_0_activation_0_out",
1408
+ "primitive_version": 1,
1409
+ "value": "up_0_dropout_0_out"
1410
+ },
1411
+ {
1412
+ "kind": "call_module",
1413
+ "module": "up_0_conv_1",
1414
+ "output": "up_0_conv_1_out",
1415
+ "primitive_version": 1,
1416
+ "value": "up_0_activation_0_out"
1417
+ },
1418
+ {
1419
+ "kind": "call_module",
1420
+ "module": "up_0_norm_1",
1421
+ "output": "up_0_norm_1_out",
1422
+ "primitive_version": 1,
1423
+ "value": "up_0_conv_1_out"
1424
+ },
1425
+ {
1426
+ "inplace": false,
1427
+ "kind": "dropout3d",
1428
+ "output": "up_0_dropout_1_out",
1429
+ "primitive_version": 1,
1430
+ "probability": 0.0,
1431
+ "value": "up_0_norm_1_out"
1432
+ },
1433
+ {
1434
+ "inplace": true,
1435
+ "kind": "leaky_relu",
1436
+ "negative_slope": 0.05,
1437
+ "output": "up_0_activation_1_out",
1438
+ "primitive_version": 1,
1439
+ "value": "up_0_dropout_1_out"
1440
+ },
1441
+ {
1442
+ "kind": "call_module",
1443
+ "module": "up_0_conv_2",
1444
+ "output": "up_0_conv_2_out",
1445
+ "primitive_version": 1,
1446
+ "value": "up_0_activation_1_out"
1447
+ },
1448
+ {
1449
+ "kind": "call_module",
1450
+ "module": "up_0_norm_2",
1451
+ "output": "up_0_norm_2_out",
1452
+ "primitive_version": 1,
1453
+ "value": "up_0_conv_2_out"
1454
+ },
1455
+ {
1456
+ "inplace": false,
1457
+ "kind": "dropout3d",
1458
+ "output": "up_0_dropout_2_out",
1459
+ "primitive_version": 1,
1460
+ "probability": 0.0,
1461
+ "value": "up_0_norm_2_out"
1462
+ },
1463
+ {
1464
+ "inplace": true,
1465
+ "kind": "leaky_relu",
1466
+ "negative_slope": 0.05,
1467
+ "output": "up_0_activation_2_out",
1468
+ "primitive_version": 1,
1469
+ "value": "up_0_dropout_2_out"
1470
+ },
1471
+ {
1472
+ "kind": "call_module",
1473
+ "module": "upsample_1",
1474
+ "output": "upsample_1_out",
1475
+ "primitive_version": 1,
1476
+ "value": "up_0_activation_2_out"
1477
+ },
1478
+ {
1479
+ "dimension": 1,
1480
+ "kind": "concat",
1481
+ "output": "upsample_1_concat",
1482
+ "primitive_version": 1,
1483
+ "values": [
1484
+ "upsample_1_out",
1485
+ "down_1_activation_2_out"
1486
+ ]
1487
+ },
1488
+ {
1489
+ "inplace": true,
1490
+ "kind": "leaky_relu",
1491
+ "negative_slope": 0.05,
1492
+ "output": "upsample_1_activation_out",
1493
+ "primitive_version": 1,
1494
+ "value": "upsample_1_concat"
1495
+ },
1496
+ {
1497
+ "kind": "call_module",
1498
+ "module": "up_1_conv_0",
1499
+ "output": "up_1_conv_0_out",
1500
+ "primitive_version": 1,
1501
+ "value": "upsample_1_activation_out"
1502
+ },
1503
+ {
1504
+ "kind": "call_module",
1505
+ "module": "up_1_norm_0",
1506
+ "output": "up_1_norm_0_out",
1507
+ "primitive_version": 1,
1508
+ "value": "up_1_conv_0_out"
1509
+ },
1510
+ {
1511
+ "inplace": false,
1512
+ "kind": "dropout3d",
1513
+ "output": "up_1_dropout_0_out",
1514
+ "primitive_version": 1,
1515
+ "probability": 0.0,
1516
+ "value": "up_1_norm_0_out"
1517
+ },
1518
+ {
1519
+ "inplace": true,
1520
+ "kind": "leaky_relu",
1521
+ "negative_slope": 0.05,
1522
+ "output": "up_1_activation_0_out",
1523
+ "primitive_version": 1,
1524
+ "value": "up_1_dropout_0_out"
1525
+ },
1526
+ {
1527
+ "kind": "call_module",
1528
+ "module": "up_1_conv_1",
1529
+ "output": "up_1_conv_1_out",
1530
+ "primitive_version": 1,
1531
+ "value": "up_1_activation_0_out"
1532
+ },
1533
+ {
1534
+ "kind": "call_module",
1535
+ "module": "up_1_norm_1",
1536
+ "output": "up_1_norm_1_out",
1537
+ "primitive_version": 1,
1538
+ "value": "up_1_conv_1_out"
1539
+ },
1540
+ {
1541
+ "inplace": false,
1542
+ "kind": "dropout3d",
1543
+ "output": "up_1_dropout_1_out",
1544
+ "primitive_version": 1,
1545
+ "probability": 0.0,
1546
+ "value": "up_1_norm_1_out"
1547
+ },
1548
+ {
1549
+ "inplace": true,
1550
+ "kind": "leaky_relu",
1551
+ "negative_slope": 0.05,
1552
+ "output": "up_1_activation_1_out",
1553
+ "primitive_version": 1,
1554
+ "value": "up_1_dropout_1_out"
1555
+ },
1556
+ {
1557
+ "kind": "call_module",
1558
+ "module": "up_1_conv_2",
1559
+ "output": "up_1_conv_2_out",
1560
+ "primitive_version": 1,
1561
+ "value": "up_1_activation_1_out"
1562
+ },
1563
+ {
1564
+ "kind": "call_module",
1565
+ "module": "up_1_norm_2",
1566
+ "output": "up_1_norm_2_out",
1567
+ "primitive_version": 1,
1568
+ "value": "up_1_conv_2_out"
1569
+ },
1570
+ {
1571
+ "inplace": false,
1572
+ "kind": "dropout3d",
1573
+ "output": "up_1_dropout_2_out",
1574
+ "primitive_version": 1,
1575
+ "probability": 0.0,
1576
+ "value": "up_1_norm_2_out"
1577
+ },
1578
+ {
1579
+ "inplace": true,
1580
+ "kind": "leaky_relu",
1581
+ "negative_slope": 0.05,
1582
+ "output": "up_1_activation_2_out",
1583
+ "primitive_version": 1,
1584
+ "value": "up_1_dropout_2_out"
1585
+ },
1586
+ {
1587
+ "kind": "call_module",
1588
+ "module": "upsample_2",
1589
+ "output": "upsample_2_out",
1590
+ "primitive_version": 1,
1591
+ "value": "up_1_activation_2_out"
1592
+ },
1593
+ {
1594
+ "dimension": 1,
1595
+ "kind": "concat",
1596
+ "output": "upsample_2_concat",
1597
+ "primitive_version": 1,
1598
+ "values": [
1599
+ "upsample_2_out",
1600
+ "down_0_activation_2_out"
1601
+ ]
1602
+ },
1603
+ {
1604
+ "inplace": true,
1605
+ "kind": "leaky_relu",
1606
+ "negative_slope": 0.05,
1607
+ "output": "upsample_2_activation_out",
1608
+ "primitive_version": 1,
1609
+ "value": "upsample_2_concat"
1610
+ },
1611
+ {
1612
+ "kind": "call_module",
1613
+ "module": "up_2_conv_0",
1614
+ "output": "up_2_conv_0_out",
1615
+ "primitive_version": 1,
1616
+ "value": "upsample_2_activation_out"
1617
+ },
1618
+ {
1619
+ "kind": "call_module",
1620
+ "module": "up_2_norm_0",
1621
+ "output": "up_2_norm_0_out",
1622
+ "primitive_version": 1,
1623
+ "value": "up_2_conv_0_out"
1624
+ },
1625
+ {
1626
+ "inplace": false,
1627
+ "kind": "dropout3d",
1628
+ "output": "up_2_dropout_0_out",
1629
+ "primitive_version": 1,
1630
+ "probability": 0.0,
1631
+ "value": "up_2_norm_0_out"
1632
+ },
1633
+ {
1634
+ "inplace": true,
1635
+ "kind": "leaky_relu",
1636
+ "negative_slope": 0.05,
1637
+ "output": "up_2_activation_0_out",
1638
+ "primitive_version": 1,
1639
+ "value": "up_2_dropout_0_out"
1640
+ },
1641
+ {
1642
+ "kind": "call_module",
1643
+ "module": "up_2_conv_1",
1644
+ "output": "up_2_conv_1_out",
1645
+ "primitive_version": 1,
1646
+ "value": "up_2_activation_0_out"
1647
+ },
1648
+ {
1649
+ "kind": "call_module",
1650
+ "module": "up_2_norm_1",
1651
+ "output": "up_2_norm_1_out",
1652
+ "primitive_version": 1,
1653
+ "value": "up_2_conv_1_out"
1654
+ },
1655
+ {
1656
+ "inplace": false,
1657
+ "kind": "dropout3d",
1658
+ "output": "up_2_dropout_1_out",
1659
+ "primitive_version": 1,
1660
+ "probability": 0.0,
1661
+ "value": "up_2_norm_1_out"
1662
+ },
1663
+ {
1664
+ "inplace": true,
1665
+ "kind": "leaky_relu",
1666
+ "negative_slope": 0.05,
1667
+ "output": "up_2_activation_1_out",
1668
+ "primitive_version": 1,
1669
+ "value": "up_2_dropout_1_out"
1670
+ },
1671
+ {
1672
+ "kind": "call_module",
1673
+ "module": "up_2_conv_2",
1674
+ "output": "up_2_conv_2_out",
1675
+ "primitive_version": 1,
1676
+ "value": "up_2_activation_1_out"
1677
+ },
1678
+ {
1679
+ "kind": "call_module",
1680
+ "module": "up_2_norm_2",
1681
+ "output": "up_2_norm_2_out",
1682
+ "primitive_version": 1,
1683
+ "value": "up_2_conv_2_out"
1684
+ },
1685
+ {
1686
+ "inplace": false,
1687
+ "kind": "dropout3d",
1688
+ "output": "up_2_dropout_2_out",
1689
+ "primitive_version": 1,
1690
+ "probability": 0.0,
1691
+ "value": "up_2_norm_2_out"
1692
+ },
1693
+ {
1694
+ "inplace": true,
1695
+ "kind": "leaky_relu",
1696
+ "negative_slope": 0.05,
1697
+ "output": "up_2_activation_2_out",
1698
+ "primitive_version": 1,
1699
+ "value": "up_2_dropout_2_out"
1700
+ },
1701
+ {
1702
+ "kind": "call_module",
1703
+ "module": "final_conv",
1704
+ "output": "final_conv_out",
1705
+ "primitive_version": 1,
1706
+ "value": "up_2_activation_2_out"
1707
  },
1708
+ {
1709
+ "kind": "add",
1710
+ "left": "final_conv_out",
1711
+ "output": "residual_output",
1712
+ "primitive_version": 1,
1713
+ "right": "input"
1714
+ }
1715
+ ],
1716
+ "outputs": [
1717
+ {
1718
+ "channels": 1,
1719
+ "name": "output",
1720
+ "source": "residual_output"
1721
+ }
1722
+ ],
1723
+ "schema_version": 1
1724
+ },
1725
+ "schema_version": 2
1726
  }
conversion/conversion-record.json CHANGED
@@ -1,491 +1,468 @@
1
  {
2
- "construction_fingerprint": "sha256:c9da7decd489f0f4f893dce565f37db25abc63d0d3efcacad9835305ffd97cb2",
3
  "environment": {
4
- "mapping_sha256": "bf23d54a8a79a8086b78a8c807a787f1a5ac5525ef7d6eec67373aea4f0a4cb5",
5
- "trusted": {
6
- "python": "3.12.11",
7
- "safetensors": "0.8.0",
8
- "scitomo": "0.5.4",
9
- "torch": "2.13.0+cu130"
10
- },
11
- "unsafe": {
12
- "platform": "Linux-6.16.12-valve24.5-1-neptune-616-gb2f7cfe85e45-x86_64-with-glibc2.41",
13
- "python": "3.10.16",
14
- "pytorch_lightning": "1.8.0.post1",
15
- "safetensors": "0.5.3",
16
- "torch": "2.2.0+cpu"
17
- }
18
  },
19
- "inference_fingerprint": "sha256:c2c5eba72579510265258dcfce3a5be2f851f9276c7e53d92330d78eb37720dd",
20
  "kind": "scitomo_checkpoint_conversion",
21
  "package_id": "deepdewedge_tutorial",
22
- "package_revision": 2,
23
- "schema_version": 1,
24
  "source": {
25
- "identifier": "10.6084/m9.figshare.25043435.v1/file/45582309/tutorial_data/fitted_model.ckpt",
26
- "kind": "figshare_archive_member",
27
  "metadata": {
 
28
  "archive_sha256": "7c871342e51f5a66a773fe427d72944b5d2cc8ff41c5b7415ab38dbfc9ac6d58",
29
- "archive_size_bytes": 1947310911,
30
  "checkpoint_size_bytes": 327952642,
31
- "figshare_file_id": 45582309
32
  },
33
  "project": "DeepDeWedge Tutorial Data",
34
- "revision": "1",
35
  "sha256": "5262f6c11e85fd662b02e59efe936fa7b69913758e841235be2683f7bd03ec76",
36
- "url": "https://ndownloader.figshare.com/files/45582309"
37
  },
38
- "tool": "deepdewedge_c4_isolated_converter",
39
- "tool_version": "1",
40
- "transformations": [
41
- {
42
- "details": {
43
- "state_role": "parameter_to_buffer"
44
- },
45
- "kind": "tensor_name_mapping",
46
- "source": "unet._normalization_loc",
47
- "target": "_normalization_loc"
48
- },
49
  {
50
  "details": {
51
- "state_role": "parameter_to_buffer"
52
  },
53
- "kind": "tensor_name_mapping",
54
- "source": "unet._normalization_scale",
55
- "target": "_normalization_scale"
56
  },
57
  {
58
  "details": {
59
- "state_role": "parameter_to_parameter"
60
  },
61
- "kind": "tensor_name_mapping",
62
- "source": "unet.down_blocks.0.layers.0.weight",
63
- "target": "down_blocks.0.layers.0.weight"
64
  },
65
  {
66
  "details": {
67
- "state_role": "parameter_to_parameter"
68
  },
69
- "kind": "tensor_name_mapping",
70
- "source": "unet.down_blocks.0.layers.0.bias",
71
- "target": "down_blocks.0.layers.0.bias"
72
  },
73
  {
74
  "details": {
75
- "state_role": "parameter_to_parameter"
76
  },
77
- "kind": "tensor_name_mapping",
78
- "source": "unet.down_blocks.0.layers.4.weight",
79
- "target": "down_blocks.0.layers.4.weight"
80
  },
81
  {
82
  "details": {
83
- "state_role": "parameter_to_parameter"
84
  },
85
- "kind": "tensor_name_mapping",
86
- "source": "unet.down_blocks.0.layers.4.bias",
87
- "target": "down_blocks.0.layers.4.bias"
88
  },
89
  {
90
  "details": {
91
- "state_role": "parameter_to_parameter"
92
  },
93
- "kind": "tensor_name_mapping",
94
- "source": "unet.down_blocks.0.layers.8.weight",
95
- "target": "down_blocks.0.layers.8.weight"
96
  },
97
  {
98
  "details": {
99
- "state_role": "parameter_to_parameter"
100
  },
101
- "kind": "tensor_name_mapping",
102
- "source": "unet.down_blocks.0.layers.8.bias",
103
- "target": "down_blocks.0.layers.8.bias"
104
  },
105
  {
106
  "details": {
107
- "state_role": "parameter_to_parameter"
108
  },
109
- "kind": "tensor_name_mapping",
110
- "source": "unet.down_blocks.1.layers.0.weight",
111
- "target": "down_blocks.1.layers.0.weight"
112
  },
113
  {
114
  "details": {
115
- "state_role": "parameter_to_parameter"
116
  },
117
- "kind": "tensor_name_mapping",
118
- "source": "unet.down_blocks.1.layers.0.bias",
119
- "target": "down_blocks.1.layers.0.bias"
120
  },
121
  {
122
  "details": {
123
- "state_role": "parameter_to_parameter"
124
  },
125
- "kind": "tensor_name_mapping",
126
- "source": "unet.down_blocks.1.layers.4.weight",
127
- "target": "down_blocks.1.layers.4.weight"
128
  },
129
  {
130
  "details": {
131
- "state_role": "parameter_to_parameter"
132
  },
133
- "kind": "tensor_name_mapping",
134
- "source": "unet.down_blocks.1.layers.4.bias",
135
- "target": "down_blocks.1.layers.4.bias"
136
  },
137
  {
138
  "details": {
139
- "state_role": "parameter_to_parameter"
140
  },
141
- "kind": "tensor_name_mapping",
142
- "source": "unet.down_blocks.1.layers.8.weight",
143
- "target": "down_blocks.1.layers.8.weight"
144
  },
145
  {
146
  "details": {
147
- "state_role": "parameter_to_parameter"
148
  },
149
- "kind": "tensor_name_mapping",
150
- "source": "unet.down_blocks.1.layers.8.bias",
151
- "target": "down_blocks.1.layers.8.bias"
152
  },
153
  {
154
  "details": {
155
- "state_role": "parameter_to_parameter"
156
  },
157
- "kind": "tensor_name_mapping",
158
- "source": "unet.down_blocks.2.layers.0.weight",
159
- "target": "down_blocks.2.layers.0.weight"
160
  },
161
  {
162
  "details": {
163
- "state_role": "parameter_to_parameter"
164
  },
165
- "kind": "tensor_name_mapping",
166
- "source": "unet.down_blocks.2.layers.0.bias",
167
- "target": "down_blocks.2.layers.0.bias"
168
  },
169
  {
170
  "details": {
171
- "state_role": "parameter_to_parameter"
172
  },
173
- "kind": "tensor_name_mapping",
174
- "source": "unet.down_blocks.2.layers.4.weight",
175
- "target": "down_blocks.2.layers.4.weight"
176
  },
177
  {
178
  "details": {
179
- "state_role": "parameter_to_parameter"
180
  },
181
- "kind": "tensor_name_mapping",
182
- "source": "unet.down_blocks.2.layers.4.bias",
183
- "target": "down_blocks.2.layers.4.bias"
184
  },
185
  {
186
  "details": {
187
- "state_role": "parameter_to_parameter"
188
  },
189
- "kind": "tensor_name_mapping",
190
- "source": "unet.down_blocks.2.layers.8.weight",
191
- "target": "down_blocks.2.layers.8.weight"
192
  },
193
  {
194
  "details": {
195
- "state_role": "parameter_to_parameter"
196
  },
197
- "kind": "tensor_name_mapping",
198
- "source": "unet.down_blocks.2.layers.8.bias",
199
- "target": "down_blocks.2.layers.8.bias"
200
  },
201
  {
202
  "details": {
203
- "state_role": "parameter_to_parameter"
204
  },
205
- "kind": "tensor_name_mapping",
206
- "source": "unet.down_samplers.0.layers.0.weight",
207
- "target": "down_samplers.0.layers.0.weight"
208
  },
209
  {
210
  "details": {
211
- "state_role": "parameter_to_parameter"
212
  },
213
- "kind": "tensor_name_mapping",
214
- "source": "unet.down_samplers.0.layers.0.bias",
215
- "target": "down_samplers.0.layers.0.bias"
216
  },
217
  {
218
  "details": {
219
- "state_role": "parameter_to_parameter"
220
  },
221
- "kind": "tensor_name_mapping",
222
- "source": "unet.down_samplers.1.layers.0.weight",
223
- "target": "down_samplers.1.layers.0.weight"
224
  },
225
  {
226
  "details": {
227
- "state_role": "parameter_to_parameter"
228
  },
229
- "kind": "tensor_name_mapping",
230
- "source": "unet.down_samplers.1.layers.0.bias",
231
- "target": "down_samplers.1.layers.0.bias"
232
  },
233
  {
234
  "details": {
235
- "state_role": "parameter_to_parameter"
236
  },
237
- "kind": "tensor_name_mapping",
238
- "source": "unet.down_samplers.2.layers.0.weight",
239
- "target": "down_samplers.2.layers.0.weight"
240
  },
241
  {
242
  "details": {
243
- "state_role": "parameter_to_parameter"
244
  },
245
- "kind": "tensor_name_mapping",
246
- "source": "unet.down_samplers.2.layers.0.bias",
247
- "target": "down_samplers.2.layers.0.bias"
248
  },
249
  {
250
  "details": {
251
- "state_role": "parameter_to_parameter"
252
  },
253
- "kind": "tensor_name_mapping",
254
- "source": "unet.bottleneck.0.weight",
255
- "target": "bottleneck.0.weight"
256
  },
257
  {
258
  "details": {
259
- "state_role": "parameter_to_parameter"
260
  },
261
- "kind": "tensor_name_mapping",
262
- "source": "unet.bottleneck.0.bias",
263
- "target": "bottleneck.0.bias"
264
  },
265
  {
266
  "details": {
267
- "state_role": "parameter_to_parameter"
268
  },
269
- "kind": "tensor_name_mapping",
270
- "source": "unet.bottleneck.2.weight",
271
- "target": "bottleneck.4.weight"
272
  },
273
  {
274
  "details": {
275
- "state_role": "parameter_to_parameter"
276
  },
277
- "kind": "tensor_name_mapping",
278
- "source": "unet.bottleneck.2.bias",
279
- "target": "bottleneck.4.bias"
280
- },
281
- {
282
- "details": {
283
- "state_role": "parameter_to_parameter"
284
- },
285
- "kind": "tensor_name_mapping",
286
- "source": "unet.up_blocks.0.layers.0.weight",
287
- "target": "up_blocks.0.layers.0.weight"
288
  },
289
  {
290
  "details": {
291
- "state_role": "parameter_to_parameter"
292
  },
293
- "kind": "tensor_name_mapping",
294
- "source": "unet.up_blocks.0.layers.0.bias",
295
- "target": "up_blocks.0.layers.0.bias"
296
  },
297
  {
298
  "details": {
299
- "state_role": "parameter_to_parameter"
300
  },
301
- "kind": "tensor_name_mapping",
302
- "source": "unet.up_blocks.0.layers.4.weight",
303
- "target": "up_blocks.0.layers.4.weight"
304
  },
305
  {
306
  "details": {
307
- "state_role": "parameter_to_parameter"
308
  },
309
- "kind": "tensor_name_mapping",
310
- "source": "unet.up_blocks.0.layers.4.bias",
311
- "target": "up_blocks.0.layers.4.bias"
312
  },
313
  {
314
  "details": {
315
- "state_role": "parameter_to_parameter"
316
  },
317
- "kind": "tensor_name_mapping",
318
- "source": "unet.up_blocks.0.layers.8.weight",
319
- "target": "up_blocks.0.layers.8.weight"
320
  },
321
  {
322
  "details": {
323
- "state_role": "parameter_to_parameter"
324
  },
325
- "kind": "tensor_name_mapping",
326
- "source": "unet.up_blocks.0.layers.8.bias",
327
- "target": "up_blocks.0.layers.8.bias"
328
  },
329
  {
330
  "details": {
331
- "state_role": "parameter_to_parameter"
332
  },
333
- "kind": "tensor_name_mapping",
334
- "source": "unet.up_blocks.1.layers.0.weight",
335
- "target": "up_blocks.1.layers.0.weight"
336
  },
337
  {
338
  "details": {
339
- "state_role": "parameter_to_parameter"
340
  },
341
- "kind": "tensor_name_mapping",
342
- "source": "unet.up_blocks.1.layers.0.bias",
343
- "target": "up_blocks.1.layers.0.bias"
344
  },
345
  {
346
  "details": {
347
- "state_role": "parameter_to_parameter"
348
  },
349
- "kind": "tensor_name_mapping",
350
- "source": "unet.up_blocks.1.layers.4.weight",
351
- "target": "up_blocks.1.layers.4.weight"
352
  },
353
  {
354
  "details": {
355
- "state_role": "parameter_to_parameter"
356
  },
357
- "kind": "tensor_name_mapping",
358
- "source": "unet.up_blocks.1.layers.4.bias",
359
- "target": "up_blocks.1.layers.4.bias"
360
  },
361
  {
362
  "details": {
363
- "state_role": "parameter_to_parameter"
364
  },
365
- "kind": "tensor_name_mapping",
366
- "source": "unet.up_blocks.1.layers.8.weight",
367
- "target": "up_blocks.1.layers.8.weight"
368
  },
369
  {
370
  "details": {
371
- "state_role": "parameter_to_parameter"
372
  },
373
- "kind": "tensor_name_mapping",
374
- "source": "unet.up_blocks.1.layers.8.bias",
375
- "target": "up_blocks.1.layers.8.bias"
376
  },
377
  {
378
  "details": {
379
- "state_role": "parameter_to_parameter"
380
  },
381
- "kind": "tensor_name_mapping",
382
- "source": "unet.up_blocks.2.layers.0.weight",
383
- "target": "up_blocks.2.layers.0.weight"
384
  },
385
  {
386
  "details": {
387
- "state_role": "parameter_to_parameter"
388
  },
389
- "kind": "tensor_name_mapping",
390
- "source": "unet.up_blocks.2.layers.0.bias",
391
- "target": "up_blocks.2.layers.0.bias"
392
  },
393
  {
394
  "details": {
395
- "state_role": "parameter_to_parameter"
396
  },
397
- "kind": "tensor_name_mapping",
398
- "source": "unet.up_blocks.2.layers.4.weight",
399
- "target": "up_blocks.2.layers.4.weight"
400
  },
401
  {
402
  "details": {
403
- "state_role": "parameter_to_parameter"
404
  },
405
- "kind": "tensor_name_mapping",
406
- "source": "unet.up_blocks.2.layers.4.bias",
407
- "target": "up_blocks.2.layers.4.bias"
408
  },
409
  {
410
  "details": {
411
- "state_role": "parameter_to_parameter"
412
  },
413
- "kind": "tensor_name_mapping",
414
- "source": "unet.up_blocks.2.layers.8.weight",
415
- "target": "up_blocks.2.layers.8.weight"
416
  },
417
  {
418
  "details": {
419
- "state_role": "parameter_to_parameter"
420
  },
421
- "kind": "tensor_name_mapping",
422
- "source": "unet.up_blocks.2.layers.8.bias",
423
- "target": "up_blocks.2.layers.8.bias"
424
  },
425
  {
426
  "details": {
427
- "state_role": "parameter_to_parameter"
428
  },
429
- "kind": "tensor_name_mapping",
430
- "source": "unet.upsamplers.0.tconv.weight",
431
- "target": "upsamplers.0.tconv.weight"
432
  },
433
  {
434
  "details": {
435
- "state_role": "parameter_to_parameter"
436
  },
437
- "kind": "tensor_name_mapping",
438
- "source": "unet.upsamplers.0.tconv.bias",
439
- "target": "upsamplers.0.tconv.bias"
440
  },
441
  {
442
  "details": {
443
- "state_role": "parameter_to_parameter"
444
  },
445
- "kind": "tensor_name_mapping",
446
- "source": "unet.upsamplers.1.tconv.weight",
447
- "target": "upsamplers.1.tconv.weight"
448
  },
449
  {
450
  "details": {
451
- "state_role": "parameter_to_parameter"
452
  },
453
- "kind": "tensor_name_mapping",
454
- "source": "unet.upsamplers.1.tconv.bias",
455
- "target": "upsamplers.1.tconv.bias"
456
  },
457
  {
458
  "details": {
459
- "state_role": "parameter_to_parameter"
460
  },
461
- "kind": "tensor_name_mapping",
462
- "source": "unet.upsamplers.2.tconv.weight",
463
- "target": "upsamplers.2.tconv.weight"
464
  },
465
  {
466
  "details": {
467
- "state_role": "parameter_to_parameter"
468
  },
469
- "kind": "tensor_name_mapping",
470
- "source": "unet.upsamplers.2.tconv.bias",
471
- "target": "upsamplers.2.tconv.bias"
472
  },
473
  {
474
  "details": {
475
- "state_role": "parameter_to_parameter"
476
  },
477
- "kind": "tensor_name_mapping",
478
- "source": "unet.final_conv.weight",
479
- "target": "final_conv.weight"
480
  },
481
  {
482
  "details": {
483
- "state_role": "parameter_to_parameter"
484
  },
485
- "kind": "tensor_name_mapping",
486
- "source": "unet.final_conv.bias",
487
- "target": "final_conv.bias"
488
  }
489
  ],
490
- "weights_sha256": "2a34aeb61dba5da5c7b78f4cc26de9b8a9134ac12dc08876a8e93bf02776c795"
 
 
491
  }
 
1
  {
2
+ "construction_fingerprint": "sha256:644b162de70d014f9273c992fd583ee4fdfb8ae425a35fba26b3fbd41d560f28",
3
  "environment": {
4
+ "platform": "Windows-11-10.0.22631-SP0",
5
+ "python": "3.12.13",
6
+ "pytorch_lightning": "2.6.5",
7
+ "safetensors": "0.8.0",
8
+ "scitomo": "0.7.3.dev0",
9
+ "scitomo_commit": "2832957f69daff0d7baec5df17a7c54954623eed",
10
+ "torch": "2.12.1+cpu"
 
 
 
 
 
 
 
11
  },
12
+ "inference_fingerprint": "sha256:dd4d9b190f9e3a0c94a0da2d383f5dc42aaa0ac888dcec760d57b4cf5362aabd",
13
  "kind": "scitomo_checkpoint_conversion",
14
  "package_id": "deepdewedge_tutorial",
15
+ "package_revision": 3,
16
+ "schema_version": 2,
17
  "source": {
18
+ "identifier": "45582309/tutorial_data/fitted_model.ckpt",
19
+ "kind": "figshare_checkpoint",
20
  "metadata": {
21
+ "archive_member": "tutorial_data/fitted_model.ckpt",
22
  "archive_sha256": "7c871342e51f5a66a773fe427d72944b5d2cc8ff41c5b7415ab38dbfc9ac6d58",
 
23
  "checkpoint_size_bytes": 327952642,
24
+ "upstream_repository": "https://github.com/MLI-lab/DeepDeWedge"
25
  },
26
  "project": "DeepDeWedge Tutorial Data",
27
+ "revision": "072075692a44a8f17394214369e6e762abe52bc3",
28
  "sha256": "5262f6c11e85fd662b02e59efe936fa7b69913758e841235be2683f7bd03ec76",
29
+ "url": "https://doi.org/10.6084/m9.figshare.25043435.v1"
30
  },
31
+ "tensor_mappings": [
 
 
 
 
 
 
 
 
 
 
32
  {
33
  "details": {
34
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
35
  },
36
+ "kind": "identity",
37
+ "source": "state_dict.unet.bottleneck.0.bias",
38
+ "target": "bottleneck_conv_0.bias"
39
  },
40
  {
41
  "details": {
42
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
43
  },
44
+ "kind": "identity",
45
+ "source": "state_dict.unet.bottleneck.0.weight",
46
+ "target": "bottleneck_conv_0.weight"
47
  },
48
  {
49
  "details": {
50
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
51
  },
52
+ "kind": "rename",
53
+ "source": "state_dict.unet.bottleneck.2.bias",
54
+ "target": "bottleneck_conv_1.bias"
55
  },
56
  {
57
  "details": {
58
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
59
  },
60
+ "kind": "rename",
61
+ "source": "state_dict.unet.bottleneck.2.weight",
62
+ "target": "bottleneck_conv_1.weight"
63
  },
64
  {
65
  "details": {
66
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
67
  },
68
+ "kind": "identity",
69
+ "source": "state_dict.unet.down_blocks.0.layers.0.bias",
70
+ "target": "down_0_conv_0.bias"
71
  },
72
  {
73
  "details": {
74
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
75
  },
76
+ "kind": "identity",
77
+ "source": "state_dict.unet.down_blocks.0.layers.0.weight",
78
+ "target": "down_0_conv_0.weight"
79
  },
80
  {
81
  "details": {
82
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
83
  },
84
+ "kind": "identity",
85
+ "source": "state_dict.unet.down_blocks.0.layers.4.bias",
86
+ "target": "down_0_conv_1.bias"
87
  },
88
  {
89
  "details": {
90
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
91
  },
92
+ "kind": "identity",
93
+ "source": "state_dict.unet.down_blocks.0.layers.4.weight",
94
+ "target": "down_0_conv_1.weight"
95
  },
96
  {
97
  "details": {
98
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
99
  },
100
+ "kind": "identity",
101
+ "source": "state_dict.unet.down_blocks.0.layers.8.bias",
102
+ "target": "down_0_conv_2.bias"
103
  },
104
  {
105
  "details": {
106
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
107
  },
108
+ "kind": "identity",
109
+ "source": "state_dict.unet.down_blocks.0.layers.8.weight",
110
+ "target": "down_0_conv_2.weight"
111
  },
112
  {
113
  "details": {
114
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
115
  },
116
+ "kind": "identity",
117
+ "source": "state_dict.unet.down_blocks.1.layers.0.bias",
118
+ "target": "down_1_conv_0.bias"
119
  },
120
  {
121
  "details": {
122
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
123
  },
124
+ "kind": "identity",
125
+ "source": "state_dict.unet.down_blocks.1.layers.0.weight",
126
+ "target": "down_1_conv_0.weight"
127
  },
128
  {
129
  "details": {
130
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
131
  },
132
+ "kind": "identity",
133
+ "source": "state_dict.unet.down_blocks.1.layers.4.bias",
134
+ "target": "down_1_conv_1.bias"
135
  },
136
  {
137
  "details": {
138
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
139
  },
140
+ "kind": "identity",
141
+ "source": "state_dict.unet.down_blocks.1.layers.4.weight",
142
+ "target": "down_1_conv_1.weight"
143
  },
144
  {
145
  "details": {
146
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
147
  },
148
+ "kind": "identity",
149
+ "source": "state_dict.unet.down_blocks.1.layers.8.bias",
150
+ "target": "down_1_conv_2.bias"
151
  },
152
  {
153
  "details": {
154
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
155
  },
156
+ "kind": "identity",
157
+ "source": "state_dict.unet.down_blocks.1.layers.8.weight",
158
+ "target": "down_1_conv_2.weight"
159
  },
160
  {
161
  "details": {
162
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
163
  },
164
+ "kind": "identity",
165
+ "source": "state_dict.unet.down_blocks.2.layers.0.bias",
166
+ "target": "down_2_conv_0.bias"
167
  },
168
  {
169
  "details": {
170
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
171
  },
172
+ "kind": "identity",
173
+ "source": "state_dict.unet.down_blocks.2.layers.0.weight",
174
+ "target": "down_2_conv_0.weight"
175
  },
176
  {
177
  "details": {
178
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
179
  },
180
+ "kind": "identity",
181
+ "source": "state_dict.unet.down_blocks.2.layers.4.bias",
182
+ "target": "down_2_conv_1.bias"
183
  },
184
  {
185
  "details": {
186
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
187
  },
188
+ "kind": "identity",
189
+ "source": "state_dict.unet.down_blocks.2.layers.4.weight",
190
+ "target": "down_2_conv_1.weight"
191
  },
192
  {
193
  "details": {
194
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
195
  },
196
+ "kind": "identity",
197
+ "source": "state_dict.unet.down_blocks.2.layers.8.bias",
198
+ "target": "down_2_conv_2.bias"
199
  },
200
  {
201
  "details": {
202
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
203
  },
204
+ "kind": "identity",
205
+ "source": "state_dict.unet.down_blocks.2.layers.8.weight",
206
+ "target": "down_2_conv_2.weight"
207
  },
208
  {
209
  "details": {
210
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
211
  },
212
+ "kind": "identity",
213
+ "source": "state_dict.unet.down_samplers.0.layers.0.bias",
214
+ "target": "downsample_0.bias"
215
  },
216
  {
217
  "details": {
218
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
219
  },
220
+ "kind": "identity",
221
+ "source": "state_dict.unet.down_samplers.0.layers.0.weight",
222
+ "target": "downsample_0.weight"
223
  },
224
  {
225
  "details": {
226
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
227
  },
228
+ "kind": "identity",
229
+ "source": "state_dict.unet.down_samplers.1.layers.0.bias",
230
+ "target": "downsample_1.bias"
231
  },
232
  {
233
  "details": {
234
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
235
  },
236
+ "kind": "identity",
237
+ "source": "state_dict.unet.down_samplers.1.layers.0.weight",
238
+ "target": "downsample_1.weight"
239
  },
240
  {
241
  "details": {
242
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
243
  },
244
+ "kind": "identity",
245
+ "source": "state_dict.unet.down_samplers.2.layers.0.bias",
246
+ "target": "downsample_2.bias"
247
  },
248
  {
249
  "details": {
250
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
251
  },
252
+ "kind": "identity",
253
+ "source": "state_dict.unet.down_samplers.2.layers.0.weight",
254
+ "target": "downsample_2.weight"
255
  },
256
  {
257
  "details": {
258
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
259
  },
260
+ "kind": "identity",
261
+ "source": "state_dict.unet.final_conv.bias",
262
+ "target": "final_conv.bias"
 
 
 
 
 
 
 
 
263
  },
264
  {
265
  "details": {
266
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
267
  },
268
+ "kind": "identity",
269
+ "source": "state_dict.unet.final_conv.weight",
270
+ "target": "final_conv.weight"
271
  },
272
  {
273
  "details": {
274
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
275
  },
276
+ "kind": "identity",
277
+ "source": "state_dict.unet.up_blocks.0.layers.0.bias",
278
+ "target": "up_0_conv_0.bias"
279
  },
280
  {
281
  "details": {
282
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
283
  },
284
+ "kind": "identity",
285
+ "source": "state_dict.unet.up_blocks.0.layers.0.weight",
286
+ "target": "up_0_conv_0.weight"
287
  },
288
  {
289
  "details": {
290
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
291
  },
292
+ "kind": "identity",
293
+ "source": "state_dict.unet.up_blocks.0.layers.4.bias",
294
+ "target": "up_0_conv_1.bias"
295
  },
296
  {
297
  "details": {
298
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
299
  },
300
+ "kind": "identity",
301
+ "source": "state_dict.unet.up_blocks.0.layers.4.weight",
302
+ "target": "up_0_conv_1.weight"
303
  },
304
  {
305
  "details": {
306
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
307
  },
308
+ "kind": "identity",
309
+ "source": "state_dict.unet.up_blocks.0.layers.8.bias",
310
+ "target": "up_0_conv_2.bias"
311
  },
312
  {
313
  "details": {
314
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
315
  },
316
+ "kind": "identity",
317
+ "source": "state_dict.unet.up_blocks.0.layers.8.weight",
318
+ "target": "up_0_conv_2.weight"
319
  },
320
  {
321
  "details": {
322
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
323
  },
324
+ "kind": "identity",
325
+ "source": "state_dict.unet.up_blocks.1.layers.0.bias",
326
+ "target": "up_1_conv_0.bias"
327
  },
328
  {
329
  "details": {
330
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
331
  },
332
+ "kind": "identity",
333
+ "source": "state_dict.unet.up_blocks.1.layers.0.weight",
334
+ "target": "up_1_conv_0.weight"
335
  },
336
  {
337
  "details": {
338
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
339
  },
340
+ "kind": "identity",
341
+ "source": "state_dict.unet.up_blocks.1.layers.4.bias",
342
+ "target": "up_1_conv_1.bias"
343
  },
344
  {
345
  "details": {
346
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
347
  },
348
+ "kind": "identity",
349
+ "source": "state_dict.unet.up_blocks.1.layers.4.weight",
350
+ "target": "up_1_conv_1.weight"
351
  },
352
  {
353
  "details": {
354
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
355
  },
356
+ "kind": "identity",
357
+ "source": "state_dict.unet.up_blocks.1.layers.8.bias",
358
+ "target": "up_1_conv_2.bias"
359
  },
360
  {
361
  "details": {
362
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
363
  },
364
+ "kind": "identity",
365
+ "source": "state_dict.unet.up_blocks.1.layers.8.weight",
366
+ "target": "up_1_conv_2.weight"
367
  },
368
  {
369
  "details": {
370
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
371
  },
372
+ "kind": "identity",
373
+ "source": "state_dict.unet.up_blocks.2.layers.0.bias",
374
+ "target": "up_2_conv_0.bias"
375
  },
376
  {
377
  "details": {
378
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
379
  },
380
+ "kind": "identity",
381
+ "source": "state_dict.unet.up_blocks.2.layers.0.weight",
382
+ "target": "up_2_conv_0.weight"
383
  },
384
  {
385
  "details": {
386
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
387
  },
388
+ "kind": "identity",
389
+ "source": "state_dict.unet.up_blocks.2.layers.4.bias",
390
+ "target": "up_2_conv_1.bias"
391
  },
392
  {
393
  "details": {
394
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
395
  },
396
+ "kind": "identity",
397
+ "source": "state_dict.unet.up_blocks.2.layers.4.weight",
398
+ "target": "up_2_conv_1.weight"
399
  },
400
  {
401
  "details": {
402
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
403
  },
404
+ "kind": "identity",
405
+ "source": "state_dict.unet.up_blocks.2.layers.8.bias",
406
+ "target": "up_2_conv_2.bias"
407
  },
408
  {
409
  "details": {
410
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
411
  },
412
+ "kind": "identity",
413
+ "source": "state_dict.unet.up_blocks.2.layers.8.weight",
414
+ "target": "up_2_conv_2.weight"
415
  },
416
  {
417
  "details": {
418
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
419
  },
420
+ "kind": "identity",
421
+ "source": "state_dict.unet.upsamplers.0.tconv.bias",
422
+ "target": "upsample_0.bias"
423
  },
424
  {
425
  "details": {
426
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
427
  },
428
+ "kind": "identity",
429
+ "source": "state_dict.unet.upsamplers.0.tconv.weight",
430
+ "target": "upsample_0.weight"
431
  },
432
  {
433
  "details": {
434
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
435
  },
436
+ "kind": "identity",
437
+ "source": "state_dict.unet.upsamplers.1.tconv.bias",
438
+ "target": "upsample_1.bias"
439
  },
440
  {
441
  "details": {
442
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
443
  },
444
+ "kind": "identity",
445
+ "source": "state_dict.unet.upsamplers.1.tconv.weight",
446
+ "target": "upsample_1.weight"
447
  },
448
  {
449
  "details": {
450
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
451
  },
452
+ "kind": "identity",
453
+ "source": "state_dict.unet.upsamplers.2.tconv.bias",
454
+ "target": "upsample_2.bias"
455
  },
456
  {
457
  "details": {
458
+ "source_checkpoint": "tutorial_data/fitted_model.ckpt"
459
  },
460
+ "kind": "identity",
461
+ "source": "state_dict.unet.upsamplers.2.tconv.weight",
462
+ "target": "upsample_2.weight"
463
  }
464
  ],
465
+ "tool": "deepdewedge_refresh_format2",
466
+ "tool_version": "1",
467
+ "weights_sha256": "e8f51c499d6e5c14ddce45d5cf9935511220de161ce62deb50a2c3a8cae5c731"
468
  }
inference.json CHANGED
@@ -1,34 +1,43 @@
1
  {
2
- "fingerprint": "sha256:c2c5eba72579510265258dcfce3a5be2f851f9276c7e53d92330d78eb37720dd",
3
  "kind": "scitomo_inference_profile",
4
- "method": {
5
  "family": "restoration",
6
- "kind": "deepdewedge"
 
7
  },
8
  "profile": {
9
- "channel_semantics": "single_scalar_volume",
10
- "coverage_padding": "trailing_reflection",
11
- "full_tomogram_standardization": false,
12
- "input_layout": "(..., Z, Y, X)",
13
- "kind": "deepdewedge_inference",
14
- "missing_wedge_full_width_deg": 50.0,
15
- "missing_wedge_preconditioning": "fourier_mask_each_half",
16
- "network_layout": "(..., C, Z, Y, X)",
17
- "normalization_policy": "recompute_patch_statistics",
18
- "output_scaling": "network_denormalization",
19
- "overlap": [
20
- 32,
21
- 32,
22
- 32
23
- ],
24
- "pair_combination": "mean",
25
- "paired_half_semantics": "refine_each_half_then_mean",
26
- "patch_shape": [
27
- 96,
28
- 96,
29
- 96
30
- ],
31
- "reassembly": "linear_ramp_weighted_mean"
 
 
 
 
 
 
 
 
32
  },
33
- "schema_version": 1
34
  }
 
1
  {
2
+ "fingerprint": "sha256:dd4d9b190f9e3a0c94a0da2d383f5dc42aaa0ac888dcec760d57b4cf5362aabd",
3
  "kind": "scitomo_inference_profile",
4
+ "owner": {
5
  "family": "restoration",
6
+ "kind": "method",
7
+ "method_kind": "deepdewedge"
8
  },
9
  "profile": {
10
+ "contract": {
11
+ "channel_semantics": "single_scalar_volume",
12
+ "coverage_padding": "trailing_reflection",
13
+ "full_tomogram_standardization": false,
14
+ "input_layout": "(..., Z, Y, X)",
15
+ "kind": "deepdewedge_inference_contract",
16
+ "missing_wedge_full_width_deg": 50.0,
17
+ "missing_wedge_preconditioning": "fourier_mask_each_half",
18
+ "network_layout": "(..., C, Z, Y, X)",
19
+ "output_scaling": "checkpoint_fitted_network_affine",
20
+ "overlap": [
21
+ 32,
22
+ 32,
23
+ 32
24
+ ],
25
+ "pair_combination": "mean",
26
+ "paired_half_semantics": "refine_each_half_then_mean",
27
+ "patch_shape": [
28
+ 96,
29
+ 96,
30
+ 96
31
+ ],
32
+ "preconditioning_normalization_policy": "recompute_patch_statistics",
33
+ "reassembly": "linear_ramp_weighted_mean"
34
+ },
35
+ "fitted": {
36
+ "kind": "deepdewedge_fitted_inference",
37
+ "network_affine_loc": -0.1489875167608261,
38
+ "network_affine_scale": 1.3237642049789429
39
+ },
40
+ "kind": "deepdewedge_inference"
41
  },
42
+ "schema_version": 3
43
  }
manifest.json CHANGED
@@ -1,30 +1,26 @@
1
  {
 
2
  "files": {
3
  "construction": {
4
  "path": "construction.json",
5
- "sha256": "d4c7eced057042438827de168d47b7900311fba742ce52445675be7f40343432",
6
- "size_bytes": 2175
7
  },
8
  "conversion": {
9
  "path": "conversion/conversion-record.json",
10
- "sha256": "c2204fdd346b416966d7c14d5746a305e80649a7f381f173c7ad4d9482f3e66d",
11
- "size_bytes": 13953
12
  },
13
  "inference": {
14
  "path": "inference.json",
15
- "sha256": "217636919d17d9332aa49474e893064ed1dfb29f016a468cf22d439cf16887a0",
16
- "size_bytes": 968
17
- },
18
- "migration": {
19
- "path": "migration/migration-record.json",
20
- "sha256": "fdabc791f22826bc13622199c73890cb05f89cc7797ae9c62ea5fd40f1f4fd4d",
21
- "size_bytes": 1518
22
  },
23
  "resources": [
24
  {
25
  "path": "ATTRIBUTION.md",
26
- "sha256": "ab224b5dafa8d3aeba4e9be0349ff568da6ce72f79c26c8a68c3358f960a4297",
27
- "size_bytes": 2060
28
  },
29
  {
30
  "path": "LICENSES/DeepDeWedge-Code-BSD-2-Clause.txt",
@@ -32,96 +28,70 @@
32
  "size_bytes": 1343
33
  },
34
  {
35
- "path": "LICENSES/DeepDeWedge-Tutorial-Data-CC-BY-4.0.txt",
36
- "sha256": "d557539df68e771cc1eedcc91d13f70fca930e508d11eedcafa4b15db49e3744",
37
- "size_bytes": 17023
38
  },
39
  {
40
- "path": "README.md",
41
- "sha256": "ec1795d189581468b93881a6ad0ac1dc95386862000c03a6aa98ab7d09697643",
42
- "size_bytes": 7114
43
  }
44
  ],
45
  "validation": {
46
  "path": "validation/validation-record.json",
47
- "sha256": "7e018bc98518e898cb723b7c608024e101999a1217e7256a9f3ff6c6da20215e",
48
- "size_bytes": 1946
49
  },
50
  "weights": {
51
  "path": "weights.safetensors",
52
- "sha256": "2a34aeb61dba5da5c7b78f4cc26de9b8a9134ac12dc08876a8e93bf02776c795",
53
- "size_bytes": 109294940
54
  }
55
  },
 
56
  "kind": "scitomo_learned_checkpoint",
57
- "method": {
58
  "family": "restoration",
59
- "kind": "deepdewedge"
 
60
  },
61
  "package_id": "deepdewedge_tutorial",
62
- "package_revision": 2,
63
  "provenance": {
64
  "citations": [
65
- "doi:10.6084/m9.figshare.25043435.v1",
66
- "doi:10.1038/s41467-024-51438-y"
67
- ],
68
- "licenses": [
69
- {
70
- "identifier": "BSD-2-Clause",
71
- "path": "LICENSES/DeepDeWedge-Code-BSD-2-Clause.txt",
72
- "redistribution": "approved",
73
- "subject": "code"
74
- },
75
- {
76
- "identifier": "CC-BY-4.0",
77
- "path": "LICENSES/DeepDeWedge-Tutorial-Data-CC-BY-4.0.txt",
78
- "redistribution": "approved",
79
- "subject": "weights"
80
- }
81
  ],
 
82
  "sources": [
83
  {
84
- "identifier": "10.6084/m9.figshare.25043435.v1/file/45582309/tutorial_data/fitted_model.ckpt",
85
- "kind": "figshare_archive_member",
86
- "metadata": {
87
- "archive_sha256": "7c871342e51f5a66a773fe427d72944b5d2cc8ff41c5b7415ab38dbfc9ac6d58",
88
- "archive_size_bytes": 1947310911,
89
- "checkpoint_size_bytes": 327952642,
90
- "figshare_file_id": 45582309
91
- },
92
- "project": "DeepDeWedge Tutorial Data",
93
- "revision": "1",
94
- "sha256": "5262f6c11e85fd662b02e59efe936fa7b69913758e841235be2683f7bd03ec76",
95
- "url": "https://ndownloader.figshare.com/files/45582309"
96
  }
97
  ]
98
  },
99
  "requirements": {
100
- "learned_checkpoint_format": 1,
101
- "minimum_scitomo_version": "0.6.2"
102
  },
103
- "schema_version": 2,
104
  "tensors": [
105
  {
106
  "dtype": "float32",
107
- "name": "_normalization_loc",
108
- "shape": []
109
- },
110
- {
111
- "dtype": "float32",
112
- "name": "_normalization_scale",
113
- "shape": []
114
- },
115
- {
116
- "dtype": "float32",
117
- "name": "bottleneck.0.bias",
118
  "shape": [
119
  512
120
  ]
121
  },
122
  {
123
  "dtype": "float32",
124
- "name": "bottleneck.0.weight",
125
  "shape": [
126
  512,
127
  256,
@@ -132,14 +102,14 @@
132
  },
133
  {
134
  "dtype": "float32",
135
- "name": "bottleneck.4.bias",
136
  "shape": [
137
  256
138
  ]
139
  },
140
  {
141
  "dtype": "float32",
142
- "name": "bottleneck.4.weight",
143
  "shape": [
144
  256,
145
  512,
@@ -150,14 +120,14 @@
150
  },
151
  {
152
  "dtype": "float32",
153
- "name": "down_blocks.0.layers.0.bias",
154
  "shape": [
155
  64
156
  ]
157
  },
158
  {
159
  "dtype": "float32",
160
- "name": "down_blocks.0.layers.0.weight",
161
  "shape": [
162
  64,
163
  1,
@@ -168,14 +138,14 @@
168
  },
169
  {
170
  "dtype": "float32",
171
- "name": "down_blocks.0.layers.4.bias",
172
  "shape": [
173
  64
174
  ]
175
  },
176
  {
177
  "dtype": "float32",
178
- "name": "down_blocks.0.layers.4.weight",
179
  "shape": [
180
  64,
181
  64,
@@ -186,14 +156,14 @@
186
  },
187
  {
188
  "dtype": "float32",
189
- "name": "down_blocks.0.layers.8.bias",
190
  "shape": [
191
  64
192
  ]
193
  },
194
  {
195
  "dtype": "float32",
196
- "name": "down_blocks.0.layers.8.weight",
197
  "shape": [
198
  64,
199
  64,
@@ -204,14 +174,14 @@
204
  },
205
  {
206
  "dtype": "float32",
207
- "name": "down_blocks.1.layers.0.bias",
208
  "shape": [
209
  128
210
  ]
211
  },
212
  {
213
  "dtype": "float32",
214
- "name": "down_blocks.1.layers.0.weight",
215
  "shape": [
216
  128,
217
  64,
@@ -222,14 +192,14 @@
222
  },
223
  {
224
  "dtype": "float32",
225
- "name": "down_blocks.1.layers.4.bias",
226
  "shape": [
227
  128
228
  ]
229
  },
230
  {
231
  "dtype": "float32",
232
- "name": "down_blocks.1.layers.4.weight",
233
  "shape": [
234
  128,
235
  128,
@@ -240,14 +210,14 @@
240
  },
241
  {
242
  "dtype": "float32",
243
- "name": "down_blocks.1.layers.8.bias",
244
  "shape": [
245
  128
246
  ]
247
  },
248
  {
249
  "dtype": "float32",
250
- "name": "down_blocks.1.layers.8.weight",
251
  "shape": [
252
  128,
253
  128,
@@ -258,14 +228,14 @@
258
  },
259
  {
260
  "dtype": "float32",
261
- "name": "down_blocks.2.layers.0.bias",
262
  "shape": [
263
  256
264
  ]
265
  },
266
  {
267
  "dtype": "float32",
268
- "name": "down_blocks.2.layers.0.weight",
269
  "shape": [
270
  256,
271
  128,
@@ -276,14 +246,14 @@
276
  },
277
  {
278
  "dtype": "float32",
279
- "name": "down_blocks.2.layers.4.bias",
280
  "shape": [
281
  256
282
  ]
283
  },
284
  {
285
  "dtype": "float32",
286
- "name": "down_blocks.2.layers.4.weight",
287
  "shape": [
288
  256,
289
  256,
@@ -294,14 +264,14 @@
294
  },
295
  {
296
  "dtype": "float32",
297
- "name": "down_blocks.2.layers.8.bias",
298
  "shape": [
299
  256
300
  ]
301
  },
302
  {
303
  "dtype": "float32",
304
- "name": "down_blocks.2.layers.8.weight",
305
  "shape": [
306
  256,
307
  256,
@@ -312,14 +282,14 @@
312
  },
313
  {
314
  "dtype": "float32",
315
- "name": "down_samplers.0.layers.0.bias",
316
  "shape": [
317
  64
318
  ]
319
  },
320
  {
321
  "dtype": "float32",
322
- "name": "down_samplers.0.layers.0.weight",
323
  "shape": [
324
  64,
325
  64,
@@ -330,14 +300,14 @@
330
  },
331
  {
332
  "dtype": "float32",
333
- "name": "down_samplers.1.layers.0.bias",
334
  "shape": [
335
  128
336
  ]
337
  },
338
  {
339
  "dtype": "float32",
340
- "name": "down_samplers.1.layers.0.weight",
341
  "shape": [
342
  128,
343
  128,
@@ -348,14 +318,14 @@
348
  },
349
  {
350
  "dtype": "float32",
351
- "name": "down_samplers.2.layers.0.bias",
352
  "shape": [
353
  256
354
  ]
355
  },
356
  {
357
  "dtype": "float32",
358
- "name": "down_samplers.2.layers.0.weight",
359
  "shape": [
360
  256,
361
  256,
@@ -384,14 +354,14 @@
384
  },
385
  {
386
  "dtype": "float32",
387
- "name": "up_blocks.0.layers.0.bias",
388
  "shape": [
389
  256
390
  ]
391
  },
392
  {
393
  "dtype": "float32",
394
- "name": "up_blocks.0.layers.0.weight",
395
  "shape": [
396
  256,
397
  512,
@@ -402,14 +372,14 @@
402
  },
403
  {
404
  "dtype": "float32",
405
- "name": "up_blocks.0.layers.4.bias",
406
  "shape": [
407
  256
408
  ]
409
  },
410
  {
411
  "dtype": "float32",
412
- "name": "up_blocks.0.layers.4.weight",
413
  "shape": [
414
  256,
415
  256,
@@ -420,14 +390,14 @@
420
  },
421
  {
422
  "dtype": "float32",
423
- "name": "up_blocks.0.layers.8.bias",
424
  "shape": [
425
  256
426
  ]
427
  },
428
  {
429
  "dtype": "float32",
430
- "name": "up_blocks.0.layers.8.weight",
431
  "shape": [
432
  256,
433
  256,
@@ -438,14 +408,14 @@
438
  },
439
  {
440
  "dtype": "float32",
441
- "name": "up_blocks.1.layers.0.bias",
442
  "shape": [
443
  128
444
  ]
445
  },
446
  {
447
  "dtype": "float32",
448
- "name": "up_blocks.1.layers.0.weight",
449
  "shape": [
450
  128,
451
  256,
@@ -456,14 +426,14 @@
456
  },
457
  {
458
  "dtype": "float32",
459
- "name": "up_blocks.1.layers.4.bias",
460
  "shape": [
461
  128
462
  ]
463
  },
464
  {
465
  "dtype": "float32",
466
- "name": "up_blocks.1.layers.4.weight",
467
  "shape": [
468
  128,
469
  128,
@@ -474,14 +444,14 @@
474
  },
475
  {
476
  "dtype": "float32",
477
- "name": "up_blocks.1.layers.8.bias",
478
  "shape": [
479
  128
480
  ]
481
  },
482
  {
483
  "dtype": "float32",
484
- "name": "up_blocks.1.layers.8.weight",
485
  "shape": [
486
  128,
487
  128,
@@ -492,14 +462,14 @@
492
  },
493
  {
494
  "dtype": "float32",
495
- "name": "up_blocks.2.layers.0.bias",
496
  "shape": [
497
  64
498
  ]
499
  },
500
  {
501
  "dtype": "float32",
502
- "name": "up_blocks.2.layers.0.weight",
503
  "shape": [
504
  64,
505
  128,
@@ -510,14 +480,14 @@
510
  },
511
  {
512
  "dtype": "float32",
513
- "name": "up_blocks.2.layers.4.bias",
514
  "shape": [
515
  64
516
  ]
517
  },
518
  {
519
  "dtype": "float32",
520
- "name": "up_blocks.2.layers.4.weight",
521
  "shape": [
522
  64,
523
  64,
@@ -528,14 +498,14 @@
528
  },
529
  {
530
  "dtype": "float32",
531
- "name": "up_blocks.2.layers.8.bias",
532
  "shape": [
533
  64
534
  ]
535
  },
536
  {
537
  "dtype": "float32",
538
- "name": "up_blocks.2.layers.8.weight",
539
  "shape": [
540
  64,
541
  64,
@@ -546,14 +516,14 @@
546
  },
547
  {
548
  "dtype": "float32",
549
- "name": "upsamplers.0.tconv.bias",
550
  "shape": [
551
  256
552
  ]
553
  },
554
  {
555
  "dtype": "float32",
556
- "name": "upsamplers.0.tconv.weight",
557
  "shape": [
558
  256,
559
  256,
@@ -564,14 +534,14 @@
564
  },
565
  {
566
  "dtype": "float32",
567
- "name": "upsamplers.1.tconv.bias",
568
  "shape": [
569
  128
570
  ]
571
  },
572
  {
573
  "dtype": "float32",
574
- "name": "upsamplers.1.tconv.weight",
575
  "shape": [
576
  256,
577
  128,
@@ -582,14 +552,14 @@
582
  },
583
  {
584
  "dtype": "float32",
585
- "name": "upsamplers.2.tconv.bias",
586
  "shape": [
587
  64
588
  ]
589
  },
590
  {
591
  "dtype": "float32",
592
- "name": "upsamplers.2.tconv.weight",
593
  "shape": [
594
  128,
595
  64,
@@ -599,12 +569,5 @@
599
  ]
600
  }
601
  ],
602
- "training": {
603
- "base_seed": null,
604
- "epoch": 999,
605
- "monitor": null,
606
- "role": "external",
607
- "score": null,
608
- "step": 34000
609
- }
610
  }
 
1
  {
2
+ "construction_fingerprint": "sha256:644b162de70d014f9273c992fd583ee4fdfb8ae425a35fba26b3fbd41d560f28",
3
  "files": {
4
  "construction": {
5
  "path": "construction.json",
6
+ "sha256": "46f8b7cfe685f5f2468b43c9f54d96b2b074e9c459fcd28378da3177cfd7cd65",
7
+ "size_bytes": 37943
8
  },
9
  "conversion": {
10
  "path": "conversion/conversion-record.json",
11
+ "sha256": "ca5300cc80f144d8dd9c2d9cf618f2ad942ddc6016e048cda2de2c20da37d81d",
12
+ "size_bytes": 13810
13
  },
14
  "inference": {
15
  "path": "inference.json",
16
+ "sha256": "52f6e95eb1f88ae13cabcfb1664dc4e4cfb48570bec636af3527513c85863a7e",
17
+ "size_bytes": 1304
 
 
 
 
 
18
  },
19
  "resources": [
20
  {
21
  "path": "ATTRIBUTION.md",
22
+ "sha256": "849e0877d2d572b4ba10aabfabe524af3d76254423c034d9bd015fd3a827f98e",
23
+ "size_bytes": 1386
24
  },
25
  {
26
  "path": "LICENSES/DeepDeWedge-Code-BSD-2-Clause.txt",
 
28
  "size_bytes": 1343
29
  },
30
  {
31
+ "path": "README.md",
32
+ "sha256": "3cffce3987c861bd52a90f5e8c07d16152511b957dc8de4fe79a02da2e270740",
33
+ "size_bytes": 3903
34
  },
35
  {
36
+ "path": "refresh_format2.py",
37
+ "sha256": "b4c42a1cc2611561077578ee0544d19fdee8d3a48426f0dc44e6dcb61a0ce875",
38
+ "size_bytes": 22531
39
  }
40
  ],
41
  "validation": {
42
  "path": "validation/validation-record.json",
43
+ "sha256": "bc302bd4e4769044af36867ac66877b022b0e4c2b567551d1a8abf70ff653950",
44
+ "size_bytes": 1660
45
  },
46
  "weights": {
47
  "path": "weights.safetensors",
48
+ "sha256": "e8f51c499d6e5c14ddce45d5cf9935511220de161ce62deb50a2c3a8cae5c731",
49
+ "size_bytes": 109294372
50
  }
51
  },
52
+ "inference_fingerprint": "sha256:dd4d9b190f9e3a0c94a0da2d383f5dc42aaa0ac888dcec760d57b4cf5362aabd",
53
  "kind": "scitomo_learned_checkpoint",
54
+ "owner": {
55
  "family": "restoration",
56
+ "kind": "method",
57
+ "method_kind": "deepdewedge"
58
  },
59
  "package_id": "deepdewedge_tutorial",
60
+ "package_revision": 3,
61
  "provenance": {
62
  "citations": [
63
+ "https://doi.org/10.1038/s41467-024-51438-y",
64
+ "https://doi.org/10.6084/m9.figshare.25043435.v1"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  ],
66
+ "licenses": [],
67
  "sources": [
68
  {
69
+ "identifier": "072075692a44a8f17394214369e6e762abe52bc3",
70
+ "kind": "upstream_repository",
71
+ "metadata": {},
72
+ "project": "MLI-lab/DeepDeWedge",
73
+ "revision": "072075692a44a8f17394214369e6e762abe52bc3",
74
+ "sha256": null,
75
+ "url": "https://github.com/MLI-lab/DeepDeWedge"
 
 
 
 
 
76
  }
77
  ]
78
  },
79
  "requirements": {
80
+ "learned_checkpoint_format": 2,
81
+ "minimum_scitomo_version": "0.7.3"
82
  },
83
+ "schema_version": 4,
84
  "tensors": [
85
  {
86
  "dtype": "float32",
87
+ "name": "bottleneck_conv_0.bias",
 
 
 
 
 
 
 
 
 
 
88
  "shape": [
89
  512
90
  ]
91
  },
92
  {
93
  "dtype": "float32",
94
+ "name": "bottleneck_conv_0.weight",
95
  "shape": [
96
  512,
97
  256,
 
102
  },
103
  {
104
  "dtype": "float32",
105
+ "name": "bottleneck_conv_1.bias",
106
  "shape": [
107
  256
108
  ]
109
  },
110
  {
111
  "dtype": "float32",
112
+ "name": "bottleneck_conv_1.weight",
113
  "shape": [
114
  256,
115
  512,
 
120
  },
121
  {
122
  "dtype": "float32",
123
+ "name": "down_0_conv_0.bias",
124
  "shape": [
125
  64
126
  ]
127
  },
128
  {
129
  "dtype": "float32",
130
+ "name": "down_0_conv_0.weight",
131
  "shape": [
132
  64,
133
  1,
 
138
  },
139
  {
140
  "dtype": "float32",
141
+ "name": "down_0_conv_1.bias",
142
  "shape": [
143
  64
144
  ]
145
  },
146
  {
147
  "dtype": "float32",
148
+ "name": "down_0_conv_1.weight",
149
  "shape": [
150
  64,
151
  64,
 
156
  },
157
  {
158
  "dtype": "float32",
159
+ "name": "down_0_conv_2.bias",
160
  "shape": [
161
  64
162
  ]
163
  },
164
  {
165
  "dtype": "float32",
166
+ "name": "down_0_conv_2.weight",
167
  "shape": [
168
  64,
169
  64,
 
174
  },
175
  {
176
  "dtype": "float32",
177
+ "name": "down_1_conv_0.bias",
178
  "shape": [
179
  128
180
  ]
181
  },
182
  {
183
  "dtype": "float32",
184
+ "name": "down_1_conv_0.weight",
185
  "shape": [
186
  128,
187
  64,
 
192
  },
193
  {
194
  "dtype": "float32",
195
+ "name": "down_1_conv_1.bias",
196
  "shape": [
197
  128
198
  ]
199
  },
200
  {
201
  "dtype": "float32",
202
+ "name": "down_1_conv_1.weight",
203
  "shape": [
204
  128,
205
  128,
 
210
  },
211
  {
212
  "dtype": "float32",
213
+ "name": "down_1_conv_2.bias",
214
  "shape": [
215
  128
216
  ]
217
  },
218
  {
219
  "dtype": "float32",
220
+ "name": "down_1_conv_2.weight",
221
  "shape": [
222
  128,
223
  128,
 
228
  },
229
  {
230
  "dtype": "float32",
231
+ "name": "down_2_conv_0.bias",
232
  "shape": [
233
  256
234
  ]
235
  },
236
  {
237
  "dtype": "float32",
238
+ "name": "down_2_conv_0.weight",
239
  "shape": [
240
  256,
241
  128,
 
246
  },
247
  {
248
  "dtype": "float32",
249
+ "name": "down_2_conv_1.bias",
250
  "shape": [
251
  256
252
  ]
253
  },
254
  {
255
  "dtype": "float32",
256
+ "name": "down_2_conv_1.weight",
257
  "shape": [
258
  256,
259
  256,
 
264
  },
265
  {
266
  "dtype": "float32",
267
+ "name": "down_2_conv_2.bias",
268
  "shape": [
269
  256
270
  ]
271
  },
272
  {
273
  "dtype": "float32",
274
+ "name": "down_2_conv_2.weight",
275
  "shape": [
276
  256,
277
  256,
 
282
  },
283
  {
284
  "dtype": "float32",
285
+ "name": "downsample_0.bias",
286
  "shape": [
287
  64
288
  ]
289
  },
290
  {
291
  "dtype": "float32",
292
+ "name": "downsample_0.weight",
293
  "shape": [
294
  64,
295
  64,
 
300
  },
301
  {
302
  "dtype": "float32",
303
+ "name": "downsample_1.bias",
304
  "shape": [
305
  128
306
  ]
307
  },
308
  {
309
  "dtype": "float32",
310
+ "name": "downsample_1.weight",
311
  "shape": [
312
  128,
313
  128,
 
318
  },
319
  {
320
  "dtype": "float32",
321
+ "name": "downsample_2.bias",
322
  "shape": [
323
  256
324
  ]
325
  },
326
  {
327
  "dtype": "float32",
328
+ "name": "downsample_2.weight",
329
  "shape": [
330
  256,
331
  256,
 
354
  },
355
  {
356
  "dtype": "float32",
357
+ "name": "up_0_conv_0.bias",
358
  "shape": [
359
  256
360
  ]
361
  },
362
  {
363
  "dtype": "float32",
364
+ "name": "up_0_conv_0.weight",
365
  "shape": [
366
  256,
367
  512,
 
372
  },
373
  {
374
  "dtype": "float32",
375
+ "name": "up_0_conv_1.bias",
376
  "shape": [
377
  256
378
  ]
379
  },
380
  {
381
  "dtype": "float32",
382
+ "name": "up_0_conv_1.weight",
383
  "shape": [
384
  256,
385
  256,
 
390
  },
391
  {
392
  "dtype": "float32",
393
+ "name": "up_0_conv_2.bias",
394
  "shape": [
395
  256
396
  ]
397
  },
398
  {
399
  "dtype": "float32",
400
+ "name": "up_0_conv_2.weight",
401
  "shape": [
402
  256,
403
  256,
 
408
  },
409
  {
410
  "dtype": "float32",
411
+ "name": "up_1_conv_0.bias",
412
  "shape": [
413
  128
414
  ]
415
  },
416
  {
417
  "dtype": "float32",
418
+ "name": "up_1_conv_0.weight",
419
  "shape": [
420
  128,
421
  256,
 
426
  },
427
  {
428
  "dtype": "float32",
429
+ "name": "up_1_conv_1.bias",
430
  "shape": [
431
  128
432
  ]
433
  },
434
  {
435
  "dtype": "float32",
436
+ "name": "up_1_conv_1.weight",
437
  "shape": [
438
  128,
439
  128,
 
444
  },
445
  {
446
  "dtype": "float32",
447
+ "name": "up_1_conv_2.bias",
448
  "shape": [
449
  128
450
  ]
451
  },
452
  {
453
  "dtype": "float32",
454
+ "name": "up_1_conv_2.weight",
455
  "shape": [
456
  128,
457
  128,
 
462
  },
463
  {
464
  "dtype": "float32",
465
+ "name": "up_2_conv_0.bias",
466
  "shape": [
467
  64
468
  ]
469
  },
470
  {
471
  "dtype": "float32",
472
+ "name": "up_2_conv_0.weight",
473
  "shape": [
474
  64,
475
  128,
 
480
  },
481
  {
482
  "dtype": "float32",
483
+ "name": "up_2_conv_1.bias",
484
  "shape": [
485
  64
486
  ]
487
  },
488
  {
489
  "dtype": "float32",
490
+ "name": "up_2_conv_1.weight",
491
  "shape": [
492
  64,
493
  64,
 
498
  },
499
  {
500
  "dtype": "float32",
501
+ "name": "up_2_conv_2.bias",
502
  "shape": [
503
  64
504
  ]
505
  },
506
  {
507
  "dtype": "float32",
508
+ "name": "up_2_conv_2.weight",
509
  "shape": [
510
  64,
511
  64,
 
516
  },
517
  {
518
  "dtype": "float32",
519
+ "name": "upsample_0.bias",
520
  "shape": [
521
  256
522
  ]
523
  },
524
  {
525
  "dtype": "float32",
526
+ "name": "upsample_0.weight",
527
  "shape": [
528
  256,
529
  256,
 
534
  },
535
  {
536
  "dtype": "float32",
537
+ "name": "upsample_1.bias",
538
  "shape": [
539
  128
540
  ]
541
  },
542
  {
543
  "dtype": "float32",
544
+ "name": "upsample_1.weight",
545
  "shape": [
546
  256,
547
  128,
 
552
  },
553
  {
554
  "dtype": "float32",
555
+ "name": "upsample_2.bias",
556
  "shape": [
557
  64
558
  ]
559
  },
560
  {
561
  "dtype": "float32",
562
+ "name": "upsample_2.weight",
563
  "shape": [
564
  128,
565
  64,
 
569
  ]
570
  }
571
  ],
572
+ "training": null
 
 
 
 
 
 
 
573
  }
migration/migration-record.json DELETED
@@ -1,45 +0,0 @@
1
- {
2
- "kind": "scitomo_checkpoint_migration",
3
- "minimum_scitomo_version_after": "0.6.2",
4
- "minimum_scitomo_version_before": "0.5.4",
5
- "package_id": "deepdewedge_tutorial",
6
- "schema_version": 1,
7
- "source_manifest": {
8
- "path": "manifest.json",
9
- "sha256": "c324a8980558af597c37da2dd053c8e5adb38895fe3ff00b300d727581496d3d",
10
- "size_bytes": 11159
11
- },
12
- "source_manifest_schema_version": 1,
13
- "source_package_revision": 1,
14
- "source_provider": {
15
- "identifier": "5e00643b4adb4fb67d52ef8f101507b47f4c06c1",
16
- "kind": "huggingface_manifest",
17
- "metadata": {
18
- "manifest_schema_version": 1,
19
- "package_revision": 1
20
- },
21
- "project": "scitomo/deepdewedge-tutorial",
22
- "revision": "5e00643b4adb4fb67d52ef8f101507b47f4c06c1",
23
- "sha256": "c324a8980558af597c37da2dd053c8e5adb38895fe3ff00b300d727581496d3d",
24
- "url": "https://huggingface.co/scitomo/deepdewedge-tutorial/tree/5e00643b4adb4fb67d52ef8f101507b47f4c06c1"
25
- },
26
- "target_manifest_schema_version": 2,
27
- "target_package_revision": 2,
28
- "unchanged_files": [
29
- {
30
- "path": "construction.json",
31
- "sha256": "d4c7eced057042438827de168d47b7900311fba742ce52445675be7f40343432",
32
- "size_bytes": 2175
33
- },
34
- {
35
- "path": "inference.json",
36
- "sha256": "217636919d17d9332aa49474e893064ed1dfb29f016a468cf22d439cf16887a0",
37
- "size_bytes": 968
38
- },
39
- {
40
- "path": "weights.safetensors",
41
- "sha256": "2a34aeb61dba5da5c7b78f4cc26de9b8a9134ac12dc08876a8e93bf02776c795",
42
- "size_bytes": 109294940
43
- }
44
- ]
45
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
refresh_format2.py ADDED
@@ -0,0 +1,538 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Regenerate the DeepDeWedge FORMAT 2 package from its authoritative source.
2
+
3
+ This one-off maintenance converter is a package resource, not Scitomo runtime
4
+ code. It intentionally refuses all historical Hugging Face payloads.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import hashlib
10
+ import platform
11
+ import shutil
12
+ import subprocess
13
+ import sys
14
+ import types
15
+ from pathlib import Path
16
+
17
+ import pytorch_lightning
18
+ import safetensors
19
+ import torch
20
+
21
+ import scitomo as st
22
+ from scitomo.methods.restoration.deepdewedge.network_invocation import (
23
+ invoke_deepdewedge_network,
24
+ )
25
+
26
+
27
+ SCRIPT_PATH = Path(__file__).resolve()
28
+ ROOT = (
29
+ SCRIPT_PATH.parents[2]
30
+ if SCRIPT_PATH.parent.name == "conversion"
31
+ else SCRIPT_PATH.parents[1]
32
+ )
33
+ UPSTREAM = ROOT / "upstream"
34
+ CHECKPOINT = ROOT / "official" / "fitted_model.ckpt"
35
+ ARCHIVE = ROOT / "official" / "tutorial_data.zip"
36
+ TARGET = ROOT / "hf"
37
+ OUTPUT = ROOT / "package-fresh"
38
+ RUNTIME_VIEW = ROOT / "package-runtime-view"
39
+
40
+ UPSTREAM_REVISION = "072075692a44a8f17394214369e6e762abe52bc3"
41
+ CHECKPOINT_SIZE = 327952642
42
+ CHECKPOINT_SHA256 = "5262f6c11e85fd662b02e59efe936fa7b69913758e841235be2683f7bd03ec76"
43
+ ARCHIVE_SHA256 = "7c871342e51f5a66a773fe427d72944b5d2cc8ff41c5b7415ab38dbfc9ac6d58"
44
+ ARCHIVE_MD5 = "130264af7d96be6237351f8f51eda8c8"
45
+ PREVIOUS_HF_COMMIT = "87db06570dd874a99af1289e62b79ea99f87f006"
46
+
47
+
48
+ def _digest(path: Path, algorithm: str) -> str:
49
+ hasher = hashlib.new(algorithm)
50
+ with path.open("rb") as stream:
51
+ for block in iter(lambda: stream.read(1024 * 1024), b""):
52
+ hasher.update(block)
53
+ return hasher.hexdigest()
54
+
55
+
56
+ def _verify_authority() -> None:
57
+ """Fail closed before the sole permitted Lightning deserialization."""
58
+
59
+ if CHECKPOINT.stat().st_size != CHECKPOINT_SIZE:
60
+ raise RuntimeError("Authoritative checkpoint byte size does not match.")
61
+ if _digest(CHECKPOINT, "sha256") != CHECKPOINT_SHA256:
62
+ raise RuntimeError("Authoritative checkpoint SHA-256 does not match.")
63
+ if _digest(ARCHIVE, "sha256") != ARCHIVE_SHA256:
64
+ raise RuntimeError("Authoritative archive SHA-256 does not match.")
65
+ if _digest(ARCHIVE, "md5") != ARCHIVE_MD5:
66
+ raise RuntimeError("Authoritative archive MD5 does not match.")
67
+ revision = subprocess.check_output(
68
+ ["git", "-C", str(UPSTREAM), "rev-parse", "HEAD"], text=True
69
+ ).strip()
70
+ if revision != UPSTREAM_REVISION:
71
+ raise RuntimeError("Pinned upstream checkout revision does not match.")
72
+
73
+
74
+ def _load_upstream_model() -> torch.nn.Module:
75
+ """Load the exact pinned model without executing its unrelated CLI package init."""
76
+
77
+ ddw = types.ModuleType("ddw")
78
+ ddw.__path__ = [str(UPSTREAM / "ddw")]
79
+ sys.modules["ddw"] = ddw
80
+ utils = types.ModuleType("ddw.utils")
81
+ utils.__path__ = [str(UPSTREAM / "ddw" / "utils")]
82
+ sys.modules["ddw.utils"] = utils
83
+
84
+ # ``unet.py`` imports this training-only helper but conversion never calls it.
85
+ # Providing the inert name avoids importing the upstream CLI-only dependency
86
+ # chain (typer) while preserving the exact source model implementation.
87
+ normalization = types.ModuleType("ddw.utils.normalization")
88
+ normalization.get_avg_model_input_mean_and_std_from_dataloader = _unavailable
89
+ sys.modules["ddw.utils.normalization"] = normalization
90
+
91
+ from ddw.utils.unet import LitUnet3D
92
+
93
+ return LitUnet3D.load_from_checkpoint(CHECKPOINT, map_location="cpu").eval()
94
+
95
+
96
+ def _unavailable(*args: object, **kwargs: object) -> None:
97
+ del args, kwargs
98
+ raise RuntimeError("Training-only upstream normalization is unavailable here.")
99
+
100
+
101
+ def _canonical_source_to_target(
102
+ source: torch.nn.Module,
103
+ ) -> tuple[
104
+ st.network.ClosedDescribedNetwork,
105
+ dict[str, torch.Tensor],
106
+ tuple[st.artifacts.LearnedCheckpointTransformation, ...],
107
+ st.methods.DeepDeWedgeFittedInference,
108
+ ]:
109
+ """Instantiate, strict-map, and lower the source model through Network authority."""
110
+
111
+ params = dict(source.unet_params)
112
+ expected = {
113
+ "chans": 64,
114
+ "num_downsample_layers": 3,
115
+ "drop_prob": 0.0,
116
+ }
117
+ if {key: params.get(key) for key in expected} != expected:
118
+ raise RuntimeError("Checkpoint U-Net parameters are not the audited tutorial architecture.")
119
+ if set(params) != {
120
+ "chans",
121
+ "num_downsample_layers",
122
+ "drop_prob",
123
+ "normalization_loc",
124
+ "normalization_scale",
125
+ }:
126
+ raise RuntimeError("Checkpoint contains unexpected U-Net parameter fields.")
127
+
128
+ vendor = source.unet
129
+ fitted = st.methods.DeepDeWedgeFittedInference(
130
+ network_affine_loc=float(vendor.normalization_loc),
131
+ network_affine_scale=float(vendor.normalization_scale),
132
+ )
133
+ described = st.network.build_described_network(
134
+ st.network.UNet3D(
135
+ initial_channels=params["chans"],
136
+ num_downsampling_blocks=params["num_downsample_layers"],
137
+ ),
138
+ context=st.network.NetworkBuildContext(
139
+ device=torch.device("cpu"), dtype=torch.float32, seed=0
140
+ ),
141
+ )
142
+ source_state = vendor.state_dict()
143
+ target_template = described.module.state_dict()
144
+ affine_names = {"_normalization_loc", "_normalization_scale"}
145
+ if set(source_state) - affine_names != {
146
+ "bottleneck.2.bias" if name == "bottleneck.4.bias" else
147
+ "bottleneck.2.weight" if name == "bottleneck.4.weight" else name
148
+ for name in target_template
149
+ if name not in affine_names
150
+ }:
151
+ raise RuntimeError("Source and target state namespaces are not the audited mapping.")
152
+
153
+ mapped_target: dict[str, torch.Tensor] = {}
154
+ target_to_source: dict[str, str] = {}
155
+ for target_name in target_template:
156
+ if target_name in affine_names:
157
+ mapped_target[target_name] = source_state[target_name]
158
+ continue
159
+ source_name = (
160
+ target_name.replace("bottleneck.4.", "bottleneck.2.")
161
+ if target_name.startswith("bottleneck.4.")
162
+ else target_name
163
+ )
164
+ tensor = source_state[source_name]
165
+ if tuple(tensor.shape) != tuple(target_template[target_name].shape):
166
+ raise RuntimeError(f"Mapped tensor shape differs for {target_name!r}.")
167
+ mapped_target[target_name] = tensor
168
+ target_to_source[target_name] = source_name
169
+ incompatible = described.module.load_state_dict(mapped_target, strict=True)
170
+ if incompatible.missing_keys or incompatible.unexpected_keys:
171
+ raise RuntimeError("Strict mapped source state load failed.")
172
+
173
+ closed = st.network.close_described_network(described)
174
+ canonical = closed.state
175
+ canonical_to_target: dict[str, str] = {}
176
+ for canonical_name, tensor in canonical.items():
177
+ matches = [
178
+ target_name
179
+ for target_name, target_tensor in described.module.state_dict().items()
180
+ if target_name not in affine_names
181
+ and target_tensor.data_ptr() == tensor.data_ptr()
182
+ and tuple(target_tensor.shape) == tuple(tensor.shape)
183
+ and target_tensor.dtype == tensor.dtype
184
+ ]
185
+ if len(matches) != 1:
186
+ raise RuntimeError(f"Canonical state mapping is ambiguous for {canonical_name!r}.")
187
+ canonical_to_target[canonical_name] = matches[0]
188
+ if set(canonical_to_target.values()) != set(target_to_source):
189
+ raise RuntimeError("Canonical state closure does not cover the source mapping.")
190
+
191
+ transformations = tuple(
192
+ st.artifacts.LearnedCheckpointTransformation(
193
+ kind="identity" if target_to_source[target_name] == target_name else "rename",
194
+ source=f"state_dict.unet.{target_to_source[target_name]}",
195
+ target=canonical_name,
196
+ details={"source_checkpoint": "tutorial_data/fitted_model.ckpt"},
197
+ )
198
+ for canonical_name, target_name in sorted(canonical_to_target.items())
199
+ )
200
+ return closed, canonical, transformations, fitted
201
+
202
+
203
+ def _profile(
204
+ fitted: st.methods.DeepDeWedgeFittedInference,
205
+ ) -> st.methods.DeepDeWedgeInferenceProfile:
206
+ return st.methods.DeepDeWedgeInferenceProfile(
207
+ contract=st.methods.DeepDeWedgeInferenceContract(
208
+ missing_wedge_full_width_deg=50.0,
209
+ full_tomogram_standardization=False,
210
+ preconditioning_normalization_policy="recompute_patch_statistics",
211
+ patch_shape=(96, 96, 96),
212
+ overlap=(32, 32, 32),
213
+ ),
214
+ fitted=fitted,
215
+ )
216
+
217
+
218
+ def _parity(
219
+ source: torch.nn.Module,
220
+ closed: st.network.ClosedDescribedNetwork,
221
+ fitted: st.methods.DeepDeWedgeFittedInference,
222
+ ) -> dict[str, float]:
223
+ """Compare external-affine canonical Network inference on a non-symmetric input."""
224
+
225
+ realized = st.network.realize_network(
226
+ program=closed.program,
227
+ state=closed.state,
228
+ context=st.network.NetworkBuildContext(
229
+ device=torch.device("cpu"), dtype=torch.float32, seed=19
230
+ ),
231
+ )
232
+ value = torch.arange(1 * 1 * 16 * 16 * 16, dtype=torch.float32).reshape(
233
+ 1, 1, 16, 16, 16
234
+ )
235
+ value = value / 997.0 - 0.37
236
+ with torch.no_grad():
237
+ vendor_output = source.unet(value)
238
+ format2_output = invoke_deepdewedge_network(
239
+ realized.module, value, fitted=fitted
240
+ )
241
+ torch.testing.assert_close(vendor_output, format2_output, rtol=1.0e-5, atol=1.0e-6)
242
+ difference = (vendor_output - format2_output).abs()
243
+ relative_l2 = torch.linalg.vector_norm(difference) / torch.linalg.vector_norm(vendor_output)
244
+ return {
245
+ "input_elements": float(value.numel()),
246
+ "max_abs_error": float(difference.max()),
247
+ "relative_l2_error": float(relative_l2),
248
+ }
249
+
250
+
251
+ def _resources(parity: dict[str, float]) -> dict[str, bytes]:
252
+ card = f"""---
253
+ license: cc-by-4.0
254
+ library_name: scitomo
255
+ tags: [cryo-electron-tomography, deepdewedge, safetensors, scitomo, format-2]
256
+ ---
257
+
258
+ # DeepDeWedge tutorial checkpoint — fresh Scitomo FORMAT 2 package
259
+
260
+ This is a fresh FORMAT 2 export from the authoritative original Lightning
261
+ checkpoint, not a migration of any earlier Hugging Face package. Normal runtime
262
+ uses Scitomo's generic FORMAT 2 loader and Safetensors only; it does not require
263
+ PyTorch Lightning or the upstream DeepDeWedge source checkout.
264
+
265
+ ## Package identity
266
+
267
+ - package id: `deepdewedge_tutorial`; package revision: `3`
268
+ - learned-checkpoint format: `2`; manifest schema: `4`
269
+ - Scitomo conversion checkout: `2832957f69daff0d7baec5df17a7c54954623eed`
270
+ - minimum Scitomo version: `0.7.3`
271
+ - previous Hugging Face commit: `{PREVIOUS_HF_COMMIT}` — **HISTORICAL ONLY; NOT CONVERSION INPUT**
272
+
273
+ ## Authoritative provenance
274
+
275
+ - upstream repository: <https://github.com/MLI-lab/DeepDeWedge>
276
+ - upstream revision: `{UPSTREAM_REVISION}`
277
+ - Figshare DOI: <https://doi.org/10.6084/m9.figshare.25043435.v1>; file id: `45582309`
278
+ - original archive SHA-256: `{ARCHIVE_SHA256}`
279
+ - original checkpoint member: `tutorial_data/fitted_model.ckpt`
280
+ - original checkpoint size: `{CHECKPOINT_SIZE}` bytes
281
+ - original checkpoint SHA-256: `{CHECKPOINT_SHA256}`
282
+
283
+ DeepDeWedge Tutorial Data is attributed to Simon Wiedemann and is distributed
284
+ under CC BY 4.0. The pinned DeepDeWedge implementation is BSD-2-Clause; its
285
+ license text is included below `LICENSES/`. See `ATTRIBUTION.md`.
286
+
287
+ ## Scientific inference semantics
288
+
289
+ The pure persisted Network owns only the lowered U-Net architecture and its 54
290
+ canonical tensors. The fitted affine values remain outside Network state in the
291
+ typed `deepdewedge_inference` profile:
292
+
293
+ - `network_affine_loc`: `{_fmt(fitted_loc := -0.1489875167608261)}`
294
+ - `network_affine_scale`: `{_fmt(fitted_scale := 1.3237642049789429)}`
295
+ - input layout: `(..., Z, Y, X)`; Network layout: `(..., C, Z, Y, X)`
296
+ - paired halves are refined independently then averaged; full-width missing wedge: 50 degrees
297
+ - 96³ patches, 32³ overlap, trailing-reflection coverage, linear-ramp reassembly
298
+ - preconditioning recomputes patch statistics; output uses the checkpoint-fitted affine
299
+
300
+ ## Fresh conversion and validation
301
+
302
+ `refresh_format2.py` is the exact one-off implementation and records
303
+ the verified source, explicit 54-tensor mapping, strict Network lowering, and
304
+ generic export. It was run with Python `{platform.python_version()}`, Torch
305
+ `{torch.__version__}`, Lightning `{pytorch_lightning.__version__}`, Safetensors
306
+ `{safetensors.__version__}`, and Scitomo `{st.__version__}` on `{platform.platform()}`.
307
+
308
+ The generic exporter freshly serializes `weights.safetensors`; no previous
309
+ Hugging Face Safetensors, manifest, construction, or inference record is read.
310
+ The conversion record lists every source checkpoint tensor to canonical target
311
+ mapping. The validation record binds package state closure, generic loader
312
+ reload, external-affine semantics, and deterministic forward parity.
313
+
314
+ For a deterministic directional, non-symmetric CPU float32 input of 4,096 elements,
315
+ authoritative upstream output versus FORMAT 2 pure-Network-plus-profile output
316
+ passed `rtol=1e-5`, `atol=1e-6`: maximum absolute error
317
+ `{parity['max_abs_error']:.9g}`, relative L2 error `{parity['relative_l2_error']:.9g}`.
318
+
319
+ ## Files and closure
320
+
321
+ `manifest.json` is the authoritative, closed inventory of every package file,
322
+ with each fresh size and SHA-256. It declares only FORMAT 2 construction,
323
+ inference, Safetensors, conversion, validation, and documentation/license
324
+ resources; there is no format-1 or migration artifact. Validate and load with:
325
+
326
+ ```python
327
+ import scitomo as st
328
+ loaded = st.api.load_learned_network("/path/to/package")
329
+ ```
330
+
331
+ This operation uses the generic Scitomo FORMAT 2 loader and does not import
332
+ Lightning or DeepDeWedge. It is a checkpoint package, not a claim of scientific
333
+ approval for a new dataset or acquisition protocol.
334
+ """
335
+ attribution = f"""# Attribution and modification notice
336
+
337
+ ## Original material
338
+
339
+ **DeepDeWedge Tutorial Data**
340
+ Creator: Simon Wiedemann
341
+ DOI: <https://doi.org/10.6084/m9.figshare.25043435.v1>
342
+ Figshare file id: `45582309`
343
+ Archive member: `tutorial_data/fitted_model.ckpt`
344
+ License: Creative Commons Attribution 4.0 International
345
+
346
+ The method is described by Simon Wiedemann and Reinhard Heckel, *A deep
347
+ learning method for simultaneous denoising and missing wedge reconstruction in
348
+ cryogenic electron tomography*, Nature Communications 15, 8255 (2024),
349
+ <https://doi.org/10.1038/s41467-024-51438-y>.
350
+
351
+ Pinned upstream code: <https://github.com/MLI-lab/DeepDeWedge/tree/{UPSTREAM_REVISION}>
352
+ (BSD-2-Clause).
353
+
354
+ ## Changes in this package
355
+
356
+ On 2026-09-04 Scitomo freshly converted only the authoritative checkpoint
357
+ `official/fitted_model.ckpt`, after byte-size and SHA-256 verification, through
358
+ the exact pinned upstream source and current generic FORMAT 2 exporter. The
359
+ 54 U-Net state tensors were explicitly mapped into canonical Network state.
360
+ The two fitted affine quantities were preserved as external DeepDeWedge
361
+ inference-profile state; they are not Network state. No old Hugging Face
362
+ Safetensors or format-1 package artifact was conversion input.
363
+
364
+ No endorsement by the cited authors, the Machine Learning and Information
365
+ Processing Laboratory, Figshare, or the rights holders is implied.
366
+ """
367
+ return {
368
+ "README.md": card.encode("utf-8"),
369
+ "ATTRIBUTION.md": attribution.encode("utf-8"),
370
+ "LICENSES/DeepDeWedge-Code-BSD-2-Clause.txt": (UPSTREAM / "LICENSE").read_bytes(),
371
+ "refresh_format2.py": Path(__file__).read_bytes(),
372
+ }
373
+
374
+
375
+ def _fmt(value: float) -> str:
376
+ return format(value, ".17g")
377
+
378
+
379
+ def _replace_hf_with_closed_package() -> None:
380
+ if TARGET.resolve() != ROOT / "hf" or not (TARGET / ".git").is_dir():
381
+ raise RuntimeError("Refusing to replace an unexpected Hugging Face working tree.")
382
+ if not OUTPUT.is_dir() or OUTPUT.is_symlink():
383
+ raise RuntimeError("Fresh output directory is unavailable for publication.")
384
+ for child in TARGET.iterdir():
385
+ if child.name == ".git":
386
+ continue
387
+ if child.is_dir() and not child.is_symlink():
388
+ shutil.rmtree(child)
389
+ else:
390
+ child.unlink()
391
+ shutil.move(str(OUTPUT), str(TARGET / ".package-fresh"))
392
+ staged = TARGET / ".package-fresh"
393
+ for child in staged.iterdir():
394
+ shutil.move(str(child), str(TARGET / child.name))
395
+ staged.rmdir()
396
+
397
+
398
+ def _runtime_view() -> Path:
399
+ """Create a byte-identical package view excluding local Git administration."""
400
+
401
+ if RUNTIME_VIEW.exists() or RUNTIME_VIEW.is_symlink():
402
+ raise RuntimeError("Runtime validation view already exists.")
403
+ shutil.copytree(TARGET, RUNTIME_VIEW, ignore=shutil.ignore_patterns(".git"))
404
+ return RUNTIME_VIEW
405
+
406
+
407
+ def main() -> None:
408
+ _verify_authority()
409
+ if OUTPUT.exists() or OUTPUT.is_symlink():
410
+ raise RuntimeError("Fresh output directory already exists before export.")
411
+ source = _load_upstream_model()
412
+ closed, canonical, mappings, fitted = _canonical_source_to_target(source)
413
+ parity = _parity(source, closed, fitted)
414
+ profile = _profile(fitted)
415
+ owner = st.artifacts.LearnedCheckpointMethodOwner(
416
+ family="restoration", method_kind="deepdewedge"
417
+ )
418
+ construction = st.artifacts.LearnedCheckpointConstructionRecordV2.from_program(
419
+ closed.program
420
+ )
421
+ inference = st.artifacts.LearnedCheckpointInferenceRecordV3.from_profile(
422
+ owner=owner, profile=profile
423
+ )
424
+ conversion = st.artifacts.LearnedCheckpointConversionEvidenceV2(
425
+ source=st.artifacts.LearnedCheckpointConversionSourceV2(
426
+ kind="figshare_checkpoint",
427
+ project="DeepDeWedge Tutorial Data",
428
+ identifier="45582309/tutorial_data/fitted_model.ckpt",
429
+ url="https://doi.org/10.6084/m9.figshare.25043435.v1",
430
+ revision=UPSTREAM_REVISION,
431
+ sha256=CHECKPOINT_SHA256,
432
+ metadata={
433
+ "archive_sha256": ARCHIVE_SHA256,
434
+ "archive_member": "tutorial_data/fitted_model.ckpt",
435
+ "checkpoint_size_bytes": CHECKPOINT_SIZE,
436
+ "upstream_repository": "https://github.com/MLI-lab/DeepDeWedge",
437
+ },
438
+ ),
439
+ tool="deepdewedge_refresh_format2",
440
+ tool_version="1",
441
+ tensor_mappings=mappings,
442
+ environment={
443
+ "python": platform.python_version(),
444
+ "torch": torch.__version__,
445
+ "pytorch_lightning": pytorch_lightning.__version__,
446
+ "safetensors": safetensors.__version__,
447
+ "scitomo": st.__version__,
448
+ "scitomo_commit": "2832957f69daff0d7baec5df17a7c54954623eed",
449
+ "platform": platform.platform(),
450
+ },
451
+ )
452
+ validation = st.artifacts.LearnedCheckpointValidationEvidenceV2(
453
+ software=(
454
+ st.artifacts.LearnedCheckpointSoftware(name="scitomo", version=st.__version__),
455
+ st.artifacts.LearnedCheckpointSoftware(name="torch", version=torch.__version__),
456
+ st.artifacts.LearnedCheckpointSoftware(name="pytorch_lightning", version=pytorch_lightning.__version__),
457
+ st.artifacts.LearnedCheckpointSoftware(name="safetensors", version=safetensors.__version__),
458
+ ),
459
+ cases=(
460
+ st.artifacts.LearnedCheckpointValidationCase(
461
+ name="authoritative_source_mapping", kind="state_mapping", status="passed",
462
+ metrics={"source_tensors": 56.0, "canonical_network_tensors": 54.0},
463
+ ),
464
+ st.artifacts.LearnedCheckpointValidationCase(
465
+ name="external_fitted_affine_profile", kind="inference_profile", status="passed",
466
+ metrics={"network_affine_loc": fitted.network_affine_loc, "network_affine_scale": fitted.network_affine_scale},
467
+ ),
468
+ st.artifacts.LearnedCheckpointValidationCase(
469
+ name="deterministic_forward_parity", kind="forward_parity", status="passed",
470
+ tolerances={"atol": 1.0e-6, "rtol": 1.0e-5}, metrics=parity,
471
+ ),
472
+ ),
473
+ )
474
+ exported = st.artifacts.export_learned_checkpoint_format2_package(
475
+ canonical,
476
+ construction=construction,
477
+ inference=inference,
478
+ package_id="deepdewedge_tutorial",
479
+ package_revision=3,
480
+ owner=owner,
481
+ requirements=st.artifacts.LearnedCheckpointFormat2Requirements(
482
+ minimum_scitomo_version="0.7.3"
483
+ ),
484
+ validation=validation,
485
+ conversion=conversion,
486
+ resources=_resources(parity),
487
+ destination="package-fresh",
488
+ write_scope=st.core.WriteScope(st.core.WriteScopeKind.MODELS, ROOT),
489
+ provenance=st.artifacts.LearnedCheckpointProvenance(
490
+ sources=(
491
+ st.artifacts.LearnedCheckpointSource(
492
+ kind="upstream_repository", project="MLI-lab/DeepDeWedge",
493
+ identifier=UPSTREAM_REVISION,
494
+ url="https://github.com/MLI-lab/DeepDeWedge",
495
+ revision=UPSTREAM_REVISION,
496
+ ),
497
+ ),
498
+ citations=(
499
+ "https://doi.org/10.1038/s41467-024-51438-y",
500
+ "https://doi.org/10.6084/m9.figshare.25043435.v1",
501
+ ),
502
+ ),
503
+ )
504
+ _replace_hf_with_closed_package()
505
+ runtime_root = _runtime_view()
506
+ try:
507
+ package = st.artifacts.validate_learned_checkpoint_format2_package(runtime_root)
508
+ loaded = st.api.load_learned_network(
509
+ runtime_root,
510
+ context=st.network.NetworkBuildContext(
511
+ device=torch.device("cpu"), dtype=torch.float32, seed=29
512
+ ),
513
+ expected_owner=owner,
514
+ expected_inference_profile=profile,
515
+ )
516
+ reloaded = st.network.canonical_network_state(loaded.network.module)
517
+ if set(reloaded) != set(canonical) or any(
518
+ not torch.equal(reloaded[name], canonical[name]) for name in canonical
519
+ ):
520
+ raise RuntimeError("Reloaded FORMAT 2 state is not closed over canonical state.")
521
+ value = torch.arange(1 * 1 * 16 * 16 * 16, dtype=torch.float32).reshape(1, 1, 16, 16, 16)
522
+ value = value / 997.0 - 0.37
523
+ with torch.no_grad():
524
+ expected = source.unet(value)
525
+ actual = invoke_deepdewedge_network(
526
+ loaded.network.module, value, fitted=profile.fitted
527
+ )
528
+ torch.testing.assert_close(expected, actual, rtol=1.0e-5, atol=1.0e-6)
529
+ print(f"FORMAT 2 package validated at {TARGET}")
530
+ print(f"weights_sha256={package.manifest.files.weights.sha256}")
531
+ print(f"manifest_sha256={_digest(TARGET / 'manifest.json', 'sha256')}")
532
+ finally:
533
+ if RUNTIME_VIEW.exists():
534
+ shutil.rmtree(RUNTIME_VIEW)
535
+
536
+
537
+ if __name__ == "__main__":
538
+ main()
validation/validation-record.json CHANGED
@@ -1,72 +1,66 @@
1
  {
2
  "cases": [
3
  {
4
- "evidence_sha256": [
5
- "bf23d54a8a79a8086b78a8c807a787f1a5ac5525ef7d6eec67373aea4f0a4cb5"
6
- ],
7
- "kind": "structural",
8
  "metrics": {
9
- "tensor_count": 56.0
 
10
  },
11
- "name": "exact_state_mapping",
12
  "status": "passed",
13
  "tolerances": {}
14
  },
15
  {
16
- "evidence_sha256": [
17
- "f357d0992b60ee97fdaf52fb2fba465f19ce7ca4b773fd034c391208f22f791f",
18
- "baa30de9f48d992bf009893b48af9d19eeab34410e6cded99475f514fefefa8d"
19
- ],
20
- "kind": "numerical",
21
  "metrics": {
22
- "max_abs": 0.0,
23
- "relative_l2": 0.0
24
  },
25
- "name": "synthetic_forward_parity",
26
  "status": "passed",
27
- "tolerances": {
28
- "atol": 1e-06,
29
- "rtol": 1e-05
30
- }
31
  },
32
  {
33
- "evidence_sha256": [
34
- "f357d0992b60ee97fdaf52fb2fba465f19ce7ca4b773fd034c391208f22f791f",
35
- "baa30de9f48d992bf009893b48af9d19eeab34410e6cded99475f514fefefa8d"
36
- ],
37
- "kind": "scientific",
38
  "metrics": {
39
- "max_abs": 7.152557373046875e-07,
40
- "relative_l2": 1.2612566990810592e-07
 
41
  },
42
- "name": "real_tutorial_crop_parity",
43
  "status": "passed",
44
  "tolerances": {
45
  "atol": 1e-06,
46
- "relative_l2": 0.0001,
47
  "rtol": 1e-05
48
  }
49
  }
50
  ],
51
- "construction_fingerprint": "sha256:c9da7decd489f0f4f893dce565f37db25abc63d0d3efcacad9835305ffd97cb2",
52
- "inference_fingerprint": "sha256:c2c5eba72579510265258dcfce3a5be2f851f9276c7e53d92330d78eb37720dd",
53
  "kind": "scitomo_checkpoint_validation",
54
  "package_id": "deepdewedge_tutorial",
55
- "package_revision": 2,
56
- "schema_version": 1,
57
  "software": [
58
  {
59
  "name": "scitomo",
60
- "version": "0.5.4"
61
  },
62
  {
63
  "name": "torch",
64
- "version": "2.13.0+cu130"
 
 
 
 
65
  },
66
  {
67
- "name": "vendor_pytorch_lightning",
68
- "version": "1.8.0.post1"
69
  }
70
  ],
71
- "weights_sha256": "2a34aeb61dba5da5c7b78f4cc26de9b8a9134ac12dc08876a8e93bf02776c795"
72
  }
 
1
  {
2
  "cases": [
3
  {
4
+ "evidence_sha256": [],
5
+ "kind": "state_mapping",
 
 
6
  "metrics": {
7
+ "canonical_network_tensors": 54.0,
8
+ "source_tensors": 56.0
9
  },
10
+ "name": "authoritative_source_mapping",
11
  "status": "passed",
12
  "tolerances": {}
13
  },
14
  {
15
+ "evidence_sha256": [],
16
+ "kind": "inference_profile",
 
 
 
17
  "metrics": {
18
+ "network_affine_loc": -0.1489875167608261,
19
+ "network_affine_scale": 1.3237642049789429
20
  },
21
+ "name": "external_fitted_affine_profile",
22
  "status": "passed",
23
+ "tolerances": {}
 
 
 
24
  },
25
  {
26
+ "evidence_sha256": [],
27
+ "kind": "forward_parity",
 
 
 
28
  "metrics": {
29
+ "input_elements": 4096.0,
30
+ "max_abs_error": 0.0,
31
+ "relative_l2_error": 0.0
32
  },
33
+ "name": "deterministic_forward_parity",
34
  "status": "passed",
35
  "tolerances": {
36
  "atol": 1e-06,
 
37
  "rtol": 1e-05
38
  }
39
  }
40
  ],
41
+ "construction_fingerprint": "sha256:644b162de70d014f9273c992fd583ee4fdfb8ae425a35fba26b3fbd41d560f28",
42
+ "inference_fingerprint": "sha256:dd4d9b190f9e3a0c94a0da2d383f5dc42aaa0ac888dcec760d57b4cf5362aabd",
43
  "kind": "scitomo_checkpoint_validation",
44
  "package_id": "deepdewedge_tutorial",
45
+ "package_revision": 3,
46
+ "schema_version": 2,
47
  "software": [
48
  {
49
  "name": "scitomo",
50
+ "version": "0.7.3.dev0"
51
  },
52
  {
53
  "name": "torch",
54
+ "version": "2.12.1+cpu"
55
+ },
56
+ {
57
+ "name": "pytorch_lightning",
58
+ "version": "2.6.5"
59
  },
60
  {
61
+ "name": "safetensors",
62
+ "version": "0.8.0"
63
  }
64
  ],
65
+ "weights_sha256": "e8f51c499d6e5c14ddce45d5cf9935511220de161ce62deb50a2c3a8cae5c731"
66
  }
weights.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:2a34aeb61dba5da5c7b78f4cc26de9b8a9134ac12dc08876a8e93bf02776c795
3
- size 109294940
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e8f51c499d6e5c14ddce45d5cf9935511220de161ce62deb50a2c3a8cae5c731
3
+ size 109294372