summaryrefslogtreecommitdiff
path: root/tools/cnn_test.cc
AgeCommit message (Collapse)Author
20 hoursCNN v2: Fix weight buffer offset bugskal
Root cause: Binary format is [header:20B][layer_info:20B×N][weights]. Both cnn_test and CNNv2Effect uploaded entire file to weights_buffer, but shader reads weights_buffer[0] expecting first weight, not header. Fix: Skip header + layer_info when uploading to GPU buffer. - cnn_test.cc: Calculate weights_offset, upload only weights section - cnn_v2_effect.cc: Same fix for runtime effect Before: layer_0 output showed [R, uv_x, uv_y, black] (wrong channels) After: layer_0 output shows [R, G, B, D] (correct identity mapping) Tests: 34/36 passing (2 unrelated failures)
20 hourscnn_test: --weights now overrides layer config from .bin fileskal
When using --weights option: - Layer count and kernel sizes loaded from binary header - Warnings shown if --layers or --cnn-version specified - Help text clarifies precedence order - Binary weights always take precedence over CLI args Updated documentation: - doc/CNN_TEST_TOOL.md: Usage examples with --weights - doc/HOWTO.md: Runtime weight loading example handoff(Claude): cnn_test --weights config override
20 hourscnn_test: Add --weights option for runtime weight loadingskal
Enables testing different CNN v2 weight files without rebuilding. Automatically forces CNN v2 when --weights is specified, with warning if --cnn-version conflicts. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
21 hoursCNN v2: Use alpha channel for p3 depth feature + layer visualizationskal
Training changes (train_cnn_v2.py): - p3 now uses target image alpha channel (depth proxy for 2D images) - Default changed from 0.0 → 1.0 (far plane semantics) - Both PatchDataset and ImagePairDataset updated Test tools (cnn_test.cc): - New load_depth_from_alpha() extracts PNG alpha → p3 texture - Fixed bind group layout: use UnfilterableFloat for R32Float depth - Added --save-intermediates support for CNN v2: * Each layer_N.png shows 4 channels horizontally (1812×345 grayscale) * layers_composite.png stacks all layers vertically (1812×1380) * static_features.png shows 4 feature channels horizontally - Per-channel visualization enables debugging layer-by-layer differences HTML tool (index.html): - Extract alpha channel from input image → depth texture - Matches training data distribution for validation Note: Current weights trained with p3=0 are now mismatched. Both tools use p3=alpha consistently, so outputs remain comparable for debugging. Retrain required for optimal quality. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
24 hoursCNN test tool: Add CNN v2 support with compute shader architectureskal
Implement full CNN v2 support for offline validation: - Add --cnn-version flag (1=render pipeline, 2=compute shader) - Load binary weights from storage buffer (~3-5 KB) - Static features compute pass (7D: RGBD + UV + sin + bias) - Dynamic layer count from binary header - RGBA32Uint texture readback with f16→u8 conversion - Custom f16 decoder (handles denormals, infinity, NaN) Status: - CNN v1: Produces incorrect output (all white) - CNN v2: ✅ Fully functional, matches CNNv2Effect Updated docs: - doc/CNN_TEST_TOOL.md: Architecture, usage, validation workflow - doc/HOWTO.md: Recommend v2 for validation Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3 daysfeat: implement beat-based timing systemskal
BREAKING CHANGE: Timeline format now uses beats as default unit ## Core Changes **Uniform Structure (32 bytes maintained):** - Added `beat_time` (absolute beats for musical animation) - Added `beat_phase` (fractional 0-1 for smooth oscillation) - Renamed `beat` → `beat_phase` - Kept `time` (physical seconds, tempo-independent) **Seq Compiler:** - Default: all numbers are beats (e.g., `5`, `16.5`) - Explicit seconds: `2.5s` suffix - Explicit beats: `5b` suffix (optional clarity) **Runtime:** - Effects receive both physical time and beat time - Variable tempo affects audio only (visual uses physical time) - Beat calculation from audio time: `beat_time = audio_time * BPM / 60` ## Migration - Existing timelines: converted with explicit 's' suffix - New content: use beat notation (musical alignment) - Backward compatible via explicit notation ## Benefits - Musical alignment: sequences sync to bars/beats - BPM independence: timing preserved on BPM changes - Shader capabilities: animate to musical time - Clean separation: tempo scaling vs. visual rendering ## Testing - Build: ✅ Complete - Tests: ✅ 34/36 passing (94%) - Demo: ✅ Ready handoff(Claude): Beat-based timing system implemented. Variable tempo only affects audio sample triggering. Visual effects use physical_time (constant) and beat_time (musical). Shaders can now animate to beats. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3 daysfix: CNN bias accumulation and output format improvementsskal
- Fix bias division bug: divide by num_positions to compensate for shader loop accumulation (affects all layers) - train_cnn.py: Save RGBA output preserving alpha channel from input - Add --debug-hex flag to both tools for pixel-level debugging - Remove sRGB/linear_png debug code from cnn_test - Regenerate weights with corrected bias export Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3 daysfix: Release cached samplers before WGPU shutdownskal
SamplerCache singleton never released samplers, causing device to retain references at shutdown. Add clear() method and call before fixture cleanup. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3 daysfix: Resolve WGPU threading crash in cnn_testskal
- Release queue reference after submit in texture_readback - Add final wgpuDevicePoll before cleanup to sync GPU work Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3 daysupdate cnn codeskal
3 daysadd --save-intermediates to train.py and cnn_testskal
4 daysfix: CNN test tool GPU readback with wgpuDevicePollskal
Fixed buffer mapping callback mode mismatch causing Unknown status. Changed from WaitAnyOnly+ProcessEvents to AllowProcessEvents+DevicePoll. Readback now functional but CNN output incorrect (all white). Issue isolated to tool-specific binding/uniform setup - CNNEffect in demo works correctly. Technical details: - WGPUCallbackMode_WaitAnyOnly requires wgpuInstanceWaitAny - Using wgpuInstanceProcessEvents with WaitAnyOnly never fires callback - Fixed by using AllowProcessEvents mode + wgpuDevicePoll - Removed debug output and platform warnings Status: 36/36 tests pass, readback works, CNN shader issue remains. handoff(Claude): CNN test tool readback fixed, output debugging needed
4 daysdebug: Add shader load verification and GPU sync to CNN test toolskal
Debug additions: - Print loaded shader size (confirms assets work: 2274 bytes) - Add wgpuDevicePoll after each layer for GPU sync - Verify shader loading with null/empty checks Findings: - Shader loads correctly (2274 bytes) - GPU commands execute without validation errors - Pipeline compiles successfully - Output remains all-black despite correct architecture Likely causes: - Render setup differs from demo's CNNEffect - Possible issue with bind group bindings - Fragment shader may not be executing - Texture sampling might be failing Next steps: - Create minimal solid-color render test - Compare bind group setup with working CNNEffect - Add fragment shader debug output (if possible) - Test with demo's CNN effect to verify weights/shader work Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
4 daysfix: CNN test tool ping-pong bug and RGBA16Float intermediatesskal
Bugfixes: - Fixed ping-pong logic: update current_input BEFORE flipping dst_idx - Use RGBA16Float for intermediate layers (preserve [-1,1] range from tanh) - Separate BGRA8Unorm final output texture for readback - Create two pipelines: intermediate (RGBA16Float) and final (BGRA8Unorm) - Fix all cleanup code to reference correct pipeline variables Implementation: - Intermediate textures use RGBA16Float to avoid clamping [-1,1] → [0,1] - Final layer renders to separate BGRA8Unorm texture - Correct texture view descriptors for each format - Layer 0-1: render to RGBA16Float ping-pong textures - Layer 2: render to BGRA8Unorm output texture Documentation: - Added CNN testing section to doc/HOWTO.md - Updated CNN_TEST_TOOL.md with ground-truth comparison workflow - Noted remaining black output bug (under investigation) Status: - Tool compiles and runs without GPU errors - Architecture correct: ping-pong, format conversion, separate pipelines - Output still all-black (unknown cause, needs debugging) - All 36 tests still pass handoff(Claude): CNN test tool bugfixes complete, black output remains Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
4 daysfeat: Add CNN shader testing tool with GPU texture readbackskal
Core GPU Utility (texture_readback): - Reusable synchronous texture-to-CPU readback (~150 lines) - STRIP_ALL guards (0 bytes in release builds) - Handles COPY_BYTES_PER_ROW_ALIGNMENT (256-byte alignment) - Refactored OffscreenRenderTarget to use new utility CNN Test Tool (cnn_test): - Standalone PNG→3-layer CNN→PNG/PPM tool (~450 lines) - --blend parameter (0.0-1.0) for final layer mixing - --format option (png/ppm) for output format - ShaderComposer integration for include resolution Build Integration: - Added texture_readback.cc to GPU_SOURCES (both sections) - Tool target with STB_IMAGE support Testing: - All 36 tests pass (100%) - Processes 64×64 and 555×370 images successfully - Ground-truth validation setup complete Known Issues: - BUG: Tool produces black output (uninitialized input texture) - First intermediate texture not initialized before layer loop - MSE 64860 vs Python ground truth (expected <10) - Fix required: Copy input to intermediate[0] before processing Documentation: - doc/CNN_TEST_TOOL.md - Full technical reference - Updated PROJECT_CONTEXT.md and COMPLETED.md handoff(Claude): CNN test tool foundation complete, needs input init bugfix Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>