diff options
| author | skal <pascal.massimino@gmail.com> | 2026-03-25 10:05:42 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-03-25 10:05:42 +0100 |
| commit | ce6e5b99f26e4e7c69a3cacf360bd0d492de928c (patch) | |
| tree | a8d64b33a7ea1109b6b7e1043ced946cac416756 /src/tests/gpu | |
| parent | 8b4d7a49f038d7e849e6764dcc3abd1e1be01061 (diff) | |
feat(cnn_v3): 3×3 dilated bottleneck + Sobel loss + FiLM warmup + architecture PNG
- Replace 1×1 pointwise bottleneck with Conv(8→8, 3×3, dilation=2):
effective RF grows from ~13px to ~29px at ¼res (~+1 KB weights)
- Add Sobel edge loss in training (--edge-loss-weight, default 0.1)
- Add FiLM 2-phase training: freeze MLP for warmup epochs then
unfreeze at lr×0.1 (--film-warmup-epochs, default 50)
- Update weight layout: BN 72→584 f16, total 1964→2476 f16 (4952 B)
- Cascade offsets in C++ effect, JS tool, export/gen_test_vectors scripts
- Regenerate test_vectors.h (1238 u32); parity max_err=9.77e-04
- Generate dark-theme U-Net+FiLM architecture PNG (gen_architecture_png.py)
- Replace ASCII art in CNN_V3.md and HOW_TO_CNN.md with PNG embed
handoff(Gemini): bottleneck dilation + Sobel loss + FiLM warmup landed.
Next: run first real training pass (see cnn_v3/docs/HOWTO.md §3).
Diffstat (limited to 'src/tests/gpu')
| -rw-r--r-- | src/tests/gpu/test_cnn_v3_parity.cc | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/tests/gpu/test_cnn_v3_parity.cc b/src/tests/gpu/test_cnn_v3_parity.cc index 15fe818..1a7f169 100644 --- a/src/tests/gpu/test_cnn_v3_parity.cc +++ b/src/tests/gpu/test_cnn_v3_parity.cc @@ -190,8 +190,8 @@ static std::vector<float> run_cnn_v3(WebGPUTestFixture& fixture, effect.upload_weights(ctx.queue, weights_u32, weights_bytes); } else { // Explicitly zero weights to override any asset-loaded defaults. - // kWeightsBufBytes = ((1964+1)/2)*4 = 3928 - const uint32_t zero_size = ((1964u + 1u) / 2u) * 4u; + // kWeightsBufBytes = ((2476+1)/2)*4 = 4952 + const uint32_t zero_size = ((2476u + 1u) / 2u) * 4u; std::vector<uint8_t> zeros(zero_size, 0); effect.upload_weights(ctx.queue, zeros.data(), zero_size); } |
