Skip to content

neus-facto training fails on SDF studio data: _LazyError object has no attribute __data #3751

@kiranganeshan

Description

@kiranganeshan

When running ns-train neus-facto with the sdfstudio-data dataloader, just after training and evaluation images are cached, an AttributeError occurs: AttributeError: '_LazyError' object has no attribute '__data'.

To Reproduce
Steps to reproduce the behavior:

  1. Generate a NeRF Studio dataset from a previous COLMAP run using ns-process-data images --skip-colmap --colmap-model-path <MODEL_PATH> --data <DATA_PATH> --output_dir <NERFSTUDIO_PATH>
  2. Clone the sdfstudio repository at https://github.com/autonomousvision/sdfstudio
  3. Generate an SDFStudio dataset using sdfstudio/scripts/datasets/process_nerfstudio_to_sdfstudio.py --data <NERFSTUDIO_PATH> --output_dir <SDFSTUDIO_PATH>
  4. Run ns-train neus-facto sdfstudio-data <SDFSTUDIO_PATH>

Expected behavior
Output is as follows after config is printed:

/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/engine/trainer.py:137: FutureWarning: `torch.cuda.amp.GradScaler(args...)` is deprecated. Please use `torch.amp.GradScaler('cuda', args...)` instead.
  self.grad_scaler = GradScaler(enabled=self.use_grad_scaler)
           Saving checkpoints to: outputs/unnamed/neus-facto/2026-04-02_205403/nerfstudio_models          trainer.py:142
Setting up training dataset...
Caching all 165 images.
Setting up evaluation dataset...
Caching all 165 images.
Traceback (most recent call last):
  File "/Portal/anaconda3/envs/sdfstudio/bin/ns-train", line 6, in <module>
    sys.exit(entrypoint())
  File "/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/scripts/train.py", line 262, in entrypoint
    main(
  File "/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/scripts/train.py", line 247, in main
    launch(
  File "/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/scripts/train.py", line 189, in launch
    main_func(local_rank=0, world_size=world_size, config=config)
  File "/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/scripts/train.py", line 99, in train_loop
    trainer.setup()
  File "/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/engine/trainer.py", line 158, in setup
    self.pipeline = self.config.pipeline.setup(
  File "/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/configs/base_config.py", line 53, in setup
    return self._target(self, **kwargs)
  File "/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/pipelines/base_pipeline.py", line 270, in __init__
    self._model = config.model.setup(
  File "/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/configs/base_config.py", line 53, in setup
    return self._target(self, **kwargs)
  File "/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/models/base_model.py", line 85, in __init__
    self.populate_modules()  # populate the modules
  File "/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/models/neus_facto.py", line 89, in populate_modules
    super().populate_modules()
  File "/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/models/neus.py", line 59, in populate_modules
    super().populate_modules()
  File "/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/models/base_surface_model.py", line 98, in populate_modules
    self.field = self.config.sdf_field.setup(
  File "/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/configs/base_config.py", line 53, in setup
    return self._target(self, **kwargs)
  File "/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/fields/sdf_field.py", line 150, in __init__
    self.encoding = tcnn.Encoding(
  File "/Portal/anaconda3/envs/sdfstudio/lib/python3.10/site-packages/nerfstudio/utils/external.py", line 35, in __getattr__
    return _LazyError.LazyErrorObj(object.__getattribute__(self, "__data"))
AttributeError: '_LazyError' object has no attribute '__data'

Additional context
To my understanding, I cannot use ns-train neus-facto nerfstudio-data <NERFSTUDIO_DATA> because this pipeline requires normals. Meanwhile, ns-train neus-facto sdfstudio-data does not seem to require normals. I'm not sure whether autonomousvision/sdfstudio is the right repository to translate nerfstudio data into sdfstudio data.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions