blob: 4ddd9acb46a91d9cd724647ba84275086a910cab (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
#!/bin/bash
# Complete CNN v2 Training Pipeline
# Train → Export → Build → Validate
set -e
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$PROJECT_ROOT"
# Configuration
INPUT_DIR="training/input"
TARGET_DIR="training/target_2"
CHECKPOINT_DIR="checkpoints"
VALIDATION_DIR="validation_results"
EPOCHS=10000
CHECKPOINT_EVERY=500
BATCH_SIZE=16
# Patch-based training (default)
PATCH_SIZE=32
PATCHES_PER_IMAGE=64
DETECTOR="harris"
# Full-image training (alternative - uncomment to use)
# FULL_IMAGE="--full-image"
# IMAGE_SIZE=256
KERNEL_SIZES="1 3 5"
CHANNELS="16 8 4"
echo "=== CNN v2 Complete Training Pipeline ==="
echo "Input: $INPUT_DIR"
echo "Target: $TARGET_DIR"
echo "Epochs: $EPOCHS"
echo "Checkpoint interval: $CHECKPOINT_EVERY"
echo ""
# Step 1: Train model
echo "[1/4] Training CNN v2 model..."
python3 training/train_cnn_v2.py \
--input "$INPUT_DIR" \
--target "$TARGET_DIR" \
--patch-size $PATCH_SIZE \
--patches-per-image $PATCHES_PER_IMAGE \
--detector $DETECTOR \
--kernel-sizes $KERNEL_SIZES \
--channels $CHANNELS \
--epochs $EPOCHS \
--batch-size $BATCH_SIZE \
--checkpoint-dir "$CHECKPOINT_DIR" \
--checkpoint-every $CHECKPOINT_EVERY \
$FULL_IMAGE
if [ $? -ne 0 ]; then
echo "Error: Training failed"
exit 1
fi
echo ""
echo "Training complete!"
echo ""
# Step 2: Export final checkpoint to shaders
FINAL_CHECKPOINT="$CHECKPOINT_DIR/checkpoint_epoch_${EPOCHS}.pth"
if [ ! -f "$FINAL_CHECKPOINT" ]; then
echo "Warning: Final checkpoint not found, using latest available..."
FINAL_CHECKPOINT=$(ls -t "$CHECKPOINT_DIR"/checkpoint_epoch_*.pth | head -1)
fi
echo "[2/4] Exporting final checkpoint to WGSL shaders..."
echo "Checkpoint: $FINAL_CHECKPOINT"
python3 training/export_cnn_v2_shader.py "$FINAL_CHECKPOINT" \
--output-dir workspaces/main/shaders
if [ $? -ne 0 ]; then
echo "Error: Shader export failed"
exit 1
fi
echo ""
# Step 3: Rebuild with new shaders
echo "[3/4] Rebuilding demo with new shaders..."
cmake --build build -j4 --target demo64k > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Error: Build failed"
exit 1
fi
echo " → Build complete"
echo ""
# Step 4: Visual assessment - process all checkpoints
echo "[4/4] Visual assessment of training progression..."
mkdir -p "$VALIDATION_DIR"
# Test first input image with checkpoints at intervals
TEST_IMAGE="$INPUT_DIR/img_000.png"
CHECKPOINT_INTERVAL=1000
echo " Processing checkpoints (every ${CHECKPOINT_INTERVAL} epochs)..."
for checkpoint in "$CHECKPOINT_DIR"/checkpoint_epoch_*.pth; do
epoch=$(echo "$checkpoint" | grep -o 'epoch_[0-9]*' | cut -d'_' -f2)
# Only process checkpoints at intervals
if [ $((epoch % CHECKPOINT_INTERVAL)) -eq 0 ] || [ "$epoch" -eq "$EPOCHS" ]; then
echo " Epoch $epoch..."
# Export shaders for this checkpoint
python3 training/export_cnn_v2_shader.py "$checkpoint" \
--output-dir workspaces/main/shaders > /dev/null 2>&1
# Rebuild
cmake --build build -j4 --target cnn_test > /dev/null 2>&1
# Process test image
build/cnn_test "$TEST_IMAGE" "$VALIDATION_DIR/epoch_${epoch}_output.png" 2>/dev/null
fi
done
# Restore final checkpoint shaders
python3 training/export_cnn_v2_shader.py "$FINAL_CHECKPOINT" \
--output-dir workspaces/main/shaders > /dev/null 2>&1
cmake --build build -j4 --target demo64k > /dev/null 2>&1
echo ""
echo "=== Training Pipeline Complete ==="
echo ""
echo "Results:"
echo " - Checkpoints: $CHECKPOINT_DIR"
echo " - Visual progression: $VALIDATION_DIR"
echo " - Final shaders: workspaces/main/shaders/cnn_v2_layer_*.wgsl"
echo ""
echo "Opening results directory..."
open "$VALIDATION_DIR" 2>/dev/null || xdg-open "$VALIDATION_DIR" 2>/dev/null || true
echo ""
echo "Run demo to see final result:"
echo " ./build/demo64k"
|