Customize NuRec Configuration#

When you run NuRec, you must pass a configuration (defined in a YAML file) that sets the training paramters for NuRec. To define the configuration, use the --config-name flag when you launch the NuRec container, in the following format:

--config-name=<path/to/config.yaml>

Use Predefined Base Configuration Files#

The following predefined configuration files exist in the NuRec container, for ease of use:

Configuration File Name

Description

Flag

_base_3dgut_dynamic.yaml

Base configuration for dynamic 3DGUt scenes with moving objects

--config-name=configs/apps/AV/_base_3dgut_dynamic.yaml

_base_3dgut_dynamic_road_semantic.yaml

Dynamic 3DGUt with road semantic segmentation support

--config-name=configs/apps/AV/_base_3dgut_dynamic_road_semantic.yaml

_base_3dgut_static.yaml

Base configuration for static 3DGUt scenes

--config-name=configs/apps/AV/_base_3dgut_static.yaml

_base_3dgut_static_road_semantic.yaml

Static 3DGUt with road semantic segmentation support

--config-name=configs/apps/AV/_base_3dgut_static_road_semantic.yaml

Override Individual Configuration Parameters#

You might want to pass a configuration file, but change specific configuration parameters based on your particular training needs. You can override any configuration parameter defined in your configuration file. To override specific configuration paramaters, pass individual flags for each override when you launch NuRec from the command line.

For example, if you passed a configuration file named basic-config.yaml that contained a parameter called mystrust set to myparam:0, you could override that parameter using the --mystruct.myparam=42 flag.

We recommend the following overrides and corresponding use cases.

Set Up the Training Config#

dataset:
   n_samples_per_epoch: 30000
 seek_offset_sec: 0.0
 duration_sec: 2.0
 camera_ids:
 camera_ids:
 lidar_ids:
 train_camera_ids:
 train_lidar_ids:
 val_camera_ids:
 val_lidar_ids:


checkpoint:
 every_n_train_steps: 30000
 save_top_k: 1


system:
 collect_garbage_mem_usage: 0.7  # Trigger when 70% of GPU memory is used, avoid out-of-memory issues due to memory fragmentation in maglev workflows
 collect_garbage_check_interval: 10  # Check memory every 10 steps

Override Initialization and Training Strategy#

model:
  # 800k background points + 200k random points + 300k dynamic rigids + 300k dynamic deformables + 200k road points = 1.8m points
  layers:
    background:
      initialization:
        num_point_cloud_points: 800_000
        num_near_points: 100_000
        num_far_points: 100_000
    dynamic_rigids:
      initialization:
        num_point_cloud_points_in_layer: 300_000
    dynamic_deformables:
      initialization:
        num_point_cloud_points_in_layer: 300_000
    road:
      initialization:
        num_point_cloud_points: 200_000

  calib:
    lidar:
      enabled: false

  post_processing:
    b:
      # Disable frame-specific optimizations for the PPISP pipeline for two reasons:
      # 1. we don't have a PPISP controller yet.
      # 2. we are using fourier features for the background which interferes with the frame-specific optimizations.
      per_frame_ppisp_enabled: false

  strategy:
    name: mcmc
    print_stats: true
    relocate:
      start_iteration: 500
      end_iteration: 27000
      frequency: 100
    perturb:
      noise_lr:
        default: 5000.0
        layers:
          dynamic_rigids: 5000.0
          dynamic_deformables: 5000.0
          road: 5000.0
    add:
      start_iteration: 500
      end_iteration: 27000
      frequency: 100
      max_n_gaussians: 2500000

Change Specific Dynamic Features in the Reconstruction#

model:
  # Enable temporal appearance for background for compatible with Pacsim
  background:
    fourier_features_dim: 5

  dynamic_rigids:
    fourier_features_dim: 5

Update Loss Functions#

loss:
  lidar:
    lambda_: 0.03