Hyperparameters for NeRF training #160
-
Hi @Tom94, thank you for this wonderful piece of work -- I am sure this is useful to many researchers (like me)! I have implemented the hash encoding in PyTorch and the convergence speed is quite amazing (although not as fast as your C++/CUDA impl). I was able to train a 'HashNeRF' model for hotdog, chair and few other blender objects and the model converges 50x faster than NeRF in my implementation. Although, I am not able to get as good results for the ficus and drums objects. I see some cloudy artifacts in the final rendering. Could you please share the hyperparameters that you used for the NeRF training of these objects? My hyperparametersI am using an Adam optimizer with:
|
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 5 replies
-
Hi there, apologies for the delay in responding. The hyperparameters you're listing seem to match ours. I suspect that our raymarching strategy of skipping empty space helps us avoid floaters more easily (by importance sampling the loss near surfaces). Other than that, the two implementations should behave the same. It would probably be good for us to add an option to disable empty-space skipping to verify this. Much of the needed code is already there -- it just needs to be wired up appropriately. |
Beta Was this translation helpful? Give feedback.
-
Responding to a separate question made me realize another piece to this puzzle: this NeRF algorithm uses randomized background colors in transparent regions, which also helps reduce floaters. Using a solid background color, the model can minimize its loss by simply predicting that background color, rather than transparency (zero density). In practice, it'll learn a mix of them, which can manifest as floaters. By randomizing the background colors, the model is forced to learn zero density to let the randomized colors "shine through". |
Beta Was this translation helpful? Give feedback.
Hi there, apologies for the delay in responding.
The hyperparameters you're listing seem to match ours. I suspect that our raymarching strategy of skipping empty space helps us avoid floaters more easily (by importance sampling the loss near surfaces). Other than that, the two implementations should behave the same.
It would probably be good for us to add an option to disable empty-space skipping to verify this. Much of the needed code is already there -- it just needs to be wired up appropriately.