User-2468 commited on
Commit
915de37
·
verified ·
1 Parent(s): cc5458c

Add calibrated Base93 production-v3 export under 5 MB with decoders and visual validation

Browse files
Files changed (33) hide show
  1. .gitattributes +9 -0
  2. README.md +4 -0
  3. SHA256SUMS.json +2 -2
  4. quantized/base93-v3/README.md +188 -0
  5. quantized/base93-v3/SHA256SUMS.json +30 -0
  6. quantized/base93-v3/base93_codec.py +149 -0
  7. quantized/base93-v3/calibration.json +345 -0
  8. quantized/base93-v3/config.json +7 -0
  9. quantized/base93-v3/decode_base93.js +57 -0
  10. quantized/base93-v3/decoded_tensor_hashes.json +378 -0
  11. quantized/base93-v3/decoder_verification.json +1 -0
  12. quantized/base93-v3/evaluate.py +62 -0
  13. quantized/base93-v3/evaluation.json +916 -0
  14. quantized/base93-v3/evaluation/comparison_01.jpg +3 -0
  15. quantized/base93-v3/evaluation/comparison_02.jpg +3 -0
  16. quantized/base93-v3/evaluation/comparison_03.jpg +3 -0
  17. quantized/base93-v3/evaluation/comparison_04.jpg +3 -0
  18. quantized/base93-v3/evaluation/comparison_05.jpg +3 -0
  19. quantized/base93-v3/evaluation/comparison_06.jpg +3 -0
  20. quantized/base93-v3/evaluation/comparison_07.jpg +3 -0
  21. quantized/base93-v3/evaluation/comparison_08.jpg +3 -0
  22. quantized/base93-v3/evaluation/comparison_09.jpg +3 -0
  23. quantized/base93-v3/export_base93.py +17 -0
  24. quantized/base93-v3/image_manifest.json +489 -0
  25. quantized/base93-v3/inference.py +111 -0
  26. quantized/base93-v3/manifest.json +0 -0
  27. quantized/base93-v3/nara_sources.json +50 -0
  28. quantized/base93-v3/precision_plan.json +946 -0
  29. quantized/base93-v3/requirements.txt +7 -0
  30. quantized/base93-v3/semantic_model.py +94 -0
  31. quantized/base93-v3/verify_decoders.js +18 -0
  32. quantized/base93-v3/weights_base93.txt +0 -0
  33. quantized/mini-unet-colorizer-v3-base93.zip +3 -0
.gitattributes CHANGED
@@ -338,3 +338,12 @@ experiments/final-20260929/v3_resolution_2.jpg filter=lfs diff=lfs merge=lfs -te
338
  experiments/final-20260929/v3_resolution_3.jpg filter=lfs diff=lfs merge=lfs -text
339
  experiments/final-20260929/v3_resolution_4.jpg filter=lfs diff=lfs merge=lfs -text
340
  reports/FINAL_PALETTE_REVIEW.jpg filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
338
  experiments/final-20260929/v3_resolution_3.jpg filter=lfs diff=lfs merge=lfs -text
339
  experiments/final-20260929/v3_resolution_4.jpg filter=lfs diff=lfs merge=lfs -text
340
  reports/FINAL_PALETTE_REVIEW.jpg filter=lfs diff=lfs merge=lfs -text
341
+ quantized/base93-v3/evaluation/comparison_01.jpg filter=lfs diff=lfs merge=lfs -text
342
+ quantized/base93-v3/evaluation/comparison_02.jpg filter=lfs diff=lfs merge=lfs -text
343
+ quantized/base93-v3/evaluation/comparison_03.jpg filter=lfs diff=lfs merge=lfs -text
344
+ quantized/base93-v3/evaluation/comparison_04.jpg filter=lfs diff=lfs merge=lfs -text
345
+ quantized/base93-v3/evaluation/comparison_05.jpg filter=lfs diff=lfs merge=lfs -text
346
+ quantized/base93-v3/evaluation/comparison_06.jpg filter=lfs diff=lfs merge=lfs -text
347
+ quantized/base93-v3/evaluation/comparison_07.jpg filter=lfs diff=lfs merge=lfs -text
348
+ quantized/base93-v3/evaluation/comparison_08.jpg filter=lfs diff=lfs merge=lfs -text
349
+ quantized/base93-v3/evaluation/comparison_09.jpg filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -34,6 +34,10 @@ Historical research documents have moved to `reports/history/`. See [the report
34
  - `app.py` and `requirements-space.txt`: the tested Gradio / ZeroGPU application.
35
  - `RELEASE_REPORT.md`, `QA.json` and `SHA256SUMS.json`: selection evidence, runtime checks and file hashes.
36
 
 
 
 
 
37
  ## Use
38
 
39
  Download this repository, then:
 
34
  - `app.py` and `requirements-space.txt`: the tested Gradio / ZeroGPU application.
35
  - `RELEASE_REPORT.md`, `QA.json` and `SHA256SUMS.json`: selection evidence, runtime checks and file hashes.
36
 
37
+ ## Scratch Base93 export
38
+
39
+ The complete production v3 model is also available as a [Base93 text export](quantized/base93-v3/README.md), including its MobileNetV3 encoder. [weights_base93.txt](quantized/base93-v3/weights_base93.txt) is 4,946,819 bytes, or **4,949,484 bytes as a JSON string including escaping**. It uses one character for 87.94% of learned parameters and two for sensitive weights. Python and JavaScript decoders, format documentation and output-preservation evaluation are included. This is lossy storage quantisation; the FP32 checkpoint remains the standard runtime release.
40
+
41
  ## Use
42
 
43
  Download this repository, then:
SHA256SUMS.json CHANGED
@@ -2,7 +2,7 @@
2
  "DEPLOYMENT.md": "1ecb94969482959a65e40a6fbd41c985dd3c9df1ff23ad7b13c4f22545c8782b",
3
  "PIPELINE_EVAL.json": "595be88704d580c01a3c4dd642409b3dc5dd25e86ca1c7eb40a696605f181a19",
4
  "QA.json": "b249b1d49045e31b0bf85f9e01515b91a72c4dd973963751c30d14272d262b90",
5
- "README.md": "39654812ef18de704d72b364d75b3ae8fe45b21751e4b73bcca3418a936578c7",
6
  "RELEASE_MANIFEST.json": "872eebfb322c8990b5e6ac493e4e4068b87f8daac0ddf219b8b55299514ca03c",
7
  "RELEASE_REPORT.md": "69677ec5e13f5c1249f59b01c31ed1b0f1588bddc216bce9167b5d31423a5574",
8
  "app.py": "9fbfae85bc7e9976aee57229cb0825a05b836e31177a4288b2b1efebb075e58b",
@@ -32,4 +32,4 @@
32
  "semantic_model.py": "b019358cbcaa214743cbd244d20eb6e59eeff0ab5264093ec0927be8529b25a2",
33
  "training/final_config.json": "39502272a7bbc05c1ad15e70de4e93550b53cdd9fbea399192d1b400311205dd",
34
  "training/train_final.py": "ba42f07649c05cfcf8d7a6cee78088a4ed0838f4e09e24227cf9fb3509b34b5b"
35
- }
 
2
  "DEPLOYMENT.md": "1ecb94969482959a65e40a6fbd41c985dd3c9df1ff23ad7b13c4f22545c8782b",
3
  "PIPELINE_EVAL.json": "595be88704d580c01a3c4dd642409b3dc5dd25e86ca1c7eb40a696605f181a19",
4
  "QA.json": "b249b1d49045e31b0bf85f9e01515b91a72c4dd973963751c30d14272d262b90",
5
+ "README.md": "095c7f3043d428711825105a1c29ff715c3b4e2dcd57445695ad40a3ecfb7023",
6
  "RELEASE_MANIFEST.json": "872eebfb322c8990b5e6ac493e4e4068b87f8daac0ddf219b8b55299514ca03c",
7
  "RELEASE_REPORT.md": "69677ec5e13f5c1249f59b01c31ed1b0f1588bddc216bce9167b5d31423a5574",
8
  "app.py": "9fbfae85bc7e9976aee57229cb0825a05b836e31177a4288b2b1efebb075e58b",
 
32
  "semantic_model.py": "b019358cbcaa214743cbd244d20eb6e59eeff0ab5264093ec0927be8529b25a2",
33
  "training/final_config.json": "39502272a7bbc05c1ad15e70de4e93550b53cdd9fbea399192d1b400311205dd",
34
  "training/train_final.py": "ba42f07649c05cfcf8d7a6cee78088a4ed0838f4e09e24227cf9fb3509b34b5b"
35
+ }
quantized/base93-v3/README.md ADDED
@@ -0,0 +1,188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Production v3 — Base93 export
2
+
3
+ This is the complete 3,994,676-parameter production v3 colouriser, including its MobileNetV3 encoder, quantised to the supplied Scratch Base93 alphabet. It uses 93-level weights for most parameters and 8,649-level weights for sensitive tensors. It is a lossy weight export; the original production checkpoint remains available.
4
+
5
+ ## Download and size
6
+
7
+ Use **`weights_base93.txt`**. It is self-contained: weights, scales, normalization buffers, tensor names/shapes, model configuration and source identity are all inside it. `manifest.json` is an optional, easier-to-read index.
8
+
9
+ | Item | Exact size/count |
10
+ |---|---:|
11
+ | Text file, ASCII / UTF-8 | **4,946,819 bytes** |
12
+ | Entire file as one JSON string, including escaping and outer quotes | **4,949,484 bytes** |
13
+ | Remaining below 5,000,000 bytes | **50,516 bytes** |
14
+ | Learned parameters using one character | 3,512,832 (87.94%) |
15
+ | Learned parameters using two characters | 481,844 (12.06%) |
16
+ | Total learned parameters | **3,994,676** |
17
+ | Lossless non-learned buffer values | 24,452 |
18
+ | Group scale values | 66,253 |
19
+
20
+ The text contains 2,637 backslash separators and 26 quotation marks; each becomes two bytes in JSON. Everything else is one byte. The byte budget includes this overhead, scales and metadata. Other Scratch project blocks/assets/variables add to the project size. Store the text as a single string; splitting every character into a JSON list adds substantial overhead.
21
+
22
+ SHA256 of `weights_base93.txt`:
23
+
24
+ ```
25
+ e9ef164317e7832781753585c5533c781ce134527dd71385ef490cf5cf5fe9ba
26
+ ```
27
+
28
+ Source: [`User-2468/mini-unet-colorizer` at `1a9eb8af2754ad2329a24cfe50d388cb559441d0`](https://huggingface.co/User-2468/mini-unet-colorizer/tree/1a9eb8af2754ad2329a24cfe50d388cb559441d0).
29
+ Source `model.safetensors` SHA256: `ec1f27d74533adc83f7ab3639a091fc4d8738a434dafc7d172c7873c28a9e715`.
30
+
31
+ ## Validation
32
+
33
+ Precision allocation used 16 calibration photographs. Layer sensitivity was measured against the FP32 model's own output, followed by conditional refinement of the allocation. All candidate selection used those calibration images. No model training or cloud GPU job was required.
34
+
35
+ The final file was then decoded and compared with FP32 on **64 separate COCO photographs and six historical photographs**. Both used the production pipeline: 256-pixel maximum network side, smoothing radius 8, saturation 1, original output resolution.
36
+
37
+ | Evaluation set | Mean RGB absolute difference (0–255) | Mean image PSNR | Largest image mean difference |
38
+ |---|---:|---:|---:|
39
+ | COCO holdout, 64 images | 0.784 | 47.61 dB | 2.988 |
40
+ | Historical, 6 images | 0.990 | 45.82 dB | 1.483 |
41
+ | Additional 512-size check, 4 images | 0.746 | 47.71 dB | 1.644 |
42
+
43
+ These are **differences from the original model**, not accuracy against unknowable original colours. Means give each image equal weight. The COCO subset was held out from quantisation calibration; no claim is made about overlap with upstream pretraining.
44
+
45
+ All 70 default-size image pairs were visually reviewed in `evaluation/comparison_01.jpg` through `comparison_09.jpg`. They retain the original model's overall palette, boundaries and existing limitations. Some warmth/saturation shifts are visible: the largest measured change is the desk scene `coco_1056.jpg` (35.86 dB PSNR, 2.99/255 image MAE). Field/court images also show small shifts. This export does not fix the original model's muted colouring, warm casts or pre-existing colour bleeding.
46
+
47
+ Both independent decoders reconstruct **bitwise-identical values in all 376 tensors**, with strict PyTorch loading. JSON string round-trip, deterministic re-export and alpha preservation were verified. Quantisation statistics, per-image results, input identities and decoded tensor hashes are included.
48
+
49
+ ## Python use
50
+
51
+ From this directory:
52
+
53
+ ```bash
54
+ pip install -r requirements.txt
55
+ python base93_codec.py weights_base93.txt --output decoded_model
56
+ python inference.py input.jpg output.png --model decoded_model --device cpu
57
+ ```
58
+
59
+ Or decode directly in memory:
60
+
61
+ ```python
62
+ from PIL import Image
63
+ from base93_codec import load_model
64
+ from inference import colorize
65
+
66
+ model = load_model('weights_base93.txt', device='cpu')
67
+ colorize(model, Image.open('input.jpg')).save('output.png')
68
+ ```
69
+
70
+ The decoder restores floating-point weights for the existing architecture. The export reduces stored weight size; it does not itself provide an integer inference engine or a Scratch implementation of the neural network. Decoded weights occupy approximately 16 MB as float32, plus runtime activations and overhead.
71
+
72
+ ## JavaScript use
73
+
74
+ `decode_base93.js` has no package dependencies and can run in Node or a browser script. Node:
75
+
76
+ ```javascript
77
+ const fs = require('fs');
78
+ const {decodeBase93} = require('./decode_base93');
79
+ const model = decodeBase93(fs.readFileSync('weights_base93.txt', 'ascii'));
80
+ // model.tensors[name] = {shape, kind, values}
81
+ // Float32Array for floating tensors; BigInt array for integer buffers.
82
+ ```
83
+
84
+ Run `node verify_decoders.js` to check every decoded tensor against the included Python hashes. This decoder supplies tensors, not an inference runtime.
85
+
86
+ ## Exact alphabet
87
+
88
+ There is a **space as the first character** of the line below:
89
+
90
+ ```text
91
+ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
92
+ ```
93
+
94
+ Indices run from 0 to 92. This is ASCII 32–126 excluding double quote (34) and backslash (92). Space is digit 0. Preserve whitespace and case; never trim, normalize case, wrap lines or add a byte-order mark. The file contains no newline.
95
+
96
+ Scratch's ordinary string equality/list lookup does not distinguish uppercase and lowercase reliably for this alphabet. Reuse the case-sensitive costume-name lookup mechanism from the supplied reference project, or an equivalent verified method. A possible dedicated lookup sprite has exactly 93 costumes named `digit + "_"`, ordered by the alphabet; select that exact costume name and use costume number minus one. If using the supplied project's existing costumes, follow its existing index routine rather than assuming those costumes are alphabetically ordered.
97
+
98
+ ## B93Q1 format and decoding
99
+
100
+ This new container uses the user's alphabet, but **its numerical mapping is symmetric and group-scaled**. The older reference notes' min/max affine decoder is not compatible with B93Q1.
101
+
102
+ A single literal backslash separates fields. Every record ends with a separator, including the last record. Empty fields are meaningful and must be retained when splitting.
103
+
104
+ The first five fields are:
105
+
106
+ 1. Literal `B93Q1`.
107
+ 2. The exact 93-character alphabet.
108
+ 3. Compact JSON model configuration.
109
+ 4. Compact JSON source provenance.
110
+ 5. Decimal tensor count (`376`).
111
+
112
+ Each tensor then has seven fields:
113
+
114
+ 1. Tensor name.
115
+ 2. Shape as comma-separated decimal dimensions; empty means scalar.
116
+ 3. Kind: `q`, `f` or `i`.
117
+ 4. Characters per stored value.
118
+ 5. Group size.
119
+ 6. Scale payload (empty for `f` and `i`).
120
+ 7. Value payload.
121
+
122
+ The manifest's offsets are zero-based character/byte offsets into the unescaped text. Add one when addressing Scratch's `letter () of ()`. JSON backslash escapes are not part of the decoded string and must not be counted in those offsets.
123
+
124
+ ### Learned weights (`q`)
125
+
126
+ Every learned weight has exactly one or two Base93 digits. Two-digit numbers are most-significant digit first:
127
+
128
+ ```
129
+ code = digit0 # one character, 0..92
130
+ code = digit0 * 93 + digit1 # two characters, 0..8648
131
+ center = 46 # one character
132
+ center = 4324 # two characters
133
+ weight = (code - center) * scale
134
+ ```
135
+
136
+ The digit `O` represents the central zero code; two-character zero is `OO`. Each group has its own scale, stored losslessly as described below. Python and JavaScript cast the reconstructed weight to float32. Scratch number arithmetic can use the product directly.
137
+
138
+ Flatten tensors in PyTorch C order. Convolution shapes are `[out_channels, in_channels/groups, height, width]`; linear shapes are `[out_features, in_features]`.
139
+
140
+ For rank two or higher, treat the first dimension as rows, and the product of all remaining dimensions as row width. For a one-dimensional tensor, use one row. **Groups restart at every row.** A final short group has no padding stored in the value payload.
141
+
142
+ ```
143
+ groups_per_row = ceil(row_width / group_size)
144
+ scale_index = row * groups_per_row + floor(column / group_size)
145
+ ```
146
+
147
+ Indices here are zero-based. Read that scale at `scale_index * 5` in the scale field. Different tensors can have different group sizes; use their own field/manifest value.
148
+
149
+ Encoder rule, for reproducibility: scale = group maximum absolute weight / center; all-zero groups use scale 1. Round weight/scale to nearest integer with ties to even, clamp to [-center, center], and add center.
150
+
151
+ ### Scales and non-learned float buffers (`f`)
152
+
153
+ Each scale and each non-learned float buffer value uses **five Base93 digits carrying its IEEE754 float32 bit pattern exactly**. They are metadata/statistics, not extra learned weights. There is no hidden high-precision learned tensor.
154
+
155
+ Fold five digits into the unsigned integer `u` using repeated `u = u * 93 + digit`. Reject `u > 4294967295`. Convert its bit pattern to a float32. In Scratch arithmetic:
156
+
157
+ ```
158
+ s = floor(u / 2147483648)
159
+ e = floor(u / 8388608) mod 256
160
+ m = u mod 8388608
161
+
162
+ if e = 0: value = (-1)^s * m * 2^(-149)
163
+ otherwise: value = (-1)^s * (1 + m / 8388608) * 2^(e - 127)
164
+ ```
165
+
166
+ Exponent 255 is invalid for this file. Scratch's numeric range can exactly represent all intermediate unsigned 32-bit integers. `f` records have precision 5, group size 0 and an empty scale field.
167
+
168
+ ### Integer buffers (`i`)
169
+
170
+ These are the 46 non-learned BatchNorm batch counters. Their payload is decimal integer text (comma separated if an array), precision/group size are zero, and the scale field is empty. They are not needed for inference but are retained for a complete strict-loadable state dictionary.
171
+
172
+ ## Reproducing the export
173
+
174
+ Download `model.safetensors` and `config.json` from the immutable source revision into `reference_fp32/`, then:
175
+
176
+ ```bash
177
+ python export_base93.py --source reference_fp32 --output recreated
178
+ ```
179
+
180
+ The included precision plan reproduces the exact published text file and SHA256. The script refuses a different source checkpoint. `SHA256SUMS.json` covers the release files.
181
+
182
+ To repeat the evaluation, reconstruct the inputs identified by `image_manifest.json` and `nara_sources.json`, then run:
183
+
184
+ ```bash
185
+ python evaluate.py --reference reference_fp32 --images images --archives archive_inputs
186
+ ```
187
+
188
+ `image_manifest.json` identifies the pinned COCO parquet file and zero-based row positions within that file. Rows 1000–1015 were calibration; rows 1016–1079 were evaluation. Historical source URLs and hashes are included. Full source photographs are not bundled. See the parent model card for architecture, training provenance, intended use and licensing.
quantized/base93-v3/SHA256SUMS.json ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "README.md": "4429db2319c60f14755dec54e75f6639cf7519382a39f81c2b807d3611fffe09",
3
+ "base93_codec.py": "94fe46fdf3ef8b4de08d827f11b74523302006811c1ccce4108c077fd3461c4d",
4
+ "calibration.json": "8f8c36e84213af8ebd1bafffd01d778db794919eee5ec63d141d0cee8dda7d15",
5
+ "config.json": "eaeb49b39f9116bfed0d954e81852dc93476298752787dba88a63c0eec97ccec",
6
+ "decode_base93.js": "1e32a0b933b537a532a8b8208961409ceff89e5025f65b912bb954dbdd44a3be",
7
+ "decoded_tensor_hashes.json": "cd6990dc7dc13d2fcf8b7f6fe3b84b711f9476eb7df349b967f189d4012a6d94",
8
+ "decoder_verification.json": "7296de6d2cd2cee6638fcd7baeba958b5a029c9671fbd37d0abc2c8fd4ad311a",
9
+ "evaluate.py": "49f36056d5eef2b56a3dec68bb48e33c188fe5c8b0d503591ce998b8cb4694a8",
10
+ "evaluation/comparison_01.jpg": "70b0b3fb40480d78209d64f49dd071ee8ac462eabda19631bc1d4764751d5e99",
11
+ "evaluation/comparison_02.jpg": "652c6ba4cdc316629560540843e69f096d2322cbcfc33a3d3ea359581e95fd75",
12
+ "evaluation/comparison_03.jpg": "febd0388b105ea2dd9a8a67141f49395dd1747aa3eb50d9f5a204e9d2aa8b962",
13
+ "evaluation/comparison_04.jpg": "138cea89e388ab9e61911b3ad4ea9a48a4c5c92bf5332c274d5aa6f04178e726",
14
+ "evaluation/comparison_05.jpg": "317ca03858dac621207bf27e0b5654e09742d9f55fdec254e3a833b8f7eaef78",
15
+ "evaluation/comparison_06.jpg": "39635897df1ae9510df4134453d8426171216bdb524e816ee153a9604e7b90d7",
16
+ "evaluation/comparison_07.jpg": "776610302d5100e0c0a3257ede57fe4b3282df72f33c5b707e5cc1893a485b10",
17
+ "evaluation/comparison_08.jpg": "9175a154e983bfe237c113d63c1251f48a1496da82d84dfd346834d01588e4a8",
18
+ "evaluation/comparison_09.jpg": "6fa6d60a4c89af0d6fc961580f7fe822e7472a6d1898ef9387b4eb8fb5b3fdd4",
19
+ "evaluation.json": "34e04e511d9fe0fe078a4df9f5255a71b9615ba4851b49238388d4981a62e1cc",
20
+ "export_base93.py": "087509aae648a84884b8c5311cbd4ae260dbab25ec87bbed303af81a6401c14f",
21
+ "image_manifest.json": "da415c18cf91fd355a4a9df2672114a2da1eaae009e71cfaeab5a78ad1ce0e9d",
22
+ "inference.py": "0ac1f382205b42cef0afaa9173017fa660e6859194a65a61b9b9052c437cd476",
23
+ "manifest.json": "e61f34d64192335a56be492c36dacf5b0593a125872d622db33528c19d51b5ef",
24
+ "nara_sources.json": "d4551fb5857161ecd72be4f315dc9e643e33700827e7fcf51e90049a6ef0f6ba",
25
+ "precision_plan.json": "8dab370f2fe7077faf90d4dc7ecd30e241b485a5c762837be4ab1c95d173a03a",
26
+ "requirements.txt": "c855eb70020dc89f71fd38e44a0be2cfb80f2fe3d442d5ba45c91398c336f83f",
27
+ "semantic_model.py": "b019358cbcaa214743cbd244d20eb6e59eeff0ab5264093ec0927be8529b25a2",
28
+ "verify_decoders.js": "e30655fa26627ce046a8efff5802c896d7ffd55d031cd3c2050b5bf04a1ec0dd",
29
+ "weights_base93.txt": "e9ef164317e7832781753585c5533c781ce134527dd71385ef490cf5cf5fe9ba"
30
+ }
quantized/base93-v3/base93_codec.py ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """B93Q1 self-contained, JSON-safe mixed-precision model storage.
2
+
3
+ 93-level and 8649-level symmetric weight quantisation. Buffers and quantisation
4
+ scales are lossless IEEE float32 carried as five Base93 digits. The alphabet is
5
+ the user's exact Scratch alphabet. This is weight storage, not an integer-only
6
+ inference engine.
7
+ """
8
+ from pathlib import Path
9
+ import json
10
+ import numpy as np
11
+
12
+ ALPHABET=''.join(chr(i) for i in range(32,127) if i not in (34,92))
13
+ LUT=np.frombuffer(ALPHABET.encode('ascii'),dtype=np.uint8)
14
+ INV=np.full(128,-1,dtype=np.int16)
15
+ INV[LUT]=np.arange(93,dtype=np.int16)
16
+ SEP='\\'
17
+ MAGIC='B93Q1'
18
+
19
+ def encode_uint(values,digits):
20
+ values=np.asarray(values,dtype=np.uint64).reshape(-1).copy()
21
+ if np.any(values>=93**digits):raise ValueError('Integer does not fit')
22
+ out=np.empty((len(values),digits),dtype=np.uint8)
23
+ for i in range(digits-1,-1,-1):
24
+ out[:,i]=LUT[values%93];values//=93
25
+ return out.tobytes().decode('ascii')
26
+
27
+ def decode_uint(text,digits):
28
+ if digits<1 or len(text)%digits:raise ValueError('Invalid digit count')
29
+ chars=np.frombuffer(text.encode('ascii'),dtype=np.uint8)
30
+ if np.any(chars>=128):raise ValueError('Non-ASCII digit')
31
+ codes=INV[chars]
32
+ if np.any(codes<0):raise ValueError('Invalid Base93 digit')
33
+ codes=codes.reshape(-1,digits).astype(np.uint64)
34
+ values=np.zeros(len(codes),dtype=np.uint64)
35
+ for i in range(digits):values=values*93+codes[:,i]
36
+ return values
37
+
38
+ def pack_f32(values):
39
+ a=np.asarray(values,dtype='<f4').reshape(-1)
40
+ if not np.isfinite(a).all():raise ValueError('Non-finite float')
41
+ return encode_uint(a.view('<u4'),5)
42
+
43
+ def unpack_f32(text):
44
+ bits=decode_uint(text,5)
45
+ if np.any(bits>0xffffffff):raise ValueError('Invalid float32 bits')
46
+ a=bits.astype('<u4').view('<f4')
47
+ if not np.isfinite(a).all():raise ValueError('Non-finite float')
48
+ return a
49
+
50
+ def row_shape(shape):
51
+ return (shape[0],int(np.prod(shape[1:]))) if len(shape)>=2 else (1,int(np.prod(shape)))
52
+
53
+ def quantize(values,digits,group_size):
54
+ a=np.asarray(values,dtype=np.float32)
55
+ if digits not in (1,2):raise ValueError('Weight precision must be 1 or 2')
56
+ rows,width=row_shape(a.shape);groups=(width+group_size-1)//group_size
57
+ padded=np.zeros((rows,groups*group_size),dtype=np.float32)
58
+ padded[:,:width]=a.reshape(rows,width)
59
+ blocks=padded.reshape(rows,groups,group_size)
60
+ qmax=(93**digits-1)//2
61
+ scales=np.max(np.abs(blocks),axis=-1)/qmax
62
+ scales=np.where(scales>0,scales,1).astype(np.float32)
63
+ q=np.rint(blocks/scales[...,None]).clip(-qmax,qmax).astype(np.int32)
64
+ codes=(q.reshape(rows,-1)[:,:width]+qmax).astype(np.uint16).reshape(-1)
65
+ restored=(q*scales[...,None]).reshape(rows,-1)[:,:width].reshape(a.shape).astype(np.float32)
66
+ return restored,scales.reshape(-1),codes
67
+
68
+ def dequantize(codes,scales,shape,digits,group_size):
69
+ rows,width=row_shape(shape);groups=(width+group_size-1)//group_size
70
+ if len(codes)!=rows*width or len(scales)!=rows*groups:raise ValueError('Payload shape mismatch')
71
+ scales=np.asarray(scales).reshape(rows,groups)
72
+ per_value=scales[:,np.arange(width)//group_size]
73
+ qmax=(93**digits-1)//2
74
+ signed=np.asarray(codes,dtype=np.int32).reshape(rows,width)-qmax
75
+ return (signed*per_value).astype(np.float32).reshape(shape)
76
+
77
+ def encode_state(state,parameter_names,config,provenance,plan):
78
+ fields=[MAGIC,ALPHABET,json.dumps(config,separators=(',',':'),ensure_ascii=True),
79
+ json.dumps(provenance,separators=(',',':'),ensure_ascii=True),str(len(state))]
80
+ records=[];position=sum(len(f)+1 for f in fields)
81
+ for name,t in state.items():
82
+ a=t.detach().cpu().numpy() if hasattr(t,'detach') else np.asarray(t)
83
+ shape=list(a.shape);start=position
84
+ if name in parameter_names:
85
+ digits,group_size=plan[name]
86
+ restored,scales,codes=quantize(a,digits,group_size)
87
+ kind='q';scale_text=pack_f32(scales);payload=encode_uint(codes,digits)
88
+ elif a.dtype.kind=='f':
89
+ kind='f';digits=5;group_size=0;scale_text='';payload=pack_f32(a)
90
+ elif a.dtype.kind in 'iu':
91
+ kind='i';digits=0;group_size=0;scale_text='';payload=','.join(map(str,a.reshape(-1)))
92
+ else:raise ValueError('Unsupported dtype '+str(a.dtype))
93
+ head=[name,','.join(map(str,shape)),kind,str(digits),str(group_size)]
94
+ scale_start=position+sum(len(f)+1 for f in head)
95
+ payload_start=scale_start+len(scale_text)+1
96
+ record=head+[scale_text,payload]
97
+ if any(SEP in x for x in record):raise ValueError('Separator inside field')
98
+ fields+=record;position+=sum(len(f)+1 for f in record)
99
+ records.append({'name':name,'shape':shape,'kind':kind,'chars_per_value':digits,
100
+ 'group_size':group_size,'num_values':int(a.size),'scale_offset':scale_start,
101
+ 'scale_count':len(scale_text)//5,'payload_offset':payload_start,
102
+ 'payload_length':len(payload),'record_offset':start})
103
+ text=SEP.join(fields)+SEP
104
+ manifest={'format':MAGIC,'alphabet':ALPHABET,'offset_base':0,'config':config,
105
+ 'provenance':provenance,'text_bytes':len(text.encode('ascii')),
106
+ 'json_string_bytes':len(json.dumps(text,ensure_ascii=True).encode('ascii')),
107
+ 'tensors':records}
108
+ return text,manifest
109
+
110
+ def decode_state(text):
111
+ fields=text.split(SEP)
112
+ if len(fields)<6 or fields[0]!=MAGIC or fields[1]!=ALPHABET or fields[-1]!='':
113
+ raise ValueError('Invalid B93Q1 header or terminator')
114
+ config=json.loads(fields[2]);provenance=json.loads(fields[3]);n=int(fields[4])
115
+ if len(fields)!=6+n*7:raise ValueError('Incorrect field count')
116
+ result={}
117
+ for i in range(n):
118
+ name,shape,kind,digits,group_size,scale_text,payload=fields[5+i*7:12+i*7]
119
+ if name in result:raise ValueError('Duplicate tensor')
120
+ shape=tuple(int(x) for x in shape.split(',')) if shape else ()
121
+ digits=int(digits);group_size=int(group_size)
122
+ if kind=='q':
123
+ if digits not in (1,2) or group_size<1:raise ValueError('Invalid quantisation')
124
+ a=dequantize(decode_uint(payload,digits),unpack_f32(scale_text),shape,digits,group_size)
125
+ elif kind=='f':a=unpack_f32(payload).reshape(shape)
126
+ elif kind=='i':a=np.array([int(x) for x in payload.split(',')],dtype=np.int64).reshape(shape)
127
+ else:raise ValueError('Unknown tensor encoding')
128
+ result[name]=a
129
+ return result,config,provenance
130
+
131
+ def load_model(path,device='cpu'):
132
+ import torch
133
+ from semantic_model import SemanticColorizer
134
+ state,config,_=decode_state(Path(path).read_text(encoding='ascii'))
135
+ model=SemanticColorizer(**{k:config[k] for k in ('head','width','queries')})
136
+ model.load_state_dict({k:torch.from_numpy(v.copy()) for k,v in state.items()},strict=True)
137
+ return model.to(device).eval()
138
+
139
+ if __name__=='__main__':
140
+ import argparse
141
+ p=argparse.ArgumentParser();p.add_argument('text');p.add_argument('--output',default='decoded_model')
142
+ args=p.parse_args()
143
+ from safetensors.torch import save_file
144
+ import torch
145
+ arrays,config,provenance=decode_state(Path(args.text).read_text(encoding='ascii'))
146
+ dest=Path(args.output);dest.mkdir(exist_ok=True,parents=True)
147
+ save_file({k:torch.from_numpy(v.copy()) for k,v in arrays.items()},str(dest/'model.safetensors'))
148
+ (dest/'config.json').write_text(json.dumps(config,indent=2))
149
+ print('Decoded',len(arrays),'tensors to',dest)
quantized/base93-v3/calibration.json ADDED
@@ -0,0 +1,345 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "winner": {
3
+ "name": "compact_scales_refine8",
4
+ "mse": 0.8620080910623074,
5
+ "ab_mae": 0.6051067784428596,
6
+ "json_string_bytes": 4949484,
7
+ "upgrade": [
8
+ "encoder.9.block.0.0.weight",
9
+ 1,
10
+ 32
11
+ ],
12
+ "calibration_subset_gain": 0.02464677393436432
13
+ },
14
+ "candidates": [
15
+ {
16
+ "name": "group32",
17
+ "group_size": 32,
18
+ "json_string_bytes": 4828067,
19
+ "mse": 18.104391634464264,
20
+ "ab_mae": 3.1036613807082176
21
+ },
22
+ {
23
+ "name": "group64",
24
+ "group_size": 64,
25
+ "json_string_bytes": 4526797,
26
+ "mse": 23.284358993172646,
27
+ "ab_mae": 3.433950934559107
28
+ },
29
+ {
30
+ "name": "group128",
31
+ "group_size": 128,
32
+ "json_string_bytes": 4380453,
33
+ "mse": 26.695782251656055,
34
+ "ab_mae": 3.64544490352273
35
+ },
36
+ {
37
+ "name": "group256",
38
+ "group_size": 256,
39
+ "json_string_bytes": 4308573,
40
+ "mse": 23.869282491505146,
41
+ "ab_mae": 3.38033676892519
42
+ },
43
+ {
44
+ "name": "group64_improvement_per_byte",
45
+ "group_size": 64,
46
+ "json_string_bytes": 4934229,
47
+ "promoted_tensors": [
48
+ "encoder.1.block.0.0.weight",
49
+ "encoder.0.0.weight",
50
+ "encoder.2.block.1.0.weight",
51
+ "encoder.2.block.0.0.weight",
52
+ "encoder.2.block.2.0.weight",
53
+ "encoder.3.block.0.0.weight",
54
+ "encoder.4.block.0.0.weight",
55
+ "encoder.5.block.1.0.weight",
56
+ "encoder.9.block.2.0.weight",
57
+ "encoder.7.block.1.0.weight",
58
+ "encoder.8.block.2.0.weight",
59
+ "encoder.7.block.2.0.weight",
60
+ "encoder.4.block.1.0.weight",
61
+ "encoder.12.block.1.0.weight",
62
+ "encoder.6.block.2.fc2.weight",
63
+ "encoder.6.block.1.0.weight",
64
+ "encoder.5.block.2.fc2.weight",
65
+ "encoder.10.block.0.0.weight",
66
+ "encoder.15.block.1.0.weight",
67
+ "lateral.0.weight",
68
+ "encoder.6.block.0.0.weight",
69
+ "encoder.8.block.0.0.weight",
70
+ "encoder.12.block.3.0.weight",
71
+ "encoder.16.0.weight",
72
+ "encoder.5.block.2.fc1.weight",
73
+ "encoder.9.block.0.0.weight",
74
+ "query_blocks.0.self_attn.out_proj.weight",
75
+ "residual.weight"
76
+ ],
77
+ "mse": 2.5121002276428044,
78
+ "ab_mae": 1.0109938234090805
79
+ },
80
+ {
81
+ "name": "group64_mse_improvement",
82
+ "group_size": 64,
83
+ "json_string_bytes": 4949909,
84
+ "promoted_tensors": [
85
+ "encoder.1.block.0.0.weight",
86
+ "encoder.9.block.2.0.weight",
87
+ "encoder.0.0.weight",
88
+ "encoder.2.block.2.0.weight",
89
+ "encoder.8.block.2.0.weight",
90
+ "encoder.7.block.2.0.weight",
91
+ "encoder.2.block.0.0.weight",
92
+ "encoder.3.block.0.0.weight",
93
+ "encoder.5.block.1.0.weight",
94
+ "encoder.2.block.1.0.weight",
95
+ "encoder.4.block.0.0.weight",
96
+ "encoder.16.0.weight",
97
+ "encoder.15.block.3.0.weight",
98
+ "encoder.15.block.1.0.weight",
99
+ "encoder.7.block.1.0.weight",
100
+ "encoder.10.block.0.0.weight",
101
+ "encoder.12.block.1.0.weight",
102
+ "encoder.6.block.2.fc2.weight",
103
+ "encoder.4.block.1.0.weight",
104
+ "encoder.6.block.1.0.weight",
105
+ "residual.weight"
106
+ ],
107
+ "mse": 2.493656279752031,
108
+ "ab_mae": 1.0097566042095423
109
+ },
110
+ {
111
+ "name": "group256_improvement_per_byte",
112
+ "group_size": 256,
113
+ "json_string_bytes": 4944941,
114
+ "promoted_tensors": [
115
+ "encoder.1.block.0.0.weight",
116
+ "encoder.0.0.weight",
117
+ "encoder.2.block.0.0.weight",
118
+ "encoder.2.block.2.0.weight",
119
+ "encoder.3.block.0.0.weight",
120
+ "encoder.4.block.0.0.weight",
121
+ "encoder.5.block.1.0.weight",
122
+ "encoder.4.block.1.0.weight",
123
+ "encoder.9.block.2.0.weight",
124
+ "encoder.6.block.3.0.weight",
125
+ "encoder.7.block.1.0.weight",
126
+ "encoder.10.block.2.0.weight",
127
+ "encoder.6.block.2.fc2.weight",
128
+ "encoder.8.block.2.0.weight",
129
+ "encoder.12.block.1.0.weight",
130
+ "lateral.0.weight",
131
+ "encoder.5.block.2.fc2.weight",
132
+ "encoder.6.block.0.0.weight",
133
+ "encoder.6.block.2.fc1.weight",
134
+ "encoder.5.block.2.fc1.weight",
135
+ "encoder.15.block.1.0.weight",
136
+ "encoder.11.block.0.0.weight",
137
+ "encoder.9.block.0.0.weight",
138
+ "encoder.11.block.3.0.weight",
139
+ "encoder.12.block.3.0.weight",
140
+ "palette.0.weight",
141
+ "encoder.11.block.2.fc2.weight",
142
+ "encoder.14.block.2.fc2.weight",
143
+ "query_blocks.0.ff.2.weight"
144
+ ],
145
+ "mse": 2.986875234171748,
146
+ "ab_mae": 1.0296866707503796
147
+ },
148
+ {
149
+ "name": "group256_mse_improvement",
150
+ "group_size": 256,
151
+ "json_string_bytes": 4948653,
152
+ "promoted_tensors": [
153
+ "encoder.1.block.0.0.weight",
154
+ "encoder.0.0.weight",
155
+ "encoder.2.block.0.0.weight",
156
+ "encoder.9.block.2.0.weight",
157
+ "encoder.2.block.2.0.weight",
158
+ "encoder.3.block.0.0.weight",
159
+ "encoder.10.block.2.0.weight",
160
+ "encoder.4.block.0.0.weight",
161
+ "encoder.14.block.2.fc2.weight",
162
+ "encoder.5.block.1.0.weight",
163
+ "encoder.12.block.3.0.weight",
164
+ "encoder.8.block.2.0.weight",
165
+ "encoder.11.block.3.0.weight",
166
+ "encoder.6.block.3.0.weight",
167
+ "encoder.11.block.0.0.weight",
168
+ "encoder.4.block.1.0.weight",
169
+ "encoder.15.block.1.0.weight",
170
+ "encoder.6.block.2.fc2.weight",
171
+ "encoder.12.block.0.0.weight",
172
+ "encoder.11.block.2.fc2.weight",
173
+ "encoder.12.block.1.0.weight",
174
+ "encoder.7.block.1.0.weight",
175
+ "encoder.5.block.2.fc2.weight",
176
+ "encoder.6.block.0.0.weight",
177
+ "lateral.0.weight"
178
+ ],
179
+ "mse": 3.097676645964384,
180
+ "ab_mae": 1.044976083561778
181
+ }
182
+ ],
183
+ "calibration_images": 16,
184
+ "parameter_count": 3994676,
185
+ "one_character_parameters": 3512832,
186
+ "two_character_parameters": 481844,
187
+ "text_bytes": 4946819,
188
+ "json_string_bytes": 4949484,
189
+ "sha256": "e9ef164317e7832781753585c5533c781ce134527dd71385ef490cf5cf5fe9ba",
190
+ "roundtrip_exact_to_quantized_state": true,
191
+ "initial_calibration": {
192
+ "name": "group64_mse_improvement",
193
+ "group_size": 64,
194
+ "json_string_bytes": 4949909,
195
+ "promoted_tensors": [
196
+ "encoder.1.block.0.0.weight",
197
+ "encoder.9.block.2.0.weight",
198
+ "encoder.0.0.weight",
199
+ "encoder.2.block.2.0.weight",
200
+ "encoder.8.block.2.0.weight",
201
+ "encoder.7.block.2.0.weight",
202
+ "encoder.2.block.0.0.weight",
203
+ "encoder.3.block.0.0.weight",
204
+ "encoder.5.block.1.0.weight",
205
+ "encoder.2.block.1.0.weight",
206
+ "encoder.4.block.0.0.weight",
207
+ "encoder.16.0.weight",
208
+ "encoder.15.block.3.0.weight",
209
+ "encoder.15.block.1.0.weight",
210
+ "encoder.7.block.1.0.weight",
211
+ "encoder.10.block.0.0.weight",
212
+ "encoder.12.block.1.0.weight",
213
+ "encoder.6.block.2.fc2.weight",
214
+ "encoder.4.block.1.0.weight",
215
+ "encoder.6.block.1.0.weight",
216
+ "residual.weight"
217
+ ],
218
+ "mse": 2.493656279752031,
219
+ "ab_mae": 1.0097566042095423
220
+ },
221
+ "refinement_candidates": [
222
+ {
223
+ "name": "initial",
224
+ "mse": 2.493656279752031,
225
+ "ab_mae": 1.0097566042095423,
226
+ "json_string_bytes": 4949909
227
+ },
228
+ {
229
+ "name": "group32_ratio",
230
+ "mse": 2.6975236465223134,
231
+ "ab_mae": 1.008376962505281,
232
+ "json_string_bytes": 4946379
233
+ },
234
+ {
235
+ "name": "group32_gain",
236
+ "mse": 2.730722404550761,
237
+ "ab_mae": 1.0121978027746081,
238
+ "json_string_bytes": 4948299
239
+ },
240
+ {
241
+ "name": "compact_scales",
242
+ "mse": 2.4792887738440186,
243
+ "ab_mae": 1.0056030582636595,
244
+ "json_string_bytes": 4925590
245
+ },
246
+ {
247
+ "name": "compact_scales_refine1",
248
+ "mse": 1.7108433779794723,
249
+ "ab_mae": 0.8537794416770339,
250
+ "json_string_bytes": 4926239,
251
+ "upgrade": [
252
+ "encoder.3.block.1.0.weight",
253
+ 2,
254
+ 256
255
+ ],
256
+ "calibration_subset_gain": 1.1435979176312685
257
+ },
258
+ {
259
+ "name": "compact_scales_refine2",
260
+ "mse": 1.2327836034819484,
261
+ "ab_mae": 0.7801378443837166,
262
+ "json_string_bytes": 4927848,
263
+ "upgrade": [
264
+ "encoder.3.block.2.0.weight",
265
+ 2,
266
+ 256
267
+ ],
268
+ "calibration_subset_gain": 0.5322280931286514
269
+ },
270
+ {
271
+ "name": "compact_scales_refine3",
272
+ "mse": 1.4706268422305584,
273
+ "ab_mae": 0.7599028032273054,
274
+ "json_string_bytes": 4928105,
275
+ "upgrade": [
276
+ "encoder.1.block.1.0.weight",
277
+ 2,
278
+ 256
279
+ ],
280
+ "calibration_subset_gain": 0.43586447555571795
281
+ },
282
+ {
283
+ "name": "compact_scales_refine4",
284
+ "mse": 0.9462693016976118,
285
+ "ab_mae": 0.6352904969826341,
286
+ "json_string_bytes": 4942026,
287
+ "upgrade": [
288
+ "encoder.10.block.2.0.weight",
289
+ 2,
290
+ 256
291
+ ],
292
+ "calibration_subset_gain": 0.21737225074321032
293
+ },
294
+ {
295
+ "name": "compact_scales_refine5",
296
+ "mse": 0.9175981525331736,
297
+ "ab_mae": 0.6283372240141034,
298
+ "json_string_bytes": 4943226,
299
+ "upgrade": [
300
+ "encoder.7.block.0.0.weight",
301
+ 1,
302
+ 32
303
+ ],
304
+ "calibration_subset_gain": 0.12710145954042673
305
+ },
306
+ {
307
+ "name": "compact_scales_refine6",
308
+ "mse": 0.9215640546754003,
309
+ "ab_mae": 0.6188815664499998,
310
+ "json_string_bytes": 4944883,
311
+ "upgrade": [
312
+ "encoder.9.block.1.0.weight",
313
+ 2,
314
+ 256
315
+ ],
316
+ "calibration_subset_gain": 0.08233188092708588
317
+ },
318
+ {
319
+ "name": "compact_scales_refine7",
320
+ "mse": 0.8778455322608352,
321
+ "ab_mae": 0.6111623970791698,
322
+ "json_string_bytes": 4948564,
323
+ "upgrade": [
324
+ "encoder.5.block.2.fc1.weight",
325
+ 2,
326
+ 256
327
+ ],
328
+ "calibration_subset_gain": 0.040941715240478516
329
+ },
330
+ {
331
+ "name": "compact_scales_refine8",
332
+ "mse": 0.8620080910623074,
333
+ "ab_mae": 0.6051067784428596,
334
+ "json_string_bytes": 4949484,
335
+ "upgrade": [
336
+ "encoder.9.block.0.0.weight",
337
+ 1,
338
+ 32
339
+ ],
340
+ "calibration_subset_gain": 0.02464677393436432
341
+ }
342
+ ],
343
+ "initial_search_seconds": 43.03861778800001,
344
+ "selection_note": "All precision selection used 16 calibration inputs (8-image subset for sensitivity ranking); final candidate chosen by mean squared ab error on all 16. Holdout was opened only after final selection."
345
+ }
quantized/base93-v3/config.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "architecture": "SemanticColorizer",
3
+ "head": "palette",
4
+ "width": 128,
5
+ "queries": 16,
6
+ "format_version": 1
7
+ }
quantized/base93-v3/decode_base93.js ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* B93Q1 reference decoder. Node and browser compatible; no ML runtime needed. */
2
+ const ALPHABET = Array.from({length:95},(_,i)=>String.fromCharCode(i+32)).filter(c=>c.charCodeAt(0)!==34&&c.charCodeAt(0)!==92).join('');
3
+ function digit(c) {
4
+ const i=ALPHABET.indexOf(c);
5
+ if(i<0)throw new Error('Invalid Base93 digit');
6
+ return i;
7
+ }
8
+ function uintAt(s,p,n) {
9
+ let x=0;
10
+ for(let i=0;i<n;i++)x=x*93+digit(s[p+i]);
11
+ return x;
12
+ }
13
+ const floatBytes=new DataView(new ArrayBuffer(4));
14
+ function floatAt(s,p) {
15
+ const bits=uintAt(s,p,5);
16
+ if(bits>4294967295)throw new Error('Invalid float bits');
17
+ floatBytes.setUint32(0,bits,false);
18
+ const value=floatBytes.getFloat32(0,false);
19
+ if(!Number.isFinite(value))throw new Error('Invalid float');
20
+ return value;
21
+ }
22
+ function decodeBase93(text) {
23
+ const f=text.split('\\');
24
+ if(f[0]!=='B93Q1'||f[1]!==ALPHABET||f[f.length-1]!=='')throw new Error('Invalid header');
25
+ const config=JSON.parse(f[2]),provenance=JSON.parse(f[3]),n=Number(f[4]),tensors={};
26
+ if(f.length!==6+7*n)throw new Error('Invalid record count');
27
+ for(let t=0;t<n;t++) {
28
+ const [name,shapeText,kind,precision,groupText,scaleText,payload]=f.slice(5+7*t,12+7*t);
29
+ if(Object.hasOwn(tensors,name))throw new Error('Duplicate tensor');
30
+ const shape=shapeText===''?[]:shapeText.split(',').map(Number);
31
+ const count=shape.reduce((a,b)=>a*b,1),d=Number(precision),g=Number(groupText);
32
+ let values;
33
+ if(kind==='q') {
34
+ if(![1,2].includes(d)||g<1||payload.length!==count*d)throw new Error('Invalid quantized tensor');
35
+ const width=shape.length>=2?shape.slice(1).reduce((a,b)=>a*b,1):count;
36
+ const groups=Math.ceil(width/g),rows=count/width;
37
+ if(scaleText.length!==rows*groups*5)throw new Error('Invalid scales');
38
+ const scales=Float32Array.from({length:rows*groups},(_,i)=>floatAt(scaleText,5*i));
39
+ values=new Float32Array(count);
40
+ const center=(93**d-1)/2;
41
+ for(let i=0;i<count;i++) {
42
+ const row=Math.floor(i/width),column=i%width;
43
+ const si=row*groups+Math.floor(column/g);
44
+ values[i]=(uintAt(payload,i*d,d)-center)*scales[si];
45
+ }
46
+ } else if(kind==='f') {
47
+ if(payload.length!==count*5)throw new Error('Invalid float tensor');
48
+ values=Float32Array.from({length:count},(_,i)=>floatAt(payload,5*i));
49
+ } else if(kind==='i') {
50
+ values=payload.split(',').map(BigInt);
51
+ if(values.length!==count)throw new Error('Invalid integer tensor');
52
+ } else throw new Error('Invalid tensor kind');
53
+ tensors[name]={shape,kind,values};
54
+ }
55
+ return {config,provenance,tensors};
56
+ }
57
+ if(typeof module!=='undefined')module.exports={ALPHABET,decodeBase93};
quantized/base93-v3/decoded_tensor_hashes.json ADDED
@@ -0,0 +1,378 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "queries": "8b3c544aebe22e525efd595f3658c50be9875d7cc0bba352b53499e507f939f3",
3
+ "rgb_mean": "d32aed199a5cd169c15313d055578913bc0b45eeffb1222dc36d113312762357",
4
+ "rgb_std": "6c289cec73b3e488e198b9c8e236edbbd1c22e7fce3e189dcb12b1ed87903a21",
5
+ "encoder.0.0.weight": "1c17881b452a641c04c9c2cd3fe2d2c2ede0988bd04151ef944ddbf018c3c119",
6
+ "encoder.0.1.weight": "a17ac726191cd0d2814fb21a6b1c43f195067c166dbc2b0965a23dea4a7fcdc9",
7
+ "encoder.0.1.bias": "e79f80706ed2362d19344c5e729e9adf767c77dd310e59f120305299939020a4",
8
+ "encoder.0.1.running_mean": "8f1b7aa591611866d13857968a5d6082f58bcda0dc179136c13b399dfaa0edd6",
9
+ "encoder.0.1.running_var": "31564e22a7defc8574e9cb0dc414d8c05340b0cfc177b2b0bf1f9a2145862683",
10
+ "encoder.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
11
+ "encoder.1.block.0.0.weight": "14b699aab013a35925c4ada814fdb30bb4ecb6b1461b9a7db60bb0974b0ea2dc",
12
+ "encoder.1.block.0.1.weight": "b49dc8a569ad886eaeb1cbae59fa8094e3697312a4275a26eae4c8492a6f9f1f",
13
+ "encoder.1.block.0.1.bias": "9983c9655a4f7748a840c74304e293f33ee399f289a2d4700a8d539fbba21435",
14
+ "encoder.1.block.0.1.running_mean": "93e9926605d53e343f6c63f924d5822c72ada2f87ad05555c071794ff960096f",
15
+ "encoder.1.block.0.1.running_var": "414d37d03947315a0f5956641e8b63b7a704d9267f2400ad846c16a9ba844c4e",
16
+ "encoder.1.block.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
17
+ "encoder.1.block.1.0.weight": "4e8afb7584b5c44b0193ddb6bc06fbb1791f4ff5ec6a8d16845e81e7715d436c",
18
+ "encoder.1.block.1.1.weight": "bbdff9a1e4f79dffff039cbb5bb05cbe1246d22314df8bc56fb4790bb7cbcf1f",
19
+ "encoder.1.block.1.1.bias": "6dfcf7ff97bb5495595525fac141616c80defd7a632a1c49e62bbd8335216d29",
20
+ "encoder.1.block.1.1.running_mean": "b327dc2f663b80b0518ae175e4c5ab5be229d62b10f91abf76a248eadefcd113",
21
+ "encoder.1.block.1.1.running_var": "0def88d83697a84e33f508f2f2dc11a27ae49fd09a367d5e807e9a06623c66e9",
22
+ "encoder.1.block.1.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
23
+ "encoder.2.block.0.0.weight": "00d5b67da7ec75b9e4029cb372b2c11d92b3997381b3bd68a301506dea7601f3",
24
+ "encoder.2.block.0.1.weight": "a929f61697fbeacc03247a57c83514fdce881d51014e55b51df364a8f6d162af",
25
+ "encoder.2.block.0.1.bias": "bf3330436bf0d62528d986ebfe776ca531e2dc0740955f9b0cab98533901d943",
26
+ "encoder.2.block.0.1.running_mean": "966287ed079b3b31badddc0e70e6ee0e9be841d7869a5096ac94ff2a8285870a",
27
+ "encoder.2.block.0.1.running_var": "f85d5a84a6cf03938579b02c97812b5c69c110e829dd979f4f80bd65e9dac953",
28
+ "encoder.2.block.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
29
+ "encoder.2.block.1.0.weight": "b5f2eef38dd7f49ce624b38a5e61c3c235902496c345acf753e8ee7bed66322e",
30
+ "encoder.2.block.1.1.weight": "cd88912e7317938cd86aeb937e0af86fa0c1343bc9a3e6ee3a9deae2159e4ca3",
31
+ "encoder.2.block.1.1.bias": "75da0df486c7a2f49f7da124d389720d1e44139f995098cffd5bdd5b39e0bace",
32
+ "encoder.2.block.1.1.running_mean": "adcf7eb89212bb0f4bec6e5994c50a6b610e084228fb8eeb24cd802a48f93ac1",
33
+ "encoder.2.block.1.1.running_var": "b0a8e744ce8578197ab20ebabdcb946afca8d7aade166e707a75de32061226c0",
34
+ "encoder.2.block.1.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
35
+ "encoder.2.block.2.0.weight": "d786b637dd9f796416d75d40bf2388b42f2c78e4913eea1e79eff43fa0aca79b",
36
+ "encoder.2.block.2.1.weight": "ffcdc83fd2afc39c8bc92d7e84c81c1a7f3e86603bb6783e8f23f33a830cb545",
37
+ "encoder.2.block.2.1.bias": "94496d4767c27e5220e8c751711dd2de5773364f24b6b95c4c7fd05764325e77",
38
+ "encoder.2.block.2.1.running_mean": "3a21468d93f73fd3cc49af38dcedaa022c506e976bbeea4cfc82288d2ff2abfa",
39
+ "encoder.2.block.2.1.running_var": "932c3cf2f66ff0db4ff9e31aa354c12faf94cee8b5f6ca53592c944fa0ace6f5",
40
+ "encoder.2.block.2.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
41
+ "encoder.3.block.0.0.weight": "9493ccaf88ef5b9715e22bd6ad43fd1aef1d241b9275d694f5005225f857f5de",
42
+ "encoder.3.block.0.1.weight": "dcaab764d380893c8449f587f4670d8e282fa09faade6b111bc7dedb4ce45610",
43
+ "encoder.3.block.0.1.bias": "f99508fdbc1f0b1b15b9e51a4c1cc815784e43ffe4d9d86dea3be628e56b3d60",
44
+ "encoder.3.block.0.1.running_mean": "aebaf66384fba9ef6d22813a3b03f69251f48a7c8aafc77eda5740e73955529b",
45
+ "encoder.3.block.0.1.running_var": "2c901ce34c523fe8a0a85ef896ff7dff49733a8acf88de0d583a30bd613e9324",
46
+ "encoder.3.block.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
47
+ "encoder.3.block.1.0.weight": "e8d9819046019d2eb3476af8d9dd3702a38395f9fb653b23e4bea1ba58608d65",
48
+ "encoder.3.block.1.1.weight": "f24c75c91e6e22b9316c1d58cd0d8a803f2e69dfd28bb7c1650b1faf5e8a62ce",
49
+ "encoder.3.block.1.1.bias": "a49bad9a8284e340e2b1befb2db36d3537fa5db26e4626bedbbd86608bb86946",
50
+ "encoder.3.block.1.1.running_mean": "c176be39e8479356e5e03a7635d5c0ebc92ff6535de87608e6f4315d6a50d82d",
51
+ "encoder.3.block.1.1.running_var": "6eebda27fdc5a3bde9f56e6aef121f6cac4d6fe87def941ba03a73459d926c91",
52
+ "encoder.3.block.1.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
53
+ "encoder.3.block.2.0.weight": "8cca058df06f1041325cb17da8b821268a2636f5eceec4eb87832a89e5050572",
54
+ "encoder.3.block.2.1.weight": "25705da5fd75fca74e832d45fe0c710708cccaf63a8165e69292878fad8dbfbc",
55
+ "encoder.3.block.2.1.bias": "924f4141ef30f7f0904c0baa54058e5536c2f53e96138c610f8c4124dcebadf9",
56
+ "encoder.3.block.2.1.running_mean": "ef9abc48a79c5a39dc9f306d51233410f093a344c25247d650f69ff874c075a0",
57
+ "encoder.3.block.2.1.running_var": "d082c1842d61aec7b1f29f5d3cc23e7536afcf07a8facbafd88b7df309bc7b12",
58
+ "encoder.3.block.2.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
59
+ "encoder.4.block.0.0.weight": "6e6bae6136b72336552d9c44fb54d3adc677f89d13aa56206f3afe03642743e5",
60
+ "encoder.4.block.0.1.weight": "4f69562e455b1955c862834c91df37c592afbdc7a63965919ef4dfb38d25c81e",
61
+ "encoder.4.block.0.1.bias": "244a3c1e283ef2719b76e61531be8a2b359c2dbc4f38c8cc25173848d6b1fcad",
62
+ "encoder.4.block.0.1.running_mean": "abded01cd0e1d23d5df7d632f8445bd6d494fbb7f8f9f9e3d79e25942bfe7f34",
63
+ "encoder.4.block.0.1.running_var": "052a8f354d6c8404336ff2015c95bb46ce2b873a6aa9c5765e299e7b05b77a39",
64
+ "encoder.4.block.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
65
+ "encoder.4.block.1.0.weight": "2f3a70c7efa9158bcbbaf64b7f4fd61d43ae6885ed8213016556f0444f2630c4",
66
+ "encoder.4.block.1.1.weight": "e1dd612b70b9e4d191588cfd8d4b2e33858d0e9701ff544c929024f50dd600bd",
67
+ "encoder.4.block.1.1.bias": "5dcbbda025d8f61ae24573a68bc6379504ca6e2a7531f93ec13ce0affa009921",
68
+ "encoder.4.block.1.1.running_mean": "cf60954f714d1613090aa47be56097018702c9c3081f8d2fe7adb8b8afb717ed",
69
+ "encoder.4.block.1.1.running_var": "e8e4d4678fa3186a78bfd3442890ec03cec6325b0726a27fc41ca383cf33e066",
70
+ "encoder.4.block.1.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
71
+ "encoder.4.block.2.fc1.weight": "24e9a32324bb3669f300657d6a0fc82ef148435fc7d091de8b2bb340f25d1793",
72
+ "encoder.4.block.2.fc1.bias": "2d2e94950ca96c0695123234d35628ae3a88ee1d9f29050fc6aafde7892ac021",
73
+ "encoder.4.block.2.fc2.weight": "e3ef560c214179d87756732fae3b923250a291e7091e06d51b7a8614f5559009",
74
+ "encoder.4.block.2.fc2.bias": "de919c532cfb18af239acd3900dafc020ff51534886c6450bd697c0d21ddae5e",
75
+ "encoder.4.block.3.0.weight": "483b4c22de38148bd1c277e7703fdc4b2dc397216bc9a1806e28abcafe880d6f",
76
+ "encoder.4.block.3.1.weight": "2937c7a9ea4a7db11e49dd9357d04a1a5813bde44952cdb64be38405d28ff0af",
77
+ "encoder.4.block.3.1.bias": "3fb46164f571c81a0c9291f8ed6a30f428007840506ca18d6c8a949a477985a0",
78
+ "encoder.4.block.3.1.running_mean": "6dad5bf5cd96ae62ade166b9a9fd54182e48acd92f1996a853da1a5cccabc962",
79
+ "encoder.4.block.3.1.running_var": "157bfeb04ea5ee50112af2d10a4cc8af711b66df1baa1ea92f5d810b8737881a",
80
+ "encoder.4.block.3.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
81
+ "encoder.5.block.0.0.weight": "57241539acd91f0b2e5f9625f9a8398e9ac7bf7ad66e4eb264a61270c49a13af",
82
+ "encoder.5.block.0.1.weight": "b74845852195022efd18973a1d7b041964cddacfb01b3dcebfe50434931730b0",
83
+ "encoder.5.block.0.1.bias": "6cec0885d81a44a5608b4636f42e6f4024c5abfb6dac40d7ec5ba7bacaedc807",
84
+ "encoder.5.block.0.1.running_mean": "ba1f2db8eadecf82c2f57a66910c08792ff02c8dd90cb078b3c4baf5b4b23f2b",
85
+ "encoder.5.block.0.1.running_var": "8e42738ffb057ae34e977b3c951740c2c92dd4d064e0d5ae8e5f8833af1b04f2",
86
+ "encoder.5.block.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
87
+ "encoder.5.block.1.0.weight": "8b175cd80925f84e0df1198ef657add6a811a4b75cd21056d6e5325171943e44",
88
+ "encoder.5.block.1.1.weight": "6e2aa0209e73f949e4f9967a520a1adf8163c385384cb934dd04ce1df3430299",
89
+ "encoder.5.block.1.1.bias": "8cb9e1eda9ed6dfd036211e34a133ca9a28bbc215c1c84fbff76acca3c7ab47c",
90
+ "encoder.5.block.1.1.running_mean": "50aff505222c350c40bf46733d254eceecabd6771f9772b070735a7a30744388",
91
+ "encoder.5.block.1.1.running_var": "48ae93cd4661ea13e9ec108e2010c41d1f2b121f0c220d560f6a7c30bb96f610",
92
+ "encoder.5.block.1.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
93
+ "encoder.5.block.2.fc1.weight": "990f45f483f58f67eabdeae4f78136c85f575750e2c8e548bd3b9d435c43e611",
94
+ "encoder.5.block.2.fc1.bias": "b576552853ad7ced4f122026acd1f9f637b6d64c8e436934a2eac12e0171c36c",
95
+ "encoder.5.block.2.fc2.weight": "0d17793d1a5c5ff73d2c67ec6a965f403fa370cf8721c618c63bc10183e28bda",
96
+ "encoder.5.block.2.fc2.bias": "92ab3637bb5ddb032605e18261450f0c93166da3059ad978d1f8d395c1b22b6f",
97
+ "encoder.5.block.3.0.weight": "f1f76f56fb46ae2d523ce2c5931e535f0616fd1a38168f65dd281f03636ec32c",
98
+ "encoder.5.block.3.1.weight": "403544dcec48321f0292b87769b52dbb16cbdfab7a681a17c376b2374a3f7e35",
99
+ "encoder.5.block.3.1.bias": "9f036bca4544e93bc4861d38aedb357c2f6eba988757abc82fd057a094b9125b",
100
+ "encoder.5.block.3.1.running_mean": "6454adc5a45ebf82d2e14d5d7c3de1e0f145c21e1b0b3ce4a1426067bfcd6725",
101
+ "encoder.5.block.3.1.running_var": "889a0f38b6dad4611edb7dbabbf40347d8342e1d0b79352e18fb855643b7d317",
102
+ "encoder.5.block.3.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
103
+ "encoder.6.block.0.0.weight": "e18ed8f2df424cc898c34d85723bb23e4a4f11c124af73c7adc5f55103f4d51e",
104
+ "encoder.6.block.0.1.weight": "d50d74c7950821daa1e211d947e979d334ced3a3e11ebbc3998fe73894d2f545",
105
+ "encoder.6.block.0.1.bias": "326dc678fe8c192293a5f3869c50dadccf669dab9abf86f5396ec256425cd0e9",
106
+ "encoder.6.block.0.1.running_mean": "7442f17be20034692d631df0f6765765964d0a53b2ff61c3f0c71ef9858e7d41",
107
+ "encoder.6.block.0.1.running_var": "d8cc7365305ef4b12f21e35727a18bf50b68ee3dfdfd3abea81c569051d17379",
108
+ "encoder.6.block.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
109
+ "encoder.6.block.1.0.weight": "10052c917b2353420cf34dcd9b83ddcbc3330cd9b7351308dedb1202775e8405",
110
+ "encoder.6.block.1.1.weight": "e047d5372789de86dce9a2092b8e3a6e4154e6f419fd9cb934294a8502c61bd9",
111
+ "encoder.6.block.1.1.bias": "361c2da7a54b8283f7d00552bfe5736cadee05be152add644567eadf39237c04",
112
+ "encoder.6.block.1.1.running_mean": "7af1cc0d32caac186a3b237b7576e3a2e12d811e5fa68385ea6b9742b77a89f1",
113
+ "encoder.6.block.1.1.running_var": "5ad39e3ceea5e9a7aae8c96e30f0158ff28fe56cec0570eb9fe8de58099bf085",
114
+ "encoder.6.block.1.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
115
+ "encoder.6.block.2.fc1.weight": "8b07bd6a22849b0e9b25ca2b7f169362d09a81799380db0d2e99d580f7652fed",
116
+ "encoder.6.block.2.fc1.bias": "b0f3aaeec01c331e92f6df4d2303084b01b24afdd729f5d159a55faf44cc49cc",
117
+ "encoder.6.block.2.fc2.weight": "c6769839b907c59cfe0e4911427f93d1051e675ff119650cc4e7faeb16475b06",
118
+ "encoder.6.block.2.fc2.bias": "b6831de3c45891d3182abc0cd17fe03575f8c2fa52b12bf774684edb380c4ee0",
119
+ "encoder.6.block.3.0.weight": "9fa9b1a4c7e620a99c261d1bb9ea2a44dacbc7293643f6d730e82bb9cb634124",
120
+ "encoder.6.block.3.1.weight": "de9cffcb3bb83f05b038a3a0aa55a89682363e09ab1ac397e168e1fc1a5e9fa2",
121
+ "encoder.6.block.3.1.bias": "1b030ad92f1c7707213f261066b5a75ea5973d46cbe6024cec85ace6f97fc7d7",
122
+ "encoder.6.block.3.1.running_mean": "ef906740b1d04359775ce90a44cce93a5f4686d086396eeb8a9728acaa648cee",
123
+ "encoder.6.block.3.1.running_var": "50c244f99b05ae1c1c355ea0b47ece92fca1c58b51afd292fdccc01d08722570",
124
+ "encoder.6.block.3.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
125
+ "encoder.7.block.0.0.weight": "781a4589bc8b7d019834e6d7612603f4d7eef2d27861d393c93c13812336fd4e",
126
+ "encoder.7.block.0.1.weight": "c558e38c670f90e852cffe1268cff5292bc092f5a8dd467d2570e6c0df7f4b56",
127
+ "encoder.7.block.0.1.bias": "6e79dcf1afd8c1a62624967690ca89b59164cab420cbf86a592effac4ff1e228",
128
+ "encoder.7.block.0.1.running_mean": "7b185728e27fedbd12a90c25a454fd08adc526bce546c3ce1b31d36cf45e65a8",
129
+ "encoder.7.block.0.1.running_var": "2575b52894dbb5221fe0a610d77b8f00a8ed4fa5914a3629a7e8aed3d8453d11",
130
+ "encoder.7.block.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
131
+ "encoder.7.block.1.0.weight": "07319b812428532733ae808c5f0b3c319d34f4dab0ecc39291d5e85705e53e39",
132
+ "encoder.7.block.1.1.weight": "02d9794ec75e53df6c43ff511fe1167e0bfd883649274de884b82b6e4860c9d3",
133
+ "encoder.7.block.1.1.bias": "56bddd6980ac8da1f12a9843815fb3e311cfd917f2dff8969ffea26d1fd08e4a",
134
+ "encoder.7.block.1.1.running_mean": "029f104300d521cd5aca4ae224cfe07a63216d98c819619e6a36c0b978f8241f",
135
+ "encoder.7.block.1.1.running_var": "e741d77c30d620843d6eb54d7987ef1eede5926485234037eb8fae2c209441c5",
136
+ "encoder.7.block.1.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
137
+ "encoder.7.block.2.0.weight": "0b9e6f6646836ecfb6ef46b88baaddc67dae2a493aa39ea467c5753bb148732e",
138
+ "encoder.7.block.2.1.weight": "b47cebaf594da5d2f89228aedf556594b5321375b3a4653bc980aaf92d2f9e00",
139
+ "encoder.7.block.2.1.bias": "c44e7cc2af5de75d9d7fc5d98ad1c59860c7c9139327138bf0ec0fa626c1fd07",
140
+ "encoder.7.block.2.1.running_mean": "3dbe931d2313fb600faef9552c78a6062e312acbcc3c079378ba4cfe8ee203aa",
141
+ "encoder.7.block.2.1.running_var": "055bf886665ad72cba5476decf64456e969e304588574ce4e6c2acd9e7aa7b43",
142
+ "encoder.7.block.2.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
143
+ "encoder.8.block.0.0.weight": "8872eb0251f001427c19ee82dd90c296311ad17e77a42c39639cc277836ea298",
144
+ "encoder.8.block.0.1.weight": "5bb910b72ea9e278897b688db782a6e9b2209561cd5fbc52bfafc50c222bfa34",
145
+ "encoder.8.block.0.1.bias": "d9755f01c6a0946316db23154297934fac341606347441198a6496af2228d4d4",
146
+ "encoder.8.block.0.1.running_mean": "7f393f86c7a5740216d8ac07dd2e375675dc9a63985fae09919a7c1f3c1150b0",
147
+ "encoder.8.block.0.1.running_var": "a5c787f61933258e31e6751056e28199509af2c46fc411eaa1ec4231ba069b04",
148
+ "encoder.8.block.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
149
+ "encoder.8.block.1.0.weight": "399093323cd9a8b8e2187d9259ce82666a1b1422828ca790b17f0ada1c08c635",
150
+ "encoder.8.block.1.1.weight": "e3113d201c00f18032f4b1265544bece71bab738da4a4f7b27483cce21d65353",
151
+ "encoder.8.block.1.1.bias": "69d0047dc4b27c03cabfbca7f93fc69201b3a4a858e2977aee594104217be886",
152
+ "encoder.8.block.1.1.running_mean": "ac270769bccf9e40116d9ce505d3ce5cff92be9bb597114120a7892f8078c90f",
153
+ "encoder.8.block.1.1.running_var": "7f46e75c3e37c22e33a1870edda6448c8cbfaecb4a0d22b96dcb1d7cf833ab1e",
154
+ "encoder.8.block.1.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
155
+ "encoder.8.block.2.0.weight": "fbeb621e2eb81f1b4dac32ec38cdee42c469a8af7e26df9e1b3d9fd5b0031fcc",
156
+ "encoder.8.block.2.1.weight": "ace64423e076704846bd591bf105bf543f689e179a931420d7dd74ff9434779f",
157
+ "encoder.8.block.2.1.bias": "d8ea49bed353893dc51801f98b55ef03147870c45f70927d9071bc50fa8dc236",
158
+ "encoder.8.block.2.1.running_mean": "14ab9fe0fa253fc4c4b8c65be4b8d0c8d029f45b72310e6863c082dd4d5b5080",
159
+ "encoder.8.block.2.1.running_var": "22c18a8832f5d8afa03807349aac7db5022f578487eceba172d2494db71d0666",
160
+ "encoder.8.block.2.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
161
+ "encoder.9.block.0.0.weight": "eb9045b2c42ecc16969f65f393169d8b8981996b60beb058a8a1fdd86ef61de2",
162
+ "encoder.9.block.0.1.weight": "14730ec05a80274d29e13529a64a5bb1a51742fe9d7228474399f0f79a7df25d",
163
+ "encoder.9.block.0.1.bias": "8882fd57198d78590012fcdb5d0db73c924204afee14977860278a7cd6866227",
164
+ "encoder.9.block.0.1.running_mean": "eae83b62d84ccdcffa1a8e21d8996bb4a27cdc5e0bd16023a520e6a58fba0b09",
165
+ "encoder.9.block.0.1.running_var": "6d09aed08db0df083d3aedb0d27635089cce7e496a084c65047e92b3f758ad5b",
166
+ "encoder.9.block.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
167
+ "encoder.9.block.1.0.weight": "ac2034ef5f672a6ba86afd0a051940e567352751d4d4db40230e9bba6d211b0e",
168
+ "encoder.9.block.1.1.weight": "7d82ede33b54da4faac444f3dd37c4055633108fd5f34c67d8eee2daefc67f55",
169
+ "encoder.9.block.1.1.bias": "61ef248a1a0e42703a77d5e7b92d0eb12a05bdc1a0f92856c36b73015ab46c94",
170
+ "encoder.9.block.1.1.running_mean": "8a41c2f473b759109c850b0464a036ad513b39f7e0a613132427e5a44e322460",
171
+ "encoder.9.block.1.1.running_var": "0112f82130798c47f69759214839632baee85002908fdfa54ec2bcb3b3a4fde3",
172
+ "encoder.9.block.1.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
173
+ "encoder.9.block.2.0.weight": "b5907db1dcd69f601672d5fafb6c64557afcd0da9cafb949ae9ac5c31771733f",
174
+ "encoder.9.block.2.1.weight": "a99d5aa855527960de51d4820c047a2b929f48fc52729cf57c98917e9bcaa0b2",
175
+ "encoder.9.block.2.1.bias": "ad4284eb79a8bd63d31683af4e822dfc47c2d54d77813ab0ae6903565addba52",
176
+ "encoder.9.block.2.1.running_mean": "759af6649e7a02a1224793d6aedf140c0aeb512a656b247acebca2fe73fb91ce",
177
+ "encoder.9.block.2.1.running_var": "d9238de6a871be95c21def383933cf658dec05b3d69a7898734432d88d52c5fb",
178
+ "encoder.9.block.2.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
179
+ "encoder.10.block.0.0.weight": "75334adf78f83621147aa7e1c40442cf107f8670c11bc7d6e72c0111b6d7be8f",
180
+ "encoder.10.block.0.1.weight": "1f08cec259a4437cf18997af319ac4318deed40346a26edb8a44e24c1837d58f",
181
+ "encoder.10.block.0.1.bias": "53d0d722ae1fd797aec24c79799b7713af544bbf607348642d7416283f5902df",
182
+ "encoder.10.block.0.1.running_mean": "fc9f2025ac9c70e32e84be47b19797101df82f6dc363bd170063166cc688ffe4",
183
+ "encoder.10.block.0.1.running_var": "65c995d263f7edfe0a78ae4a092feaded4c155d3e2b9013b5f7e39cf90d5f3ee",
184
+ "encoder.10.block.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
185
+ "encoder.10.block.1.0.weight": "7a49052636bf00aabf3193ffd3d71abe49167118bb95ac8dcecdb1a7e7af4a47",
186
+ "encoder.10.block.1.1.weight": "114abb96b04eb13e377c84367d04f557d4eab3c600d210dd366e2e4b9cf78aa9",
187
+ "encoder.10.block.1.1.bias": "eb8acc497710b071dc4e8b8f3c7b7034dd996db53b7abd6a6ed128602e548ab1",
188
+ "encoder.10.block.1.1.running_mean": "d9bd223cc3f56370682e028596ace1b8577a5cc6eb325a54d3bdf4b64aaffcf7",
189
+ "encoder.10.block.1.1.running_var": "0ea82c6f226e9be4f62fe1bb9bd502ece0e6578264499926d760cefdaabad4ba",
190
+ "encoder.10.block.1.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
191
+ "encoder.10.block.2.0.weight": "0b77836101ea9c0cf696ea32aadf286b63d89bfe8539237b3d5a31da4fb9dc16",
192
+ "encoder.10.block.2.1.weight": "18960d72c4edc86526029e160ff01a600fef6e71ac00f26099fc083692909e2b",
193
+ "encoder.10.block.2.1.bias": "c4c7edb4aad98836a1b49ccacc54c171212530b2c3ce5f2f9aa9b19b02d7daa0",
194
+ "encoder.10.block.2.1.running_mean": "40fd09653aee8c3e37f2cbd57feb41fbddb4536307fe8f6989f73b53f9aa8011",
195
+ "encoder.10.block.2.1.running_var": "5a734d2eaad0830b20c727657579db4e5bcae6a3bad2558516844c9b7459d72d",
196
+ "encoder.10.block.2.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
197
+ "encoder.11.block.0.0.weight": "5236ac5f75ff7f9152ae8c2e7760293ed314664e76cdf925511b7b3c99d09d68",
198
+ "encoder.11.block.0.1.weight": "750175faa899f8ea04581778b60fcfa2aaf53a2b8f6203ccb8e6685d9a094970",
199
+ "encoder.11.block.0.1.bias": "7c7a5a99873abc8f375df066a83204f9e9b9d86e71a465fa1bed77554e23400c",
200
+ "encoder.11.block.0.1.running_mean": "50b1e71e1de76100e9209a243c12e61767809dca6348fdef210a90b2fd6376ac",
201
+ "encoder.11.block.0.1.running_var": "162c7b1220357c3e5606a91b4000c3a03378d8ea6c3cd51c283d9ca85dd38310",
202
+ "encoder.11.block.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
203
+ "encoder.11.block.1.0.weight": "2eddc2aba3cf286e6b6bec09333202de7ba87e244747e4ef769460bfae2f3a2b",
204
+ "encoder.11.block.1.1.weight": "ea228ee097f9118da93b5475a0eef27245a6e80d0eb9a91f9ab66183e497423a",
205
+ "encoder.11.block.1.1.bias": "7a135c565ef878dad28997b741d64e9b499b5ee60acedf2568834e4cca6b0aac",
206
+ "encoder.11.block.1.1.running_mean": "63ac06ee6a596a48edfe2fc03317db0865e3047128c009f7349d0b553a59948d",
207
+ "encoder.11.block.1.1.running_var": "de30923d133a0790cd021e055be02c0bc1b82bf63c4e1398e7e90943f259e4c3",
208
+ "encoder.11.block.1.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
209
+ "encoder.11.block.2.fc1.weight": "c185914a07b09a73ee8b04219d27b0f91a3dd884a6ace3c3722fb5e9933bad49",
210
+ "encoder.11.block.2.fc1.bias": "2e734ea46e3f65961e01338c19d1a6177aa8270305018f5a0e7328e54514eacc",
211
+ "encoder.11.block.2.fc2.weight": "e60c99aa269a82cba2d46a0571d31a0841e6c4cc628db929f65c3701ad712f16",
212
+ "encoder.11.block.2.fc2.bias": "4442084aa73320f3e2a762d7bc2fa90602bbe86831f5b608542969113870a53f",
213
+ "encoder.11.block.3.0.weight": "0794a434ada438046086189b88b5e52c4df084cd18b10b47136552674a77ef55",
214
+ "encoder.11.block.3.1.weight": "55ef60e2df5a5f3b4b452941d6811b14b2d728f07419eab3320701a7b4d084a0",
215
+ "encoder.11.block.3.1.bias": "ac0bd745e57d15c532abc4f8499de71f02e15ffe500d001397b76a0a105a3b8a",
216
+ "encoder.11.block.3.1.running_mean": "b951b436aaa1b0f0e1134f0f3e9d18a4887973bf4af6e95a5b5a70cb874b3cc7",
217
+ "encoder.11.block.3.1.running_var": "1261e6299d7e2d9889878394ae3f299c940406910f41b8f87542a07297b206f2",
218
+ "encoder.11.block.3.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
219
+ "encoder.12.block.0.0.weight": "6226db61d2cf9d8689e2934fda9d26b7f54e2e4288189eb3ea13fa88f6244b62",
220
+ "encoder.12.block.0.1.weight": "d9d79b7aa59f51d471c9d12f053cae9e9b8cf85cd27b635e5097887d79b539ee",
221
+ "encoder.12.block.0.1.bias": "abf5872ecedd02cc0ccc6a242fef38c67c829d81b59dd8e16a382571901d7f13",
222
+ "encoder.12.block.0.1.running_mean": "b7cb18afc69b1aa3b6484a9170db46eb325d3297a9ae2977a3b8925cdcc49083",
223
+ "encoder.12.block.0.1.running_var": "9cd17200dd6768ba4a295f06a8776ddd1772de13dd4b17b4c3c4be8c83754cb8",
224
+ "encoder.12.block.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
225
+ "encoder.12.block.1.0.weight": "95732938a763255bcbd4b82e7632e9a3fbee5d448e36a2bbc01739768f120e05",
226
+ "encoder.12.block.1.1.weight": "e8bfbff0eec14280c32d5ca796623712d784815299e7bfb1d2362b81126ff11e",
227
+ "encoder.12.block.1.1.bias": "be0408a49f078437ab5cb729e263e7352c8e12e300ed9f2bbd9c8410018a2e29",
228
+ "encoder.12.block.1.1.running_mean": "c3a966c8d31d720fd1cb6d378961cc300bce08b2565b793575421c42d27c7f99",
229
+ "encoder.12.block.1.1.running_var": "bda33587353b99345454b1c9795e97207804d4fd176456da4235ef94bc77cb20",
230
+ "encoder.12.block.1.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
231
+ "encoder.12.block.2.fc1.weight": "82283ad8bf30b0650c4546eea3846218ba0f6c2d7684f306d8efa2f50208728c",
232
+ "encoder.12.block.2.fc1.bias": "7b15af3b5756fc2ac3ed613130146371d62c2b739f25c2e1e655987e63348c5d",
233
+ "encoder.12.block.2.fc2.weight": "dcf746d02ae57e0b76c1eb716bb91f316f0a03b9f8cd428bc116135f1c9b7143",
234
+ "encoder.12.block.2.fc2.bias": "f8202b0261b463d6e7b368d499f33e676b7c8b3922737ffc3425c791e9b95368",
235
+ "encoder.12.block.3.0.weight": "c2d81645ecc1db6c098232f2c3869c89487e6fbf0d03883079352cf6677b3b19",
236
+ "encoder.12.block.3.1.weight": "901e3f694da16d97ab59813b7fde7affd40dbec894fca29247208ad17c27ebbb",
237
+ "encoder.12.block.3.1.bias": "4eae0cbde1b56845891076dc4490f622ed58ce5b831e114cfe5d6dc4c127c441",
238
+ "encoder.12.block.3.1.running_mean": "50ef9f3d542f1ebaa8e998832241ca2ce5c78bba87c435eac833b675c490a751",
239
+ "encoder.12.block.3.1.running_var": "6766a7dc883122487d4b9d81120da450455a70956203b75df857b4d1ecfc641a",
240
+ "encoder.12.block.3.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
241
+ "encoder.13.block.0.0.weight": "057b17a200405553cf861d9707b7f464238ea8819112684160ef1e29b43fd8a9",
242
+ "encoder.13.block.0.1.weight": "c729e82f17ca0bee428ea14ce4078fe2dc8810221dc3f3257a4f3175826b16bf",
243
+ "encoder.13.block.0.1.bias": "0efe040dc1739b32a7db5c7bbed6abbf964abbda5f7cc079048bf2682384ec8e",
244
+ "encoder.13.block.0.1.running_mean": "a930e62e65f7578e9015f9c1e4881268ed97e127ff0a1f1784354773e1b6de50",
245
+ "encoder.13.block.0.1.running_var": "2a44ffd118cc47f14c5094a212a1674fdbb25e11bec7f8445517e8c1163889ef",
246
+ "encoder.13.block.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
247
+ "encoder.13.block.1.0.weight": "710a7938f0eb8fd030b2e7f0944972ff4e96226c98de222303780597db0daf3b",
248
+ "encoder.13.block.1.1.weight": "2ec89f19df88fcbe171f35089becdfe2f5054960a524a4b52c8a2ba882bfe893",
249
+ "encoder.13.block.1.1.bias": "8480d3f281e626c3b0b92c62e528428909b3d07c0f269ce5a0b15325c64c6911",
250
+ "encoder.13.block.1.1.running_mean": "4064d9f4296734cb436bd2ad56744e191a5d68d2ce04eb28797c158783b0b76c",
251
+ "encoder.13.block.1.1.running_var": "41cb95460a8111bfb3646b709bf7cce1f1d9a983d948530714fe89f8a562cb94",
252
+ "encoder.13.block.1.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
253
+ "encoder.13.block.2.fc1.weight": "204591d0a6c9c9060ed0f04250144a52bc6a91dbb2310f456b1e9b08f4e2e7b7",
254
+ "encoder.13.block.2.fc1.bias": "7c325e82d063f1472bc57e7e8717a2ee3e375eb099094294322c273ccc09623c",
255
+ "encoder.13.block.2.fc2.weight": "eb50d9ec56eb217120688873a1afbc0ef4ee8aa81abf843b339bccaf82448791",
256
+ "encoder.13.block.2.fc2.bias": "b1e5715c234b77c6b3809d7ae0b2fa6342412ef4a5043acd618b2a34dd44ba98",
257
+ "encoder.13.block.3.0.weight": "da3d70efde2d1c92f01abe9cdb247ae68bf85ddde85731cb4e9eb2aef24d5b8d",
258
+ "encoder.13.block.3.1.weight": "aad066b923832b77fd181d05fcf21a13f02d5477f72dea0bbc78cd7c556cd52f",
259
+ "encoder.13.block.3.1.bias": "21ba777173b2024a55265543c7c354beb369f9b2177dd858ec4703133135741b",
260
+ "encoder.13.block.3.1.running_mean": "4ad04be30c187c14faf68741eaba40cb999182919560cc6468613287d991c03a",
261
+ "encoder.13.block.3.1.running_var": "2d3755ea8b9696bace17467463607cc7da8cbae0bfb34fbeaaa0380892e6d9eb",
262
+ "encoder.13.block.3.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
263
+ "encoder.14.block.0.0.weight": "57520c958ac88551306c9ed93fa82c68748dfa0aaff5be21f784138fbdef0d4b",
264
+ "encoder.14.block.0.1.weight": "28880980ec1f0c4c197c651abaec4bf1cddb0849274c37fff961118306c7eca1",
265
+ "encoder.14.block.0.1.bias": "21fe382e7905469c2ca58f45cbb6c0648d8170ab205b5d11a93701f32ded01b0",
266
+ "encoder.14.block.0.1.running_mean": "c78f04cc9454894d571374dcee659c2a90ecb7c87f64e33beb0359b03c364ea4",
267
+ "encoder.14.block.0.1.running_var": "d78e8d05e4c1385990c20b98f1c174e22ee78a531ade483d493676710287b001",
268
+ "encoder.14.block.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
269
+ "encoder.14.block.1.0.weight": "e7d42423fa0f7a55831e62393952cab084c12a3c067e74f5e590b6ef47adfe4b",
270
+ "encoder.14.block.1.1.weight": "58c59dd537430a623db63ed36df68d833075dcb760b6eb1bdaa091717bde2cfc",
271
+ "encoder.14.block.1.1.bias": "5030c92c3f9c3ffc6e03444f7fc84e22779701b65e00188439e0b0c66e57c5c1",
272
+ "encoder.14.block.1.1.running_mean": "f87e7313555eb8a4bb4c4d16f7a1b256ca1afb515585c71e180852c36679cecb",
273
+ "encoder.14.block.1.1.running_var": "642d713ae21d10c9824149e09ff062c952ab8ec3000256a00fb8f9895b1fed6e",
274
+ "encoder.14.block.1.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
275
+ "encoder.14.block.2.fc1.weight": "3449c6e54fd4e2f3c051771532c2413b901545b4b84ed2a36ca32f7892e95c59",
276
+ "encoder.14.block.2.fc1.bias": "7b198699cd8538cc02fc00cfa7158f952428ccaa267dca15723b17e2698047d8",
277
+ "encoder.14.block.2.fc2.weight": "1d500bbc373b0872ea89d2f7bebdc99254b200a55ced7334ec08837abd8d40f1",
278
+ "encoder.14.block.2.fc2.bias": "f55d43d5224f52223f0f60b82694c44a04e405cb9fd01473fc7c911124f16bb8",
279
+ "encoder.14.block.3.0.weight": "d0333616c990406850f88e58b627984bd6fc65920df412506263f859a56d9a09",
280
+ "encoder.14.block.3.1.weight": "ad0300dcf0fec90c52de0a94768891a3d1d331cced84d702b8af67a6874763c2",
281
+ "encoder.14.block.3.1.bias": "71fc6eb2ec7fe10058459e003a8eba014525eeb963d84972296cfd1dfc0f4a9f",
282
+ "encoder.14.block.3.1.running_mean": "33d8af33a726568f8da79c849387012115e12e9ec6a17058e49c0fc13ac022b6",
283
+ "encoder.14.block.3.1.running_var": "245698bca5349f04c95c9c85349697ef13135eec8c81722c079c56d6f0d78641",
284
+ "encoder.14.block.3.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
285
+ "encoder.15.block.0.0.weight": "df16c20eeb642eadd17d6ce65681413e64e1fcee3f70dad5aa1eea313f320c36",
286
+ "encoder.15.block.0.1.weight": "51a8af4d3ce140d9cd0a98fb22e1aa82889affd44f9b0cd9cdc2f5da27f27cda",
287
+ "encoder.15.block.0.1.bias": "f2631c520ed174e6cc85172a393e502e944bfdc6a87d9e6bd86f7de5ec0f8b45",
288
+ "encoder.15.block.0.1.running_mean": "51344999489ab5f876ee21f34a94d2c9dd976bcf2074aa72b79c177b4d5c2f9f",
289
+ "encoder.15.block.0.1.running_var": "48fdb23ffe47e58642c8e3326d934b688e9ee5c737af71e165257cbb3cadf2aa",
290
+ "encoder.15.block.0.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
291
+ "encoder.15.block.1.0.weight": "5c623a66e9d6c402ad45ca1167d3bd217b3d01f5d8b2de95dd6be5a2b4d17fdd",
292
+ "encoder.15.block.1.1.weight": "bcf1644dafe28dfa95b8e1afb6dddaf8334084d8b412089990dafc48cd95181e",
293
+ "encoder.15.block.1.1.bias": "0db40920bd99d1291916af8cc706225bce8740363697c35e9f494e903c99336f",
294
+ "encoder.15.block.1.1.running_mean": "2b854c8b4cd6ad92185543bcd85286e4812ccfe4e88652dd3890adadfff97e16",
295
+ "encoder.15.block.1.1.running_var": "8f554df22bf03bcfd64c6d8c960a6e0ef9d208b6339898fd7880a8287860f3aa",
296
+ "encoder.15.block.1.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
297
+ "encoder.15.block.2.fc1.weight": "dcda683629f01f11c6d2e7d82fa9ce282bf1955d0570fa6df5c52b3cc96267cc",
298
+ "encoder.15.block.2.fc1.bias": "cd8e77296658796c0257198dce24abf2f5ddf422cfa1502a0dc84a25ee6cb4a6",
299
+ "encoder.15.block.2.fc2.weight": "13f0c21964d47c1e091c1ccbe57197a4147023a633f8d5dfedf29f5c01344ba1",
300
+ "encoder.15.block.2.fc2.bias": "42fecc12765e576b1e796fd91b31374fe951d535a451dd636a7fc8435366003b",
301
+ "encoder.15.block.3.0.weight": "3722cc9916e7d5b1ff39e7fba675cec0c8a1b495a97ef8f72e9245335d79bf2b",
302
+ "encoder.15.block.3.1.weight": "405533a876b1af5befd4880908c7919500410c24d58598b7942545420763e82c",
303
+ "encoder.15.block.3.1.bias": "8f1f58b5c34d5f2aa4f9298cab5df5c53df39d1351e38529474ff08214fbe3f6",
304
+ "encoder.15.block.3.1.running_mean": "eefbdfdf5a80317c03e60fbe195f1bfe25d578c08687f9d1daa2b62e04d35758",
305
+ "encoder.15.block.3.1.running_var": "37b06cd41d440e59a174a3850c90ca4ad1dbdf51f5f27ef62439964ce2459ade",
306
+ "encoder.15.block.3.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
307
+ "encoder.16.0.weight": "eb113c3317a5994ffb5fa7bc429067e44431690d518f14e3350d186546c7d254",
308
+ "encoder.16.1.weight": "9670796eb7d5d67636c8a370b1b7a2a127e0b0b9cf79a8668aefd8326cde21dd",
309
+ "encoder.16.1.bias": "64261982eed2e4108e8365905e33f9e2c6b6e73a75b7030d8f895ae4001b81dd",
310
+ "encoder.16.1.running_mean": "5f2dee589617cc8fd8b68bf85ab1be02d0750a04a65e5d92b2e8c5f1216a2480",
311
+ "encoder.16.1.running_var": "3e972a7902724fc703ade497cb65aa6981eccfe51aba41be4efd43487fc04f5f",
312
+ "encoder.16.1.num_batches_tracked": "2068591d4231cd5803688fc778965320f161c9d097a8caab87b95c4faca642b2",
313
+ "lateral.0.weight": "00b665b8a44d9f267277b024cf5b8b7a8cff741015e3f25c6c73173e7461726d",
314
+ "lateral.0.bias": "983da29ee4c99518ebb78a9c4bfbd00809e70133c8a6a636378c9728b2631001",
315
+ "lateral.1.weight": "48d817ae18a0b93fde697e97b2503d008ebae29bdfc52589966e6dc3a0329266",
316
+ "lateral.1.bias": "6c7c56c4a82861ca4301dfac058456346a82ec083def384b7068baa09bcb1bd7",
317
+ "lateral.2.weight": "816a4c43662f5cad5a75e1dda590ebc8dda666538bc31553c68ceca225001c57",
318
+ "lateral.2.bias": "a05894dd3b81a71eaaa6973f80f2877b7c68ed2e72f3f17d2c445508e3e688f3",
319
+ "lateral.3.weight": "9d4c93d06c8e42eb2d517d312789ee98d6ac48802201dca6ccd0c02397a4c522",
320
+ "lateral.3.bias": "c96f1f6a8d7097db42433b4e7971a358fa4809d22d41489f297f4546cb235fbe",
321
+ "refine.0.0.weight": "eb6671a63a783c8b8b53561cc349fc3f8d9d49759db67848cf9301719f4f0446",
322
+ "refine.0.1.weight": "357865769b43521bec5345e9bd1727e3a4db8b72333ae62d37bf5413bf88017c",
323
+ "refine.0.1.bias": "7e89c5de34b46251c3e0af153c2e0addfcd0cc201ba26923e01d4fd4c7e6b581",
324
+ "refine.1.0.weight": "be7c5606bea4291ad5597949f0dcbf0763f4e8f23188d3030e86687d3287a62d",
325
+ "refine.1.1.weight": "3ed104d7873d2345e63f5a62c5d808b3adf3c7fa1d98a1e937d4ac242f95ec3e",
326
+ "refine.1.1.bias": "4d9a722b756647d732af6caa0ef7bef3a770e8afdaa5dd4cb0a638bd03f8dee7",
327
+ "refine.2.0.weight": "f65b68ce22cb90ec1af1d8816b7ce732191c813b2bb3b80f2453093904bdab73",
328
+ "refine.2.1.weight": "336fa81281ea69f52d5e9d499a2a9b9bdb9e6df657d05b0c0233a2a651c97e48",
329
+ "refine.2.1.bias": "13ae8a63ecfe284ef321d6b6040491e63e5bcec074c06477bf906403bd4c2eb2",
330
+ "query_blocks.0.self_attn.in_proj_weight": "07c4899ef3571fe104255ca6218c44b203d63c5cbfad24bc80ca262afff6787c",
331
+ "query_blocks.0.self_attn.in_proj_bias": "e967a31782697db458307177fbd46567cc272e336c87bda6d8c9da8fbd3856a7",
332
+ "query_blocks.0.self_attn.out_proj.weight": "ee517d34b3b675fe590c701b8332dc5abd49e611bb031c57ce26f76a89928c5f",
333
+ "query_blocks.0.self_attn.out_proj.bias": "e71863cf2b49214ecb3bcf1bc315c39193f12c52b7c6cc58b23cbde927b17f0b",
334
+ "query_blocks.0.cross_attn.in_proj_weight": "9c3fa13f9e76c9f890d72f7fe923f140d5605fc96172a75e8f43f23e9f15d505",
335
+ "query_blocks.0.cross_attn.in_proj_bias": "2604d8be43fc6f9071c8334f16752a29dce5cd3a64b431673ec8843bca300474",
336
+ "query_blocks.0.cross_attn.out_proj.weight": "73d0e044fad99303f67c5104a429f597ecf8bd76281d5b9ef4874abd1c349e0c",
337
+ "query_blocks.0.cross_attn.out_proj.bias": "227c6e9e1e8fbc2bfcbf632b0386075731a26237e2e017386da4bdc18ebf106d",
338
+ "query_blocks.0.norms.0.weight": "81786e7884ac96ff8e4d4f84bbac9596534f135ebf9689b8916e305b916bb177",
339
+ "query_blocks.0.norms.0.bias": "1cfd8b246efcbe8c26ad352d2dfc60c9cb8c8deb9a6611963ab9eca407cda3df",
340
+ "query_blocks.0.norms.1.weight": "d61a554ff57997061fafb3944724adb985b5a1f666902dd8277022d33f247da7",
341
+ "query_blocks.0.norms.1.bias": "eb3608e4f19d3867bfaff58a7c0fdcd381c7f78d24b9c0c77015a0842251486a",
342
+ "query_blocks.0.norms.2.weight": "50c70bf2e09f9c4441148d21297281e63f7d93f0877739b8c6d1f9658188b1d1",
343
+ "query_blocks.0.norms.2.bias": "9c0ae778f8fcf486a1ad090785ca25b5502fd5b2b8ed107a1147846fff969d76",
344
+ "query_blocks.0.ff.0.weight": "de6067fed91dec20fbe8fa134661de398fa416ec8077040adf2dc39eebc163b4",
345
+ "query_blocks.0.ff.0.bias": "9289c801701142dabaf8c156177d0d23c73f752680a1b640ab48db7efeaa643e",
346
+ "query_blocks.0.ff.2.weight": "35a57f7b78b0474e3567c8a89057f20ab57ff20905fd4baedc1c4b681eda6764",
347
+ "query_blocks.0.ff.2.bias": "d787c3fc933cbed78fbdf201737fa522a2bca4bba8fcf01d63c70c9dd5d6c990",
348
+ "query_blocks.1.self_attn.in_proj_weight": "5cc92b7e586f2d5b95e00e217c82aca0415ad82d7771e731cd75b5dcbccfe1ee",
349
+ "query_blocks.1.self_attn.in_proj_bias": "01dcbad9b36973b4c0d62c3fb5bf79c44bc76b5203192123f9d9e7750ca00a02",
350
+ "query_blocks.1.self_attn.out_proj.weight": "645e61ee9ee92e8d5a5896fbfc7a6778bae03e6e407c613ffd630ee3713aeeac",
351
+ "query_blocks.1.self_attn.out_proj.bias": "c926c560ab92a77d6a4aa0d68b199af99cd4b1abeeaaa798eaa317365b410189",
352
+ "query_blocks.1.cross_attn.in_proj_weight": "a41af40de4d6ac75046264bec299031bf1e0caff2bf4328fbe364269a7b4040a",
353
+ "query_blocks.1.cross_attn.in_proj_bias": "db88702fbd9d2ddc060552696e221d453cd0fef7cd685520d3784659f44f08ce",
354
+ "query_blocks.1.cross_attn.out_proj.weight": "6d656bb72f767c835ce542721b48d7f5e8c0ba72c7916d2c89558926cb9024e1",
355
+ "query_blocks.1.cross_attn.out_proj.bias": "7207d1ec2492c9a979e9043e94c908e91b97309e217797e6e447382e38e97f84",
356
+ "query_blocks.1.norms.0.weight": "7de8c1deee27c5835eb62de01da73a81d6c95c0c0a7b54c05835929f28062da5",
357
+ "query_blocks.1.norms.0.bias": "2a9ea46c0d125a10f24a2493017bfadb304d799a375464dde3be5fabb782a743",
358
+ "query_blocks.1.norms.1.weight": "e338bc7dddbcb94982b0d4595c6cd80e6c68dac3e393598f0a5f89dbe91fa45e",
359
+ "query_blocks.1.norms.1.bias": "7f8d2394c428c0e136cdfa4f2101fcf2e9cfa450b58612872e994d6e1167227c",
360
+ "query_blocks.1.norms.2.weight": "76d3d400433b136cdf25a2b43114e22ca1347ec938f845816c3f170ee9f3f3b4",
361
+ "query_blocks.1.norms.2.bias": "7a0bbcfb70edf435861b4689d610dacf29e40c98623426b2e20331b99768f6a1",
362
+ "query_blocks.1.ff.0.weight": "e958c705fab93cd5377af0a79c21b7296afa12f3de29ff0d2362176d74027948",
363
+ "query_blocks.1.ff.0.bias": "38b87a316e3581bb1c91ea032c096933b39cda3a32aac0064a6738156ff24568",
364
+ "query_blocks.1.ff.2.weight": "f08d2f9919b0e6b5a6dd6b4ea04acb4ff4fc35bbeb53f8652964a1ba708acd1f",
365
+ "query_blocks.1.ff.2.bias": "62b592d8c7b6771f47913242e0c89be2a7672087f2ea8820c2e3fb30a4e5ea5c",
366
+ "memory_norm.weight": "8798c8623bb2aa161dd53728d9e8d744682e89cfd0a0feb747d106eb5f1d87dc",
367
+ "memory_norm.bias": "a483734f7356abd1f434c35d573023b5f65e59bb8f8ca8bf02489aefae94da8b",
368
+ "query_norm.weight": "4d83c276001c3a957bab851e3c4e10fe6b578de8bd7bd9e4e2382b0076ce871e",
369
+ "query_norm.bias": "b256aee756228fbcb856fadf3243547fbbdefd91bfb44275908d5e7c55e281bc",
370
+ "pixel.weight": "999c44d479f7f60c264172be8d7b6439ff4273e9834c9bb35fcde5ab10a3b19c",
371
+ "pixel.bias": "5e1dd4c015c3e71a913a0c81e554a7da23d37a9daa6c0c36a87a1e46e367f775",
372
+ "palette.0.weight": "1aace21ef08194191120d80f0b3bfcbe7d6b908f0fd8fea564011ef060517fc5",
373
+ "palette.0.bias": "8e1472e5863fe72f6a19367a33873c6b26819e32e92cbabff9c2649c4b58f667",
374
+ "palette.2.weight": "d7b7314686791a9007a6b6825543ab1c5475821012299c6d50ff900535963fea",
375
+ "palette.2.bias": "54330cd54a1de7758c051e66bc119c3971c8443d6067c694e3f320e9f1b553b8",
376
+ "residual.weight": "fdc993139d7f900a2f5fe7c8aa2c1d2f20e6958cb32c3026ae224b035aabc18b",
377
+ "residual.bias": "7e993325e726fb1a4d2828e7bf5b144d0ddb4f816321a41f218a5c80650f7528"
378
+ }
quantized/base93-v3/decoder_verification.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"tensors":376,"python_javascript_bitwise_match":true,"json_string_bytes":4949484,"sha256":"e9ef164317e7832781753585c5533c781ce134527dd71385ef490cf5cf5fe9ba"}
quantized/base93-v3/evaluate.py ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Held-out output preservation check; does not select or alter quantisation."""
2
+ import argparse,hashlib,json,math
3
+ from pathlib import Path
4
+ import numpy as np
5
+ import torch
6
+ from PIL import Image,ImageDraw,ImageOps
7
+ from semantic_model import load_semantic
8
+ from inference import prepare,chroma_coefficients,render
9
+ from base93_codec import load_model,decode_state
10
+ ROOT=Path(__file__).resolve().parent
11
+ p=argparse.ArgumentParser();p.add_argument('--reference',required=True);p.add_argument('--images',default=str(ROOT/'images'));p.add_argument('--archives',default=str(ROOT/'archive_inputs'));args=p.parse_args()
12
+ OUT=ROOT/'evaluation';OUT.mkdir(exist_ok=True)
13
+ torch.set_num_threads(4)
14
+ reference=load_semantic(Path(args.reference)).eval()
15
+ quantized=load_model(ROOT/'weights_base93.txt')
16
+ source=json.loads((ROOT/'image_manifest.json').read_text())
17
+ records=[dict(r,path=Path(args.images)/r['name'],subset='COCO_holdout') for r in source['rows'] if r['split']=='validation']
18
+ archives=json.loads((ROOT/'nara_sources.json').read_text())
19
+ records += [dict(r,path=Path(args.archives)/r['name'],subset='historical') for r in archives]
20
+ results=[];thumbs=[]
21
+ @torch.inference_mode()
22
+ def run(record,size=256):
23
+ im=Image.open(record['path']).convert('RGB')
24
+ light,alpha,x=prepare(im,size)
25
+ baseline_ab=reference(x);quantized_ab=quantized(x)
26
+ delta=baseline_ab-quantized_ab
27
+ baseline=render(light,alpha,chroma_coefficients(reference,x,8))
28
+ candidate=render(light,alpha,chroma_coefficients(quantized,x,8))
29
+ aa=np.asarray(baseline,dtype=np.float32);bb=np.asarray(candidate,dtype=np.float32)
30
+ d=aa-bb;mse=float(np.mean(d*d));mae=float(np.mean(np.abs(d)))
31
+ row={'name':record['name'],'subset':record['subset'],'size':size,'source_sha256':hashlib.sha256(record['path'].read_bytes()).hexdigest(),'ab_mae':delta.abs().mean().item(),'ab_rmse':delta.square().mean().sqrt().item(),'rgb_mae_255':mae,'rgb_psnr_db':10*math.log10(255**2/max(mse,1e-15)),'rgb_max_difference':float(np.max(np.abs(d)))}
32
+ if size==256:
33
+ baseline.save(OUT/(record['name']+'_fp32.png'));candidate.save(OUT/(record['name']+'_base93.png'))
34
+ neutral=render(light,alpha,(torch.zeros_like(baseline_ab),torch.zeros_like(baseline_ab)))
35
+ thumbs.append((row,[neutral,baseline,candidate]))
36
+ return row
37
+ for i,record in enumerate(records):
38
+ row=run(record);results.append(row)
39
+ if (i+1)%10==0:print('EVALUATED',i+1,flush=True)
40
+ # Resolution/alpha checks supplement the default-size held-out check.
41
+ large=[run(r,512) for r in records[:4]]
42
+ rgba=Image.open(records[0]['path']).convert('RGBA');arr=np.asarray(rgba).copy();arr[...,3]=np.linspace(0,255,arr.shape[1],dtype=np.uint8)[None,:];rgba=Image.fromarray(arr)
43
+ light,alpha,x=prepare(rgba,256);output=render(light,alpha,chroma_coefficients(quantized,x,8))
44
+ assert np.array_equal(np.asarray(output)[...,3],arr[...,3]) and output.size==rgba.size
45
+ for page in range(math.ceil(len(thumbs)/8)):
46
+ sheet=Image.new('RGB',(1002,8*264+32),'#202020');draw=ImageDraw.Draw(sheet)
47
+ for j,label in enumerate(['Grayscale input','Production FP32','Base93 decoded']):draw.text((j*334+8,10),label,fill='white')
48
+ for r,(row,ims) in enumerate(thumbs[page*8:page*8+8]):
49
+ y=32+r*264
50
+ draw.text((8,y),f"{row['name']} RGB MAE {row['rgb_mae_255']:.2f}/255; PSNR {row['rgb_psnr_db']:.1f} dB",fill='white')
51
+ for j,im in enumerate(ims):
52
+ im=ImageOps.contain(im,(330,236));sheet.paste(im,(j*334+(334-im.width)//2,y+23))
53
+ sheet.save(OUT/f'comparison_{page+1:02}.jpg',quality=92)
54
+ def aggregate(rows):
55
+ return {'images':len(rows),**{key:float(np.mean([r[key] for r in rows])) for key in ['ab_mae','ab_rmse','rgb_mae_255','rgb_psnr_db']},'worst_rgb_mae':max(rows,key=lambda r:r['rgb_mae_255']),'lowest_psnr':min(rows,key=lambda r:r['rgb_psnr_db'])}
56
+ report={'purpose':'Preservation of production FP32 outputs, not colourisation accuracy or ground-truth recovery. No validation input used to select quantisation.','reference_revision':'1a9eb8af2754ad2329a24cfe50d388cb559441d0','base93_sha256':hashlib.sha256((ROOT/'weights_base93.txt').read_bytes()).hexdigest(),'default_settings':{'size':256,'smoothing_radius':8,'saturation':1},'COCO_holdout':aggregate([r for r in results if r['subset']=='COCO_holdout']),'historical':aggregate([r for r in results if r['subset']=='historical']),'size512':aggregate(large),'alpha_preserved':True,'rows':results,'size512_rows':large}
57
+ (ROOT/'evaluation.json').write_text(json.dumps(report,indent=2))
58
+ print(json.dumps({k:v for k,v in report.items() if k not in ('rows','size512_rows')},indent=2),flush=True)
59
+ # Hash every decoded array in little-endian form for the independent JS decoder.
60
+ arrays,_,_=decode_state((ROOT/'weights_base93.txt').read_text())
61
+ hashes={n:hashlib.sha256(a.astype('<f4' if a.dtype.kind=='f' else '<i8').tobytes()).hexdigest() for n,a in arrays.items()}
62
+ (ROOT/'decoded_tensor_hashes.json').write_text(json.dumps(hashes,indent=2))
quantized/base93-v3/evaluation.json ADDED
@@ -0,0 +1,916 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "purpose": "Preservation of production FP32 outputs, not colourisation accuracy or ground-truth recovery. No validation input used to select quantisation.",
3
+ "reference_revision": "1a9eb8af2754ad2329a24cfe50d388cb559441d0",
4
+ "base93_sha256": "e9ef164317e7832781753585c5533c781ce134527dd71385ef490cf5cf5fe9ba",
5
+ "default_settings": {
6
+ "size": 256,
7
+ "smoothing_radius": 8,
8
+ "saturation": 1
9
+ },
10
+ "COCO_holdout": {
11
+ "images": 64,
12
+ "ab_mae": 0.5811994269024581,
13
+ "ab_rmse": 0.7796662729233503,
14
+ "rgb_mae_255": 0.7840837354306132,
15
+ "rgb_psnr_db": 47.61341975277594,
16
+ "worst_rgb_mae": {
17
+ "name": "coco_1056.jpg",
18
+ "subset": "COCO_holdout",
19
+ "size": 256,
20
+ "source_sha256": "72e91c9eea461ca5656b3f8df0ffb7d03c6d151d1778295f0534e501853a0f0c",
21
+ "ab_mae": 2.1831459999084473,
22
+ "ab_rmse": 2.8584671020507812,
23
+ "rgb_mae_255": 2.98801589012146,
24
+ "rgb_psnr_db": 35.85841242699141,
25
+ "rgb_max_difference": 18.0
26
+ },
27
+ "lowest_psnr": {
28
+ "name": "coco_1056.jpg",
29
+ "subset": "COCO_holdout",
30
+ "size": 256,
31
+ "source_sha256": "72e91c9eea461ca5656b3f8df0ffb7d03c6d151d1778295f0534e501853a0f0c",
32
+ "ab_mae": 2.1831459999084473,
33
+ "ab_rmse": 2.8584671020507812,
34
+ "rgb_mae_255": 2.98801589012146,
35
+ "rgb_psnr_db": 35.85841242699141,
36
+ "rgb_max_difference": 18.0
37
+ }
38
+ },
39
+ "historical": {
40
+ "images": 6,
41
+ "ab_mae": 0.6835264513889948,
42
+ "ab_rmse": 0.9132436762253443,
43
+ "rgb_mae_255": 0.9896730780601501,
44
+ "rgb_psnr_db": 45.81755162620851,
45
+ "worst_rgb_mae": {
46
+ "name": "nara_46.jpg",
47
+ "subset": "historical",
48
+ "size": 256,
49
+ "source_sha256": "e7f2881c420c51c1855eb64219dc8c31e9a112976a3c81bfe0bcacb690d6b6e8",
50
+ "ab_mae": 0.8899980783462524,
51
+ "ab_rmse": 1.3845140933990479,
52
+ "rgb_mae_255": 1.4832963943481445,
53
+ "rgb_psnr_db": 41.02733433669738,
54
+ "rgb_max_difference": 10.0
55
+ },
56
+ "lowest_psnr": {
57
+ "name": "nara_46.jpg",
58
+ "subset": "historical",
59
+ "size": 256,
60
+ "source_sha256": "e7f2881c420c51c1855eb64219dc8c31e9a112976a3c81bfe0bcacb690d6b6e8",
61
+ "ab_mae": 0.8899980783462524,
62
+ "ab_rmse": 1.3845140933990479,
63
+ "rgb_mae_255": 1.4832963943481445,
64
+ "rgb_psnr_db": 41.02733433669738,
65
+ "rgb_max_difference": 10.0
66
+ }
67
+ },
68
+ "size512": {
69
+ "images": 4,
70
+ "ab_mae": 0.5359255634248257,
71
+ "ab_rmse": 0.8267999440431595,
72
+ "rgb_mae_255": 0.7455227300524712,
73
+ "rgb_psnr_db": 47.71224340335761,
74
+ "worst_rgb_mae": {
75
+ "name": "coco_1019.jpg",
76
+ "subset": "COCO_holdout",
77
+ "size": 512,
78
+ "source_sha256": "70d31beda1c0e3ac96190f69cdae7d39f630a29f4ec337a953ddb4964906ff26",
79
+ "ab_mae": 1.1465343236923218,
80
+ "ab_rmse": 1.8872750997543335,
81
+ "rgb_mae_255": 1.644206166267395,
82
+ "rgb_psnr_db": 39.03467060849164,
83
+ "rgb_max_difference": 18.0
84
+ },
85
+ "lowest_psnr": {
86
+ "name": "coco_1019.jpg",
87
+ "subset": "COCO_holdout",
88
+ "size": 512,
89
+ "source_sha256": "70d31beda1c0e3ac96190f69cdae7d39f630a29f4ec337a953ddb4964906ff26",
90
+ "ab_mae": 1.1465343236923218,
91
+ "ab_rmse": 1.8872750997543335,
92
+ "rgb_mae_255": 1.644206166267395,
93
+ "rgb_psnr_db": 39.03467060849164,
94
+ "rgb_max_difference": 18.0
95
+ }
96
+ },
97
+ "alpha_preserved": true,
98
+ "rows": [
99
+ {
100
+ "name": "coco_1016.jpg",
101
+ "subset": "COCO_holdout",
102
+ "size": 256,
103
+ "source_sha256": "e041ce705b88df703e66213dfed5ee67894a1849c2c1bafcf49ba586d93aad19",
104
+ "ab_mae": 0.43940839171409607,
105
+ "ab_rmse": 0.6683849692344666,
106
+ "rgb_mae_255": 0.665857195854187,
107
+ "rgb_psnr_db": 47.762664727710245,
108
+ "rgb_max_difference": 6.0
109
+ },
110
+ {
111
+ "name": "coco_1017.jpg",
112
+ "subset": "COCO_holdout",
113
+ "size": 256,
114
+ "source_sha256": "62514a521cb0e8893f31ac15ceae6cf8c7e0014becc56297f816a4a92534ef10",
115
+ "ab_mae": 0.46357887983322144,
116
+ "ab_rmse": 0.5573716759681702,
117
+ "rgb_mae_255": 0.6278091073036194,
118
+ "rgb_psnr_db": 48.983719375726935,
119
+ "rgb_max_difference": 17.0
120
+ },
121
+ {
122
+ "name": "coco_1018.jpg",
123
+ "subset": "COCO_holdout",
124
+ "size": 256,
125
+ "source_sha256": "b73523841e0dd790e28cfb7b74fa2081ac156e012f56aa6a63ddcb3a9545a8a1",
126
+ "ab_mae": 0.3109256327152252,
127
+ "ab_rmse": 0.4348927438259125,
128
+ "rgb_mae_255": 0.4163520038127899,
129
+ "rgb_psnr_db": 50.87751257135651,
130
+ "rgb_max_difference": 4.0
131
+ },
132
+ {
133
+ "name": "coco_1019.jpg",
134
+ "subset": "COCO_holdout",
135
+ "size": 256,
136
+ "source_sha256": "70d31beda1c0e3ac96190f69cdae7d39f630a29f4ec337a953ddb4964906ff26",
137
+ "ab_mae": 1.3901846408843994,
138
+ "ab_rmse": 2.271627902984619,
139
+ "rgb_mae_255": 2.0989809036254883,
140
+ "rgb_psnr_db": 37.362474074968134,
141
+ "rgb_max_difference": 16.0
142
+ },
143
+ {
144
+ "name": "coco_1020.jpg",
145
+ "subset": "COCO_holdout",
146
+ "size": 256,
147
+ "source_sha256": "a74acfa520a4671317fab07f68c63abf714dce2e438788c20119689f31714276",
148
+ "ab_mae": 0.2574012577533722,
149
+ "ab_rmse": 0.36370617151260376,
150
+ "rgb_mae_255": 0.312120646238327,
151
+ "rgb_psnr_db": 52.578288975010196,
152
+ "rgb_max_difference": 4.0
153
+ },
154
+ {
155
+ "name": "coco_1021.jpg",
156
+ "subset": "COCO_holdout",
157
+ "size": 256,
158
+ "source_sha256": "8da481be6fa26b297404f910c24038491e468411a54ac61e8de8c6b81124c3b5",
159
+ "ab_mae": 1.204186201095581,
160
+ "ab_rmse": 1.4969717264175415,
161
+ "rgb_mae_255": 1.8099616765975952,
162
+ "rgb_psnr_db": 40.304456548350714,
163
+ "rgb_max_difference": 38.0
164
+ },
165
+ {
166
+ "name": "coco_1022.jpg",
167
+ "subset": "COCO_holdout",
168
+ "size": 256,
169
+ "source_sha256": "90e67a670819e51c44a785a3ed26547200cab180dcd2098c486c8020cb3c312f",
170
+ "ab_mae": 0.543946385383606,
171
+ "ab_rmse": 0.7917636632919312,
172
+ "rgb_mae_255": 0.7019747495651245,
173
+ "rgb_psnr_db": 46.88338324498868,
174
+ "rgb_max_difference": 5.0
175
+ },
176
+ {
177
+ "name": "coco_1023.jpg",
178
+ "subset": "COCO_holdout",
179
+ "size": 256,
180
+ "source_sha256": "0c2172fdc1e19e2b2c7f9ab8126f0e850f354ce50b02c58292891b2619bf5528",
181
+ "ab_mae": 0.36013785004615784,
182
+ "ab_rmse": 0.4305912256240845,
183
+ "rgb_mae_255": 0.430391788482666,
184
+ "rgb_psnr_db": 51.29392640387959,
185
+ "rgb_max_difference": 5.0
186
+ },
187
+ {
188
+ "name": "coco_1024.jpg",
189
+ "subset": "COCO_holdout",
190
+ "size": 256,
191
+ "source_sha256": "e20ee8a186a94b03a7ea3f55d4b097ec2fe7a21db29df61073c31f0e38fbb958",
192
+ "ab_mae": 0.75190269947052,
193
+ "ab_rmse": 1.0529677867889404,
194
+ "rgb_mae_255": 0.9660502672195435,
195
+ "rgb_psnr_db": 44.79124703503622,
196
+ "rgb_max_difference": 5.0
197
+ },
198
+ {
199
+ "name": "coco_1025.jpg",
200
+ "subset": "COCO_holdout",
201
+ "size": 256,
202
+ "source_sha256": "7c6831c461d6873281520ae1870bb780e113bee5d87e6a8f4423576eeab43ed5",
203
+ "ab_mae": 0.8509075045585632,
204
+ "ab_rmse": 1.2475544214248657,
205
+ "rgb_mae_255": 1.1225998401641846,
206
+ "rgb_psnr_db": 42.894967538396045,
207
+ "rgb_max_difference": 22.0
208
+ },
209
+ {
210
+ "name": "coco_1026.jpg",
211
+ "subset": "COCO_holdout",
212
+ "size": 256,
213
+ "source_sha256": "25f106ec83ccc0525071ab67706096e8e692dd651830982ffb297ebffa0be400",
214
+ "ab_mae": 0.1293753832578659,
215
+ "ab_rmse": 0.17197023332118988,
216
+ "rgb_mae_255": 0.20865125954151154,
217
+ "rgb_psnr_db": 54.928650791455624,
218
+ "rgb_max_difference": 2.0
219
+ },
220
+ {
221
+ "name": "coco_1027.jpg",
222
+ "subset": "COCO_holdout",
223
+ "size": 256,
224
+ "source_sha256": "0d047d971e6e3988a1b85b3b0b46fdf9c9d12d71c6ac3e8f1ef0165a90d54044",
225
+ "ab_mae": 0.19230468571186066,
226
+ "ab_rmse": 0.26656872034072876,
227
+ "rgb_mae_255": 0.302245169878006,
228
+ "rgb_psnr_db": 53.08889676690083,
229
+ "rgb_max_difference": 2.0
230
+ },
231
+ {
232
+ "name": "coco_1028.jpg",
233
+ "subset": "COCO_holdout",
234
+ "size": 256,
235
+ "source_sha256": "520fc714c72300233fbeef5ef510d533db8fcdcb4c092c51e4464a399c168520",
236
+ "ab_mae": 0.3658325672149658,
237
+ "ab_rmse": 0.554839551448822,
238
+ "rgb_mae_255": 0.496385782957077,
239
+ "rgb_psnr_db": 49.35532925319812,
240
+ "rgb_max_difference": 3.0
241
+ },
242
+ {
243
+ "name": "coco_1029.jpg",
244
+ "subset": "COCO_holdout",
245
+ "size": 256,
246
+ "source_sha256": "1ab2da55c02fdcadfdf354add82500fcd5edb1e7a122bed15b89db29438680f3",
247
+ "ab_mae": 0.5959140062332153,
248
+ "ab_rmse": 0.8622536659240723,
249
+ "rgb_mae_255": 0.8481345176696777,
250
+ "rgb_psnr_db": 45.80943869320346,
251
+ "rgb_max_difference": 7.0
252
+ },
253
+ {
254
+ "name": "coco_1030.jpg",
255
+ "subset": "COCO_holdout",
256
+ "size": 256,
257
+ "source_sha256": "46461c0fa808ae9c733bb4a4940d3cac1abcef1949cb5e2dc83dc9dc9fcd0b01",
258
+ "ab_mae": 0.86104416847229,
259
+ "ab_rmse": 0.9469084143638611,
260
+ "rgb_mae_255": 0.9767776727676392,
261
+ "rgb_psnr_db": 46.25348714567142,
262
+ "rgb_max_difference": 5.0
263
+ },
264
+ {
265
+ "name": "coco_1031.jpg",
266
+ "subset": "COCO_holdout",
267
+ "size": 256,
268
+ "source_sha256": "af15371bf710dd3b772f372b33fd231851c92490c639e30c53d2d783e53baa83",
269
+ "ab_mae": 0.48116040229797363,
270
+ "ab_rmse": 0.658679723739624,
271
+ "rgb_mae_255": 0.639999270439148,
272
+ "rgb_psnr_db": 48.19268585158528,
273
+ "rgb_max_difference": 6.0
274
+ },
275
+ {
276
+ "name": "coco_1032.jpg",
277
+ "subset": "COCO_holdout",
278
+ "size": 256,
279
+ "source_sha256": "d2dd4d77bad4f711f6d2f1ec9359c2d35cb406030f6a42ab40f8a2d4ec5d4aa2",
280
+ "ab_mae": 0.5720202326774597,
281
+ "ab_rmse": 0.7728058099746704,
282
+ "rgb_mae_255": 0.8704209923744202,
283
+ "rgb_psnr_db": 46.00870779038892,
284
+ "rgb_max_difference": 4.0
285
+ },
286
+ {
287
+ "name": "coco_1033.jpg",
288
+ "subset": "COCO_holdout",
289
+ "size": 256,
290
+ "source_sha256": "04552f99af3ea5df5df0c22c1d8ae6f5a8b02a743c96d92f7bc658c7eebcfd03",
291
+ "ab_mae": 0.44058728218078613,
292
+ "ab_rmse": 0.5154173374176025,
293
+ "rgb_mae_255": 0.6381745338439941,
294
+ "rgb_psnr_db": 49.221256207089084,
295
+ "rgb_max_difference": 3.0
296
+ },
297
+ {
298
+ "name": "coco_1034.jpg",
299
+ "subset": "COCO_holdout",
300
+ "size": 256,
301
+ "source_sha256": "e5a21669fcd6bb3dc5e43b8f69e38a55c6d3dc19e3c0f4de596b47ffd2fc18b4",
302
+ "ab_mae": 0.5219040513038635,
303
+ "ab_rmse": 0.7026798129081726,
304
+ "rgb_mae_255": 0.6319293975830078,
305
+ "rgb_psnr_db": 48.38567616442334,
306
+ "rgb_max_difference": 5.0
307
+ },
308
+ {
309
+ "name": "coco_1035.jpg",
310
+ "subset": "COCO_holdout",
311
+ "size": 256,
312
+ "source_sha256": "de20da780296358ea7c8483a9ad12af1420015e8e586ba54aff79873168abed2",
313
+ "ab_mae": 0.6211705803871155,
314
+ "ab_rmse": 0.776999831199646,
315
+ "rgb_mae_255": 0.7443305253982544,
316
+ "rgb_psnr_db": 47.181454378076495,
317
+ "rgb_max_difference": 7.0
318
+ },
319
+ {
320
+ "name": "coco_1036.jpg",
321
+ "subset": "COCO_holdout",
322
+ "size": 256,
323
+ "source_sha256": "02c8a1148f95011bb0baea846669dbfc0cfa3eb12fa22d4436c235a331fb1cc2",
324
+ "ab_mae": 0.29657837748527527,
325
+ "ab_rmse": 0.3883953094482422,
326
+ "rgb_mae_255": 0.3387385308742523,
327
+ "rgb_psnr_db": 52.006603265733474,
328
+ "rgb_max_difference": 3.0
329
+ },
330
+ {
331
+ "name": "coco_1037.jpg",
332
+ "subset": "COCO_holdout",
333
+ "size": 256,
334
+ "source_sha256": "91e1b67b63c6fa562a10b38d1336480695dc8d577f6dfd3b54c7d532a3c35df2",
335
+ "ab_mae": 1.048445701599121,
336
+ "ab_rmse": 1.4682464599609375,
337
+ "rgb_mae_255": 1.6269237995147705,
338
+ "rgb_psnr_db": 40.80610246068396,
339
+ "rgb_max_difference": 9.0
340
+ },
341
+ {
342
+ "name": "coco_1038.jpg",
343
+ "subset": "COCO_holdout",
344
+ "size": 256,
345
+ "source_sha256": "4fa3aab23ce3814a1da7f65ce615000413900e0f915daaf420c3af64a6bf6e93",
346
+ "ab_mae": 0.6959782242774963,
347
+ "ab_rmse": 0.9374401569366455,
348
+ "rgb_mae_255": 0.7775381207466125,
349
+ "rgb_psnr_db": 46.841396023388995,
350
+ "rgb_max_difference": 5.0
351
+ },
352
+ {
353
+ "name": "coco_1039.jpg",
354
+ "subset": "COCO_holdout",
355
+ "size": 256,
356
+ "source_sha256": "100e3482a768dddcdccb9603682ae0b00921a31854d86b8924e7fc723bcbacac",
357
+ "ab_mae": 0.7254564166069031,
358
+ "ab_rmse": 1.0206735134124756,
359
+ "rgb_mae_255": 0.967242419719696,
360
+ "rgb_psnr_db": 44.810259343230115,
361
+ "rgb_max_difference": 9.0
362
+ },
363
+ {
364
+ "name": "coco_1040.jpg",
365
+ "subset": "COCO_holdout",
366
+ "size": 256,
367
+ "source_sha256": "719de8aa010bb47e2e7de74ffefbdbf60b8414c5e23c81dec8d95e3f2c75d21f",
368
+ "ab_mae": 0.353073388338089,
369
+ "ab_rmse": 0.5829923152923584,
370
+ "rgb_mae_255": 0.4297240972518921,
371
+ "rgb_psnr_db": 48.952116178497505,
372
+ "rgb_max_difference": 9.0
373
+ },
374
+ {
375
+ "name": "coco_1041.jpg",
376
+ "subset": "COCO_holdout",
377
+ "size": 256,
378
+ "source_sha256": "c3f1e039b14bec40394cec0cdcaf31f06c71cbe2723276731b209a16d0d39f11",
379
+ "ab_mae": 0.28588947653770447,
380
+ "ab_rmse": 0.37288206815719604,
381
+ "rgb_mae_255": 0.4098382294178009,
382
+ "rgb_psnr_db": 51.47348469579973,
383
+ "rgb_max_difference": 3.0
384
+ },
385
+ {
386
+ "name": "coco_1042.jpg",
387
+ "subset": "COCO_holdout",
388
+ "size": 256,
389
+ "source_sha256": "00216d5dab636b6ca7603009a7efa54784d43670a6606d478abd8a88627b78a6",
390
+ "ab_mae": 0.6486522555351257,
391
+ "ab_rmse": 0.7951579689979553,
392
+ "rgb_mae_255": 0.896253228187561,
393
+ "rgb_psnr_db": 46.3277692825903,
394
+ "rgb_max_difference": 12.0
395
+ },
396
+ {
397
+ "name": "coco_1043.jpg",
398
+ "subset": "COCO_holdout",
399
+ "size": 256,
400
+ "source_sha256": "7cc3c7f7b8412661bb9010a294331533391d99cc637ae25802167600140150a1",
401
+ "ab_mae": 0.47596025466918945,
402
+ "ab_rmse": 0.6496351957321167,
403
+ "rgb_mae_255": 0.731968343257904,
404
+ "rgb_psnr_db": 47.74910016061982,
405
+ "rgb_max_difference": 6.0
406
+ },
407
+ {
408
+ "name": "coco_1044.jpg",
409
+ "subset": "COCO_holdout",
410
+ "size": 256,
411
+ "source_sha256": "062326d314aaea6fc36f5d3c2472bfb4359a8acbff9ce72c866e94687d78f072",
412
+ "ab_mae": 0.9421135187149048,
413
+ "ab_rmse": 1.3336637020111084,
414
+ "rgb_mae_255": 1.0952978134155273,
415
+ "rgb_psnr_db": 42.37708462751998,
416
+ "rgb_max_difference": 10.0
417
+ },
418
+ {
419
+ "name": "coco_1045.jpg",
420
+ "subset": "COCO_holdout",
421
+ "size": 256,
422
+ "source_sha256": "1f82b10e98e4c851d635f1c417adeff94310bfe3d51fd52a3195a8b132df7da8",
423
+ "ab_mae": 0.8920404314994812,
424
+ "ab_rmse": 1.0348516702651978,
425
+ "rgb_mae_255": 1.2732856273651123,
426
+ "rgb_psnr_db": 44.06520211137426,
427
+ "rgb_max_difference": 7.0
428
+ },
429
+ {
430
+ "name": "coco_1046.jpg",
431
+ "subset": "COCO_holdout",
432
+ "size": 256,
433
+ "source_sha256": "e83dde80a931fea2a83dc34b77e40b492e7681957f4d72491f7f7fdd5cc215b6",
434
+ "ab_mae": 0.5578994154930115,
435
+ "ab_rmse": 0.815567672252655,
436
+ "rgb_mae_255": 0.7353493571281433,
437
+ "rgb_psnr_db": 46.968576439315186,
438
+ "rgb_max_difference": 6.0
439
+ },
440
+ {
441
+ "name": "coco_1047.jpg",
442
+ "subset": "COCO_holdout",
443
+ "size": 256,
444
+ "source_sha256": "586beec9cea94bff35cc953ae63f759cfe3a354073565ab8cb6e7467cc93584e",
445
+ "ab_mae": 0.229619100689888,
446
+ "ab_rmse": 0.36222273111343384,
447
+ "rgb_mae_255": 0.28020617365837097,
448
+ "rgb_psnr_db": 52.68379983490156,
449
+ "rgb_max_difference": 5.0
450
+ },
451
+ {
452
+ "name": "coco_1048.jpg",
453
+ "subset": "COCO_holdout",
454
+ "size": 256,
455
+ "source_sha256": "8d5a4b2e84e045a974113175429619a0a0118f6f0b95124d53057c733f4ff8d1",
456
+ "ab_mae": 0.28267085552215576,
457
+ "ab_rmse": 0.37151944637298584,
458
+ "rgb_mae_255": 0.32983264327049255,
459
+ "rgb_psnr_db": 52.574352325090956,
460
+ "rgb_max_difference": 4.0
461
+ },
462
+ {
463
+ "name": "coco_1049.jpg",
464
+ "subset": "COCO_holdout",
465
+ "size": 256,
466
+ "source_sha256": "8b2a835c070f5f495c040a9a3a885b04f749fa127bd46f187a0c51c614607119",
467
+ "ab_mae": 0.6253822445869446,
468
+ "ab_rmse": 0.8146377801895142,
469
+ "rgb_mae_255": 0.7677653431892395,
470
+ "rgb_psnr_db": 47.49469815470657,
471
+ "rgb_max_difference": 5.0
472
+ },
473
+ {
474
+ "name": "coco_1050.jpg",
475
+ "subset": "COCO_holdout",
476
+ "size": 256,
477
+ "source_sha256": "03c01abd085af9560028d708866dd25d95b4f9fbdc0294140b703d50a494d5d5",
478
+ "ab_mae": 0.5730293989181519,
479
+ "ab_rmse": 0.6969890594482422,
480
+ "rgb_mae_255": 0.7968941926956177,
481
+ "rgb_psnr_db": 47.251368557496356,
482
+ "rgb_max_difference": 5.0
483
+ },
484
+ {
485
+ "name": "coco_1051.jpg",
486
+ "subset": "COCO_holdout",
487
+ "size": 256,
488
+ "source_sha256": "2c482d365623b18f877b90eea879331d4d11f8c9f8b13f058aa8cb1ef31cb58d",
489
+ "ab_mae": 0.6537476778030396,
490
+ "ab_rmse": 0.8099928498268127,
491
+ "rgb_mae_255": 0.7819519639015198,
492
+ "rgb_psnr_db": 47.18831360392143,
493
+ "rgb_max_difference": 5.0
494
+ },
495
+ {
496
+ "name": "coco_1052.jpg",
497
+ "subset": "COCO_holdout",
498
+ "size": 256,
499
+ "source_sha256": "f128deccbf3e1043c473351db3d0510e6ecc82329600e41938b31615f30bb4a1",
500
+ "ab_mae": 0.3511921167373657,
501
+ "ab_rmse": 0.48037898540496826,
502
+ "rgb_mae_255": 0.4295497238636017,
503
+ "rgb_psnr_db": 50.58121476764526,
504
+ "rgb_max_difference": 3.0
505
+ },
506
+ {
507
+ "name": "coco_1053.jpg",
508
+ "subset": "COCO_holdout",
509
+ "size": 256,
510
+ "source_sha256": "84a82f3d3f5ae226acf812bf26bca99e4a7e845e608c4caba85d5f3ffdc339df",
511
+ "ab_mae": 1.048168659210205,
512
+ "ab_rmse": 1.2802841663360596,
513
+ "rgb_mae_255": 1.349549651145935,
514
+ "rgb_psnr_db": 42.66947685731495,
515
+ "rgb_max_difference": 24.0
516
+ },
517
+ {
518
+ "name": "coco_1054.jpg",
519
+ "subset": "COCO_holdout",
520
+ "size": 256,
521
+ "source_sha256": "932fcc2cd5cfba5a45af33e3530590accfff799088d6555642efc2404a98baaa",
522
+ "ab_mae": 0.3246843218803406,
523
+ "ab_rmse": 0.49376380443573,
524
+ "rgb_mae_255": 0.40068474411964417,
525
+ "rgb_psnr_db": 50.817906322689694,
526
+ "rgb_max_difference": 4.0
527
+ },
528
+ {
529
+ "name": "coco_1055.jpg",
530
+ "subset": "COCO_holdout",
531
+ "size": 256,
532
+ "source_sha256": "8e1b28f0733588b23def605e03860e6b34328f2b231970e7fd59912f4b3e7005",
533
+ "ab_mae": 0.5213963985443115,
534
+ "ab_rmse": 0.7230475544929504,
535
+ "rgb_mae_255": 0.6850080490112305,
536
+ "rgb_psnr_db": 47.50479203068523,
537
+ "rgb_max_difference": 5.0
538
+ },
539
+ {
540
+ "name": "coco_1056.jpg",
541
+ "subset": "COCO_holdout",
542
+ "size": 256,
543
+ "source_sha256": "72e91c9eea461ca5656b3f8df0ffb7d03c6d151d1778295f0534e501853a0f0c",
544
+ "ab_mae": 2.1831459999084473,
545
+ "ab_rmse": 2.8584671020507812,
546
+ "rgb_mae_255": 2.98801589012146,
547
+ "rgb_psnr_db": 35.85841242699141,
548
+ "rgb_max_difference": 18.0
549
+ },
550
+ {
551
+ "name": "coco_1057.jpg",
552
+ "subset": "COCO_holdout",
553
+ "size": 256,
554
+ "source_sha256": "e101bdf508bf0a74adb38301dc97cb0612fa95a84e2a660eb97749b31edec18a",
555
+ "ab_mae": 0.7829222679138184,
556
+ "ab_rmse": 1.1600793600082397,
557
+ "rgb_mae_255": 1.1945466995239258,
558
+ "rgb_psnr_db": 42.77879854575258,
559
+ "rgb_max_difference": 9.0
560
+ },
561
+ {
562
+ "name": "coco_1058.jpg",
563
+ "subset": "COCO_holdout",
564
+ "size": 256,
565
+ "source_sha256": "2818f1c1caaf4583919d4a6723350b588f272e06295eb3bedd83623ccad833e5",
566
+ "ab_mae": 0.8312724232673645,
567
+ "ab_rmse": 1.1431342363357544,
568
+ "rgb_mae_255": 0.9047533869743347,
569
+ "rgb_psnr_db": 44.11219256345834,
570
+ "rgb_max_difference": 15.0
571
+ },
572
+ {
573
+ "name": "coco_1059.jpg",
574
+ "subset": "COCO_holdout",
575
+ "size": 256,
576
+ "source_sha256": "9551e30c4b72c2c8034424d1da07d5ca23a6f8f27462c2402561e2d83a039069",
577
+ "ab_mae": 0.7320425510406494,
578
+ "ab_rmse": 0.9694391489028931,
579
+ "rgb_mae_255": 1.043619155883789,
580
+ "rgb_psnr_db": 44.66711942796674,
581
+ "rgb_max_difference": 6.0
582
+ },
583
+ {
584
+ "name": "coco_1060.jpg",
585
+ "subset": "COCO_holdout",
586
+ "size": 256,
587
+ "source_sha256": "c7953700dc8004aacbff68cb8b2c33e88a29b0ee21110bc66b06bcefae8ca636",
588
+ "ab_mae": 0.32508137822151184,
589
+ "ab_rmse": 0.4312102794647217,
590
+ "rgb_mae_255": 0.351641982793808,
591
+ "rgb_psnr_db": 52.206696967775315,
592
+ "rgb_max_difference": 3.0
593
+ },
594
+ {
595
+ "name": "coco_1061.jpg",
596
+ "subset": "COCO_holdout",
597
+ "size": 256,
598
+ "source_sha256": "05435cdebe50a959e357ddd3eb9621559934b8761d3526e57fd9170658ce3d93",
599
+ "ab_mae": 0.32836607098579407,
600
+ "ab_rmse": 0.4034212529659271,
601
+ "rgb_mae_255": 0.3910970091819763,
602
+ "rgb_psnr_db": 51.83733385774279,
603
+ "rgb_max_difference": 3.0
604
+ },
605
+ {
606
+ "name": "coco_1062.jpg",
607
+ "subset": "COCO_holdout",
608
+ "size": 256,
609
+ "source_sha256": "e0f6ceccdafeb5578deb7876cbfaa0a19f44a19f580b7123c865a941b6e9dcee",
610
+ "ab_mae": 0.3735934793949127,
611
+ "ab_rmse": 0.46995747089385986,
612
+ "rgb_mae_255": 0.6125932931900024,
613
+ "rgb_psnr_db": 48.44860969118368,
614
+ "rgb_max_difference": 6.0
615
+ },
616
+ {
617
+ "name": "coco_1063.jpg",
618
+ "subset": "COCO_holdout",
619
+ "size": 256,
620
+ "source_sha256": "63f866d3b8b97d1087131c18b9f80662ccf10bf864e1a20d64ff733ac731e2e1",
621
+ "ab_mae": 0.26975545287132263,
622
+ "ab_rmse": 0.3394005298614502,
623
+ "rgb_mae_255": 0.3309558928012848,
624
+ "rgb_psnr_db": 52.70306774507186,
625
+ "rgb_max_difference": 5.0
626
+ },
627
+ {
628
+ "name": "coco_1064.jpg",
629
+ "subset": "COCO_holdout",
630
+ "size": 256,
631
+ "source_sha256": "bbd1f8687deeaa813f2b57509dabb1e87f7ba532f06c8e79868cc7f1453d0bc1",
632
+ "ab_mae": 0.8908953070640564,
633
+ "ab_rmse": 1.110667109489441,
634
+ "rgb_mae_255": 1.2832040786743164,
635
+ "rgb_psnr_db": 43.30378890377353,
636
+ "rgb_max_difference": 5.0
637
+ },
638
+ {
639
+ "name": "coco_1065.jpg",
640
+ "subset": "COCO_holdout",
641
+ "size": 256,
642
+ "source_sha256": "4434c715aa868745ed8d4506dfd812da5e0e6fdf0fba8250c7bded4cd15337b8",
643
+ "ab_mae": 0.14240413904190063,
644
+ "ab_rmse": 0.1986604779958725,
645
+ "rgb_mae_255": 0.18697550892829895,
646
+ "rgb_psnr_db": 55.411653443308296,
647
+ "rgb_max_difference": 2.0
648
+ },
649
+ {
650
+ "name": "coco_1066.jpg",
651
+ "subset": "COCO_holdout",
652
+ "size": 256,
653
+ "source_sha256": "14794d8f9a4d7241f55e3dc15794a8063b83bbc0ae95f4b787aca5891a48bc3b",
654
+ "ab_mae": 0.4939364194869995,
655
+ "ab_rmse": 0.6235232353210449,
656
+ "rgb_mae_255": 0.7928873896598816,
657
+ "rgb_psnr_db": 46.438275796567254,
658
+ "rgb_max_difference": 5.0
659
+ },
660
+ {
661
+ "name": "coco_1067.jpg",
662
+ "subset": "COCO_holdout",
663
+ "size": 256,
664
+ "source_sha256": "f6f2620707df79c606e0c1cfab462860ece49bee7768f0fb2dbdfac7bdf8346e",
665
+ "ab_mae": 0.1879967451095581,
666
+ "ab_rmse": 0.29431673884391785,
667
+ "rgb_mae_255": 0.22250759601593018,
668
+ "rgb_psnr_db": 54.23877738675412,
669
+ "rgb_max_difference": 3.0
670
+ },
671
+ {
672
+ "name": "coco_1068.jpg",
673
+ "subset": "COCO_holdout",
674
+ "size": 256,
675
+ "source_sha256": "fa32398a8441c2a27f5047bc2ad2f9144127f10f2c6663b22f0701679e8e97c3",
676
+ "ab_mae": 0.30755534768104553,
677
+ "ab_rmse": 0.4232846796512604,
678
+ "rgb_mae_255": 0.414189875125885,
679
+ "rgb_psnr_db": 51.057234237954326,
680
+ "rgb_max_difference": 4.0
681
+ },
682
+ {
683
+ "name": "coco_1069.jpg",
684
+ "subset": "COCO_holdout",
685
+ "size": 256,
686
+ "source_sha256": "6eda0abfc23d8612800893b44c5a1fe8a4ceb0c43cfc86a3c0deac9a0681c53e",
687
+ "ab_mae": 0.2967095375061035,
688
+ "ab_rmse": 0.3827492594718933,
689
+ "rgb_mae_255": 0.36820080876350403,
690
+ "rgb_psnr_db": 51.99739590776551,
691
+ "rgb_max_difference": 11.0
692
+ },
693
+ {
694
+ "name": "coco_1070.jpg",
695
+ "subset": "COCO_holdout",
696
+ "size": 256,
697
+ "source_sha256": "9e5b2e1a12413fa4365e34a459369de6b05b3fe03dea5fe094bd579692413104",
698
+ "ab_mae": 0.4261647164821625,
699
+ "ab_rmse": 0.5248377323150635,
700
+ "rgb_mae_255": 0.652355432510376,
701
+ "rgb_psnr_db": 48.546061720769956,
702
+ "rgb_max_difference": 4.0
703
+ },
704
+ {
705
+ "name": "coco_1071.jpg",
706
+ "subset": "COCO_holdout",
707
+ "size": 256,
708
+ "source_sha256": "8d3945f3c30be9a21aed6e9808f39e74a46bb20198f7bd29e24f4279e716af1e",
709
+ "ab_mae": 0.8692493438720703,
710
+ "ab_rmse": 1.1637614965438843,
711
+ "rgb_mae_255": 1.2661339044570923,
712
+ "rgb_psnr_db": 43.01175399581257,
713
+ "rgb_max_difference": 6.0
714
+ },
715
+ {
716
+ "name": "coco_1072.jpg",
717
+ "subset": "COCO_holdout",
718
+ "size": 256,
719
+ "source_sha256": "4f3aa179879b53163772b1866e1790e98f36ddc384ee8dace37ec468b604dcba",
720
+ "ab_mae": 0.5333219170570374,
721
+ "ab_rmse": 0.6932693719863892,
722
+ "rgb_mae_255": 0.7168706655502319,
723
+ "rgb_psnr_db": 47.639591421682475,
724
+ "rgb_max_difference": 5.0
725
+ },
726
+ {
727
+ "name": "coco_1073.jpg",
728
+ "subset": "COCO_holdout",
729
+ "size": 256,
730
+ "source_sha256": "d35dac662f828ab1b671f9acafaea3f1cc1992e231811806119fe3a063896471",
731
+ "ab_mae": 0.4666561186313629,
732
+ "ab_rmse": 0.6421653032302856,
733
+ "rgb_mae_255": 0.562593400478363,
734
+ "rgb_psnr_db": 49.05380682816582,
735
+ "rgb_max_difference": 5.0
736
+ },
737
+ {
738
+ "name": "coco_1074.jpg",
739
+ "subset": "COCO_holdout",
740
+ "size": 256,
741
+ "source_sha256": "a02be69d9dbaf2ebb1e21950d1a0c54238ea6b479b8200c46fd3330de5863236",
742
+ "ab_mae": 0.2920343577861786,
743
+ "ab_rmse": 0.37993666529655457,
744
+ "rgb_mae_255": 0.34981879591941833,
745
+ "rgb_psnr_db": 51.98822061326059,
746
+ "rgb_max_difference": 9.0
747
+ },
748
+ {
749
+ "name": "coco_1075.jpg",
750
+ "subset": "COCO_holdout",
751
+ "size": 256,
752
+ "source_sha256": "0d3dd7d85cfcc4cf0ea1d814197ca3c4e419a1ce968b269f5d06fabe0b367f58",
753
+ "ab_mae": 0.8748445510864258,
754
+ "ab_rmse": 0.9437631368637085,
755
+ "rgb_mae_255": 1.1631814241409302,
756
+ "rgb_psnr_db": 45.176254120891016,
757
+ "rgb_max_difference": 5.0
758
+ },
759
+ {
760
+ "name": "coco_1076.jpg",
761
+ "subset": "COCO_holdout",
762
+ "size": 256,
763
+ "source_sha256": "9160e969a838a9f2005aac2db2c3e0677879daea9dcacecc96aad010b0d6a42c",
764
+ "ab_mae": 0.49375951290130615,
765
+ "ab_rmse": 0.73063725233078,
766
+ "rgb_mae_255": 0.7047297954559326,
767
+ "rgb_psnr_db": 47.20944685554747,
768
+ "rgb_max_difference": 6.0
769
+ },
770
+ {
771
+ "name": "coco_1077.jpg",
772
+ "subset": "COCO_holdout",
773
+ "size": 256,
774
+ "source_sha256": "f3dc76875460b05e6d348a4867e3e44bad554f819f2e4cf25b9b66615d72302c",
775
+ "ab_mae": 1.1439827680587769,
776
+ "ab_rmse": 1.5291945934295654,
777
+ "rgb_mae_255": 1.6052864789962769,
778
+ "rgb_psnr_db": 40.935771729125044,
779
+ "rgb_max_difference": 7.0
780
+ },
781
+ {
782
+ "name": "coco_1078.jpg",
783
+ "subset": "COCO_holdout",
784
+ "size": 256,
785
+ "source_sha256": "6774fb650081bd03fedb03b1c26b85de477afa0086cbbf157b2fde2dc03d6628",
786
+ "ab_mae": 0.25251901149749756,
787
+ "ab_rmse": 0.3399495482444763,
788
+ "rgb_mae_255": 0.3604215681552887,
789
+ "rgb_psnr_db": 52.183212399780075,
790
+ "rgb_max_difference": 4.0
791
+ },
792
+ {
793
+ "name": "coco_1079.jpg",
794
+ "subset": "COCO_holdout",
795
+ "size": 256,
796
+ "source_sha256": "7d0e069b095e8611362263baac6905e447882dd04e128fd83e85307b733fb753",
797
+ "ab_mae": 0.8126828670501709,
798
+ "ab_rmse": 1.1655176877975464,
799
+ "rgb_mae_255": 1.1020296812057495,
800
+ "rgb_psnr_db": 43.153547009938094,
801
+ "rgb_max_difference": 7.0
802
+ },
803
+ {
804
+ "name": "nara_42.jpg",
805
+ "subset": "historical",
806
+ "size": 256,
807
+ "source_sha256": "a73186b25853d95a8e1785d1497923c1052747e8b045c5eac4c05dade60b2e87",
808
+ "ab_mae": 0.460681289434433,
809
+ "ab_rmse": 0.6142368316650391,
810
+ "rgb_mae_255": 0.6225173473358154,
811
+ "rgb_psnr_db": 48.45927421455151,
812
+ "rgb_max_difference": 4.0
813
+ },
814
+ {
815
+ "name": "nara_43.jpg",
816
+ "subset": "historical",
817
+ "size": 256,
818
+ "source_sha256": "f22dc07c4bdd0f3dac4b65ff0548395dc9aa88d8169a714fc40524249233b977",
819
+ "ab_mae": 0.991566002368927,
820
+ "ab_rmse": 1.2025388479232788,
821
+ "rgb_mae_255": 1.261067509651184,
822
+ "rgb_psnr_db": 43.85090309746551,
823
+ "rgb_max_difference": 9.0
824
+ },
825
+ {
826
+ "name": "nara_44.jpg",
827
+ "subset": "historical",
828
+ "size": 256,
829
+ "source_sha256": "c5e9a3fa57a6a0789e4b1529910e0294d98f245b24d205a1caccd08a5a3069b2",
830
+ "ab_mae": 0.30323904752731323,
831
+ "ab_rmse": 0.4101198613643646,
832
+ "rgb_mae_255": 0.34567946195602417,
833
+ "rgb_psnr_db": 52.027383772273545,
834
+ "rgb_max_difference": 3.0
835
+ },
836
+ {
837
+ "name": "nara_45.jpg",
838
+ "subset": "historical",
839
+ "size": 256,
840
+ "source_sha256": "3a3e3900cdb1384ca028a0a8843dcbcf499ffdd34832bc6b2e3f477d520403ae",
841
+ "ab_mae": 0.9602954983711243,
842
+ "ab_rmse": 1.226324200630188,
843
+ "rgb_mae_255": 1.480059266090393,
844
+ "rgb_psnr_db": 42.0335371241524,
845
+ "rgb_max_difference": 7.0
846
+ },
847
+ {
848
+ "name": "nara_46.jpg",
849
+ "subset": "historical",
850
+ "size": 256,
851
+ "source_sha256": "e7f2881c420c51c1855eb64219dc8c31e9a112976a3c81bfe0bcacb690d6b6e8",
852
+ "ab_mae": 0.8899980783462524,
853
+ "ab_rmse": 1.3845140933990479,
854
+ "rgb_mae_255": 1.4832963943481445,
855
+ "rgb_psnr_db": 41.02733433669738,
856
+ "rgb_max_difference": 10.0
857
+ },
858
+ {
859
+ "name": "nara_49.jpg",
860
+ "subset": "historical",
861
+ "size": 256,
862
+ "source_sha256": "6d46bcc386aabf2dc090b2a05baf2e3ead04bc1274c38d87a60e1806ecfb4bab",
863
+ "ab_mae": 0.4953787922859192,
864
+ "ab_rmse": 0.6417282223701477,
865
+ "rgb_mae_255": 0.7454184889793396,
866
+ "rgb_psnr_db": 47.50687721211074,
867
+ "rgb_max_difference": 4.0
868
+ }
869
+ ],
870
+ "size512_rows": [
871
+ {
872
+ "name": "coco_1016.jpg",
873
+ "subset": "COCO_holdout",
874
+ "size": 512,
875
+ "source_sha256": "e041ce705b88df703e66213dfed5ee67894a1849c2c1bafcf49ba586d93aad19",
876
+ "ab_mae": 0.21910063922405243,
877
+ "ab_rmse": 0.30491358041763306,
878
+ "rgb_mae_255": 0.3387152850627899,
879
+ "rgb_psnr_db": 52.250933058951674,
880
+ "rgb_max_difference": 3.0
881
+ },
882
+ {
883
+ "name": "coco_1017.jpg",
884
+ "subset": "COCO_holdout",
885
+ "size": 512,
886
+ "source_sha256": "62514a521cb0e8893f31ac15ceae6cf8c7e0014becc56297f816a4a92534ef10",
887
+ "ab_mae": 0.3096548020839691,
888
+ "ab_rmse": 0.45300573110580444,
889
+ "rgb_mae_255": 0.38620829582214355,
890
+ "rgb_psnr_db": 51.290298501126614,
891
+ "rgb_max_difference": 12.0
892
+ },
893
+ {
894
+ "name": "coco_1018.jpg",
895
+ "subset": "COCO_holdout",
896
+ "size": 512,
897
+ "source_sha256": "b73523841e0dd790e28cfb7b74fa2081ac156e012f56aa6a63ddcb3a9545a8a1",
898
+ "ab_mae": 0.46841248869895935,
899
+ "ab_rmse": 0.6620053648948669,
900
+ "rgb_mae_255": 0.6129611730575562,
901
+ "rgb_psnr_db": 48.27307144486052,
902
+ "rgb_max_difference": 6.0
903
+ },
904
+ {
905
+ "name": "coco_1019.jpg",
906
+ "subset": "COCO_holdout",
907
+ "size": 512,
908
+ "source_sha256": "70d31beda1c0e3ac96190f69cdae7d39f630a29f4ec337a953ddb4964906ff26",
909
+ "ab_mae": 1.1465343236923218,
910
+ "ab_rmse": 1.8872750997543335,
911
+ "rgb_mae_255": 1.644206166267395,
912
+ "rgb_psnr_db": 39.03467060849164,
913
+ "rgb_max_difference": 18.0
914
+ }
915
+ ]
916
+ }
quantized/base93-v3/evaluation/comparison_01.jpg ADDED

Git LFS Details

  • SHA256: 70b0b3fb40480d78209d64f49dd071ee8ac462eabda19631bc1d4764751d5e99
  • Pointer size: 131 Bytes
  • Size of remote file: 665 kB
quantized/base93-v3/evaluation/comparison_02.jpg ADDED

Git LFS Details

  • SHA256: 652c6ba4cdc316629560540843e69f096d2322cbcfc33a3d3ea359581e95fd75
  • Pointer size: 131 Bytes
  • Size of remote file: 468 kB
quantized/base93-v3/evaluation/comparison_03.jpg ADDED

Git LFS Details

  • SHA256: febd0388b105ea2dd9a8a67141f49395dd1747aa3eb50d9f5a204e9d2aa8b962
  • Pointer size: 131 Bytes
  • Size of remote file: 630 kB
quantized/base93-v3/evaluation/comparison_04.jpg ADDED

Git LFS Details

  • SHA256: 138cea89e388ab9e61911b3ad4ea9a48a4c5c92bf5332c274d5aa6f04178e726
  • Pointer size: 131 Bytes
  • Size of remote file: 653 kB
quantized/base93-v3/evaluation/comparison_05.jpg ADDED

Git LFS Details

  • SHA256: 317ca03858dac621207bf27e0b5654e09742d9f55fdec254e3a833b8f7eaef78
  • Pointer size: 131 Bytes
  • Size of remote file: 615 kB
quantized/base93-v3/evaluation/comparison_06.jpg ADDED

Git LFS Details

  • SHA256: 39635897df1ae9510df4134453d8426171216bdb524e816ee153a9604e7b90d7
  • Pointer size: 131 Bytes
  • Size of remote file: 580 kB
quantized/base93-v3/evaluation/comparison_07.jpg ADDED

Git LFS Details

  • SHA256: 776610302d5100e0c0a3257ede57fe4b3282df72f33c5b707e5cc1893a485b10
  • Pointer size: 131 Bytes
  • Size of remote file: 581 kB
quantized/base93-v3/evaluation/comparison_08.jpg ADDED

Git LFS Details

  • SHA256: 9175a154e983bfe237c113d63c1251f48a1496da82d84dfd346834d01588e4a8
  • Pointer size: 131 Bytes
  • Size of remote file: 602 kB
quantized/base93-v3/evaluation/comparison_09.jpg ADDED

Git LFS Details

  • SHA256: 6fa6d60a4c89af0d6fc961580f7fe822e7472a6d1898ef9387b4eb8fb5b3fdd4
  • Pointer size: 131 Bytes
  • Size of remote file: 508 kB
quantized/base93-v3/export_base93.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Reproduce the released Base93 file from its immutable FP32 source and plan."""
2
+ import argparse,hashlib,json
3
+ from pathlib import Path
4
+ from semantic_model import load_semantic
5
+ from base93_codec import encode_state
6
+ ROOT=Path(__file__).resolve().parent
7
+ p=argparse.ArgumentParser();p.add_argument('--source',required=True,help='Directory containing production v3 model.safetensors and config.json');p.add_argument('--output',default=str(ROOT));args=p.parse_args()
8
+ source=Path(args.source);out=Path(args.output);out.mkdir(parents=True,exist_ok=True)
9
+ provenance={'repo':'User-2468/mini-unet-colorizer','revision':'1a9eb8af2754ad2329a24cfe50d388cb559441d0','sha256':hashlib.sha256((source/'model.safetensors').read_bytes()).hexdigest()}
10
+ if provenance['sha256']!='ec1f27d74533adc83f7ab3639a091fc4d8738a434dafc7d172c7873c28a9e715':raise ValueError('Source is not the selected production v3 checkpoint')
11
+ model=load_semantic(source)
12
+ plan=json.loads((ROOT/'precision_plan.json').read_text())
13
+ text,manifest=encode_state(model.state_dict(),set(dict(model.named_parameters())),model.config,provenance,plan)
14
+ assert manifest['json_string_bytes']<5_000_000
15
+ (out/'weights_base93.txt').write_bytes(text.encode('ascii'))
16
+ (out/'manifest.json').write_text(json.dumps(manifest,indent=2))
17
+ print(json.dumps({'text_bytes':manifest['text_bytes'],'json_string_bytes':manifest['json_string_bytes'],'sha256':hashlib.sha256(text.encode('ascii')).hexdigest()}))
quantized/base93-v3/image_manifest.json ADDED
@@ -0,0 +1,489 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "dataset": "detection-datasets/coco",
3
+ "revision": "26ddc382fe75dfc2a0655b5977e296ea10efebce",
4
+ "file": "default/val/0001.parquet",
5
+ "config": "default",
6
+ "source_split": "val",
7
+ "rows": [
8
+ {
9
+ "name": "coco_1000.jpg",
10
+ "row": 1000,
11
+ "sha256": "733a103198563276d4f70b5517fd5aba3ce53f4d9dc6d3684d5f8b3413619520",
12
+ "split": "calibration"
13
+ },
14
+ {
15
+ "name": "coco_1001.jpg",
16
+ "row": 1001,
17
+ "sha256": "73d1d5fff4154d5d221f8a7826d64a93c13556068d5826047749e7b1179d6678",
18
+ "split": "calibration"
19
+ },
20
+ {
21
+ "name": "coco_1002.jpg",
22
+ "row": 1002,
23
+ "sha256": "bb7a986f21b54cb4d9f35cdb753e29eb5a029f60ce21260b6103a5a2e3d63a3f",
24
+ "split": "calibration"
25
+ },
26
+ {
27
+ "name": "coco_1003.jpg",
28
+ "row": 1003,
29
+ "sha256": "04a0a063f7f2348a1d18b705903d22f12ef242b5076f6a2580a3242bbb3a8d2a",
30
+ "split": "calibration"
31
+ },
32
+ {
33
+ "name": "coco_1004.jpg",
34
+ "row": 1004,
35
+ "sha256": "4b09a3f5a827a10c3217929a528cc6eef65e9b6db0881da21dbad0dea2eef1cc",
36
+ "split": "calibration"
37
+ },
38
+ {
39
+ "name": "coco_1005.jpg",
40
+ "row": 1005,
41
+ "sha256": "7a22cbb635f1a89081df046549ad066422ca9cee3270b57f66627cd7a0d096c6",
42
+ "split": "calibration"
43
+ },
44
+ {
45
+ "name": "coco_1006.jpg",
46
+ "row": 1006,
47
+ "sha256": "e040b3d434af83c78dab765ebcca1719430fd1194f8d938b2f0294393a5d9f59",
48
+ "split": "calibration"
49
+ },
50
+ {
51
+ "name": "coco_1007.jpg",
52
+ "row": 1007,
53
+ "sha256": "9224c110ba73a25ff895f7e67347be76abd7df7acc588c91539c4a452d6f1788",
54
+ "split": "calibration"
55
+ },
56
+ {
57
+ "name": "coco_1008.jpg",
58
+ "row": 1008,
59
+ "sha256": "0518c35b7359ef5fb2d882dd2c61d95898f413a93307dcd240fe010b3ed771b4",
60
+ "split": "calibration"
61
+ },
62
+ {
63
+ "name": "coco_1009.jpg",
64
+ "row": 1009,
65
+ "sha256": "dd3bddaa96d4d0beb4d8770a77dd76cbd9507f771e9d3c301ef84199ab8c083c",
66
+ "split": "calibration"
67
+ },
68
+ {
69
+ "name": "coco_1010.jpg",
70
+ "row": 1010,
71
+ "sha256": "ab26f465308cd7c891d1f5693ebf60e7b1eabd16fb60d9757ca0a9d0a3cba71d",
72
+ "split": "calibration"
73
+ },
74
+ {
75
+ "name": "coco_1011.jpg",
76
+ "row": 1011,
77
+ "sha256": "2213aaaaa54c5432da09fe3851cb0b5f4783f9c9754d9d6df2ab28d3d7c69271",
78
+ "split": "calibration"
79
+ },
80
+ {
81
+ "name": "coco_1012.jpg",
82
+ "row": 1012,
83
+ "sha256": "0871a7c6e308afd0675688a556254bec9652d9ffe5be9f991b4030817e714f50",
84
+ "split": "calibration"
85
+ },
86
+ {
87
+ "name": "coco_1013.jpg",
88
+ "row": 1013,
89
+ "sha256": "1b7d41877801c39d6ef22eda051c9f39f85636c391ef406c42d8736e96d95134",
90
+ "split": "calibration"
91
+ },
92
+ {
93
+ "name": "coco_1014.jpg",
94
+ "row": 1014,
95
+ "sha256": "fd81b7cb10762771dd4e45ce75fa8fba56835ac9aa681930f5b4e23df8024696",
96
+ "split": "calibration"
97
+ },
98
+ {
99
+ "name": "coco_1015.jpg",
100
+ "row": 1015,
101
+ "sha256": "51f7127dae6728b6f2ea96b02c8cdefc21fb03cff7a4f459af32debf6215790c",
102
+ "split": "calibration"
103
+ },
104
+ {
105
+ "name": "coco_1016.jpg",
106
+ "row": 1016,
107
+ "sha256": "e041ce705b88df703e66213dfed5ee67894a1849c2c1bafcf49ba586d93aad19",
108
+ "split": "validation"
109
+ },
110
+ {
111
+ "name": "coco_1017.jpg",
112
+ "row": 1017,
113
+ "sha256": "62514a521cb0e8893f31ac15ceae6cf8c7e0014becc56297f816a4a92534ef10",
114
+ "split": "validation"
115
+ },
116
+ {
117
+ "name": "coco_1018.jpg",
118
+ "row": 1018,
119
+ "sha256": "b73523841e0dd790e28cfb7b74fa2081ac156e012f56aa6a63ddcb3a9545a8a1",
120
+ "split": "validation"
121
+ },
122
+ {
123
+ "name": "coco_1019.jpg",
124
+ "row": 1019,
125
+ "sha256": "70d31beda1c0e3ac96190f69cdae7d39f630a29f4ec337a953ddb4964906ff26",
126
+ "split": "validation"
127
+ },
128
+ {
129
+ "name": "coco_1020.jpg",
130
+ "row": 1020,
131
+ "sha256": "a74acfa520a4671317fab07f68c63abf714dce2e438788c20119689f31714276",
132
+ "split": "validation"
133
+ },
134
+ {
135
+ "name": "coco_1021.jpg",
136
+ "row": 1021,
137
+ "sha256": "8da481be6fa26b297404f910c24038491e468411a54ac61e8de8c6b81124c3b5",
138
+ "split": "validation"
139
+ },
140
+ {
141
+ "name": "coco_1022.jpg",
142
+ "row": 1022,
143
+ "sha256": "90e67a670819e51c44a785a3ed26547200cab180dcd2098c486c8020cb3c312f",
144
+ "split": "validation"
145
+ },
146
+ {
147
+ "name": "coco_1023.jpg",
148
+ "row": 1023,
149
+ "sha256": "0c2172fdc1e19e2b2c7f9ab8126f0e850f354ce50b02c58292891b2619bf5528",
150
+ "split": "validation"
151
+ },
152
+ {
153
+ "name": "coco_1024.jpg",
154
+ "row": 1024,
155
+ "sha256": "e20ee8a186a94b03a7ea3f55d4b097ec2fe7a21db29df61073c31f0e38fbb958",
156
+ "split": "validation"
157
+ },
158
+ {
159
+ "name": "coco_1025.jpg",
160
+ "row": 1025,
161
+ "sha256": "7c6831c461d6873281520ae1870bb780e113bee5d87e6a8f4423576eeab43ed5",
162
+ "split": "validation"
163
+ },
164
+ {
165
+ "name": "coco_1026.jpg",
166
+ "row": 1026,
167
+ "sha256": "25f106ec83ccc0525071ab67706096e8e692dd651830982ffb297ebffa0be400",
168
+ "split": "validation"
169
+ },
170
+ {
171
+ "name": "coco_1027.jpg",
172
+ "row": 1027,
173
+ "sha256": "0d047d971e6e3988a1b85b3b0b46fdf9c9d12d71c6ac3e8f1ef0165a90d54044",
174
+ "split": "validation"
175
+ },
176
+ {
177
+ "name": "coco_1028.jpg",
178
+ "row": 1028,
179
+ "sha256": "520fc714c72300233fbeef5ef510d533db8fcdcb4c092c51e4464a399c168520",
180
+ "split": "validation"
181
+ },
182
+ {
183
+ "name": "coco_1029.jpg",
184
+ "row": 1029,
185
+ "sha256": "1ab2da55c02fdcadfdf354add82500fcd5edb1e7a122bed15b89db29438680f3",
186
+ "split": "validation"
187
+ },
188
+ {
189
+ "name": "coco_1030.jpg",
190
+ "row": 1030,
191
+ "sha256": "46461c0fa808ae9c733bb4a4940d3cac1abcef1949cb5e2dc83dc9dc9fcd0b01",
192
+ "split": "validation"
193
+ },
194
+ {
195
+ "name": "coco_1031.jpg",
196
+ "row": 1031,
197
+ "sha256": "af15371bf710dd3b772f372b33fd231851c92490c639e30c53d2d783e53baa83",
198
+ "split": "validation"
199
+ },
200
+ {
201
+ "name": "coco_1032.jpg",
202
+ "row": 1032,
203
+ "sha256": "d2dd4d77bad4f711f6d2f1ec9359c2d35cb406030f6a42ab40f8a2d4ec5d4aa2",
204
+ "split": "validation"
205
+ },
206
+ {
207
+ "name": "coco_1033.jpg",
208
+ "row": 1033,
209
+ "sha256": "04552f99af3ea5df5df0c22c1d8ae6f5a8b02a743c96d92f7bc658c7eebcfd03",
210
+ "split": "validation"
211
+ },
212
+ {
213
+ "name": "coco_1034.jpg",
214
+ "row": 1034,
215
+ "sha256": "e5a21669fcd6bb3dc5e43b8f69e38a55c6d3dc19e3c0f4de596b47ffd2fc18b4",
216
+ "split": "validation"
217
+ },
218
+ {
219
+ "name": "coco_1035.jpg",
220
+ "row": 1035,
221
+ "sha256": "de20da780296358ea7c8483a9ad12af1420015e8e586ba54aff79873168abed2",
222
+ "split": "validation"
223
+ },
224
+ {
225
+ "name": "coco_1036.jpg",
226
+ "row": 1036,
227
+ "sha256": "02c8a1148f95011bb0baea846669dbfc0cfa3eb12fa22d4436c235a331fb1cc2",
228
+ "split": "validation"
229
+ },
230
+ {
231
+ "name": "coco_1037.jpg",
232
+ "row": 1037,
233
+ "sha256": "91e1b67b63c6fa562a10b38d1336480695dc8d577f6dfd3b54c7d532a3c35df2",
234
+ "split": "validation"
235
+ },
236
+ {
237
+ "name": "coco_1038.jpg",
238
+ "row": 1038,
239
+ "sha256": "4fa3aab23ce3814a1da7f65ce615000413900e0f915daaf420c3af64a6bf6e93",
240
+ "split": "validation"
241
+ },
242
+ {
243
+ "name": "coco_1039.jpg",
244
+ "row": 1039,
245
+ "sha256": "100e3482a768dddcdccb9603682ae0b00921a31854d86b8924e7fc723bcbacac",
246
+ "split": "validation"
247
+ },
248
+ {
249
+ "name": "coco_1040.jpg",
250
+ "row": 1040,
251
+ "sha256": "719de8aa010bb47e2e7de74ffefbdbf60b8414c5e23c81dec8d95e3f2c75d21f",
252
+ "split": "validation"
253
+ },
254
+ {
255
+ "name": "coco_1041.jpg",
256
+ "row": 1041,
257
+ "sha256": "c3f1e039b14bec40394cec0cdcaf31f06c71cbe2723276731b209a16d0d39f11",
258
+ "split": "validation"
259
+ },
260
+ {
261
+ "name": "coco_1042.jpg",
262
+ "row": 1042,
263
+ "sha256": "00216d5dab636b6ca7603009a7efa54784d43670a6606d478abd8a88627b78a6",
264
+ "split": "validation"
265
+ },
266
+ {
267
+ "name": "coco_1043.jpg",
268
+ "row": 1043,
269
+ "sha256": "7cc3c7f7b8412661bb9010a294331533391d99cc637ae25802167600140150a1",
270
+ "split": "validation"
271
+ },
272
+ {
273
+ "name": "coco_1044.jpg",
274
+ "row": 1044,
275
+ "sha256": "062326d314aaea6fc36f5d3c2472bfb4359a8acbff9ce72c866e94687d78f072",
276
+ "split": "validation"
277
+ },
278
+ {
279
+ "name": "coco_1045.jpg",
280
+ "row": 1045,
281
+ "sha256": "1f82b10e98e4c851d635f1c417adeff94310bfe3d51fd52a3195a8b132df7da8",
282
+ "split": "validation"
283
+ },
284
+ {
285
+ "name": "coco_1046.jpg",
286
+ "row": 1046,
287
+ "sha256": "e83dde80a931fea2a83dc34b77e40b492e7681957f4d72491f7f7fdd5cc215b6",
288
+ "split": "validation"
289
+ },
290
+ {
291
+ "name": "coco_1047.jpg",
292
+ "row": 1047,
293
+ "sha256": "586beec9cea94bff35cc953ae63f759cfe3a354073565ab8cb6e7467cc93584e",
294
+ "split": "validation"
295
+ },
296
+ {
297
+ "name": "coco_1048.jpg",
298
+ "row": 1048,
299
+ "sha256": "8d5a4b2e84e045a974113175429619a0a0118f6f0b95124d53057c733f4ff8d1",
300
+ "split": "validation"
301
+ },
302
+ {
303
+ "name": "coco_1049.jpg",
304
+ "row": 1049,
305
+ "sha256": "8b2a835c070f5f495c040a9a3a885b04f749fa127bd46f187a0c51c614607119",
306
+ "split": "validation"
307
+ },
308
+ {
309
+ "name": "coco_1050.jpg",
310
+ "row": 1050,
311
+ "sha256": "03c01abd085af9560028d708866dd25d95b4f9fbdc0294140b703d50a494d5d5",
312
+ "split": "validation"
313
+ },
314
+ {
315
+ "name": "coco_1051.jpg",
316
+ "row": 1051,
317
+ "sha256": "2c482d365623b18f877b90eea879331d4d11f8c9f8b13f058aa8cb1ef31cb58d",
318
+ "split": "validation"
319
+ },
320
+ {
321
+ "name": "coco_1052.jpg",
322
+ "row": 1052,
323
+ "sha256": "f128deccbf3e1043c473351db3d0510e6ecc82329600e41938b31615f30bb4a1",
324
+ "split": "validation"
325
+ },
326
+ {
327
+ "name": "coco_1053.jpg",
328
+ "row": 1053,
329
+ "sha256": "84a82f3d3f5ae226acf812bf26bca99e4a7e845e608c4caba85d5f3ffdc339df",
330
+ "split": "validation"
331
+ },
332
+ {
333
+ "name": "coco_1054.jpg",
334
+ "row": 1054,
335
+ "sha256": "932fcc2cd5cfba5a45af33e3530590accfff799088d6555642efc2404a98baaa",
336
+ "split": "validation"
337
+ },
338
+ {
339
+ "name": "coco_1055.jpg",
340
+ "row": 1055,
341
+ "sha256": "8e1b28f0733588b23def605e03860e6b34328f2b231970e7fd59912f4b3e7005",
342
+ "split": "validation"
343
+ },
344
+ {
345
+ "name": "coco_1056.jpg",
346
+ "row": 1056,
347
+ "sha256": "72e91c9eea461ca5656b3f8df0ffb7d03c6d151d1778295f0534e501853a0f0c",
348
+ "split": "validation"
349
+ },
350
+ {
351
+ "name": "coco_1057.jpg",
352
+ "row": 1057,
353
+ "sha256": "e101bdf508bf0a74adb38301dc97cb0612fa95a84e2a660eb97749b31edec18a",
354
+ "split": "validation"
355
+ },
356
+ {
357
+ "name": "coco_1058.jpg",
358
+ "row": 1058,
359
+ "sha256": "2818f1c1caaf4583919d4a6723350b588f272e06295eb3bedd83623ccad833e5",
360
+ "split": "validation"
361
+ },
362
+ {
363
+ "name": "coco_1059.jpg",
364
+ "row": 1059,
365
+ "sha256": "9551e30c4b72c2c8034424d1da07d5ca23a6f8f27462c2402561e2d83a039069",
366
+ "split": "validation"
367
+ },
368
+ {
369
+ "name": "coco_1060.jpg",
370
+ "row": 1060,
371
+ "sha256": "c7953700dc8004aacbff68cb8b2c33e88a29b0ee21110bc66b06bcefae8ca636",
372
+ "split": "validation"
373
+ },
374
+ {
375
+ "name": "coco_1061.jpg",
376
+ "row": 1061,
377
+ "sha256": "05435cdebe50a959e357ddd3eb9621559934b8761d3526e57fd9170658ce3d93",
378
+ "split": "validation"
379
+ },
380
+ {
381
+ "name": "coco_1062.jpg",
382
+ "row": 1062,
383
+ "sha256": "e0f6ceccdafeb5578deb7876cbfaa0a19f44a19f580b7123c865a941b6e9dcee",
384
+ "split": "validation"
385
+ },
386
+ {
387
+ "name": "coco_1063.jpg",
388
+ "row": 1063,
389
+ "sha256": "63f866d3b8b97d1087131c18b9f80662ccf10bf864e1a20d64ff733ac731e2e1",
390
+ "split": "validation"
391
+ },
392
+ {
393
+ "name": "coco_1064.jpg",
394
+ "row": 1064,
395
+ "sha256": "bbd1f8687deeaa813f2b57509dabb1e87f7ba532f06c8e79868cc7f1453d0bc1",
396
+ "split": "validation"
397
+ },
398
+ {
399
+ "name": "coco_1065.jpg",
400
+ "row": 1065,
401
+ "sha256": "4434c715aa868745ed8d4506dfd812da5e0e6fdf0fba8250c7bded4cd15337b8",
402
+ "split": "validation"
403
+ },
404
+ {
405
+ "name": "coco_1066.jpg",
406
+ "row": 1066,
407
+ "sha256": "14794d8f9a4d7241f55e3dc15794a8063b83bbc0ae95f4b787aca5891a48bc3b",
408
+ "split": "validation"
409
+ },
410
+ {
411
+ "name": "coco_1067.jpg",
412
+ "row": 1067,
413
+ "sha256": "f6f2620707df79c606e0c1cfab462860ece49bee7768f0fb2dbdfac7bdf8346e",
414
+ "split": "validation"
415
+ },
416
+ {
417
+ "name": "coco_1068.jpg",
418
+ "row": 1068,
419
+ "sha256": "fa32398a8441c2a27f5047bc2ad2f9144127f10f2c6663b22f0701679e8e97c3",
420
+ "split": "validation"
421
+ },
422
+ {
423
+ "name": "coco_1069.jpg",
424
+ "row": 1069,
425
+ "sha256": "6eda0abfc23d8612800893b44c5a1fe8a4ceb0c43cfc86a3c0deac9a0681c53e",
426
+ "split": "validation"
427
+ },
428
+ {
429
+ "name": "coco_1070.jpg",
430
+ "row": 1070,
431
+ "sha256": "9e5b2e1a12413fa4365e34a459369de6b05b3fe03dea5fe094bd579692413104",
432
+ "split": "validation"
433
+ },
434
+ {
435
+ "name": "coco_1071.jpg",
436
+ "row": 1071,
437
+ "sha256": "8d3945f3c30be9a21aed6e9808f39e74a46bb20198f7bd29e24f4279e716af1e",
438
+ "split": "validation"
439
+ },
440
+ {
441
+ "name": "coco_1072.jpg",
442
+ "row": 1072,
443
+ "sha256": "4f3aa179879b53163772b1866e1790e98f36ddc384ee8dace37ec468b604dcba",
444
+ "split": "validation"
445
+ },
446
+ {
447
+ "name": "coco_1073.jpg",
448
+ "row": 1073,
449
+ "sha256": "d35dac662f828ab1b671f9acafaea3f1cc1992e231811806119fe3a063896471",
450
+ "split": "validation"
451
+ },
452
+ {
453
+ "name": "coco_1074.jpg",
454
+ "row": 1074,
455
+ "sha256": "a02be69d9dbaf2ebb1e21950d1a0c54238ea6b479b8200c46fd3330de5863236",
456
+ "split": "validation"
457
+ },
458
+ {
459
+ "name": "coco_1075.jpg",
460
+ "row": 1075,
461
+ "sha256": "0d3dd7d85cfcc4cf0ea1d814197ca3c4e419a1ce968b269f5d06fabe0b367f58",
462
+ "split": "validation"
463
+ },
464
+ {
465
+ "name": "coco_1076.jpg",
466
+ "row": 1076,
467
+ "sha256": "9160e969a838a9f2005aac2db2c3e0677879daea9dcacecc96aad010b0d6a42c",
468
+ "split": "validation"
469
+ },
470
+ {
471
+ "name": "coco_1077.jpg",
472
+ "row": 1077,
473
+ "sha256": "f3dc76875460b05e6d348a4867e3e44bad554f819f2e4cf25b9b66615d72302c",
474
+ "split": "validation"
475
+ },
476
+ {
477
+ "name": "coco_1078.jpg",
478
+ "row": 1078,
479
+ "sha256": "6774fb650081bd03fedb03b1c26b85de477afa0086cbbf157b2fde2dc03d6628",
480
+ "split": "validation"
481
+ },
482
+ {
483
+ "name": "coco_1079.jpg",
484
+ "row": 1079,
485
+ "sha256": "7d0e069b095e8611362263baac6905e447882dd04e128fd83e85307b733fb753",
486
+ "split": "validation"
487
+ }
488
+ ]
489
+ }
quantized/base93-v3/inference.py ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Aspect-preserving colourisation with a compact semantic model.
2
+
3
+ Input and output are PIL images. No teacher, critic or second learned model is
4
+ loaded. Original lightness and alpha are retained; out-of-gamut chroma is reduced.
5
+ """
6
+ import json
7
+ import math
8
+ from pathlib import Path
9
+ import numpy as np
10
+ import torch
11
+ import torch.nn.functional as F
12
+ from PIL import Image, ImageOps
13
+ from skimage.color import rgb2lab
14
+ from semantic_model import load_semantic
15
+
16
+ MAX_PIXELS = 12_000_000
17
+
18
+ def load_colorizer(path, device='cpu'):
19
+ model = load_semantic(path, device)
20
+ count = sum(p.numel() for p in model.parameters())
21
+ if count >= 4_000_000:
22
+ raise ValueError('Model exceeds the four-million-parameter limit')
23
+ return model
24
+
25
+ def box_mean(x, r):
26
+ return F.avg_pool2d(x, 2*r+1, 1, r, count_include_pad=False)
27
+
28
+ def prepare(image, size=256):
29
+ if not isinstance(image, Image.Image):
30
+ raise TypeError('Expected a PIL image')
31
+ if not 128 <= int(size) <= 512:
32
+ raise ValueError('Input size must be between 128 and 512')
33
+ image = ImageOps.exif_transpose(image)
34
+ if image.width * image.height > MAX_PIXELS:
35
+ raise ValueError('Please resize the image to at most 12 megapixels')
36
+ alpha = np.asarray(image.getchannel('A')).copy() if 'A' in image.getbands() else None
37
+ rgb = np.asarray(image.convert('RGB'), dtype=np.float32) / 255
38
+ light = rgb2lab(rgb)[..., 0].astype(np.float32)
39
+ scale = min(int(size)/max(image.size), 1.)
40
+ shape = (max(8, round(image.height*scale)), max(8, round(image.width*scale)))
41
+ x = torch.from_numpy(light)[None,None]/50-1
42
+ small = F.interpolate(x, size=shape, mode='bilinear', align_corners=False, antialias=True)
43
+ return light, alpha, small
44
+
45
+ @torch.inference_mode()
46
+ def chroma_coefficients(model, small, radius=8):
47
+ if radius not in (0,4,8,12,16):
48
+ raise ValueError('Unsupported smoothing radius')
49
+ device = next(model.parameters()).device
50
+ L = small.to(device)
51
+ ab = model(L).float()
52
+ if not torch.isfinite(ab).all():
53
+ raise RuntimeError('Model returned non-finite colours')
54
+ if radius == 0:
55
+ return torch.zeros_like(ab).cpu(), ab.cpu()
56
+ guide = (L.float()+1)/2
57
+ mi, mp = box_mean(guide,radius), box_mean(ab,radius)
58
+ var = (box_mean(guide*guide,radius)-mi*mi).clamp_min(0)
59
+ cov = box_mean(guide*ab,radius)-mi*mp
60
+ a = cov/(var+.001)
61
+ b = mp-a*mi
62
+ # Coefficients are upsampled, then evaluated against original-resolution L.
63
+ return box_mean(a,radius).cpu(), box_mean(b,radius).cpu()
64
+
65
+ def _linear_rgb(light, ab):
66
+ fy = (light+16)/116
67
+ f = np.stack([fy+ab[...,0]/500,fy,fy-ab[...,1]/200],axis=-1)
68
+ xyz = np.where(f>6/29,f**3,(f-4/29)*(3*(6/29)**2))
69
+ xyz *= np.array([.95047,1.,1.08883],np.float32)
70
+ matrix = np.array([[3.24048134,-1.53715152,-.49853633],[-.96925495,1.87599,.04155593],[.05564664,-.20404134,1.05731107]],np.float32)
71
+ return xyz @ matrix.T
72
+
73
+ def render(light, alpha, coefficients, saturation=1.):
74
+ saturation = float(saturation)
75
+ if not math.isfinite(saturation) or not 0 <= saturation <= 1.5:
76
+ raise ValueError('Colour strength must be between 0 and 1.5')
77
+ a,b = [F.interpolate(v.float(),size=light.shape,mode='bilinear',align_corners=False)[0].permute(1,2,0).numpy() for v in coefficients]
78
+ ab = (a*(light[...,None]/100)+b)*saturation
79
+ # Binary-search chroma compression retains Lab hue and lightness.
80
+ linear = _linear_rgb(light,ab)
81
+ invalid = ((linear < -1e-5)|(linear > 1+1e-5)).any(-1)
82
+ if invalid.any():
83
+ L = light[invalid]; colors=ab[invalid];lo=np.zeros(len(L),np.float32);hi=np.ones(len(L),np.float32)
84
+ for _ in range(9):
85
+ mid=(lo+hi)/2; candidate=_linear_rgb(L,colors*mid[:,None])
86
+ valid=((candidate>=-1e-5)&(candidate<=1+1e-5)).all(-1)
87
+ lo=np.where(valid,mid,lo);hi=np.where(valid,hi,mid)
88
+ ab[invalid]=colors*lo[:,None]
89
+ linear[invalid]=_linear_rgb(L,ab[invalid])
90
+ linear=np.clip(linear,0,1)
91
+ rgb=np.where(linear<=.0031308,12.92*linear,1.055*np.power(linear,1/2.4)-.055)
92
+ pixels=np.uint8(np.clip(np.rint(rgb*255),0,255))
93
+ if alpha is not None: pixels=np.concatenate([pixels,alpha[...,None]],axis=-1)
94
+ return Image.fromarray(pixels)
95
+
96
+ def colorize(model, image, size=256, radius=8, saturation=1.):
97
+ light,alpha,small=prepare(image,size)
98
+ return render(light,alpha,chroma_coefficients(model,small,radius),saturation)
99
+
100
+ def main():
101
+ import argparse
102
+ parser=argparse.ArgumentParser(description='Compact photo colouriser')
103
+ parser.add_argument('input');parser.add_argument('output')
104
+ parser.add_argument('--model',default='.');parser.add_argument('--device',default='cpu')
105
+ parser.add_argument('--size',type=int,default=256);parser.add_argument('--saturation',type=float,default=1.)
106
+ args=parser.parse_args()
107
+ model=load_colorizer(args.model,args.device)
108
+ with Image.open(args.input) as image:
109
+ colorize(model,image,args.size,saturation=args.saturation).save(args.output)
110
+
111
+ if __name__=='__main__':main()
quantized/base93-v3/manifest.json ADDED
The diff for this file is too large to render. See raw diff
 
quantized/base93-v3/nara_sources.json ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "name": "nara_42.jpg",
4
+ "title": "Power station",
5
+ "source": "https://www.archives.gov/exhibits/picturing_the_century/greatdep/greatdep_img42.html",
6
+ "image_url": "https://www.archives.gov/exhibits/picturing_the_century/images/greatdep_042_v71.jpg",
7
+ "sha256": "a73186b25853d95a8e1785d1497923c1052747e8b045c5eac4c05dade60b2e87",
8
+ "bytes": 47847
9
+ },
10
+ {
11
+ "name": "nara_43.jpg",
12
+ "title": "Boxing team",
13
+ "source": "https://www.archives.gov/exhibits/picturing_the_century/greatdep/greatdep_img43.html",
14
+ "image_url": "https://www.archives.gov/exhibits/picturing_the_century/images/greatdep_043_v69.jpg",
15
+ "sha256": "f22dc07c4bdd0f3dac4b65ff0548395dc9aa88d8169a714fc40524249233b977",
16
+ "bytes": 40864
17
+ },
18
+ {
19
+ "name": "nara_44.jpg",
20
+ "title": "Street corner",
21
+ "source": "https://www.archives.gov/exhibits/picturing_the_century/greatdep/greatdep_img44.html",
22
+ "image_url": "https://www.archives.gov/exhibits/picturing_the_century/images/greatdep_044_v73.jpg",
23
+ "sha256": "c5e9a3fa57a6a0789e4b1529910e0294d98f245b24d205a1caccd08a5a3069b2",
24
+ "bytes": 68857
25
+ },
26
+ {
27
+ "name": "nara_45.jpg",
28
+ "title": "Children and sugar beets",
29
+ "source": "https://www.archives.gov/exhibits/picturing_the_century/greatdep/greatdep_img45.html",
30
+ "image_url": "https://www.archives.gov/exhibits/picturing_the_century/images/greatdep_045_v75.jpg",
31
+ "sha256": "3a3e3900cdb1384ca028a0a8843dcbcf499ffdd34832bc6b2e3f477d520403ae",
32
+ "bytes": 66706
33
+ },
34
+ {
35
+ "name": "nara_46.jpg",
36
+ "title": "Abandoned house",
37
+ "source": "https://www.archives.gov/exhibits/picturing_the_century/greatdep/greatdep_img46.html",
38
+ "image_url": "https://www.archives.gov/exhibits/picturing_the_century/images/greatdep_046_v76.jpg",
39
+ "sha256": "e7f2881c420c51c1855eb64219dc8c31e9a112976a3c81bfe0bcacb690d6b6e8",
40
+ "bytes": 74972
41
+ },
42
+ {
43
+ "name": "nara_49.jpg",
44
+ "title": "Man in his home",
45
+ "source": "https://www.archives.gov/exhibits/picturing_the_century/greatdep/greatdep_img49.html",
46
+ "image_url": "https://www.archives.gov/exhibits/picturing_the_century/images/greatdep_049_v72.jpg",
47
+ "sha256": "6d46bcc386aabf2dc090b2a05baf2e3ead04bc1274c38d87a60e1806ecfb4bab",
48
+ "bytes": 54941
49
+ }
50
+ ]
quantized/base93-v3/precision_plan.json ADDED
@@ -0,0 +1,946 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "queries": [
3
+ 1,
4
+ 64
5
+ ],
6
+ "encoder.0.0.weight": [
7
+ 2,
8
+ 256
9
+ ],
10
+ "encoder.0.1.weight": [
11
+ 2,
12
+ 256
13
+ ],
14
+ "encoder.0.1.bias": [
15
+ 2,
16
+ 256
17
+ ],
18
+ "encoder.1.block.0.0.weight": [
19
+ 2,
20
+ 256
21
+ ],
22
+ "encoder.1.block.0.1.weight": [
23
+ 2,
24
+ 256
25
+ ],
26
+ "encoder.1.block.0.1.bias": [
27
+ 2,
28
+ 256
29
+ ],
30
+ "encoder.1.block.1.0.weight": [
31
+ 2,
32
+ 256
33
+ ],
34
+ "encoder.1.block.1.1.weight": [
35
+ 2,
36
+ 256
37
+ ],
38
+ "encoder.1.block.1.1.bias": [
39
+ 2,
40
+ 256
41
+ ],
42
+ "encoder.2.block.0.0.weight": [
43
+ 2,
44
+ 256
45
+ ],
46
+ "encoder.2.block.0.1.weight": [
47
+ 2,
48
+ 256
49
+ ],
50
+ "encoder.2.block.0.1.bias": [
51
+ 2,
52
+ 256
53
+ ],
54
+ "encoder.2.block.1.0.weight": [
55
+ 2,
56
+ 256
57
+ ],
58
+ "encoder.2.block.1.1.weight": [
59
+ 2,
60
+ 256
61
+ ],
62
+ "encoder.2.block.1.1.bias": [
63
+ 2,
64
+ 256
65
+ ],
66
+ "encoder.2.block.2.0.weight": [
67
+ 2,
68
+ 256
69
+ ],
70
+ "encoder.2.block.2.1.weight": [
71
+ 2,
72
+ 256
73
+ ],
74
+ "encoder.2.block.2.1.bias": [
75
+ 2,
76
+ 256
77
+ ],
78
+ "encoder.3.block.0.0.weight": [
79
+ 2,
80
+ 256
81
+ ],
82
+ "encoder.3.block.0.1.weight": [
83
+ 2,
84
+ 256
85
+ ],
86
+ "encoder.3.block.0.1.bias": [
87
+ 2,
88
+ 256
89
+ ],
90
+ "encoder.3.block.1.0.weight": [
91
+ 2,
92
+ 256
93
+ ],
94
+ "encoder.3.block.1.1.weight": [
95
+ 2,
96
+ 256
97
+ ],
98
+ "encoder.3.block.1.1.bias": [
99
+ 2,
100
+ 256
101
+ ],
102
+ "encoder.3.block.2.0.weight": [
103
+ 2,
104
+ 256
105
+ ],
106
+ "encoder.3.block.2.1.weight": [
107
+ 2,
108
+ 256
109
+ ],
110
+ "encoder.3.block.2.1.bias": [
111
+ 2,
112
+ 256
113
+ ],
114
+ "encoder.4.block.0.0.weight": [
115
+ 2,
116
+ 256
117
+ ],
118
+ "encoder.4.block.0.1.weight": [
119
+ 2,
120
+ 256
121
+ ],
122
+ "encoder.4.block.0.1.bias": [
123
+ 2,
124
+ 256
125
+ ],
126
+ "encoder.4.block.1.0.weight": [
127
+ 2,
128
+ 256
129
+ ],
130
+ "encoder.4.block.1.1.weight": [
131
+ 2,
132
+ 256
133
+ ],
134
+ "encoder.4.block.1.1.bias": [
135
+ 2,
136
+ 256
137
+ ],
138
+ "encoder.4.block.2.fc1.weight": [
139
+ 1,
140
+ 64
141
+ ],
142
+ "encoder.4.block.2.fc1.bias": [
143
+ 2,
144
+ 256
145
+ ],
146
+ "encoder.4.block.2.fc2.weight": [
147
+ 1,
148
+ 64
149
+ ],
150
+ "encoder.4.block.2.fc2.bias": [
151
+ 2,
152
+ 256
153
+ ],
154
+ "encoder.4.block.3.0.weight": [
155
+ 1,
156
+ 64
157
+ ],
158
+ "encoder.4.block.3.1.weight": [
159
+ 2,
160
+ 256
161
+ ],
162
+ "encoder.4.block.3.1.bias": [
163
+ 2,
164
+ 256
165
+ ],
166
+ "encoder.5.block.0.0.weight": [
167
+ 1,
168
+ 64
169
+ ],
170
+ "encoder.5.block.0.1.weight": [
171
+ 2,
172
+ 256
173
+ ],
174
+ "encoder.5.block.0.1.bias": [
175
+ 2,
176
+ 256
177
+ ],
178
+ "encoder.5.block.1.0.weight": [
179
+ 2,
180
+ 256
181
+ ],
182
+ "encoder.5.block.1.1.weight": [
183
+ 2,
184
+ 256
185
+ ],
186
+ "encoder.5.block.1.1.bias": [
187
+ 2,
188
+ 256
189
+ ],
190
+ "encoder.5.block.2.fc1.weight": [
191
+ 2,
192
+ 256
193
+ ],
194
+ "encoder.5.block.2.fc1.bias": [
195
+ 2,
196
+ 256
197
+ ],
198
+ "encoder.5.block.2.fc2.weight": [
199
+ 1,
200
+ 64
201
+ ],
202
+ "encoder.5.block.2.fc2.bias": [
203
+ 2,
204
+ 256
205
+ ],
206
+ "encoder.5.block.3.0.weight": [
207
+ 1,
208
+ 64
209
+ ],
210
+ "encoder.5.block.3.1.weight": [
211
+ 2,
212
+ 256
213
+ ],
214
+ "encoder.5.block.3.1.bias": [
215
+ 2,
216
+ 256
217
+ ],
218
+ "encoder.6.block.0.0.weight": [
219
+ 1,
220
+ 64
221
+ ],
222
+ "encoder.6.block.0.1.weight": [
223
+ 2,
224
+ 256
225
+ ],
226
+ "encoder.6.block.0.1.bias": [
227
+ 2,
228
+ 256
229
+ ],
230
+ "encoder.6.block.1.0.weight": [
231
+ 2,
232
+ 256
233
+ ],
234
+ "encoder.6.block.1.1.weight": [
235
+ 2,
236
+ 256
237
+ ],
238
+ "encoder.6.block.1.1.bias": [
239
+ 2,
240
+ 256
241
+ ],
242
+ "encoder.6.block.2.fc1.weight": [
243
+ 1,
244
+ 64
245
+ ],
246
+ "encoder.6.block.2.fc1.bias": [
247
+ 2,
248
+ 256
249
+ ],
250
+ "encoder.6.block.2.fc2.weight": [
251
+ 2,
252
+ 256
253
+ ],
254
+ "encoder.6.block.2.fc2.bias": [
255
+ 2,
256
+ 256
257
+ ],
258
+ "encoder.6.block.3.0.weight": [
259
+ 1,
260
+ 64
261
+ ],
262
+ "encoder.6.block.3.1.weight": [
263
+ 2,
264
+ 256
265
+ ],
266
+ "encoder.6.block.3.1.bias": [
267
+ 2,
268
+ 256
269
+ ],
270
+ "encoder.7.block.0.0.weight": [
271
+ 1,
272
+ 32
273
+ ],
274
+ "encoder.7.block.0.1.weight": [
275
+ 2,
276
+ 256
277
+ ],
278
+ "encoder.7.block.0.1.bias": [
279
+ 2,
280
+ 256
281
+ ],
282
+ "encoder.7.block.1.0.weight": [
283
+ 2,
284
+ 256
285
+ ],
286
+ "encoder.7.block.1.1.weight": [
287
+ 2,
288
+ 256
289
+ ],
290
+ "encoder.7.block.1.1.bias": [
291
+ 2,
292
+ 256
293
+ ],
294
+ "encoder.7.block.2.0.weight": [
295
+ 2,
296
+ 256
297
+ ],
298
+ "encoder.7.block.2.1.weight": [
299
+ 2,
300
+ 256
301
+ ],
302
+ "encoder.7.block.2.1.bias": [
303
+ 2,
304
+ 256
305
+ ],
306
+ "encoder.8.block.0.0.weight": [
307
+ 1,
308
+ 64
309
+ ],
310
+ "encoder.8.block.0.1.weight": [
311
+ 2,
312
+ 256
313
+ ],
314
+ "encoder.8.block.0.1.bias": [
315
+ 2,
316
+ 256
317
+ ],
318
+ "encoder.8.block.1.0.weight": [
319
+ 1,
320
+ 64
321
+ ],
322
+ "encoder.8.block.1.1.weight": [
323
+ 2,
324
+ 256
325
+ ],
326
+ "encoder.8.block.1.1.bias": [
327
+ 2,
328
+ 256
329
+ ],
330
+ "encoder.8.block.2.0.weight": [
331
+ 2,
332
+ 256
333
+ ],
334
+ "encoder.8.block.2.1.weight": [
335
+ 2,
336
+ 256
337
+ ],
338
+ "encoder.8.block.2.1.bias": [
339
+ 2,
340
+ 256
341
+ ],
342
+ "encoder.9.block.0.0.weight": [
343
+ 1,
344
+ 32
345
+ ],
346
+ "encoder.9.block.0.1.weight": [
347
+ 2,
348
+ 256
349
+ ],
350
+ "encoder.9.block.0.1.bias": [
351
+ 2,
352
+ 256
353
+ ],
354
+ "encoder.9.block.1.0.weight": [
355
+ 2,
356
+ 256
357
+ ],
358
+ "encoder.9.block.1.1.weight": [
359
+ 2,
360
+ 256
361
+ ],
362
+ "encoder.9.block.1.1.bias": [
363
+ 2,
364
+ 256
365
+ ],
366
+ "encoder.9.block.2.0.weight": [
367
+ 2,
368
+ 256
369
+ ],
370
+ "encoder.9.block.2.1.weight": [
371
+ 2,
372
+ 256
373
+ ],
374
+ "encoder.9.block.2.1.bias": [
375
+ 2,
376
+ 256
377
+ ],
378
+ "encoder.10.block.0.0.weight": [
379
+ 2,
380
+ 256
381
+ ],
382
+ "encoder.10.block.0.1.weight": [
383
+ 2,
384
+ 256
385
+ ],
386
+ "encoder.10.block.0.1.bias": [
387
+ 2,
388
+ 256
389
+ ],
390
+ "encoder.10.block.1.0.weight": [
391
+ 1,
392
+ 64
393
+ ],
394
+ "encoder.10.block.1.1.weight": [
395
+ 2,
396
+ 256
397
+ ],
398
+ "encoder.10.block.1.1.bias": [
399
+ 2,
400
+ 256
401
+ ],
402
+ "encoder.10.block.2.0.weight": [
403
+ 2,
404
+ 256
405
+ ],
406
+ "encoder.10.block.2.1.weight": [
407
+ 2,
408
+ 256
409
+ ],
410
+ "encoder.10.block.2.1.bias": [
411
+ 2,
412
+ 256
413
+ ],
414
+ "encoder.11.block.0.0.weight": [
415
+ 1,
416
+ 64
417
+ ],
418
+ "encoder.11.block.0.1.weight": [
419
+ 2,
420
+ 256
421
+ ],
422
+ "encoder.11.block.0.1.bias": [
423
+ 2,
424
+ 256
425
+ ],
426
+ "encoder.11.block.1.0.weight": [
427
+ 1,
428
+ 64
429
+ ],
430
+ "encoder.11.block.1.1.weight": [
431
+ 2,
432
+ 256
433
+ ],
434
+ "encoder.11.block.1.1.bias": [
435
+ 2,
436
+ 256
437
+ ],
438
+ "encoder.11.block.2.fc1.weight": [
439
+ 1,
440
+ 64
441
+ ],
442
+ "encoder.11.block.2.fc1.bias": [
443
+ 2,
444
+ 256
445
+ ],
446
+ "encoder.11.block.2.fc2.weight": [
447
+ 1,
448
+ 64
449
+ ],
450
+ "encoder.11.block.2.fc2.bias": [
451
+ 2,
452
+ 256
453
+ ],
454
+ "encoder.11.block.3.0.weight": [
455
+ 1,
456
+ 64
457
+ ],
458
+ "encoder.11.block.3.1.weight": [
459
+ 2,
460
+ 256
461
+ ],
462
+ "encoder.11.block.3.1.bias": [
463
+ 2,
464
+ 256
465
+ ],
466
+ "encoder.12.block.0.0.weight": [
467
+ 1,
468
+ 64
469
+ ],
470
+ "encoder.12.block.0.1.weight": [
471
+ 2,
472
+ 256
473
+ ],
474
+ "encoder.12.block.0.1.bias": [
475
+ 2,
476
+ 256
477
+ ],
478
+ "encoder.12.block.1.0.weight": [
479
+ 2,
480
+ 256
481
+ ],
482
+ "encoder.12.block.1.1.weight": [
483
+ 2,
484
+ 256
485
+ ],
486
+ "encoder.12.block.1.1.bias": [
487
+ 2,
488
+ 256
489
+ ],
490
+ "encoder.12.block.2.fc1.weight": [
491
+ 1,
492
+ 64
493
+ ],
494
+ "encoder.12.block.2.fc1.bias": [
495
+ 2,
496
+ 256
497
+ ],
498
+ "encoder.12.block.2.fc2.weight": [
499
+ 1,
500
+ 64
501
+ ],
502
+ "encoder.12.block.2.fc2.bias": [
503
+ 2,
504
+ 256
505
+ ],
506
+ "encoder.12.block.3.0.weight": [
507
+ 1,
508
+ 64
509
+ ],
510
+ "encoder.12.block.3.1.weight": [
511
+ 2,
512
+ 256
513
+ ],
514
+ "encoder.12.block.3.1.bias": [
515
+ 2,
516
+ 256
517
+ ],
518
+ "encoder.13.block.0.0.weight": [
519
+ 1,
520
+ 64
521
+ ],
522
+ "encoder.13.block.0.1.weight": [
523
+ 2,
524
+ 256
525
+ ],
526
+ "encoder.13.block.0.1.bias": [
527
+ 2,
528
+ 256
529
+ ],
530
+ "encoder.13.block.1.0.weight": [
531
+ 1,
532
+ 64
533
+ ],
534
+ "encoder.13.block.1.1.weight": [
535
+ 2,
536
+ 256
537
+ ],
538
+ "encoder.13.block.1.1.bias": [
539
+ 2,
540
+ 256
541
+ ],
542
+ "encoder.13.block.2.fc1.weight": [
543
+ 1,
544
+ 64
545
+ ],
546
+ "encoder.13.block.2.fc1.bias": [
547
+ 2,
548
+ 256
549
+ ],
550
+ "encoder.13.block.2.fc2.weight": [
551
+ 1,
552
+ 64
553
+ ],
554
+ "encoder.13.block.2.fc2.bias": [
555
+ 2,
556
+ 256
557
+ ],
558
+ "encoder.13.block.3.0.weight": [
559
+ 1,
560
+ 64
561
+ ],
562
+ "encoder.13.block.3.1.weight": [
563
+ 2,
564
+ 256
565
+ ],
566
+ "encoder.13.block.3.1.bias": [
567
+ 2,
568
+ 256
569
+ ],
570
+ "encoder.14.block.0.0.weight": [
571
+ 1,
572
+ 64
573
+ ],
574
+ "encoder.14.block.0.1.weight": [
575
+ 2,
576
+ 256
577
+ ],
578
+ "encoder.14.block.0.1.bias": [
579
+ 2,
580
+ 256
581
+ ],
582
+ "encoder.14.block.1.0.weight": [
583
+ 1,
584
+ 64
585
+ ],
586
+ "encoder.14.block.1.1.weight": [
587
+ 2,
588
+ 256
589
+ ],
590
+ "encoder.14.block.1.1.bias": [
591
+ 2,
592
+ 256
593
+ ],
594
+ "encoder.14.block.2.fc1.weight": [
595
+ 1,
596
+ 64
597
+ ],
598
+ "encoder.14.block.2.fc1.bias": [
599
+ 2,
600
+ 256
601
+ ],
602
+ "encoder.14.block.2.fc2.weight": [
603
+ 1,
604
+ 64
605
+ ],
606
+ "encoder.14.block.2.fc2.bias": [
607
+ 2,
608
+ 256
609
+ ],
610
+ "encoder.14.block.3.0.weight": [
611
+ 1,
612
+ 64
613
+ ],
614
+ "encoder.14.block.3.1.weight": [
615
+ 2,
616
+ 256
617
+ ],
618
+ "encoder.14.block.3.1.bias": [
619
+ 2,
620
+ 256
621
+ ],
622
+ "encoder.15.block.0.0.weight": [
623
+ 1,
624
+ 64
625
+ ],
626
+ "encoder.15.block.0.1.weight": [
627
+ 2,
628
+ 256
629
+ ],
630
+ "encoder.15.block.0.1.bias": [
631
+ 2,
632
+ 256
633
+ ],
634
+ "encoder.15.block.1.0.weight": [
635
+ 2,
636
+ 256
637
+ ],
638
+ "encoder.15.block.1.1.weight": [
639
+ 2,
640
+ 256
641
+ ],
642
+ "encoder.15.block.1.1.bias": [
643
+ 2,
644
+ 256
645
+ ],
646
+ "encoder.15.block.2.fc1.weight": [
647
+ 1,
648
+ 64
649
+ ],
650
+ "encoder.15.block.2.fc1.bias": [
651
+ 2,
652
+ 256
653
+ ],
654
+ "encoder.15.block.2.fc2.weight": [
655
+ 1,
656
+ 64
657
+ ],
658
+ "encoder.15.block.2.fc2.bias": [
659
+ 2,
660
+ 256
661
+ ],
662
+ "encoder.15.block.3.0.weight": [
663
+ 2,
664
+ 256
665
+ ],
666
+ "encoder.15.block.3.1.weight": [
667
+ 2,
668
+ 256
669
+ ],
670
+ "encoder.15.block.3.1.bias": [
671
+ 2,
672
+ 256
673
+ ],
674
+ "encoder.16.0.weight": [
675
+ 2,
676
+ 256
677
+ ],
678
+ "encoder.16.1.weight": [
679
+ 2,
680
+ 256
681
+ ],
682
+ "encoder.16.1.bias": [
683
+ 2,
684
+ 256
685
+ ],
686
+ "lateral.0.weight": [
687
+ 1,
688
+ 64
689
+ ],
690
+ "lateral.0.bias": [
691
+ 2,
692
+ 256
693
+ ],
694
+ "lateral.1.weight": [
695
+ 1,
696
+ 64
697
+ ],
698
+ "lateral.1.bias": [
699
+ 2,
700
+ 256
701
+ ],
702
+ "lateral.2.weight": [
703
+ 1,
704
+ 64
705
+ ],
706
+ "lateral.2.bias": [
707
+ 2,
708
+ 256
709
+ ],
710
+ "lateral.3.weight": [
711
+ 1,
712
+ 64
713
+ ],
714
+ "lateral.3.bias": [
715
+ 2,
716
+ 256
717
+ ],
718
+ "refine.0.0.weight": [
719
+ 1,
720
+ 64
721
+ ],
722
+ "refine.0.1.weight": [
723
+ 2,
724
+ 256
725
+ ],
726
+ "refine.0.1.bias": [
727
+ 2,
728
+ 256
729
+ ],
730
+ "refine.1.0.weight": [
731
+ 1,
732
+ 64
733
+ ],
734
+ "refine.1.1.weight": [
735
+ 2,
736
+ 256
737
+ ],
738
+ "refine.1.1.bias": [
739
+ 2,
740
+ 256
741
+ ],
742
+ "refine.2.0.weight": [
743
+ 1,
744
+ 64
745
+ ],
746
+ "refine.2.1.weight": [
747
+ 2,
748
+ 256
749
+ ],
750
+ "refine.2.1.bias": [
751
+ 2,
752
+ 256
753
+ ],
754
+ "query_blocks.0.self_attn.in_proj_weight": [
755
+ 1,
756
+ 64
757
+ ],
758
+ "query_blocks.0.self_attn.in_proj_bias": [
759
+ 2,
760
+ 256
761
+ ],
762
+ "query_blocks.0.self_attn.out_proj.weight": [
763
+ 1,
764
+ 64
765
+ ],
766
+ "query_blocks.0.self_attn.out_proj.bias": [
767
+ 2,
768
+ 256
769
+ ],
770
+ "query_blocks.0.cross_attn.in_proj_weight": [
771
+ 1,
772
+ 64
773
+ ],
774
+ "query_blocks.0.cross_attn.in_proj_bias": [
775
+ 2,
776
+ 256
777
+ ],
778
+ "query_blocks.0.cross_attn.out_proj.weight": [
779
+ 1,
780
+ 64
781
+ ],
782
+ "query_blocks.0.cross_attn.out_proj.bias": [
783
+ 2,
784
+ 256
785
+ ],
786
+ "query_blocks.0.norms.0.weight": [
787
+ 2,
788
+ 256
789
+ ],
790
+ "query_blocks.0.norms.0.bias": [
791
+ 2,
792
+ 256
793
+ ],
794
+ "query_blocks.0.norms.1.weight": [
795
+ 2,
796
+ 256
797
+ ],
798
+ "query_blocks.0.norms.1.bias": [
799
+ 2,
800
+ 256
801
+ ],
802
+ "query_blocks.0.norms.2.weight": [
803
+ 2,
804
+ 256
805
+ ],
806
+ "query_blocks.0.norms.2.bias": [
807
+ 2,
808
+ 256
809
+ ],
810
+ "query_blocks.0.ff.0.weight": [
811
+ 1,
812
+ 64
813
+ ],
814
+ "query_blocks.0.ff.0.bias": [
815
+ 2,
816
+ 256
817
+ ],
818
+ "query_blocks.0.ff.2.weight": [
819
+ 1,
820
+ 64
821
+ ],
822
+ "query_blocks.0.ff.2.bias": [
823
+ 2,
824
+ 256
825
+ ],
826
+ "query_blocks.1.self_attn.in_proj_weight": [
827
+ 1,
828
+ 64
829
+ ],
830
+ "query_blocks.1.self_attn.in_proj_bias": [
831
+ 2,
832
+ 256
833
+ ],
834
+ "query_blocks.1.self_attn.out_proj.weight": [
835
+ 1,
836
+ 64
837
+ ],
838
+ "query_blocks.1.self_attn.out_proj.bias": [
839
+ 2,
840
+ 256
841
+ ],
842
+ "query_blocks.1.cross_attn.in_proj_weight": [
843
+ 1,
844
+ 64
845
+ ],
846
+ "query_blocks.1.cross_attn.in_proj_bias": [
847
+ 2,
848
+ 256
849
+ ],
850
+ "query_blocks.1.cross_attn.out_proj.weight": [
851
+ 1,
852
+ 64
853
+ ],
854
+ "query_blocks.1.cross_attn.out_proj.bias": [
855
+ 2,
856
+ 256
857
+ ],
858
+ "query_blocks.1.norms.0.weight": [
859
+ 2,
860
+ 256
861
+ ],
862
+ "query_blocks.1.norms.0.bias": [
863
+ 2,
864
+ 256
865
+ ],
866
+ "query_blocks.1.norms.1.weight": [
867
+ 2,
868
+ 256
869
+ ],
870
+ "query_blocks.1.norms.1.bias": [
871
+ 2,
872
+ 256
873
+ ],
874
+ "query_blocks.1.norms.2.weight": [
875
+ 2,
876
+ 256
877
+ ],
878
+ "query_blocks.1.norms.2.bias": [
879
+ 2,
880
+ 256
881
+ ],
882
+ "query_blocks.1.ff.0.weight": [
883
+ 1,
884
+ 64
885
+ ],
886
+ "query_blocks.1.ff.0.bias": [
887
+ 2,
888
+ 256
889
+ ],
890
+ "query_blocks.1.ff.2.weight": [
891
+ 1,
892
+ 64
893
+ ],
894
+ "query_blocks.1.ff.2.bias": [
895
+ 2,
896
+ 256
897
+ ],
898
+ "memory_norm.weight": [
899
+ 2,
900
+ 256
901
+ ],
902
+ "memory_norm.bias": [
903
+ 2,
904
+ 256
905
+ ],
906
+ "query_norm.weight": [
907
+ 2,
908
+ 256
909
+ ],
910
+ "query_norm.bias": [
911
+ 2,
912
+ 256
913
+ ],
914
+ "pixel.weight": [
915
+ 1,
916
+ 64
917
+ ],
918
+ "pixel.bias": [
919
+ 2,
920
+ 256
921
+ ],
922
+ "palette.0.weight": [
923
+ 1,
924
+ 64
925
+ ],
926
+ "palette.0.bias": [
927
+ 2,
928
+ 256
929
+ ],
930
+ "palette.2.weight": [
931
+ 1,
932
+ 64
933
+ ],
934
+ "palette.2.bias": [
935
+ 2,
936
+ 256
937
+ ],
938
+ "residual.weight": [
939
+ 2,
940
+ 256
941
+ ],
942
+ "residual.bias": [
943
+ 2,
944
+ 256
945
+ ]
946
+ }
quantized/base93-v3/requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ torch==2.8.0
2
+ torchvision==0.23.0
3
+ numpy==1.26.4
4
+ Pillow==11.1.0
5
+ scikit-image==0.25.2
6
+ safetensors==0.5.3
7
+ huggingface-hub>=1.0,<2
quantized/base93-v3/semantic_model.py ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Compact pretrained semantic colorizer; dense and shared-palette variants."""
2
+ import json
3
+ from pathlib import Path
4
+ import torch
5
+ from torch import nn
6
+ import torch.nn.functional as F
7
+ from torchvision.models import mobilenet_v3_large, MobileNet_V3_Large_Weights
8
+ from safetensors.torch import save_file, load_file
9
+
10
+ class QueryBlock(nn.Module):
11
+ def __init__(self,d=96):
12
+ super().__init__()
13
+ self.self_attn=nn.MultiheadAttention(d,4,batch_first=True,dropout=0)
14
+ self.cross_attn=nn.MultiheadAttention(d,4,batch_first=True,dropout=0)
15
+ self.norms=nn.ModuleList([nn.LayerNorm(d) for _ in range(3)])
16
+ self.ff=nn.Sequential(nn.Linear(d,2*d),nn.GELU(),nn.Linear(2*d,d))
17
+ def forward(self,q,memory):
18
+ x=self.norms[0](q);q=q+self.self_attn(x,x,x,need_weights=False)[0]
19
+ x=self.norms[1](q);q=q+self.cross_attn(x,memory,memory,need_weights=False)[0]
20
+ return q+self.ff(self.norms[2](q))
21
+
22
+ def refine(d):
23
+ return nn.Sequential(nn.Conv2d(d,d,3,padding=1,bias=False),nn.GroupNorm(8,d),nn.SiLU())
24
+
25
+ class SemanticColorizer(nn.Module):
26
+ def __init__(self,head='palette',pretrained=False,width=128,queries=16):
27
+ super().__init__()
28
+ if head not in ['palette','dense']:raise ValueError(head)
29
+ self.config={'architecture':'SemanticColorizer','head':head,'width':width,'queries':queries,'format_version':1}
30
+ self.encoder=mobilenet_v3_large(weights=MobileNet_V3_Large_Weights.IMAGENET1K_V2 if pretrained else None,progress=False).features
31
+ self.lateral=nn.ModuleList([nn.Conv2d(c,width,1) for c in [24,40,112,960]])
32
+ self.refine=nn.ModuleList([refine(width) for _ in range(3)])
33
+ self.register_buffer('rgb_mean',torch.tensor([.485,.456,.406]).view(1,3,1,1))
34
+ self.register_buffer('rgb_std',torch.tensor([.229,.224,.225]).view(1,3,1,1))
35
+ if head=='palette':
36
+ self.queries=nn.Parameter(torch.randn(queries,width)*.2)
37
+ self.query_blocks=nn.ModuleList([QueryBlock(width) for _ in range(2)])
38
+ self.memory_norm=nn.LayerNorm(width)
39
+ self.query_norm=nn.LayerNorm(width)
40
+ self.pixel=nn.Conv2d(width,width,1)
41
+ self.palette=nn.Sequential(nn.Linear(width,width),nn.GELU(),nn.Linear(width,2))
42
+ self.residual=nn.Conv2d(width,2,1)
43
+ nn.init.normal_(self.palette[-1].weight,std=.01);nn.init.zeros_(self.palette[-1].bias)
44
+ nn.init.zeros_(self.residual.weight);nn.init.zeros_(self.residual.bias)
45
+ else:
46
+ self.dense=nn.Sequential(refine(width),nn.Conv2d(width,2,1))
47
+ nn.init.normal_(self.dense[-1].weight,std=.01);nn.init.zeros_(self.dense[-1].bias)
48
+ count=sum(p.numel() for p in self.parameters())
49
+ if count>=4_000_000:raise ValueError(f'Parameter budget exceeded: {count}')
50
+
51
+ @staticmethod
52
+ def neutral_rgb(L):
53
+ light=(L.float()*50+50).clamp(0,100)
54
+ y=torch.where(light>8,((light+16)/116)**3,light/903.296296)
55
+ g=torch.where(y<=.0031308,12.92*y,1.055*y.clamp_min(1e-8).pow(1/2.4)-.055)
56
+ return g.expand(-1,3,-1,-1)
57
+
58
+ def forward(self,L):
59
+ h,w=L.shape[-2:]
60
+ x=F.pad(self.neutral_rgb(L),(0,(-w)%32,0,(-h)%32),mode='replicate')
61
+ x=(x-self.rgb_mean)/self.rgb_std
62
+ features=[]
63
+ for i,layer in enumerate(self.encoder):
64
+ x=layer(x)
65
+ if i in [3,6,12,16]:features.append(x)
66
+ projected=[layer(f) for layer,f in zip(self.lateral,features)]
67
+ x=projected[-1]
68
+ for i in range(2,-1,-1):
69
+ x=self.refine[2-i](F.interpolate(x,size=projected[i].shape[-2:],mode='bilinear',align_corners=False)+projected[i])
70
+ if self.config['head']=='palette':
71
+ memory=torch.cat([F.adaptive_avg_pool2d(f,(8,8)).flatten(2).transpose(1,2) for f in projected[1:]],1)
72
+ memory=self.memory_norm(memory)
73
+ q=self.queries[None].expand(L.shape[0],-1,-1)
74
+ for block in self.query_blocks:q=block(q,memory)
75
+ q=self.query_norm(q)
76
+ palette=80*torch.tanh(self.palette(q))
77
+ masks=torch.einsum('bqd,bdhw->bqhw',q,self.pixel(x))/(self.config['width']**.5)
78
+ weights=F.softmax(masks.float(),dim=1)
79
+ ab=torch.einsum('bqhw,bqc->bchw',weights,palette.float())+2*torch.tanh(self.residual(x).float())
80
+ else:ab=80*torch.tanh(self.dense(x).float())
81
+ return F.interpolate(ab,size=(x.shape[-2]*4,x.shape[-1]*4),mode='bilinear',align_corners=False)[...,:h,:w]
82
+ def decode(self,z,temperature=.38):return z.float()
83
+
84
+ def save_semantic(model,path):
85
+ path=Path(path);path.mkdir(parents=True,exist_ok=True)
86
+ save_file({k:v.detach().cpu().contiguous() for k,v in model.state_dict().items()},str(path/'model.safetensors'))
87
+ (path/'config.json').write_text(json.dumps(model.config,indent=2))
88
+ (path/'README.md').write_text('# Experimental semantic colorizer\n\nHead: '+model.config['head']+'. Parameters: '+str(sum(p.numel() for p in model.parameters()))+'.\n\nNot approved for production. Requires semantic_model.py; incompatible with the old U-Net loader. Input is Lab lightness normalized to [-1,1]; output is Lab ab. See the run protocol, provenance, selection and visual comparisons. Predictions are plausible colors, not recovered historical truth.\n')
89
+
90
+ def load_semantic(path,device='cpu'):
91
+ path=Path(path);cfg=json.loads((path/'config.json').read_text())
92
+ model=SemanticColorizer(**{k:cfg[k] for k in ['head','width','queries']})
93
+ model.load_state_dict(load_file(str(path/'model.safetensors')),strict=True)
94
+ return model.to(device).eval()
quantized/base93-v3/verify_decoders.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Independent whole-file decoder verification against Python's little-endian hashes.
2
+ const fs=require('fs'),crypto=require('crypto'),assert=require('assert');
3
+ const {decodeBase93}=require('./decode_base93');
4
+ const text=fs.readFileSync(process.argv[2]||__dirname+'/weights_base93.txt','ascii');
5
+ const expected=JSON.parse(fs.readFileSync(__dirname+'/decoded_tensor_hashes.json','utf8'));
6
+ assert.strictEqual(JSON.parse(JSON.stringify(text)),text);
7
+ assert(Buffer.byteLength(JSON.stringify(text),'utf8')<5000000);
8
+ const {tensors}=decodeBase93(text);
9
+ assert.strictEqual(Object.keys(tensors).length,Object.keys(expected).length);
10
+ for(const [name,t] of Object.entries(tensors)) {
11
+ const bytes=Buffer.alloc(t.values.length*(t.kind==='i'?8:4));
12
+ for(let i=0;i<t.values.length;i++) {
13
+ if(t.kind==='i')bytes.writeBigInt64LE(t.values[i],8*i);
14
+ else bytes.writeFloatLE(t.values[i],4*i);
15
+ }
16
+ assert.strictEqual(crypto.createHash('sha256').update(bytes).digest('hex'),expected[name],name);
17
+ }
18
+ console.log(JSON.stringify({tensors:Object.keys(tensors).length,python_javascript_bitwise_match:true,json_string_bytes:Buffer.byteLength(JSON.stringify(text)),sha256:crypto.createHash('sha256').update(text,'ascii').digest('hex')}));
quantized/base93-v3/weights_base93.txt ADDED
The diff for this file is too large to render. See raw diff
 
quantized/mini-unet-colorizer-v3-base93.zip ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e822614417cdfee019ea2f328a00cb6715f3edb62abddbb3b7e7953b1128ac74
3
+ size 9148179