gaussian-splatting
gaussian-splatting copied to clipboard
Partially freeze gaussian model
trafficstars
Hey there,
I have a gaussian model and I want to freeze some of the first n gaussians while optimizing the rest.
To do that, I do the following:
def freeze_params(self, freeze_mask):
no_grad_xyz = self._xyz[freeze_mask].detach()
no_grad_features_dc = self._features_dc[freeze_mask].detach()
no_grad_features_rest = self._features_rest[freeze_mask].detach()
no_grad_scaling = self._scaling[freeze_mask].detach()
no_grad_rotation = self._rotation[freeze_mask].detach()
no_grad_opacity = self._opacity[freeze_mask].detach()
optimizable_tensors = self._prune_optimizer(~freeze_mask)
self._xyz = torch.cat((no_grad_xyz, optimizable_tensors["xyz"]))
self._features_dc = torch.cat((no_grad_features_dc, optimizable_tensors["f_dc"]))
self._features_rest = torch.cat((no_grad_features_rest, optimizable_tensors["f_rest"]))
self._scaling = torch.cat((no_grad_scaling, optimizable_tensors["scaling"]))
self._rotation = torch.cat((no_grad_rotation, optimizable_tensors["rotation"]))
self._opacity = torch.cat((no_grad_opacity, optimizable_tensors["opacity"]))
self.xyz_gradient_accum = self.xyz_gradient_accum[~freeze_mask]
self.denom = self.denom[~freeze_mask]
self.max_radii2D = self.max_radii2D[~freeze_mask]
However, parameters have stopped being updated. It seems like something is wrong with the backprop. Any idea how to do that properly?