diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-10 17:37:01 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-10 17:37:01 +0100 |
| commit | f3c7ef8cd612f5ac908f39310c4c11566879313f (patch) | |
| tree | 1e66127a855f30282c852731c0dd88ae6c7039bc /training | |
| parent | 0aa35e895d70f4535b7fac0f5df318888a6847dc (diff) | |
fix: Support variable kernel sizes in CNN layer generation
Training script was hardcoded to generate cnn_conv3x3_* calls regardless
of actual kernel size, causing shader validation errors when layer 1 used
5×5 kernel (100 weights) but called 3×3 function (expected 36).
Changes:
- train_cnn.py: Generate correct conv function based on kernel_sizes[i]
- cnn_conv5x5.wgsl: Add cnn_conv5x5_7to4 and cnn_conv5x5_7to1 variants
- Regenerate cnn_layer.wgsl with correct function calls for [3,5,3]
- Document kernel size→function mapping in HOWTO.md
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Diffstat (limited to 'training')
| -rwxr-xr-x | training/train_cnn.py | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/training/train_cnn.py b/training/train_cnn.py index 0495c65..8c7b2b3 100755 --- a/training/train_cnn.py +++ b/training/train_cnn.py @@ -174,10 +174,13 @@ def generate_layer_shader(output_path, num_layers, kernel_sizes): # Generate layer switches for layer_idx in range(num_layers): is_final = layer_idx == num_layers - 1 + ks = kernel_sizes[layer_idx] + conv_fn = f"cnn_conv{ks}x{ks}_7to4" if not is_final else f"cnn_conv{ks}x{ks}_7to1" + if layer_idx == 0: f.write(f" // Layer 0: 7→4 (RGBD output)\n") f.write(f" if (params.layer_index == {layer_idx}) {{\n") - f.write(f" result = cnn_conv3x3_7to4(txt, smplr, uv, uniforms.resolution,\n") + f.write(f" result = {conv_fn}(txt, smplr, uv, uniforms.resolution,\n") f.write(f" original, weights_layer{layer_idx});\n") f.write(f" result = cnn_tanh(result); // Output in [-1,1]\n") f.write(f" // Denormalize to [0,1] for texture storage\n") @@ -185,7 +188,7 @@ def generate_layer_shader(output_path, num_layers, kernel_sizes): f.write(f" }}\n") elif not is_final: f.write(f" else if (params.layer_index == {layer_idx}) {{\n") - f.write(f" result = cnn_conv3x3_7to4(txt, smplr, uv, uniforms.resolution,\n") + f.write(f" result = {conv_fn}(txt, smplr, uv, uniforms.resolution,\n") f.write(f" original, weights_layer{layer_idx});\n") f.write(f" result = cnn_tanh(result); // Output in [-1,1]\n") f.write(f" // Denormalize to [0,1] for texture storage\n") @@ -193,7 +196,7 @@ def generate_layer_shader(output_path, num_layers, kernel_sizes): f.write(f" }}\n") else: f.write(f" else if (params.layer_index == {layer_idx}) {{\n") - f.write(f" let gray_out = cnn_conv3x3_7to1(txt, smplr, uv, uniforms.resolution,\n") + f.write(f" let gray_out = {conv_fn}(txt, smplr, uv, uniforms.resolution,\n") f.write(f" original, weights_layer{layer_idx});\n") f.write(f" // Denormalize from [-1,1] to [0,1]\n") f.write(f" let gray_01 = (gray_out + 1.0) * 0.5;\n") |
