Hydra configuration files for shape completion experiments.
# As submodule
# Train with a config
train -cn shapenet_v1
# Override specific values
train -cn shapenet_v1 model.arch=conv_onet train.lr=1e-4
# Use different directory config
train -cn shapenet_v1 +dirs=dlr
conf/
├── config.yaml # Base config: complete schema with all defaults
├── dirs/ # Directory path configs (dataset/log locations)
│ ├── default.yaml # Your local paths (edit this first)
│ ├── dlr.yaml # DLR cluster paths
│ ├── dlr_alt.yaml # DLR alternate paths
│ ├── dlr_hdf5.yaml # DLR paths for HDF5 datasets
│ ├── lrz.yaml # LRZ cluster paths
│ ├── laptop.yaml # Local laptop paths
│ └── notebook.yaml # Jupyter notebook paths
│
│── # ── ShapeNet v1 ──────────────────
├── shapenet_v1.yaml # Point cloud completion (base for most experiments)
├── shapenet_v1_depth.yaml # Depth image input
├── shapenet_v1_depth_like.yaml # Depth-like partial views
├── shapenet_v1_depth_image.yaml # Depth + image input
├── shapenet_v1_depth_pcd.yaml # Depth point cloud input
├── shapenet_v1_depth_shapeformer.yaml # ShapeFormer-style depth
├── shapenet_v1_pcd.yaml # Point cloud completion variant
├── shapenet_v1_autoenc.yaml # Autoencoder training
├── shapenet_v1_vae.yaml # VAE training
├── shapenet_v1_vae_dif.yaml # VAE with diffusion
├── shapenet_v1_vae_for_ldm.yaml # VAE pretrained for LDM
├── shapenet_v1_ldm.yaml # Latent diffusion model
├── shapenet_v1_latent.yaml # Latent space experiments
├── shapenet_v1_cls.yaml # Classification
├── shapenet_v1_cls_kinect.yaml # Classification with Kinect input
├── shapenet_v1_cls_seg_*.yaml # Joint classification + segmentation
├── shapenet_v1_seg_inputs.yaml # Segmentation on inputs
├── shapenet_v1_seg_inputs_depth.yaml # Segmentation on depth inputs
├── shapenet_v1_seg_inputs_kinect.yaml # Segmentation on Kinect inputs
├── shapenet_v1_seg_points.yaml # Segmentation on query points
├── shapenet_v1_seg_points_baseline.yaml # Segmentation baseline
├── shapenet_v1_seg_points_depth.yaml # Segmentation on depth query points
├── shapenet_v1_seg_points_kinect.yaml # Segmentation on Kinect query points
├── shapenet_v1_no_surface.yaml # Training without surface points
├── shapenet_v1_core.yaml # ShapeNet core subset
│
│── # ── ShapeNet v2 / other formats ──
├── shapenet_v2.yaml # ShapeNet v2
├── shapenet_v2_depth.yaml # ShapeNet v2 with depth
├── shapenet.yaml # ShapeNet (ONet format, base for mugs)
├── shapenet_core.yaml # ShapeNet core
├── shapenet_depth_like.yaml # Depth-like on ShapeNet
├── shapenet_uncertain.yaml # Uncertainty-aware ShapeNet
├── onet.yaml # Occupancy Networks config
├── onet_shapenet_v1.yaml # ONet on ShapeNet v1
│
│── # ── Benchmarks & Other Datasets ──
├── completion3d.yaml # Completion3D benchmark
├── modelnet40.yaml # ModelNet40 classification
├── dtu_dvr.yaml # DTU with differentiable volume rendering
├── dtu_dvr_fast.yaml # DTU DVR fast variant
│
│── # ── Tabletop ─────────────────────
├── tabletop.yaml # Tabletop scene completion
├── tabletop_3d.yaml # Tabletop 3D variant
├── tabletop_inst_seg.yaml # Instance segmentation
├── tabletop_inst_seg_3d_canonical.yaml
├── tabletop_inst_seg_pcd.yaml
├── tabletop_inst_seg_pcd_3d.yaml
│
│── # ── Real-world / Demo ────────────
├── automatica.yaml # Automatica base config
├── automatica_depth.yaml # Automatica depth variant
├── automatica_dvr.yaml # Automatica DVR variant
├── automatica_2023.yaml # Automatica 2023 demo
├── automatica_2023_kinect.yaml # Automatica 2023 Kinect
├── automatica_2023_kinect_gpt2.yaml # Automatica 2023 GPT-2 backbone
├── automatica_2024_kinect.yaml # Automatica 2024 Kinect demo
├── mugs.yaml # Mug completion (depth_bp input)
├── mugs_*.yaml # Mug variants (paper, overfit, dropout, etc.)
│
│── # ── Publications ─────────────────
├── humanoids_2023.yaml # Humanoids 2023
├── cvpr_2025.yaml # CVPR 2025 (latent diffusion)
├── cvpr_2025_vae.yaml # CVPR 2025 VAE
├── cvpr_2025_cond.yaml # CVPR 2025 conditional
├── cvpr_2025_depth.yaml # CVPR 2025 depth
├── cvpr_2025_depth_cls.yaml # CVPR 2025 depth classification
├── cvpr_2025_depth_dvr.yaml # CVPR 2025 depth DVR
│
│── # ── Image Diffusion ──────────────
├── mnist_diffusion.yaml # MNIST diffusion
├── fmnist_diffusion.yaml # FashionMNIST diffusion
├── cifar10_diffusion.yaml # CIFAR-10 diffusion
│
│── # ── Debug / Overfitting ──────────
├── overfit.yaml # Single-mesh overfitting (bunny)
├── overfit_bunny.yaml # Bunny overfit variant
├── overfit_automatica.yaml # Automatica overfit
└── viz_overfit_bunny.yaml # Visualization of bunny overfit
Every experiment config inherits from config.yaml via Hydra’s defaults list. The base config defines the complete schema with all default values. Experiment configs only need to override the keys they change.
Direct inheritance (most configs):
# shapenet_v1.yaml
defaults:
- config # Inherit all defaults from config.yaml
- _self_ # Then apply this file's overrides
Multi-level inheritance (specialized configs inherit from other experiments):
config.yaml
├── shapenet_v1.yaml
│ ├── automatica.yaml
│ ├── shapenet_v1_depth.yaml
│ ├── shapenet_v1_vae.yaml
│ │ └── shapenet_v1_vae_for_ldm.yaml
│ │ ├── shapenet_v1_ldm.yaml
│ │ │ └── cvpr_2025.yaml
│ │ └── cvpr_2025_vae.yaml
│ └── ...
├── shapenet.yaml # ONet-format ShapeNet
│ └── mugs.yaml
│ └── mugs_*.yaml
├── overfit.yaml
└── ...
Hydra resolves these chains top-down: config.yaml defaults are loaded first, then each level applies its overrides. The _self_ entry controls where the current file’s keys are applied relative to inherited defaults (last = current file wins).
Directory configs (dirs/*.yaml) map dataset names to filesystem paths. The base config loads dirs/default.yaml automatically:
# config.yaml (excerpt)
defaults:
- dirs: default # Load dirs/default.yaml into the 'dirs' namespace
First-time setup: Edit dirs/default.yaml to point to your local dataset locations:
# dirs/default.yaml
log: /path/to/training/logs
backup: # Optional backup log location
# Dataset root paths (referenced by data.train_ds in experiment configs)
shapenet_v1: /path/to/ShapeNetCore.v1
shapenet_v1_onet: /path/to/occupancy_networks
shapenet_v1_fused: /path/to/ShapeNetCore.v1.fused
shapenet_v1_fused_kinect: /path/to/ShapeNetCore.v1.fused.kinect
completion3d: /path/to/completion3d
ycb: /path/to/ycb/objects
bop: /path/to/bop
modelnet40: /path/to/ModelNet40
tabletop: /path/to/tabletop
tabletop_pile: /path/to/tabletop.pile
dtu: /path/to/DTU
automatica: /path/to/automatica
graspnet: /path/to/graspnet
# Image datasets (for diffusion experiments)
cifar10: /path/to/CIFAR10
mnist: /path/to/MNIST
fmnist: /path/to/FashionMNIST
The keys in dirs/*.yaml are referenced by data.train_ds in experiment configs. For example, data.train_ds: [shapenet_v1_fused] looks up the shapenet_v1_fused path from the active dirs config.
Multiple environments: Override the dirs config group on the command line:
train -cn shapenet_v1 +dirs=dlr # DLR cluster paths
train -cn shapenet_v1 +dirs=laptop # Local laptop paths
train -cn shapenet_v1 +dirs=lrz # LRZ cluster paths
| Syntax | Meaning | Example |
|---|---|---|
key=value |
Override an existing key | train.lr=1e-4 |
+key=value |
Add a new key (error if exists) | +dirs=dlr |
++key=value |
Force set (add or override) | ++model.custom_param=42 |
~key |
Remove a key | ~aug.noise |
key=[a,b] |
Override with list | data.categories=[chair,table] |
--multirun |
Sweep over comma-separated values | model.arch=onet,conv_onet --multirun |
The +dirs=dlr pattern overrides the default config group selection. Since config.yaml already declares - dirs: default, the + adds a second dirs entry which takes precedence. Use ++ when you need to force-set a key that might not exist in the schema.
| Key | Default | Description |
|---|---|---|
model.arch |
(none) | Model architecture (e.g., onet, conv_onet, conv_onet_grid, if_net, point_transformer, ldm) |
data.train_ds |
(none) | Training dataset(s) as list of dirs keys |
data.categories |
(all) | ShapeNet category IDs to train on |
inputs.type |
pointcloud |
Input modality: pointcloud, depth, depth_bp, rgbd, kinect, image, partial, depth_like |
inputs.num_points |
300 |
Number of input points |
train.epochs |
10 |
Training epochs |
train.batch_size |
32 |
Batch size |
train.lr |
3.125e-6 |
Learning rate (designed for batch 32; auto-scaled if scale_lr: true) |
train.precision |
32-true |
Training precision: 32-true, 16-mixed, bf16-mixed |
train.optimizer |
AdamW |
Optimizer: AdamW, Adam, SGD, AdamW8bit |
train.scheduler |
(none) | LR scheduler: LinearWarmupCosineAnnealingLR, ReduceLROnPlateau, StepLR |
log.wandb |
false |
Enable Weights & Biases logging |
model.compile |
false |
Enable torch.compile() |
The default LR (3.125e-6) is calibrated for batch size 32 on 1 GPU. When train.scale_lr: true (default), the effective LR is scaled by (batch_size * num_gpus * accumulate_grad_batches) / 32. Set scale_lr: false when specifying an absolute LR.
| Group | Description |
|---|---|
model |
Architecture, weights, compilation, network options |
data |
Dataset selection, categories, coordinate frame |
inputs |
Input modality and preprocessing |
points |
Query points for implicit function supervision |
pointcloud |
Surface point cloud loading |
mesh |
Mesh loading options |
train |
Training hyperparameters, optimizer, scheduler |
val |
Validation settings and visualization |
test |
Test/evaluation settings |
predict |
Prediction settings |
vis |
Visualization / mesh extraction settings |
aug |
Data augmentation |
norm |
Spatial normalization |
implicit |
Implicit function and DVR settings |
cls |
Classification head settings |
seg |
Segmentation head settings |
log |
Logging, W&B, checkpointing |
load |
DataLoader settings |
files |
File paths within each dataset sample |
misc |
Miscellaneous (seed) |
model:
arch: null # Architecture name (see models/README.md)
weights: null # Path to pretrained weights (.pt)
checkpoint: null # Path to checkpoint (.ckpt)
load_best: false # Load model_best.pt from log dir
compile: false # torch.compile() for speed
# Network options
norm: null # Normalization: null|batch|layer|group|rms
activation: relu # Activation: relu|gelu|silu|mish
dropout: 0.0 # Dropout rate
bias: true # Use bias in linear layers
# Attention (transformers)
attn: null # Enable attention layers
attn_backend: null # torch|xformers|einops
attn_mode: null # Attention mode override
# Up/downsampling
up: null # Upsampling method
down: null # Downsampling method
use_ws: null # Weight standardization
# Model averaging
average: null # ema|swa|null
ema_decay: null # EMA decay (auto if null)
swr_lr: null # SWA learning rate
# Loss
reduction: mean # mean|sum|none
data:
train_ds: null # Training dataset(s): list of dirs/*.yaml keys
val_ds: ${data.train_ds} # Validation (defaults to train)
test_ds: ${data.val_ds} # Test (defaults to val)
categories: null # Category filter: list of IDs or null for all
objects: null # Specific objects (YCB, BOP)
# Sharding (multi-file datasets)
num_files: # Number of data files per split
train: 1
val: 1
test: 1
num_shards: # Number of shards per split
train: 1
val: 1
test: 1
# Coordinate frame transforms
frame: world # world|cam|net
convention: opencv # opencv|opengl
unscale: true # Undo object scaling applied during rendering
undistort: true # Undo BlenderProc distortion (legacy)
unrotate: true # Undo object rotation applied during rendering
scale: false # Rescale all data fields with inputs scale
scale_multiplier: 1 # Scale multiplier
rotate: false # Re-apply inputs rotation to all data fields
sdf_from_occ: false # Convert occupancy labels to SDF
rot: null # Rotation matrix
rot_x: null # X-axis rotation
rot_y: null # Y-axis rotation
rot_z: null # Z-axis rotation
# Performance
cache: false # Cache loaded data in memory
hash_items: false # Hash-based caching
share_memory: false # Shared memory for DDP
dither: false # Dithering
split: false # Split dataset
inputs:
type: pointcloud # Input type (see table below)
type_p: null # Type probabilities for mixed inputs
type_key: null # Type key override
dim: 3 # Dimension (3=xyz, 6=xyz+normals)
num_points: 300 # Points to sample/load
precision: 16 # Input data precision
# Bounds
min_num_points: 1
max_num_points: 100000
# Processing
nerf: false # NeRF positional encoding
project: true # Project depth to point cloud
cache: false # Cache loaded/rendered inputs
load_random: false # Random view each epoch
crop: false # Crop inputs
permute: false # Permute point order
bbox: false # Include bounding box
# Image inputs
width: null # Image width
height: null # Image height
normals: false # Load normal maps
resize: null # Resize factor
# Directory overrides
data_dir: null # Custom data directory
image_dir: null # Custom image directory
cam_dir: null # Custom camera directory
# Point processing
voxelize: null # Voxel grid resolution
fps:
num_points: null # Farthest point sampling count
method: gpu # gpu|cpu
bps: # Basis Point Set encoding
num_points: null
resolution: 32
feature: delta
basis: sphere # Basis shape: sphere
method: kdtree # Nearest neighbor method
Input Types:
| Type | Description |
|---|---|
pointcloud |
Load point cloud from file |
depth |
Rendered/loaded depth map |
depth_bp |
Depth from BlenderProc rendering |
rgbd |
RGB-D images |
kinect |
Simulated Kinect depth |
image |
RGB images |
partial |
Planar-cut partial point cloud |
depth_like |
Depth-like partial from full cloud |
render_* |
On-the-fly rendering variants |
Mixed input types can be specified as a list with probabilities:
inputs:
type: [pointcloud, depth] # Randomly choose between types
type_p: [0.9, 0.1] # 90% pointcloud, 10% depth
points:
dim: 3 # Point dimension
min_num_points: 1
max_num_points: null
nerf: false # NeRF positional encoding
voxelize: null # Voxel grid resolution
bbox: false # Include bounding box
cache: false # Cache loaded points
permute: false # Permute point order
data_dir: null # Custom data directory
# Loading
load_all: true # Load all available points files
load_random: false # Random subset each epoch
load_surface: false # Load surface points
load_uncertain: false # Load uncertainty labels
subsample: true # Subsample to train.num_query_points
crop: false # Crop to input bounds
from_mesh: false # Sample from mesh on-the-fly
from_pointcloud: false # Sample from point cloud
# Sampling ratio
in_out_ratio: null # Inside/outside point ratio
pointcloud:
num_points: null # Points to load (global default)
train:
num_points: ${pointcloud.num_points}
val:
num_points: 100000
test:
num_points: ${pointcloud.val.num_points}
min_num_points: 1
max_num_points: null
normals: false # Load normals
bbox: false # Include bounding box
cache: false
data_dir: null
nerf: false
voxelize: null
permute: false
from_mesh: false # Sample from mesh on-the-fly
fps:
num_points: null # Farthest point sampling
method: gpu
train:
epochs: 10 # Maximum epochs
batch_size: 32 # Training batch size
num_query_points: 2048 # Query points per sample
num_views: 1 # Number of input views
# Optimizer
optimizer: AdamW # AdamW|Adam|SGD|AdamW8bit
lr: 3.125e-6 # Learning rate (1e-4 at batch 32)
min_lr: null # Minimum LR for scheduler
weight_decay: 0.01 # L2 regularization
betas: [0.9, 0.999] # Adam betas
scale_lr: true # Scale LR with batch size and GPUs
find_lr: false # Auto learning rate finder
# Scheduler
scheduler: null # LinearWarmupCosineAnnealingLR|ReduceLROnPlateau|StepLR
warmup_frac: 0.0033 # Warmup fraction of total steps
lr_reduction_factor: 0.5 # ReduceLROnPlateau factor
lr_step_size: 10 # StepLR step size
lr_gamma: 0.9 # StepLR gamma
# Training options
loss: null # Loss function override
reduction: mean # Loss reduction
gradient_clip_val: null # Gradient clipping value
accumulate_grad_batches: 1 # Gradient accumulation steps
precision: 32-true # 32-true|16-mixed|bf16-mixed
hypergradients: false # Hypergradient optimization
load_surface_points: null # Load surface points for training
num_batches: null # Limit training batches per epoch
shuffle: true # Shuffle training data
# Checkpointing
resume: false # Resume from checkpoint
skip: false # Skip training entirely
# Early stopping
early_stopping: false
model_selection_metric: val/f1
patience_factor: 10 # Patience = epochs / factor
# Debug
overfit_batches: false # Overfit on N batches
fast_dev_run: false # Quick sanity run
detect_anomaly: false # Detect NaN/Inf gradients
no_aug: false # Disable all augmentation
show: false # Show batch visualization
find_batch_size: false # Auto batch size finder
val:
batch_size: ${train.batch_size}
num_query_points: 100000 # More points for accurate evaluation
load_surface_points: null
freq: 1 # Validate every N epochs (fractional OK)
num_batches: ${train.num_batches}
num_sanity: 2 # Sanity validation steps at start
reduction: ${train.reduction}
precision: ${train.precision}
shuffle: false
# Visualization
visualize: false # Enable visualization callback
vis_n_eval: 5 # Visualize every N validations
vis_n: null # Total samples to visualize
vis_n_category: 4 # Samples per category
# Evaluation
mesh: false # Mesh metrics (or "fid" for FID score)
voxels: false # Evaluate on voxels
no_aug: false # Disable augmentation during validation
test:
batch_size: null
num_query_points: null
load_surface_points: ${val.load_surface_points}
run: false # Run test after training
split: test # Split to evaluate
dir: null # Output directory
filename: null # Output filename
overwrite: false # Overwrite existing results
merge: false # Merge results from shards
basic: true # Basic metrics only
no_aug: ${val.no_aug}
reduction: ${val.reduction}
metrics: null # Specific metrics to compute
precision: ${val.precision}
eval_meshes: true # Evaluate extracted meshes
num_instances: null # Limit instances to evaluate
shuffle: false
vis:
split: train # Split to visualize
inputs: true # Show inputs
occupancy: true # Show occupancy field
points: false # Show query points
pointcloud: false # Show surface point cloud
voxels: false # Show voxels
mesh: false # Show mesh
box: true # Show bounding box
bbox: false # Show axis-aligned bbox
cam: false # Show camera
frame: true # Show coordinate frame
show: false # Open interactive viewer
use_loader: false # Use DataLoader
save: false # Save visualizations to disk
num_query_points: 2097152 # 128^3 for marching cubes
resolution: 128 # Marching cubes resolution
upsampling_steps: null
refinement_steps: 0
normals: false
colors: false
simplify: null # Mesh simplification target
renderer: cycles # Blender renderer
num_instances: null
render: null # Render settings
index: null # Specific sample index
aug:
# Geometric
rotate: null # Rotation axes: z|xyz|cam|null
principal_rotations: false # Use 90-degree principal rotations
scale: null # Scale range or factor
translate: null # Translation range
resize: null # Resize augmentation
# Point cloud noise
noise: null # Gaussian noise std
clip_noise: null # Clip noise magnitude
downsample: null # Downsampling method
remove_outlier: false # Remove statistical outliers
# Depth-specific
edge_noise: null # Edge noise parameters
border_noise: false # Image border noise
remove_angle: false # Remove by surface incidence angle
# View sampling
upper_hemisphere: true # Constrain camera to upper hemisphere
angle_from_index: false # Deterministic view angle from index
# Cropping / occlusion
cut_plane: null # Planar cutting parameters
cut_sphere: null # Spherical cutting
move_sphere: null # Sphere-based occlusion
bbox_jitter: null # Bounding box jitter
voxel_size: null # Voxel size for downsampling
flip: true # Random flipping
implicit:
threshold: 0.5 # Occupancy decision threshold
sdf: false # Use SDF instead of occupancy
# DVR (Differentiable Volume Rendering)
dvr: false # Enable DVR wrapper
near: 0.2 # Near plane distance
far: 2.4 # Far plane distance
step_func: equal # Step function: equal|linear|exponential
num_steps: [16, 32, 64, 128] # Progressive ray marching steps
num_pixels: 1024 # Pixels per batch
max_batch_size: 8192 # Max query batch size
# Surface refinement
num_refine_steps: 8
refine_mode: secant # secant|bisection
crop: true # Crop queries to bounds
cls:
occupancy: true # Classify based on occupancy
num_classes: null # Number of classes
weight: 0 # Classification loss weight
seg:
inputs: false # Segment inputs
points: false # Segment query points
pointcloud: false # Segment surface point cloud
mesh: false # Segment mesh
num_classes: null
weight: 0 # Segmentation loss weight
log:
freq: 10 # Log every N steps
verbose: false # Verbose output
progress: rich # Progress bar: rich|tqdm|false
pretty: false # Pretty print config
# Weights & Biases
wandb: false # Enable W&B
offline: false # Offline mode
project: ${hydra:job.config_name} # W&B project (defaults to config name)
name: ${model.arch} # W&B run name (defaults to architecture)
id: null # Resume run by ID
version: null # Version override
# W&B extras
gradients: false # Log gradient histograms
parameters: false # Log parameter histograms
graph: false # Log model graph
model: false # Log model checkpoints to W&B
profile: false # Enable profiling
metrics: null # Custom metrics to log
# Checkpointing
top_k: 1 # Keep top K checkpoints
summary_depth: 2 # Model summary depth
load:
num_workers: -1 # DataLoader workers (-1 = auto)
pin_memory: true # Pin memory for GPU transfer
prefetch_factor: 2 # Prefetch batches per worker
precision: 32 # Data loading precision
res_modifier: 2 # Resolution modifier
weighted: null # Weighted sampling strategy
hdf5: false # Use HDF5 data format
keys_to_keep: # Filter batch dict to these keys
- index
- inputs
- inputs.path
- inputs.name
files:
pointcloud: null # Surface point cloud filename
mesh: null # Mesh filename
normals: null # Normals filename
voxels: null # Voxels filename
points: # Query points filenames (per split)
train: null # Single file or list of files
val: ${files.points.train}
test: ${files.points.val}
split: # Custom train/val/test split files
train: null
val: null
test: null
suffix: "" # File suffix filter
norm:
padding: 0.1 # Mesh bounding box padding
center: null # Center method: null|true|xyz
scale: false # Scale to unit cube/sphere
method: cube # Normalization shape: cube|sphere
reference: inputs # Reference data for normalization
offset: null # Manual offset
to_front: false # Rotate canonical front to -Z
true_height: false # Use true object height
scale_factor: 1.0 # Additional scale multiplier
bounds: [-0.5, 0.5] # Normalization bounds
script: main # Entry point script
misc:
seed: 0 # Random seed
# conf/my_experiment.yaml
defaults:
- config
- _self_
data:
train_ds:
- shapenet_v1_fused
model:
arch: onet
train:
epochs: 100
lr: 1e-4
To create a variant of an existing config, inherit from it instead of config:
# conf/my_depth_experiment.yaml
defaults:
- shapenet_v1_depth # Inherit from shapenet_v1_depth (which inherits from shapenet_v1 -> config)
- _self_
model:
arch: conv_onet_grid
train:
epochs: 200
precision: 16-mixed
# conf/shapenet_depth_transformer.yaml
defaults:
- config
- _self_
data:
train_ds:
- shapenet_v1_fused
categories: [chair, table, sofa]
model:
arch: point_transformer
norm: layer
activation: gelu
compile: true
inputs:
type: depth
project: true
num_points: 2048
points:
load_surface: true
crop: true
train:
epochs: 200
batch_size: 16
lr: 1e-4
scheduler: LinearWarmupCosineAnnealingLR
warmup_frac: 0.05
precision: 16-mixed
aug:
rotate: z
noise: 0.005
scale: [0.95, 1.05]
log:
wandb: true
project: shapenet-transformer
# Override single value
train -cn shapenet_v1 model.arch=conv_onet
# Override nested value
train -cn shapenet_v1 train.optimizer=Adam train.lr=1e-3
# Override list
train -cn shapenet_v1 data.categories=[chair,table]
# Add key not in schema
train -cn shapenet_v1 ++model.custom_flag=true
# Remove a key
train -cn shapenet_v1 ~aug.noise
# Override directory config
train -cn shapenet_v1 +dirs=dlr
# Multi-run sweep
train -cn shapenet_v1 model.arch=onet,conv_onet,if_net --multirun
Hydra supports ${...} interpolation to reference other config values:
val:
batch_size: ${train.batch_size} # Same as training batch size
reduction: ${train.reduction} # Same loss reduction
test:
precision: ${val.precision} # Chains through val -> train
Query point files and surface point clouds can differ across splits:
files:
points:
train:
- samples/surface_random.npz
- samples/uniform_sphere.npz
val:
- samples/uniform_random.npz # Denser, uniform sampling for evaluation
test: ${files.points.val} # Test uses same files as val
# Development: fast iteration
train -cn shapenet_v1 train.fast_dev_run=true log.wandb=false
# Debug: overfit a single batch with anomaly detection
train -cn shapenet_v1 train.overfit_batches=1 train.detect_anomaly=true
# Production: mixed precision, compilation, full logging
train -cn shapenet_v1 train.precision=16-mixed model.compile=true log.wandb=true
| Config | Parent | Dataset | Input | Use Case |
|---|---|---|---|---|
shapenet_v1 |
config |
ShapeNet v1 | Point cloud | Standard occupancy training |
shapenet_v1_depth |
shapenet_v1 |
ShapeNet v1 | Depth | Depth-based completion |
shapenet_v1_vae |
shapenet_v1 |
ShapeNet v1 | Point cloud | VAE training |
shapenet_v1_ldm |
shapenet_v1_vae_for_ldm |
ShapeNet v1 | Point cloud | Latent diffusion |
shapenet_v1_cls |
shapenet_v1 |
ShapeNet v1 | Point cloud | Shape classification |
shapenet_v1_seg_* |
shapenet_v1 |
ShapeNet v1 | Various | Part segmentation |
shapenet_v1_autoenc |
shapenet_v1 |
ShapeNet v1 | Point cloud | Autoencoder |
completion3d |
config |
Completion3D | Partial PCD | Benchmark evaluation |
modelnet40 |
config |
ModelNet40 | Point cloud | Classification benchmark |
tabletop |
config |
TableTop | RGB-D | Scene completion |
tabletop_inst_seg* |
tabletop |
TableTop | RGB-D | Instance segmentation |
dtu_dvr |
config |
DTU | Multi-view | Differentiable volume rendering |
mugs |
shapenet |
Custom mugs | Depth (BP) | Sim-to-real mug completion |
automatica* |
various | Custom | Kinect/depth | Real-world demos |
cvpr_2025 |
shapenet_v1_ldm |
ShapeNet v1 | Point cloud | CVPR 2025 diffusion experiments |
overfit |
config |
Single mesh | Point cloud | Debug / sanity check |
*_diffusion |
config |
MNIST/CIFAR | Image | 2D diffusion baselines |