bennyguo / instant-nsr-pl

Neural Surface reconstruction based on Instant-NGP. Efficient and customizable boilerplate for your research projects. Train NeuS in 10min!
MIT License
856 stars 84 forks source link

Without masks, unable to extract mesh and low quality NeRF with DTU dataset (scan122 was tested) #40

Open kelvincai522 opened 1 year ago

kelvincai522 commented 1 year ago

I am testing NeuS with the DTU dataset (scan122 particularly). I am only using its RGB images without masks and computed new camera poses using COLMAP. However, it is not able to extract mesh and the NeRF is in low quality. It converged fine with masks on though. All other configs are defaults. What could I change to improve quality and extract the NeuS mesh without masks as input? Thanks

kelvincai522 commented 1 year ago

Actually, I had to change to VanillaMLP instead of FullyFusedMLP in the colmap config, as tiny-cuda-nn errored at my V100.

bennyguo commented 1 year ago

Hi! The choice of the MLP network does not make much difference. The key here should be to use a background model. You could wait for my implementation, which is expected to come out in a few days.

kelvincai522 commented 1 year ago

I see. Great! Looking forward to it. Thanks for the reply.

bennyguo commented 1 year ago

@kelvincai522 I've just pushed a new branch that supports NeuS training with a background model. I'm still testing this feature on different scenes. Welcome to try it out!

kelvincai522 commented 1 year ago

@bennyguo Thank you for the new branch! I tested it with my own dataset and found the following in my Fedora with a V100 GPU (16GB vram):

bennyguo commented 1 year ago

Thanks for the detailed information about your experiment! Is it possible to provide the dataset you used so that I could try it on my side? It would be very valuable!

kelvincai522 commented 1 year ago

That would be great. Here is the dataset https://drive.google.com/file/d/1EPhaA7vg9P3neH-T7MiVUIKE9nwgU04T/view?usp=sharing

bennyguo commented 1 year ago

It seems like most of the errors were caused by divergence. By setting model.radius=1.5 and turning off all the regularizations, i.e. system.loss.lambda_distortion=0. system.loss.lambda_distortion_bg=0. system.loss.lambda_sparsity=0., I was able to fairly reconstruct the scene: image I'll come up with an automatic strategy to determine model.radius and try to fix the stuffed area below the table.

bennyguo commented 1 year ago

About the error using FullyFusedMLP, you may have to run tiny-cuda-nn samples to see if the installation works.