nerfstudio-project/nerfstudio

Misalignment of Splatfacto's hyperparameter and VanillaGS's hyperparameter

Opened this issue · 0 comments

Describe the bug
Hi, I am tracing the code of Splatfacto and find out that some hyperparmeters does not align with the original Vanilla GS
Here is an example of misalignment of Splatfacto's hyperparameter and VanillaGS's hyperparameter:
VanillaGS's self.percent_dense: https://github.com/graphdeco-inria/gaussian-splatting/blob/8a70a8cd6f0d9c0a14f564844ead2d1147d5a7ac/scene/gaussian_model.py#L356

Splatfacto's densify_size_threshold:

splits = (self.scales.exp().max(dim=-1).values > self.config.densify_size_thresh).squeeze()

In nerfstudio 1.1.4, Splatfacto's hyperparameter also does not align (scene_scale hard_coded to 1) :
self.strategy_state = self.strategy.initialize_state(scene_scale=1.0)

The hyperparameter of self.percent_dense and densify_size_threshold is the same (value = 0.01), but VanillaGS's splitting and cloning threshold is actually self.percent_dense*scene_extent (from above link)
In splatfacto, the threshold does not multiply scene_extent. I think it is because it assumes that the scene is normalized to -1 and 1 (default setting auto scales camera poses to -1 and 1 so scene_extent is 1)
However, in my application, I do not want to auto scale poses, so scene_extent is not 1 and results in the threshold does not align the VanillaGS.