autonomousvision / sdfstudio

A Unified Framework for Surface Reconstruction
Apache License 2.0
1.9k stars 179 forks source link

AttributeError: 'SDFField' object has no attribute 'hash_encoding_mask' #276

Open wujinhu1999 opened 6 months ago

wujinhu1999 commented 6 months ago

Hello authors, thank you for your excellent work. When I use the command 'ns-train neus-facto --pipeline.model.sdf-field.inside-outside False --pipeline.model.sdf-field.encoding-type periodic --vis wandb --experiment-name neus- facto-periodic-scan40 sdfstudio-data --data data/dtu/scan40', that is, when I changed this encoding-type to periodic and tensorf_vm, the code reported an error. Traceback (most recent call last): File "/home/dell/.conda/envs/sdfstudio/bin/ns-train", line 8, in sys.exit(entrypoint()) File "/data/WJH/sdfstudio/scripts/train.py", line 250, in entrypoint main( File "/data/WJH/sdfstudio/scripts/train.py", line 236, in main launch( File "/data/WJH/sdfstudio/scripts/train.py", line 175, in launch main_func(local_rank=0, world_size=world_size, config=config) File "/data/WJH/sdfstudio/scripts/train.py", line 90, in train_loop trainer.train() File "/data/WJH/sdfstudio/nerfstudio/engine/trainer.py", line 151, in train loss, loss_dict, metrics_dict = self.train_iteration(step) File "/data/WJH/sdfstudio/nerfstudio/utils/profiler.py", line 43, in wrapper ret = func(*args, kwargs) File "/data/WJH/sdfstudio/nerfstudio/engine/trainer.py", line 319, in trainiteration , loss_dict, metrics_dict = self.pipeline.get_train_loss_dict(step=step) File "/data/WJH/sdfstudio/nerfstudio/utils/profiler.py", line 43, in wrapper ret = func(*args, *kwargs) File "/data/WJH/sdfstudio/nerfstudio/pipelines/base_pipeline.py", line 260, in get_train_loss_dict model_outputs = self._model(ray_bundle) File "/home/dell/.conda/envs/sdfstudio/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1130, in _call_impl return forward_call(input, kwargs) File "/data/WJH/sdfstudio/nerfstudio/models/base_model.py", line 142, in forward return self.get_outputs(ray_bundle) File "/data/WJH/sdfstudio/nerfstudio/models/base_surface_model.py", line 293, in get_outputs samples_and_field_outputs = self.sample_and_forward_field(ray_bundle=ray_bundle) File "/data/WJH/sdfstudio/nerfstudio/models/neus_facto.py", line 285, in sample_and_forward_field field_outputs = self.field(ray_samples, return_alphas=True) File "/home/dell/.conda/envs/sdfstudio/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1130, in _call_impl return forward_call(*input, *kwargs) File "/data/WJH/sdfstudio/nerfstudio/fields/sdf_field.py", line 697, in forward field_outputs = self.get_outputs(ray_samples, return_alphas=return_alphas, return_occupancy=return_occupancy) File "/data/WJH/sdfstudio/nerfstudio/fields/sdf_field.py", line 635, in get_outputs h = self.forward_geonetwork(inputs) File "/data/WJH/sdfstudio/nerfstudio/fields/sdf_field.py", line 388, in forward_geonetwork feature = feature self.hash_encoding_mask.to(feature.device) File "/home/dell/.conda/envs/sdfstudio/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1207, in getattr raise AttributeError("'{}' object has no attribute '{}'".format( AttributeError: 'SDFField' object has no attribute 'hash_encoding_mask'

niujinshuchong commented 5 months ago

OK, thanks for reporting this, the coarse to fine strategy that the mask is used for is not tested properly for other encodings.

wujinhu1999 commented 5 months ago

OK, thanks for reporting this, the coarse to fine strategy that the mask is used for is not tested properly for other encodings.

So how can I use other encodings?This means that only a small number of models are suitable for other encoding methods, right?For example volsdf, neus?Looking forward to your reply.