scatteringnet / config.yaml
scatteringnet-space
Slim Gradio Space: infer + demo only
bc4c433
Raw History Blame Contribute Delete
3.57 kB
# Experiment settings for the occupancy MLP MVP.
# `device` is still detected at runtime in src/config.py (CUDA vs CPU).
# --- Model Architecture ---
hidden: 64 # Number of hidden units (channels) per layer in the OccupancyMLP
depth: 4 # Number of hidden linear layers in the MLP network
seed: 1 # Same seed as the previous extrude_nr1 train
# --- Path Configuration ---
data_dir: "E:/Work_stuff/scatteringNet/data" # Base root directory where all NPZ dataset files are stored
# --- Training Hyperparameters ---
epochs: 20 # Same length as the knn24-n2048 G5 clone (compare IoU to that best.pt)
lr: 0.001 # Initial learning rate
batch_size: 1024 # Points per optimizer step (GPU mini-batch)
optimizer: adam # adam | adamw | sgd
# BCE inside-class weight. auto = n_outside / n_inside on the train split.
# Omit or null = unweighted BCE (legacy / 18-09-31 clone). Head is unchanged.
pos_weight: auto
# --- Split ---
# Whole meshes: 80% train / 20% val of unique OBJs. All NPZs of one OBJ stay on one side.
# This split selects best.pt (not a locked holdout). Phase 2 Step 11 adds that.
val_fraction: 0.20
# --- Geometry ---
# none = xyz-only OccupancyMLP. surface = envelope (XYZ + face normal) + OccupancyEncoder.
# Occupancy labels stay in the NPZ. New trains write envelope_dim=6 on best.pt.
shape_encoder: surface # none / surface
n_surface: 2048 # Envelope samples on the joined OBJ (area-weighted face darts)
knn_k: 24 # Neighbors per query (not envelope count). Same head as knn24-n2048 inspect / G5 clone. Fresh train; do not resume that mix-75 best.pt.
# knn_local_dim: 64 # z_local width; omit to use latent_dim / hidden
# latent_dim: 64 # OccupancyEncoder z width; omit to use hidden
# --- Catalog ---
# npz_catalog wins over npz_glob. Each row is all meshes for that glob unless
# max_shapes is set (unique OBJs, sampled with seed; still max_files_per_shape NPZs).
# Varied/organic and combo* are omitted on purpose.
# Fallback glob is unused while npz_catalog is set.
# Smooth extruded_* is back (same glob as knn24-n2048 inspect). High-round
# extrude_* stay s0.08. Primitives and nr1 stay s0.15. nr3 is omitted.
# max_files_per_shape keeps lattice + one jitter.
npz_glob: "exports/dataset/*.npz"
npz_catalog:
- glob: "exports/dataset/cone_*.npz"
- glob: "exports/dataset/cube_*.npz"
- glob: "exports/dataset/cyl_*.npz"
- glob: "exports/dataset/gear_*.npz"
- glob: "exports/dataset/helix_*.npz"
- glob: "exports/dataset/pipe_*.npz"
- glob: "exports/dataset/platonic_*.npz"
- glob: "exports/dataset/prism_*.npz"
- glob: "exports/dataset/sphere_*.npz"
- glob: "exports/dataset/torus_*.npz"
- glob: "exports/dataset/extruded_*occupancy_s0.08*.npz"
- glob: "exports/dataset/extrude_*_nr1_*.npz"
max_shapes: 40
- glob: "exports/dataset/extrude_*_nr4_*occupancy_s0.08*.npz"
max_shapes: 90
- glob: "exports/dataset/extrude_*_nr5_*occupancy_s0.08*.npz"
max_files_per_shape: 2
# --- Run logs ---
# Suffix for runs/<YYYY-MM-DD_HH-MM-SS>_<name>/. Device is detected at runtime, not stored here.
run_name: prim_extruded_nr45_knn24_n2048_n6_pw
# --- Checkpoints ---
# Scalar used to decide models/<run_id>/best.pt (strict improve). No last.pt.
# The run snapshot (runs/<id>/config.yaml) records:
# total — planned epoch count (copied from epochs)
# checkpoint — epoch index stored in best.pt (runtime; not a project knob)
# val_iou = keep the epoch with the best inside overlap (not overall accuracy).
checkpoint_metric: val_iou