ns-train pynerf --vis viewer+wandb colmap --data data/xxx
Traceback (most recent call last):
File "F:\miniconda3\envs\nerfstudio-gs\lib\runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "F:\miniconda3\envs\nerfstudio-gs\lib\runpy.py", line 87, in run_code
exec(code, run_globals)
File "F:\miniconda3\envs\nerfstudio-gs\Scripts\ns-train.exe_main.py", line 7, in
What version of nerfstudio are you using? The current code in this repo should work for v3.4.0, but I think there were recent changes on nerfstudio's main branch that changed the data API a bit.
My version is when "Add PyNeRF external method #2734" was merged on January 10, 2024.The version number v3.4.0 hasn't changed in a long time.
Understood and agreed that it's not ideal, it's just that the data API has since changed and I'm hesitant to change the main branch of this repo until another tagged release comes out. If you want to use nerfstudio main, you can try modifying the constructors accordingly (ie: remove the camera optimizer arg):
+++ b/pynerf/data/datamanagers/random_subset_datamanager.py
@@ -93,8 +93,7 @@ class RandomSubsetDataManager(DataManager):
self.train_camera_optimizer = self.config.camera_optimizer.setup(
num_cameras=self.train_dataparser_outputs.cameras.size, device=self.device)
- self.train_ray_generator = RayGenerator(self.train_dataparser_outputs.cameras.to(self.device),
- self.train_camera_optimizer)
+ self.train_ray_generator = RayGenerator(self.train_dataparser_outputs.cameras.to(self.device))
fields_to_load = {RGB}
for additional_field in {DEPTH, WEIGHT, TRAIN_INDEX}:
@@ -117,8 +116,7 @@ class RandomSubsetDataManager(DataManager):
self.eval_dataset = InputDataset(self.eval_dataparser_outputs)
self.eval_camera_optimizer = self.config.camera_optimizer.setup(
num_cameras=self.eval_dataparser_outputs.cameras.size, device=self.device)
- self.eval_ray_generator = RayGenerator(self.eval_dataparser_outputs.cameras.to(self.device),
- self.eval_camera_optimizer)
+ self.eval_ray_generator = RayGenerator(self.eval_dataparser_outputs.cameras.to(self.device))
self.eval_image_metadata = self._get_image_metadata(self.eval_dataparser_outputs)
self.eval_batch_dataset = RandomSubsetDataset(
if that works for you, I could maybe wrap the constructors with a try-catch to test out both constructors (and handle both versions) in the interim?
+++ b/pynerf/data/datamanagers/random_subset_datamanager.py
@@ -93,8 +93,7 @@ class RandomSubsetDataManager(DataManager):
self.train_camera_optimizer = self.config.camera_optimizer.setup(
num_cameras=self.train_dataparser_outputs.cameras.size, device=self.device)
- self.train_ray_generator = RayGenerator(self.train_dataparser_outputs.cameras.to(self.device),
- self.train_camera_optimizer)
+ self.train_ray_generator = RayGenerator(self.train_dataparser_outputs.cameras.to(self.device))
fields_to_load = {RGB}
for additional_field in {DEPTH, WEIGHT, TRAIN_INDEX}:
@@ -117,8 +116,7 @@ class RandomSubsetDataManager(DataManager):
self.eval_dataset = InputDataset(self.eval_dataparser_outputs)
self.eval_camera_optimizer = self.config.camera_optimizer.setup(
num_cameras=self.eval_dataparser_outputs.cameras.size, device=self.device)
- self.eval_ray_generator = RayGenerator(self.eval_dataparser_outputs.cameras.to(self.device),
- self.eval_camera_optimizer)
+ self.eval_ray_generator = RayGenerator(self.eval_dataparser_outputs.cameras.to(self.device))
self.eval_image_metadata = self._get_image_metadata(self.eval_dataparser_outputs)
self.eval_batch_dataset = RandomSubsetDataset(
This works for me! I'm running nerfstudio 1.0.0. Many thanks!
How exactly do I go about implimenting this change in code?