summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/cnn_test.cc25
-rw-r--r--tools/cnn_v2_test/index.html13
2 files changed, 24 insertions, 14 deletions
diff --git a/tools/cnn_test.cc b/tools/cnn_test.cc
index 826d9ea..c504c3d 100644
--- a/tools/cnn_test.cc
+++ b/tools/cnn_test.cc
@@ -111,6 +111,12 @@ static bool parse_args(int argc, char** argv, Args* args) {
args->cnn_version);
}
args->cnn_version = 2;
+
+ // Warn if --layers was specified (binary file config takes precedence)
+ if (args->num_layers != 3) { // 3 is the default
+ fprintf(stderr, "WARNING: --layers %d ignored (--weights loads layer config from .bin)\n",
+ args->num_layers);
+ }
}
return true;
@@ -122,11 +128,11 @@ static void print_usage(const char* prog) {
fprintf(stderr, "\nOPTIONS:\n");
fprintf(stderr, " --blend F Final blend amount (0.0-1.0, default: 1.0)\n");
fprintf(stderr, " --format ppm|png Output format (default: png)\n");
- fprintf(stderr, " --layers N Number of CNN layers (1-10, default: 3)\n");
+ fprintf(stderr, " --layers N Number of CNN layers (1-10, default: 3, ignored with --weights)\n");
fprintf(stderr, " --save-intermediates DIR Save intermediate layers to directory\n");
fprintf(stderr, " --debug-hex Print first 8 pixels as hex (debug)\n");
- fprintf(stderr, " --cnn-version N CNN version: 1 (default) or 2\n");
- fprintf(stderr, " --weights PATH Load weights from .bin file (forces CNN v2)\n");
+ fprintf(stderr, " --cnn-version N CNN version: 1 (default) or 2 (ignored with --weights)\n");
+ fprintf(stderr, " --weights PATH Load weights from .bin (forces CNN v2, overrides layer config)\n");
fprintf(stderr, " --help Show this help\n");
}
@@ -678,15 +684,20 @@ static bool process_cnn_v2(WGPUDevice device, WGPUQueue queue,
info.out_channels, info.weight_count);
}
- // Create weights storage buffer
+ // Create weights storage buffer (skip header + layer info, upload only weights)
+ size_t header_size = 20; // 5 u32
+ size_t layer_info_size = 20 * layer_info.size(); // 5 u32 per layer
+ size_t weights_offset = header_size + layer_info_size;
+ size_t weights_only_size = weights_size - weights_offset;
+
WGPUBufferDescriptor weights_buffer_desc = {};
- weights_buffer_desc.size = weights_size;
+ weights_buffer_desc.size = weights_only_size;
weights_buffer_desc.usage = WGPUBufferUsage_Storage | WGPUBufferUsage_CopyDst;
weights_buffer_desc.mappedAtCreation = false;
WGPUBuffer weights_buffer =
wgpuDeviceCreateBuffer(device, &weights_buffer_desc);
- wgpuQueueWriteBuffer(queue, weights_buffer, 0, weights_data, weights_size);
+ wgpuQueueWriteBuffer(queue, weights_buffer, 0, weights_data + weights_offset, weights_only_size);
// Create input view
const WGPUTextureViewDescriptor view_desc = {
@@ -1045,7 +1056,7 @@ static bool process_cnn_v2(WGPUDevice device, WGPUQueue queue,
layer_bg_entries[3].binding = 3;
layer_bg_entries[3].buffer = weights_buffer;
- layer_bg_entries[3].size = weights_size;
+ layer_bg_entries[3].size = weights_only_size;
layer_bg_entries[4].binding = 4;
layer_bg_entries[4].buffer = layer_params_buffers[i];
diff --git a/tools/cnn_v2_test/index.html b/tools/cnn_v2_test/index.html
index dd1e42b..2ec934d 100644
--- a/tools/cnn_v2_test/index.html
+++ b/tools/cnn_v2_test/index.html
@@ -543,12 +543,10 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
}
}
- if (is_output) {
- output[c] = clamp(sum, 0.0, 1.0);
- } else if (params.is_layer_0 != 0u) {
- output[c] = clamp(sum, 0.0, 1.0); // Layer 0: clamp [0,1]
+ if (is_output || params.is_layer_0 != 0u) {
+ output[c] = 1.0 / (1.0 + exp(-sum)); // Sigmoid [0,1]
} else {
- output[c] = max(0.0, sum); // Middle layers: ReLU
+ output[c] = max(0.0, sum); // ReLU
}
}
@@ -1619,7 +1617,8 @@ class CNNTester {
const layerTex = this.layerOutputs[layerIdx];
if (!layerTex) return;
- const vizScale = layerIdx === 0 ? 1.0 : 0.5;
+ // Always 1.0, shader clamps to [0,1] - show exact layer values
+ const vizScale = 1.0;
const actualChannel = channelOffset + this.selectedChannel;
const paramsBuffer = this.device.createBuffer({
@@ -1884,7 +1883,7 @@ class CNNTester {
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
- a.download = `composited_layer${this.currentLayerIdx}_${compositedWidth}x${height}.png`;
+ a.download = `composited_layer${this.currentLayerIdx - 1}_${compositedWidth}x${height}.png`;
a.click();
URL.revokeObjectURL(url);