So one issue with simple linear interpolation in the latent space of StyleGAN is that the timing of the transitions between the different points changes, because it's dependent on the distance between them in the latent space. So what people are using instead as an alternative is a noise loop interpolation instead of straight linear interpolation.
So this flashed by on the screen in a StyleGAN presentation i was watching, and i thought, oh, are they using Perlin noise to do that?
Some googling re-activated my brain cells, because Simplex noise is kind of Perlin Noise 2.0. Better than the original if you want to generate it in high dimensions for sure. Perlin discussed this in a paper in 2001, which i was very familiar with at the time.
Of course i'm really, really familiar with the even older 80's paper that started the Perlin noise revolution. We are seriously cranking the wayback machine this week at HTC.
Stefan Gustavson put together a really good writeup with some code examples titled 'Simple Noise Demystified'. You can find it here.
Hey, this Perlin noise stuff is all differentiable, i thought to myself. Maybe we should drop it in some kind of backprop scheme, that would be wild. I wonder if there is a PyTorch implementation. Again, the magic of google, with a thanks to Yann LeCun for pointing it out. Check it ( normal Perlin noise implementation, not simplex one) out here.
So lets take a look at how the simplex interpolation works in just 2D.
So note the circular close pack thing going on. Now this should immediately get you thinking about Delaunay triangulation. And then you might think to yourself, hey you know that grid doesn't have to be uniform. Hum...
Found this as well, which is worth keeping a reference to for the discussion of making it all tile seamlessly.
Post a Comment