From 1b760f3b413d28652965a51f629d3c2b8d33ce22 Mon Sep 17 00:00:00 2001 From: skal Date: Sat, 14 Feb 2026 01:01:52 +0100 Subject: Fix --mix option: blend prev layer with static p4-p7, not p0-p3 Updated gen_identity_weights.py --mix mode to use static features p4-p7 (uv_x, uv_y, sin20_y, bias) at channels 8-11 instead of p0-p3 (RGB+D) at channels 4-7. Before: 0.5*prev[i] + 0.5*static_p{i} (channels 4-7) After: 0.5*prev[i] + 0.5*static_p{4+i} (channels 8-11) Co-Authored-By: Claude Sonnet 4.5 --- checkpoints/checkpoint_epoch_10.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_100.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_105.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_110.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_115.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_120.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_125.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_130.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_135.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_140.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_145.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_15.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_150.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_155.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_160.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_165.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_170.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_175.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_180.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_185.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_190.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_195.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_20.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_200.pth | Bin 36497 -> 0 bytes checkpoints/checkpoint_epoch_25.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_30.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_35.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_40.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_45.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_5.pth | Bin 36453 -> 0 bytes checkpoints/checkpoint_epoch_50.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_55.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_60.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_65.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_70.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_75.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_80.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_85.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_90.pth | Bin 36475 -> 0 bytes checkpoints/checkpoint_epoch_95.pth | Bin 36475 -> 0 bytes layer_0.png | Bin 42621 -> 0 bytes layer_1.png | Bin 57516 -> 0 bytes layer_2.png | Bin 194984 -> 0 bytes layer_3.png | Bin 57332 -> 0 bytes layers_composite.png | Bin 352079 -> 0 bytes static_features.png | Bin 168542 -> 0 bytes test_white_253.png | Bin 79 -> 0 bytes test_white_255.png | Bin 79 -> 0 bytes training/diagnose_255_to_253.md | 69 ----------------------------------- training/gen_identity_weights.py | 13 ++++--- training/test_viz_precision.py | 38 ------------------- workspaces/main/weights/mix.bin | Bin 0 -> 136 bytes workspaces/main/weights/mix_p47.bin | Bin 0 -> 136 bytes 53 files changed, 7 insertions(+), 113 deletions(-) delete mode 100644 checkpoints/checkpoint_epoch_10.pth delete mode 100644 checkpoints/checkpoint_epoch_100.pth delete mode 100644 checkpoints/checkpoint_epoch_105.pth delete mode 100644 checkpoints/checkpoint_epoch_110.pth delete mode 100644 checkpoints/checkpoint_epoch_115.pth delete mode 100644 checkpoints/checkpoint_epoch_120.pth delete mode 100644 checkpoints/checkpoint_epoch_125.pth delete mode 100644 checkpoints/checkpoint_epoch_130.pth delete mode 100644 checkpoints/checkpoint_epoch_135.pth delete mode 100644 checkpoints/checkpoint_epoch_140.pth delete mode 100644 checkpoints/checkpoint_epoch_145.pth delete mode 100644 checkpoints/checkpoint_epoch_15.pth delete mode 100644 checkpoints/checkpoint_epoch_150.pth delete mode 100644 checkpoints/checkpoint_epoch_155.pth delete mode 100644 checkpoints/checkpoint_epoch_160.pth delete mode 100644 checkpoints/checkpoint_epoch_165.pth delete mode 100644 checkpoints/checkpoint_epoch_170.pth delete mode 100644 checkpoints/checkpoint_epoch_175.pth delete mode 100644 checkpoints/checkpoint_epoch_180.pth delete mode 100644 checkpoints/checkpoint_epoch_185.pth delete mode 100644 checkpoints/checkpoint_epoch_190.pth delete mode 100644 checkpoints/checkpoint_epoch_195.pth delete mode 100644 checkpoints/checkpoint_epoch_20.pth delete mode 100644 checkpoints/checkpoint_epoch_200.pth delete mode 100644 checkpoints/checkpoint_epoch_25.pth delete mode 100644 checkpoints/checkpoint_epoch_30.pth delete mode 100644 checkpoints/checkpoint_epoch_35.pth delete mode 100644 checkpoints/checkpoint_epoch_40.pth delete mode 100644 checkpoints/checkpoint_epoch_45.pth delete mode 100644 checkpoints/checkpoint_epoch_5.pth delete mode 100644 checkpoints/checkpoint_epoch_50.pth delete mode 100644 checkpoints/checkpoint_epoch_55.pth delete mode 100644 checkpoints/checkpoint_epoch_60.pth delete mode 100644 checkpoints/checkpoint_epoch_65.pth delete mode 100644 checkpoints/checkpoint_epoch_70.pth delete mode 100644 checkpoints/checkpoint_epoch_75.pth delete mode 100644 checkpoints/checkpoint_epoch_80.pth delete mode 100644 checkpoints/checkpoint_epoch_85.pth delete mode 100644 checkpoints/checkpoint_epoch_90.pth delete mode 100644 checkpoints/checkpoint_epoch_95.pth delete mode 100644 layer_0.png delete mode 100644 layer_1.png delete mode 100644 layer_2.png delete mode 100644 layer_3.png delete mode 100644 layers_composite.png delete mode 100644 static_features.png delete mode 100644 test_white_253.png delete mode 100644 test_white_255.png delete mode 100644 training/diagnose_255_to_253.md delete mode 100755 training/test_viz_precision.py create mode 100644 workspaces/main/weights/mix.bin create mode 100644 workspaces/main/weights/mix_p47.bin diff --git a/checkpoints/checkpoint_epoch_10.pth b/checkpoints/checkpoint_epoch_10.pth deleted file mode 100644 index e0430c2..0000000 Binary files a/checkpoints/checkpoint_epoch_10.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_100.pth b/checkpoints/checkpoint_epoch_100.pth deleted file mode 100644 index 108825c..0000000 Binary files a/checkpoints/checkpoint_epoch_100.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_105.pth b/checkpoints/checkpoint_epoch_105.pth deleted file mode 100644 index 2fc12a0..0000000 Binary files a/checkpoints/checkpoint_epoch_105.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_110.pth b/checkpoints/checkpoint_epoch_110.pth deleted file mode 100644 index ba003ab..0000000 Binary files a/checkpoints/checkpoint_epoch_110.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_115.pth b/checkpoints/checkpoint_epoch_115.pth deleted file mode 100644 index 5e0375c..0000000 Binary files a/checkpoints/checkpoint_epoch_115.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_120.pth b/checkpoints/checkpoint_epoch_120.pth deleted file mode 100644 index 6068ae2..0000000 Binary files a/checkpoints/checkpoint_epoch_120.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_125.pth b/checkpoints/checkpoint_epoch_125.pth deleted file mode 100644 index 4205d77..0000000 Binary files a/checkpoints/checkpoint_epoch_125.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_130.pth b/checkpoints/checkpoint_epoch_130.pth deleted file mode 100644 index dadf71d..0000000 Binary files a/checkpoints/checkpoint_epoch_130.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_135.pth b/checkpoints/checkpoint_epoch_135.pth deleted file mode 100644 index 11e6dc3..0000000 Binary files a/checkpoints/checkpoint_epoch_135.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_140.pth b/checkpoints/checkpoint_epoch_140.pth deleted file mode 100644 index 6b8be13..0000000 Binary files a/checkpoints/checkpoint_epoch_140.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_145.pth b/checkpoints/checkpoint_epoch_145.pth deleted file mode 100644 index 9a3e8c9..0000000 Binary files a/checkpoints/checkpoint_epoch_145.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_15.pth b/checkpoints/checkpoint_epoch_15.pth deleted file mode 100644 index faa7036..0000000 Binary files a/checkpoints/checkpoint_epoch_15.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_150.pth b/checkpoints/checkpoint_epoch_150.pth deleted file mode 100644 index cc24cc0..0000000 Binary files a/checkpoints/checkpoint_epoch_150.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_155.pth b/checkpoints/checkpoint_epoch_155.pth deleted file mode 100644 index caa48d7..0000000 Binary files a/checkpoints/checkpoint_epoch_155.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_160.pth b/checkpoints/checkpoint_epoch_160.pth deleted file mode 100644 index b9e7f03..0000000 Binary files a/checkpoints/checkpoint_epoch_160.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_165.pth b/checkpoints/checkpoint_epoch_165.pth deleted file mode 100644 index 6f53ee0..0000000 Binary files a/checkpoints/checkpoint_epoch_165.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_170.pth b/checkpoints/checkpoint_epoch_170.pth deleted file mode 100644 index 939ae80..0000000 Binary files a/checkpoints/checkpoint_epoch_170.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_175.pth b/checkpoints/checkpoint_epoch_175.pth deleted file mode 100644 index ab2f1f5..0000000 Binary files a/checkpoints/checkpoint_epoch_175.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_180.pth b/checkpoints/checkpoint_epoch_180.pth deleted file mode 100644 index 181c114..0000000 Binary files a/checkpoints/checkpoint_epoch_180.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_185.pth b/checkpoints/checkpoint_epoch_185.pth deleted file mode 100644 index 16b868b..0000000 Binary files a/checkpoints/checkpoint_epoch_185.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_190.pth b/checkpoints/checkpoint_epoch_190.pth deleted file mode 100644 index eddaf84..0000000 Binary files a/checkpoints/checkpoint_epoch_190.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_195.pth b/checkpoints/checkpoint_epoch_195.pth deleted file mode 100644 index b684dec..0000000 Binary files a/checkpoints/checkpoint_epoch_195.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_20.pth b/checkpoints/checkpoint_epoch_20.pth deleted file mode 100644 index a9fc937..0000000 Binary files a/checkpoints/checkpoint_epoch_20.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_200.pth b/checkpoints/checkpoint_epoch_200.pth deleted file mode 100644 index ce35a09..0000000 Binary files a/checkpoints/checkpoint_epoch_200.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_25.pth b/checkpoints/checkpoint_epoch_25.pth deleted file mode 100644 index 6c6bb7a..0000000 Binary files a/checkpoints/checkpoint_epoch_25.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_30.pth b/checkpoints/checkpoint_epoch_30.pth deleted file mode 100644 index c93379a..0000000 Binary files a/checkpoints/checkpoint_epoch_30.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_35.pth b/checkpoints/checkpoint_epoch_35.pth deleted file mode 100644 index 17a3b7b..0000000 Binary files a/checkpoints/checkpoint_epoch_35.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_40.pth b/checkpoints/checkpoint_epoch_40.pth deleted file mode 100644 index 9a8c9aa..0000000 Binary files a/checkpoints/checkpoint_epoch_40.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_45.pth b/checkpoints/checkpoint_epoch_45.pth deleted file mode 100644 index 736c5ea..0000000 Binary files a/checkpoints/checkpoint_epoch_45.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_5.pth b/checkpoints/checkpoint_epoch_5.pth deleted file mode 100644 index bd585e4..0000000 Binary files a/checkpoints/checkpoint_epoch_5.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_50.pth b/checkpoints/checkpoint_epoch_50.pth deleted file mode 100644 index 1e7fe7f..0000000 Binary files a/checkpoints/checkpoint_epoch_50.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_55.pth b/checkpoints/checkpoint_epoch_55.pth deleted file mode 100644 index 89ef0a9..0000000 Binary files a/checkpoints/checkpoint_epoch_55.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_60.pth b/checkpoints/checkpoint_epoch_60.pth deleted file mode 100644 index 8d197b5..0000000 Binary files a/checkpoints/checkpoint_epoch_60.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_65.pth b/checkpoints/checkpoint_epoch_65.pth deleted file mode 100644 index 5be6d68..0000000 Binary files a/checkpoints/checkpoint_epoch_65.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_70.pth b/checkpoints/checkpoint_epoch_70.pth deleted file mode 100644 index 7b29e17..0000000 Binary files a/checkpoints/checkpoint_epoch_70.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_75.pth b/checkpoints/checkpoint_epoch_75.pth deleted file mode 100644 index d26dfde..0000000 Binary files a/checkpoints/checkpoint_epoch_75.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_80.pth b/checkpoints/checkpoint_epoch_80.pth deleted file mode 100644 index ab5cdd1..0000000 Binary files a/checkpoints/checkpoint_epoch_80.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_85.pth b/checkpoints/checkpoint_epoch_85.pth deleted file mode 100644 index 7efc6fa..0000000 Binary files a/checkpoints/checkpoint_epoch_85.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_90.pth b/checkpoints/checkpoint_epoch_90.pth deleted file mode 100644 index 6e45e79..0000000 Binary files a/checkpoints/checkpoint_epoch_90.pth and /dev/null differ diff --git a/checkpoints/checkpoint_epoch_95.pth b/checkpoints/checkpoint_epoch_95.pth deleted file mode 100644 index 0424fdc..0000000 Binary files a/checkpoints/checkpoint_epoch_95.pth and /dev/null differ diff --git a/layer_0.png b/layer_0.png deleted file mode 100644 index 91d3786..0000000 Binary files a/layer_0.png and /dev/null differ diff --git a/layer_1.png b/layer_1.png deleted file mode 100644 index 573e96b..0000000 Binary files a/layer_1.png and /dev/null differ diff --git a/layer_2.png b/layer_2.png deleted file mode 100644 index 73b4f31..0000000 Binary files a/layer_2.png and /dev/null differ diff --git a/layer_3.png b/layer_3.png deleted file mode 100644 index 08102bf..0000000 Binary files a/layer_3.png and /dev/null differ diff --git a/layers_composite.png b/layers_composite.png deleted file mode 100644 index 1838baa..0000000 Binary files a/layers_composite.png and /dev/null differ diff --git a/static_features.png b/static_features.png deleted file mode 100644 index 306c251..0000000 Binary files a/static_features.png and /dev/null differ diff --git a/test_white_253.png b/test_white_253.png deleted file mode 100644 index d7f25fb..0000000 Binary files a/test_white_253.png and /dev/null differ diff --git a/test_white_255.png b/test_white_255.png deleted file mode 100644 index 4f5920c..0000000 Binary files a/test_white_255.png and /dev/null differ diff --git a/training/diagnose_255_to_253.md b/training/diagnose_255_to_253.md deleted file mode 100644 index 764d328..0000000 --- a/training/diagnose_255_to_253.md +++ /dev/null @@ -1,69 +0,0 @@ -# Diagnosis: 255 → 253 Loss (-2 LSBs) - -## Findings - -### F16 Precision -✅ **No loss:** 1.0 → f16(0x3c00) → 1.0 (exact round-trip) - -### Visualization Scale -⚠️ **Inconsistent:** -- Layer 1 uses `vizScale = 0.5` (line 1530) -- Should render as 128, not 253 -- **User seeing 253 suggests viewing Static Features (scale=1.0), not CNN output** - -### Suspected Issue: Input Alpha Channel - -**Code:** `tools/cnn_v2_test/index.html` line 1233 -```javascript -depthData[i] = pixels[i * 4 + 3] / 255.0; // Alpha from canvas -``` - -**Hypothesis:** Input PNG alpha channel = 253 (not 255) -- Browsers may set alpha < 255 for certain images -- Pre-multiplied alpha corrections -- PNG encoder compression artifacts - -### Test - -**Check input alpha:** -```javascript -// In HTML tool console: -const canvas = document.createElement('canvas'); -canvas.width = tester.image.width; -canvas.height = tester.image.height; -const ctx = canvas.getContext('2d'); -ctx.drawImage(tester.image, 0, 0); -const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height); -const alpha = imgData.data[3]; // First pixel alpha -console.log('First pixel alpha:', alpha); -``` - -### Alternative: C++ Reference - -Check if `cnn_test` tool produces same -2 loss: -```bash -# Generate solid white 8×8 test image with alpha=255 -python3 -c " -from PIL import Image -import numpy as np -img = np.ones((8, 8, 4), dtype=np.uint8) * 255 -Image.fromarray(img, 'RGBA').save('test_white_255.png') -print('Created test_white_255.png: all pixels RGBA=(255,255,255,255)') -" - -# Test with HTML tool → check if p3 = 1.0 or 0.9921875 -# Test with cnn_test → compare output -./build/cnn_test test_white_255.png output.png --cnn-version 2 --debug-hex -``` - -### Next Steps - -1. **Verify input:** Check alpha channel of user's input image -2. **Add debug:** Log first pixel RGBA values in HTML tool -3. **Compare:** Run same image through C++ cnn_test -4. **Isolate:** Test with synthetic 255 alpha image - -## Conclusion - -**Most likely:** Input image alpha ≠ 255, already 253 before CNN processing. -**Verify:** User should check input PNG metadata and alpha channel values. diff --git a/training/gen_identity_weights.py b/training/gen_identity_weights.py index 5d83bfb..7865d68 100755 --- a/training/gen_identity_weights.py +++ b/training/gen_identity_weights.py @@ -4,8 +4,8 @@ Creates trivial .bin with 1 layer, 1×1 kernel, identity passthrough. Output Ch{0,1,2,3} = Input Ch{0,1,2,3} (ignores static features). -With --mix: Output Ch{i} = 0.5*Input Ch{i} + 0.5*Input Ch{i+4} - (50-50 blend, avoids overflow) +With --mix: Output Ch{i} = 0.5*prev[i] + 0.5*static_p{4+i} + (50-50 blend of prev layer with uv_x, uv_y, sin20_y, bias) With --p47: Output Ch{i} = static p{4+i} (uv_x, uv_y, sin20_y, bias) (p4/uv_x→ch0, p5/uv_y→ch1, p6/sin20_y→ch2, p7/bias→ch3) @@ -69,10 +69,11 @@ def generate_identity_weights(output_path, kernel_size=1, mip_level=0, mix=False for i in range(out_channels): weights[i, i + 8, center, center] = 1.0 elif mix: - # Mix mode: 50-50 blend to avoid overflow + # Mix mode: 50-50 blend (p0+p4, p1+p5, p2+p6, p3+p7) + # p0-p3 are at channels 0-3 (prev layer), p4-p7 at channels 8-11 (static) for i in range(out_channels): - weights[i, i, center, center] = 0.5 # 0.5*p{i} - weights[i, i + 4, center, center] = 0.5 # 0.5*p{i+4} + weights[i, i, center, center] = 0.5 # 0.5*p{i} (prev layer) + weights[i, i + 8, center, center] = 0.5 # 0.5*p{i+4} (static) else: # Identity: output ch i = input ch i for i in range(out_channels): @@ -89,7 +90,7 @@ def generate_identity_weights(output_path, kernel_size=1, mip_level=0, mix=False print(f" Weights: {weight_count}") print(f" Mip level: {mip_level}") if mix: - print(f" Mode: 0.5*p0+0.5*p4, 0.5*p1+0.5*p5, 0.5*p2+0.5*p6, 0.5*p3+0.5*p7") + print(f" Mode: 0.5*prev[i] + 0.5*static_p{{4+i}} (blend with uv/sin/bias)") elif p47: print(f" Mode: p4→ch0, p5→ch1, p6→ch2, p7→ch3") diff --git a/training/test_viz_precision.py b/training/test_viz_precision.py deleted file mode 100755 index 143f4ea..0000000 --- a/training/test_viz_precision.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python3 -"""Test WebGPU → Canvas → PNG precision loss - -Check if bgra8unorm → 2D canvas → PNG loses 2 LSBs. -""" - -import numpy as np - -# Simulate WebGPU bgra8unorm conversion -# Float [0, 1] → uint8 [0, 255] - -test_values = [ - 1.0, # Perfect white - 0.9999, # Near-white - 254.5/255, # Exactly 254.5 - 253.5/255, # Exactly 253.5 -] - -for val in test_values: - # WebGPU bgra8unorm: round(val * 255) - gpu_u8 = int(np.round(val * 255)) - - # Convert back to normalized - gpu_f32 = gpu_u8 / 255.0 - - # JavaScript canvas getImageData: uint8 - canvas_u8 = int(np.round(gpu_f32 * 255)) - - print(f"Input: {val:.6f} → GPU u8: {gpu_u8} → Canvas: {canvas_u8}") - if canvas_u8 != 255: - print(f" ⚠️ Lost {255 - canvas_u8} LSBs") - -print("\nConclusion:") -print("If WebGPU stores 1.0 as 255, canvas should read 255.") -print("If user sees 253, likely:") -print(" a) Not viewing CNN layer (viewing static features at scale=1.0)") -print(" b) Value in texture is already 253/255 = 0.9921875") -print(" c) F16 storage or unpacking issue") diff --git a/workspaces/main/weights/mix.bin b/workspaces/main/weights/mix.bin new file mode 100644 index 0000000..358c12f Binary files /dev/null and b/workspaces/main/weights/mix.bin differ diff --git a/workspaces/main/weights/mix_p47.bin b/workspaces/main/weights/mix_p47.bin new file mode 100644 index 0000000..c16e50f Binary files /dev/null and b/workspaces/main/weights/mix_p47.bin differ -- cgit v1.2.3