-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Add Scaffold-GS to methods #3623
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
base: main
Are you sure you want to change the base?
Conversation
Hey, nice addition for nerfstudio But, IMO, the license of diff_scaffold_rasterization (https://github.com/brian-xu/diff-scaffold-rasterization) is not same as nerfstudio and its not commercially feasible. I recommend to use gsplat scaffold (PR from nerfstudio-project/gsplat#409 by MrNerf) |
I did consider using gsplat since the authors of Scaffold-GS published a follow-up paper using gsplat. However, I wanted to implement GSDF and use depth+normal regularization from RaDe-GS so I opted for the Inria rasterizer. If I have the time, I'll see if I can migrate to gsplat. |
Thanks for your effort for migrating to gsplat. Gsplat also has unmerged RaDe-GS implementation. BTW, Does |
I didn't know there was a RaDe-GS implementation for gsplat, I'll have to look into that. The only problem with ns-export is that Scaffold-GS neural gaussians would have to be "baked" from a certain viewpoint, and I don't think ns-export can provide such a camera view. It could be possible by caching the first camera view as part of the model parameters. |
Good result so far @brian-xu 🎉
Seems scaffold-gs faster to convergence than others method. |
As of the most recent commit scaffold-gs-nerfstudio uses my fork of gsplat with depth+normal regularization from RaDe-GS and is compatible with the nerfstudio license. |
Nice addition mate. Question: is scaffold standalone or do you run scaffold+rade+gs together? Is it possible to fetch own depth maps? For example, I have added depth supervision using MoGe and its OK to fill in some areas using relative depth, since gsplat already output rendered depths. I read also in the gsplat forum that adding absgrad really improved the numbers. Any plan to add it as well? :) |
Scaffold is standalone: we calculate the neural gaussians as per the paper and rasterize with RaDe+GS separately. The RaDe gsplat branch is compatible with any gaussian splatting framework you want to implement. It is also compatible with external depth supervision via a monocular estimator such as MoGe. The authors of RaDe actually don't use any sort of depth supervision during training but it should be a relatively simple addition. I don't know whether the current gsplat implementation of depth rasterization is differentiable, but the outputs from RaDe are. As for absgrad: I haven't tested it but the original PR used it in evaluation scripts so it likely works without any modification. Whether it works well in combination with Scaffold-GS and RaDe would require more testing. |
Thanks for your prompt answer. Would it be also possible to supply normals for example? As I understand, gsplat does not have normal in the backward pass for 3dgs, but perhaps you have solved it in some way? |
Yes, you can also train with normals. The paper RaDe-GS introduces depth and normals in the backward pass, and the authors implemented their work in gsplat. See nerfstudio-project/gsplat#317 for the original PR and https://github.com/brian-xu/gsplat-rade for my updated fork that is compatible with the latest version of nerfstudio. |
Added absgrad and depth supervision now directly into scaffold-gs model. Let's see how it goes. However, still wondering about the normals... need to figure out a way to parse them into scaffolf-gs... :D |
I have updated GSDF to display in Viser while training and allow for mesh export from a trained model. I'm considering it ready for release and have updated the documentation accordingly. |
Training with depth and normal supervision at the moment. Splat export is only supported with Gaussian Splatting methods Edit: found it in export_panel!
|
Hello and thanks for your tests. I can say that scaffold-gs in general reaches good values very early on. So to truly test evaluation, you need to compare against 30k. 3DGS vs Scaffold-GS. |
Hello Brian, thanks for this awesome pull request. I really enjoy scaffold-gs. Using absgrad with depth- and normal supervision improves their respective area, but it might create some clouds of gaussians where it would not have done if supervision was not set to True. But the depth and normals improves a lot which is nice to see with the implemented supervision. I'll see if I can attach some example images of the supervised results. Anyways, I also ran the GDSF setup (quite slow though which I guess is because of the neural part) and I got the following error at step 20000 when GDSF starts to kick in.
|
This error has been fixed.
I would have to write a custom script to export splats to PLYs. These splats would have to be "baked" to render from a single view, losing some of the advantages Scaffold-GS offers. I'll consider making it if there is enough demand. |
Would be awesome to have that script to save them in a PLY file so I can work with the 3DGS data outside of nerfstudio too, such as supersplat to clean, crop etc. |
Well done @brian-xu ! Do you have benchmark results for this version of the algorithm on mip360 data? Including PSNR, number of Gaussians, vmem usage, and training time. |
Adds an implementation of Scaffold-GS to the docs.
This project is a little ambitious and also includes 2 other methods: GSDF, an extension of Scaffold-GS, and a port of NeuS-acc from SDFStudio. Those two methods aren't completely done yet, but I won't have time to work on them for a while so I figured I should release Scaffold-GS first.