Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Inquiry about ARAP Loss Function #52

Open
SHIBOYA opened this issue Aug 2, 2024 · 9 comments
Open

Inquiry about ARAP Loss Function #52

SHIBOYA opened this issue Aug 2, 2024 · 9 comments

Comments

@SHIBOYA
Copy link

SHIBOYA commented Aug 2, 2024

During my debugging sessions, I noticed that the program does not seem to enter the arap_loss function. Consequently, it appears that the ARAP loss is not utilized during the training process. And the arap_loss remains 0 during the entire training.

Could you please provide some clarification or insights into why this might be happening?

Thank you very much for your assistance. Looking forward to your response.

@yihua7
Copy link
Owner

yihua7 commented Aug 2, 2024

Hi,
The code does use the ARAP loss and I'm not sure why your debugging didn't go through it. You can check the function here:

def arap_loss(self, t=None, delta_t=0.05, t_samp_num=2):
.

The ARAP loss is added to the training objective after the warm up stage. Please view the code here:

if self.iteration_node_rendering > self.opt.node_warm_up:

@SHIBOYA
Copy link
Author

SHIBOYA commented Aug 3, 2024

Thank you for your helpful response! Your guidance has resolved my problem.

I have another question regarding the calculation of FPS (Frames Per Second). In my tests, the maximum FPS I am able to achieve is around 200, which is below the target of 300 FPS. How to reach the desired 300 FPS?

@SHIBOYA
Copy link
Author

SHIBOYA commented Aug 3, 2024

@SHIBOYA
Copy link
Author

SHIBOYA commented Aug 3, 2024

And, I have encountered another question.

I am trying to understand the feature attribute of self.nodes. What the feature specifically refers to, and where in the code it is assigned its values? I noticed the dimension "3 + self.hyper_dim", where I understand that 3 refers to the xyz coordinates. Which feature dimensions does the self.hyper_dim represent?

@yihua7
Copy link
Owner

yihua7 commented Aug 4, 2024

Thank you for your helpful response! Your guidance has resolved my problem.

I have another question regarding the calculation of FPS (Frames Per Second). In my tests, the maximum FPS I am able to achieve is around 200, which is below the target of 300 FPS. How to reach the desired 300 FPS?

Hi, please firstly press the cache_nn button on the GUI or call the callback function here:

def callback_cache_nn(sender, app_data):
to store the pre-computed nearest neighbourhood after training, which avoids the re-searching for NN during the inference time.

I recommend you to call the function here:

def test_speed(self, round=500):
to test the FPS.

@yihua7
Copy link
Owner

yihua7 commented Aug 4, 2024

And, I have encountered another question.

I am trying to understand the feature attribute of self.nodes. What the feature specifically refers to, and where in the code it is assigned its values? I noticed the dimension "3 + self.hyper_dim", where I understand that 3 refers to the xyz coordinates. Which feature dimensions does the self.hyper_dim represent?

Hi, this is a good question! And that's our special design for the spatially sparse control.
If we use the first 3 coordinates only, the NN control points are searched in the 3D Euclidean space via a P2 norm distance. However, it may results in some artifacts for those regions close to each other but not connected, because their motions are independent and shouldn't rely on some shared control points, even they are quite close. (e.g the base and the arm in Lego scene).
We assign learnable hypercoordinates to both control points and Gaussians to lift them up from 3D space to ND hyperspace, making them able to learn a more flexible topology and spatial relationship there without degrading their distribution on Euclidean space. This is our insight on the design.

Hope this info helps!

@SHIBOYA
Copy link
Author

SHIBOYA commented Aug 4, 2024

Thank you very much for your detailed response to my questions. It is indeed an impressive work!

@SHIBOYA
Copy link
Author

SHIBOYA commented Aug 18, 2024

Hi, I am currently trying to use your repository with the DyNeRF dataset, eg. the cut_roasted_beef. However, I am unsure of the correct way to input this dataset into your code. Could you please let me know if your repository supports the DyNeRF dataset? If it does, could you provide some guidance on how to correctly set up and input the cut_roasted_beef, or any other DyNeRF dataset?

@SHIBOYA
Copy link
Author

SHIBOYA commented Aug 18, 2024

When I try this command:

python train_gui.py --source_path /data/dynerf/cut_roasted_beef  --model_path outputs/cut_roasted_beef --deform_type node --node_num 512 --hyper_dim 8 --init_isotropic_gs_with_all_colmap_pcl --eval --gt_alpha_mask_as_scene_mask --local_frame --resolution 2 --W 800 --H 800

where I refer to issue#12, it occurs errors:

Traceback (most recent call last):
  File "train_gui.py", line 2086, in <module>
    gui.train(args.iterations)
  File "train_gui.py", line 1073, in train
    self.train_node_rendering_step()
  File "train_gui.py", line 1502, in train_node_rendering_step
    hyper_pcl = (trans_samp + original_gaussians.get_xyz[:, None]).reshape(
RuntimeError: cannot reshape tensor of 0 elements into shape [0, -1] because the unspecified dimension size -1 can be any value and is ambiguous
Training progress:   0%|                                                                                                           | 0/80000 [09:06<?, ?it/s]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants