If it’s not learning, well , that’s not good! Make sure your final activation produces values that match the range of your targets. I’ve had models not train, and then realized that relu was clipping negative values that I needed. Anyways, good luck!
The training itself worked, but it was stuck when it learned that the input itself was a decent prediction 
Dying ReLUs are very high on my list! Feature standardization might also be an issue. Or it could simply be that the capacity is not large enough and more layers have to be added. This might even be related to the dead ReLUs idea.
The experiments are running…
It’s fascinating to see how you’re designing the inputs. I guess one big picture question is whether you are just training kernels based on very nearby pixels, or on other hand inferring details based on larger shapes from distant pixel groups.
The design is an experiment, but it is worth a try. If it works, it would very likely be a lot faster to train than a recursive neural network, but with a comparable result.
It will for sure be interesting to find answers to those big picture questions.
There is a new paper Denoising with Kernel Prediction and Asymmetric Loss Functions.
Thanks a lot for the link! I wasn’t aware of this paper yet!
At first glance, there are a ton of amazing ideas and there will be even more when I dig more into it! There are no more excuses to not implement the actual kernel prediction and trying to handle it directly 
Instead of finishing the video, I made quite some progress thanks to @Nirved who posted this very useful link! I don’t want to loose that momentum for now, that’s why I keep focusing on it.
Update: On the coding side, a lot of progress has been made. The implementation for single frame denoising as mentioned previously is pretty much complete and the results are better than I expected. Though, they were achieve in a very restricted way. The settings for Cycles were very strict, which does not represent what people are doing on an everyday basis. That’s why I am moving on to recreate all the “noiseless” renders again with pretty much no restrictions in place. On top of that, Blender’s master build is used to create the renders, because it supports the in/direct volume passes. Further, the scenes are setup, such that they can produce the necessary data for temporal denoising once it is needed.
I am currently extensively testing the new rendering script. As long as this is ongoing, please don’t submit new renders. If you already started, feel free to PM me.
I thought this was interesting.
No need for noise free images to train the NN.
Yeah it’s insane. Everything gets outdated so quickly with AI (and the crazy innovators at Nvidia).
And lol that Koala is appearing from almost pure noise, what the hell ?!
Anyway @anon98372585 why do you need the volume passes? I personally don’t see how you can build the final image back by using those passes as it doesn’t include the volume opacity:
@anon12133251, that’s pretty impressive indeed. I haven’t read the paper yet, so I can’t say anything about it yet.
@ChameleonScales, the volume passes don’t need an alpha channel, because they are simply added. If a pixel does not have any volume information, it is simply black, meaning the values are 0 and there is no contribution to the final image. The graphic at this link shows how all the passes are combined in Cycles:
https://docs.blender.org/manual/en/dev/render/cycles/settings/scene/render_layers/passes.html#combining
What’s missing is subsurface scattering, which looks identical to the diffuse/glossy/transmission passes (color * (direct + indirect)). And the in/direct volume passes just need to be added at the bottom like emission and environment.
At first I wasn’t sure how it works, as I struggled to find it in the code, so I asked Brecht 
Thanks, I actually found out how to use them too in the mean time. I didn’t think about the fact that the volume absorption is not something you put on top of the “3D surface” image, it’s simply an absence of light on the surfaces so you can’t extract it in a pass (which is sad because it could’ve given more control for post-production).
Anyway what’s the deal with Subsurface? It’s right above volume on my side.
Subsurface scattering is also missing in the link I posted, that’s what I wanted to point out. Since they are all added, the order does not matter.
Finally, I have some visual results to share. That’s what the DeepDenoiser can do right now:
It is definitely not perfect, but a good starting point. For the training of the neural network, I didn’t use all the data yet, as I only wanted to find out whether it works at all.
Wooow, that’s awesome! Thanks for developing this.
YES, I’ve seen some truly remarkable denoising from neural networks, I’m glad you’re trying to do it for Blender renders. Your result is definitely a great starting point!
Amazing work keep it up
After some updates and more training, this is how it looks now:
The actual scene here was rendered with 64 spps, but the training so far only uses 16 and 32 spp examples, so maybe there is still more potential.
oh wow … amazing progress!
Thanks a lot!


