diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-14 01:00:52 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-14 01:00:52 +0100 |
| commit | a29d83f6de08ace2db12347c85be959103d98db5 (patch) | |
| tree | a3a05cf75ef4db5bd103febb475f909022b1d82c /training/gen_identity_weights.py | |
| parent | ee58ffce299eca055e5668381061cd996d6fd4f6 (diff) | |
Fix CNN v2 static feature channel mapping (p4-p7 → channels 8-11)
Fixed bug in gen_identity_weights.py --p47 mode: static features p4-p7
(uv_x, uv_y, sin20_y, bias) are at input channels 8-11, not 4-7.
Weight tensor layout:
- Channels 0-3: Previous layer output (4D RGBA)
- Channels 4-11: Static features (8D: p0-p7)
Static features:
- p0-p3 (channels 4-7): RGB+D from mip level
- p4-p7 (channels 8-11): uv_x, uv_y, sin20_y, bias
Updated:
- training/gen_identity_weights.py: Change weights[i,i+4] to weights[i,i+8]
- workspaces/main/weights/mix_p47.bin: Regenerated (not in repo)
- doc/CNN_V2.md: Add Input Channel Mapping section with full layout table
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Diffstat (limited to 'training/gen_identity_weights.py')
| -rwxr-xr-x | training/gen_identity_weights.py | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/training/gen_identity_weights.py b/training/gen_identity_weights.py index 5756e67..5d83bfb 100755 --- a/training/gen_identity_weights.py +++ b/training/gen_identity_weights.py @@ -7,8 +7,8 @@ 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 --p47: Output Ch{i} = Input Ch{i+4} (static features only) - (p4→ch0, p5→ch1, p6→ch2, p7→ch3) +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) Usage: ./training/gen_identity_weights.py [output.bin] @@ -26,7 +26,10 @@ def generate_identity_weights(output_path, kernel_size=1, mip_level=0, mix=False """Generate identity weights: output = input (ignores static features). If mix=True, 50-50 blend: 0.5*p0+0.5*p4, 0.5*p1+0.5*p5, etc (avoids overflow). - If p47=True, transfers p4→p0, p5→p1, p6→p2, p7→p3 (static features only). + If p47=True, transfers static p4-p7 (uv_x, uv_y, sin20_y, bias) to output channels. + + Input channel layout: [0-3: prev layer, 4-11: static (p0-p7)] + Static features: p0-p3 (RGB+D), p4 (uv_x), p5 (uv_y), p6 (sin20_y), p7 (bias) Binary format: Header (20 bytes): @@ -61,8 +64,10 @@ def generate_identity_weights(output_path, kernel_size=1, mip_level=0, mix=False if p47: # p47 mode: p4→ch0, p5→ch1, p6→ch2, p7→ch3 (static features only) + # Input channels: [0-3: prev layer, 4-11: static features (p0-p7)] + # p4-p7 are at input channels 8-11 for i in range(out_channels): - weights[i, i + 4, center, center] = 1.0 + weights[i, i + 8, center, center] = 1.0 elif mix: # Mix mode: 50-50 blend to avoid overflow for i in range(out_channels): |
