Differentiable Monte Carlo Ray Tracing Through Edge Sampling
people.csail.mit.edu
people.csail.mit.edu
I had the whole physics engine + renderer differentiable, in Theano. I used it to do control problems though (so using the image to infer which actions to take), not for system identification (i.e. given the image, what are the parameters of the scene). But yeah, I could backpropagate through the renderer too: https://twitter.com/317070/status/821062814798331905
I think more research should go in this direction, backpropagating these physical systems will empower a lot of powerful optimization methods. There is no reason why a physics engine should be treated as a black box. We know the equations and they are differentiable. I'm glad there will now be dedicated code for the gradient of a full blown renderer :-)
So, the paper and code will likely end up in the garbage bin of academia. And Theano quitting was also not exactly helping indeed.
Next directions are exactly what these people do with their ray tracing. The equations of all of these things are rather simple and almost always differentiable. Someone just needs to code them up and start experimenting with what is achievable when you have these exact gradients.
If someone is looking for a technical area for a Phd/startup: such a physics engine with a focus on optimization (so both system identification, system control and system optimization with gradient descent, making all internals of your engine differentiable) is worth millions.
I would be interested to hear if you have ideas for specific application areas that would be feasible to tackle as a startup. Animated game characters is the best I've got but I'm not sure it's worth millions.
Differentiation of particle transport Monte Carlo codes is focused on different types of tallies and subsequently computing their sensitivities. The inverse rendering problem in 5.3 is actually also broadly applicable to fields like nuclear security and emergency response.
This function is very complex and hard to invert. But, and this is the interesting thing I got from the article, it is similar enough to deep learning functions that the same strategy works: We can take gradients of it and optimize the inputs to fit the target output.
So, while we can't compute the 3D model that would generate the target picture directly. We can ask it "How do we nudge the model to make it more similar to what we want?". If we keep nudging it, eventually it will be very similar. The tool will find the exact position of the lights, the textures, model, etc.
Even better, using the chain rule you can connect the differentiable renderer to other differentiable things, like a neural network controller for a simulated robot. Then you can ask e.g. "If I tweaked the robot's arm position, which camera pixels would change?" This would allow you to, given an image of a target configuration (e.g. two stacked blocks), optimize the neural network to produce that image by controlling the robot (e.g. by stacking the blocks).