gaussian-splatting icon indicating copy to clipboard operation
gaussian-splatting copied to clipboard

Issue of Loading Gaussians for Fine-Tuning.

Open ZhiyeTang opened this issue 1 year ago • 1 comments
trafficstars

Noticed that in scene/__init__.py, the class Scene receives a variable load_iteration, which seems to support fine-tuning. However, in the following lines:

if self.loaded_iter:
            self.gaussians.load_ply(os.path.join(self.model_path,
                                                           "point_cloud",
                                                           "iteration_" + str(self.loaded_iter),
                                                           "point_cloud.ply"))
        else:
            self.gaussians.create_from_pcd(scene_info.point_cloud, self.cameras_extent)

the load_ply() function does not set the variable gaussians.max_radii2D from the loaded ply file, making further training impossible. The question is, how can I set this variable properly? Seems that it cannot be simply parsed from the trained ply files.

ZhiyeTang avatar May 13 '24 07:05 ZhiyeTang

Is simply setting gaussians.max_radii2D as all-zero tensors like in create_from_pcd(), as

self.max_radii2D = torch.zeros((self.get_xyz.shape[0]), device="cuda")

feasible? I'm not sure.

ZhiyeTang avatar May 13 '24 07:05 ZhiyeTang

From my knowledge, I can say that 

self.max_radii2D

are used when projecting 3D gaussians to a 2D surface. Yes,  max_radii2D is set to be all zero before passing through the projection, and once rasterization is done, it will again be set to be zero. It is highly likely this variable is set to be zero only for the optimization purpose.  How ever you can change this behaviour by modifying the CUDA code.

hariharan1412 avatar May 16 '24 22:05 hariharan1412

From my knowledge, I can say that 

self.max_radii2D

are used when projecting 3D gaussians to a 2D surface. Yes,  max_radii2D is set to be all zero before passing through the projection, and once rasterization is done, it will again be set to be zero. It is highly likely this variable is set to be zero only for the optimization purpose.  How ever you can change this behaviour by modifying the CUDA code.

Thank you. I've recognized that the correct way to do fine-tuning is to save checkpoints at certain iterations and retrain by loading saved checkpoints. This issue will be closed. Thanks a lot again.

ZhiyeTang avatar May 24 '24 13:05 ZhiyeTang