-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
Splatfacto new POV image quality #2863
Comments
How did you calculate the poses for those cameras? |
Hi @jb-ye, I got it directly from the dataset. Cameras, lidar point clouds and objects are provided in world coordinate. |
How do you validate the accuracy of those data? Running Nerf/Gaussian Splatting model expects a much higher accuracy standard of pose estimation than most autonomous robot stacks. It probably wouldn't work at all if you use those pre-calculated poses. |
Hi @jb-ye, thanks for your message.
I did this experimentation about camera pose optimization: nerfstudio-project/gsplat#119 |
(1) I don't think camera opt would work with gaussian splatting by just back propagating gradients, it requires some non-trivial innovation. |
Couple things you can try:
We're working on camera backprop in gsplat, but not sure when it will be finished. Something you could do is use the pytorch implementation of |
Hi @kerrj and @jb-ye
thanks |
@jb-ye "camera opt will requires some non-trivial innovation", I'm very interested in this question, can you tell me more about it? |
I haven't tested the pytorch implementation within splatfacto for camera optimization yet, but I'd be interested in what happens if you try! The gradients should be correct for camera optimization, but significantly slower than the CUDA version Also, for all of these changes you redefined the camera optimizer inside splatfacto.py and use |
Hi @kerrj , |
You are right, 3DGS operates per image thus the gradient doesn't reflect cross frame consistency. Let's why I said it is a non-trivial work, and needs some fresh ideas. |
@kerrj I am trying to get a proper evaluation setup while using pose optimization on my dataset. The poses come from a SLAM system so they're not as accurate as COLMAP. Before trying to implement test-time pose optimization, I figured a simpler idea would be to do what you suggested: train a nerfacto with pose optimization on a merged train and eval dataset, export the poses, and then train and eval models on the exported poses without pose optimization. However, when I then try training a model on the exported poses without pose optimization, I get worse train and eval performance than when I just train on the original dataset without pose optimization, which is not what I expect. Do you have any ideas on how to get this working? It also seems the final optimized poses are different for different models. I did a pose optimization run with nerfacto and nerfacto-big and the camera_opt_translation and camera_opt_rotation values they converged to differ by about 0.1 to 0.2 |
@pierremerriaux-leddartech Hi, I wonder how did you add objects in the scene in your last video, it's like an implement of street-gaussians? |
@Nplace-su, yes we inspired from street gaussians |
@MartinEthier It is possible that pose optimization may get worse. Things you can try: (1) decrease the learning rate of poses and even play a bit more with the learning rate schedule. |
3DGS always tries its best to fits the input images, even if the camera attitude is not accurate. In other words, 3dgs always creates local optimizations for camera optimization. |
Hi a little late to the party. I have lidar odomtery and transformation between camrea and lidar in my ROS TF tree and it on paper should give better localization than COLMAP. I am saving this in the transforms.json after converting to OpenGL to bypass COLMAP but the results are much much worse. splattfacto gives some output with very bad depth but nerffacto (or any other nerfstudio nerf model) doesnt run at all. Is there a way to debug this issue according to you. its a custom dataset that I am generating from a rosbag |
Hi,
It not really a bug, but more a question about splatfacto image quality/parameters. If it is not the right place, just let me know.
I am working to reconstruct driving scene from pandaset. Camera poses are along a car trajectory. When I render an image from this trajectory (train or eval set) the quality is very good.
Below a example of one image from eval set:
But if I move a bit the target vehicle and the ego camera (1m on left and 0.5m up), the camera direction stays very close to the original one.
The quality decrease very quickly. The quality is very sensitive to direction.
I tried to reduce sh degree from 3 to 1, to avoid to much overfitting, with no really improvement.
Sure that a driving scene images is less dense, than a unique object scene with video sequence around it. But few months ago, I did it with nerfacto, the quality from initial poses was less, but really less sensible to new POV. Below a short video of nerfacto reconstruction from 5 cameras (front, side, and front-side) on the vehicle:
2023-09-21_234748.mp4
I improved my results with nerfacto by using camera pose opt. So I tried to do it for splatfacto by cherry pick viewmat gradient backward from gsplat branch https://github.com/nerfstudio-project/gsplat/tree/vickie/camera-grads. But for now, it didn't improve it.
In the same way, if I tried with multi cameras (or just a side camera in place of the front), the quality is very less impressive. Below example with 5 cameras and cameras optimization (but I seem to not have a big influence).
Left view:
Front view
Do you have any idea, about what I should try firstly to improve new POV synthesis and secondly to improve multi cameras reconstruction?
And did someone work one camera pose optimization for SplatFacto ?
And just for the fun, below an example of what we can do with objects and multiples splatFacto instance:
render_scene037_added_4cars.mp4
Thanks for your inputs, I will go to implement depth loss from lidar to see if it help.
The text was updated successfully, but these errors were encountered: