mirror of
https://github.com/nerfstudio-project/nerfstudio.git
synced 2026-11-11 10:34:29 +08:00
Add average_init_density to improve robustness of nerfacto training (#2834)
This commit is contained in:
parent
fb1fee1d8f
commit
d8b517d6a5
@ -97,6 +97,7 @@ method_configs["nerfacto"] = TrainerConfig(
|
||||
),
|
||||
model=NerfactoModelConfig(
|
||||
eval_num_rays_per_chunk=1 << 15,
|
||||
average_init_density=0.01,
|
||||
camera_optimizer=CameraOptimizerConfig(mode="SO3xR3"),
|
||||
),
|
||||
),
|
||||
@ -140,6 +141,7 @@ method_configs["nerfacto-big"] = TrainerConfig(
|
||||
max_res=4096,
|
||||
proposal_weights_anneal_max_num_iters=5000,
|
||||
log2_hashmap_size=21,
|
||||
average_init_density=0.01,
|
||||
camera_optimizer=CameraOptimizerConfig(mode="SO3xR3"),
|
||||
),
|
||||
),
|
||||
@ -187,6 +189,7 @@ method_configs["nerfacto-huge"] = TrainerConfig(
|
||||
max_res=8192,
|
||||
proposal_weights_anneal_max_num_iters=5000,
|
||||
log2_hashmap_size=21,
|
||||
average_init_density=0.01,
|
||||
camera_optimizer=CameraOptimizerConfig(mode="SO3xR3"),
|
||||
),
|
||||
),
|
||||
|
||||
@ -56,12 +56,14 @@ class HashMLPDensityField(Field):
|
||||
base_res: int = 16,
|
||||
log2_hashmap_size: int = 18,
|
||||
features_per_level: int = 2,
|
||||
average_init_density: float = 1.0,
|
||||
implementation: Literal["tcnn", "torch"] = "tcnn",
|
||||
) -> None:
|
||||
super().__init__()
|
||||
self.register_buffer("aabb", aabb)
|
||||
self.spatial_distortion = spatial_distortion
|
||||
self.use_linear = use_linear
|
||||
self.average_init_density = average_init_density
|
||||
|
||||
self.register_buffer("max_res", torch.tensor(max_res))
|
||||
self.register_buffer("num_levels", torch.tensor(num_levels))
|
||||
@ -111,7 +113,7 @@ class HashMLPDensityField(Field):
|
||||
# Rectifying the density with an exponential is much more stable than a ReLU or
|
||||
# softplus, because it enables high post-activation (float32) density outputs
|
||||
# from smaller internal (float16) parameters.
|
||||
density = trunc_exp(density_before_activation)
|
||||
density = self.average_init_density * trunc_exp(density_before_activation)
|
||||
density = density * selector[..., None]
|
||||
return density, None
|
||||
|
||||
|
||||
@ -95,6 +95,7 @@ class NerfactoField(Field):
|
||||
use_pred_normals: bool = False,
|
||||
use_average_appearance_embedding: bool = False,
|
||||
spatial_distortion: Optional[SpatialDistortion] = None,
|
||||
average_init_density: float = 1.0,
|
||||
implementation: Literal["tcnn", "torch"] = "tcnn",
|
||||
) -> None:
|
||||
super().__init__()
|
||||
@ -116,6 +117,7 @@ class NerfactoField(Field):
|
||||
self.use_pred_normals = use_pred_normals
|
||||
self.pass_semantic_gradients = pass_semantic_gradients
|
||||
self.base_res = base_res
|
||||
self.average_init_density = average_init_density
|
||||
self.step = 0
|
||||
|
||||
self.direction_encoding = SHEncoding(
|
||||
@ -218,7 +220,7 @@ class NerfactoField(Field):
|
||||
# Rectifying the density with an exponential is much more stable than a ReLU or
|
||||
# softplus, because it enables high post-activation (float32) density outputs
|
||||
# from smaller internal (float16) parameters.
|
||||
density = trunc_exp(density_before_activation.to(positions))
|
||||
density = self.average_init_density * trunc_exp(density_before_activation.to(positions))
|
||||
density = density * selector[..., None]
|
||||
return density, base_mlp_out
|
||||
|
||||
|
||||
@ -124,6 +124,8 @@ class NerfactoModelConfig(ModelConfig):
|
||||
"""Which implementation to use for the model."""
|
||||
appearance_embed_dim: int = 32
|
||||
"""Dimension of the appearance embedding."""
|
||||
average_init_density: float = 1.0
|
||||
"""Average initial density output from MLP. """
|
||||
camera_optimizer: CameraOptimizerConfig = field(default_factory=lambda: CameraOptimizerConfig(mode="SO3xR3"))
|
||||
"""Config of the camera optimizer to use"""
|
||||
|
||||
@ -162,6 +164,7 @@ class NerfactoModel(Model):
|
||||
use_pred_normals=self.config.predict_normals,
|
||||
use_average_appearance_embedding=self.config.use_average_appearance_embedding,
|
||||
appearance_embedding_dim=self.config.appearance_embed_dim,
|
||||
average_init_density=self.config.average_init_density,
|
||||
implementation=self.config.implementation,
|
||||
)
|
||||
|
||||
@ -179,6 +182,7 @@ class NerfactoModel(Model):
|
||||
self.scene_box.aabb,
|
||||
spatial_distortion=scene_contraction,
|
||||
**prop_net_args,
|
||||
average_init_density=self.config.average_init_density,
|
||||
implementation=self.config.implementation,
|
||||
)
|
||||
self.proposal_networks.append(network)
|
||||
@ -190,6 +194,7 @@ class NerfactoModel(Model):
|
||||
self.scene_box.aabb,
|
||||
spatial_distortion=scene_contraction,
|
||||
**prop_net_args,
|
||||
average_init_density=self.config.average_init_density,
|
||||
implementation=self.config.implementation,
|
||||
)
|
||||
self.proposal_networks.append(network)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user