File size: 3,570 Bytes
bc4c433
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# 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