# Small config: fast experiments, single GPU input: num_surface_points: 4096 tokenizer: latent: latent_shape: [24, 24, 24] token_dim: 128 neighbor: multiscale_radii: [0.05, 0.1, 0.2] agno: num_heads: 4 processor: hidden_size: 128 num_layers: 3 num_heads: 4 num_kv_heads: 2 patch_size: 6 heads: embedding_dim: 128 pooling: attention symmetry: hidden_dim: 128 primitive: hidden_dim: 128 part: hidden_dim: 128 caption: hidden_dim: 128 reduction: hidden_dim: 128 train: epochs: 50 batch_size: 16 gradient_accumulation_steps: 2 mixed_precision: bf16 num_workers: 4 pin_memory: true # Heavy outputs live on /data to keep the root disk free. # Can also be overridden via SHAPE_CHECKPOINT_DIR / SHAPE_LOG_DIR env vars. checkpoint_dir: /data/shape-v2/checkpoints log_dir: /data/shape-v2/runs optimizer: lr: 3.0e-4 warmup_steps: 500 loss: inpainting: enabled: false # Regression loss used by masked-token reconstruction, inpainting # reconstruction, and symmetry plane/axis regression heads. # Classification losses (symmetry class, primitive, part, reduction) # are unaffected. regression: kind: smooth_l1 # "mse" | "smooth_l1" beta: 1.0 # Self-supervised only. Supervised heads inherit weight=0.0 from the # defaults because the stock synthetic labels overfit catastrophically # (val/symmetry ≈ 2.5 while train/symmetry ≈ 1e-4). Re-enable in a # follow-up config once the labels in data/synthetic_labels.py are # fixed to generalize across unseen meshes. weights: masked_token: 1.0 contrastive: 0.2 inpainting: 0.0 wandb: enabled: true project: shape-foundation tags: [small, pretrain, v1-fix] data: # Deterministic hash-based train/val split applied across every source. # Every file's assignment is stable across runs and ranks (md5 of path). # Set to 0.0 to opt out and fall back to per-source `split:` entries. val_fraction: 0.05 sources: - name: thingi10k root: data_cache/thingi10k/thingi10k weight: 1.0 - name: mfcad root: data_cache/mfcad/mfcad weight: 1.0 - name: fusion360 root: data_cache/fusion360/fusion360 weight: 0.5