summaryrefslogtreecommitdiff
path: root/training/gen_identity_weights.py
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-14 01:00:52 +0100
committerskal <pascal.massimino@gmail.com>2026-02-14 01:00:52 +0100
commita29d83f6de08ace2db12347c85be959103d98db5 (patch)
treea3a05cf75ef4db5bd103febb475f909022b1d82c /training/gen_identity_weights.py
parentee58ffce299eca055e5668381061cd996d6fd4f6 (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-xtraining/gen_identity_weights.py13
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):