To build a Neural Style Transfer system,
let's define a cost function for the generated image.
What you see later is that by minimizing this cost function,
you can generate the image that you want.
Remember what the problem formulation is.
You're given a content image C,
given a style image S and you goal is to generate a new image
G. In order to implement neural style transfer,
what you're going to do is define a cost function J of G that measures how good is
a particular generated image and we'll use gradient to
descent to minimize J of G in order to generate this image.
How good is a particular image?
Well, we're going to define two parts to this cost function.
The first part is called the content cost.
This is a function of the content image and of the generated image and
what it does is it measures how similar is the contents of the generated image
to the content of the content image C. And then going to
add that to a style cost function which is now a function of
S,G and what this does is it measures how similar is
the style of the image G to the style of the image S. Finally,
we'll weight these with two hyper parameters alpha and beta to
specify the relative weighting between the content costs and the style cost.
It seems redundant to use two different hyper parameters to specify
the relative cost of the weighting.
One hyper parameter seems like it would be enough but
the original authors of the Neural Style Transfer Algorithm,
use two different hyper parameters.
I'm just going to follow their convention here.
The Neural Style Transfer Algorithm I'm
going to present in the next few videos is due to Leon Gatys,
Alexander Ecker and Matthias.
Their papers is not too hard to read so after watching these few videos if you wish,
I certainly encourage you to take a look at their paper as well if you want.
The way the algorithm would run is as follows,
having to find the cost function J of G in
order to actually generate a new image what you do is the following.
You would initialize the generated image
G randomly so it might be 100 by 100 by 3 or 500 by 500 by
3 or whatever dimension you want it to be.
Then we'll define the cost function J of G on the previous slide.
What you can do is use gradient descent to minimize this so you can update G as
G minus the derivative respect to the cost function of J of G. In this process,
you're actually updating the pixel values of this image G which is
a 100 by 100 by 3 maybe rgb channel image.
Here's an example, let's say you start with this content image and this style image.
This is a another probably Picasso image.
Then when you initialize G randomly,
you're initial randomly generated image is
just this white noise image with each pixel value chosen at random.
As you run gradient descent,
you minimize the cost function J of G slowly through the pixel value so then you get
slowly an image that looks more and more like
your content image rendered in the style of your style image.
In this video, you saw the overall outline of
the Neural Style Transfer Algorithm where you define
a cost function for the generated image G and minimize it.
Next, we need to see how to define
the content cost function as well as the style cost function.
Let's take a look at that starting in the next video.