Gram Matrix for Style Transferring
Previously we extracted all the relevant features which we wanted for our content and style images. The convolutional neural network does a good job for extracting the content element from any image which is fed into it.
The extracted style features require one additional pre-processing step to be more useful. The researcher used the gram matrix for more effective style feature extraction and made it an important step. Any feature extracted from the convolutional network still holds content related information such as object structure and positioning.
This content-related information is eliminated by applying the gram matrix to these extracted features, and it will not affect the style information. Style extraction from images is a broad topic on its own. Applying a gram matrix to features extracted from convolutional neural networks helps to create texture information related to the data.
The Gram Matrix is defined using the following simple equation:
         Gram=V^T V
Here, V is an arbitrary vector and multiply with its transpose.
Defining gram_matrix() function
Applying gram_matrix() function to the Style features
We have the feature extraction function and gram matrix function to make the process of style transfer. Now, we will apply the gram_matrix() function to the style feature which we extracted earlier.
Now we will create a dictionary for style grams and map each layer to the gram matrix of its corresponding feature. The key to our dictionary is going to be a specific layer. While the value which is going to contain the gram matrix of the respective style feature for that same layer. After that, we will iterate each layer inside of our style feature dictionary to get the gram matrix of all the features which we previously extracted.
Initialization of style weights dictionary
We have all our extracted features and a dictionary which contain the respective gram matrix of all the features which are extracted. We have chosen five layers to extract features from ii and provides a variety of ways for re-construction of the image style, which also leaves view for customizability. We will choose to prioritize certain layers over other layers by associating certain weight parameters with each layer.
Note: Layers close to the beginning of the model are usually effective at re-creating style features while later layers offer additional variety towards the style element.
Another weight parameter which we need to define is the amount of balance that we dictated between the content image and the style image. This allows us to customize our final target image by defining the ratio of style to content.
Now, we will use the style and content image data to optimize our target image. So we will start with our original target image. Our target image will obtain from the content .clone statement as:
Now, we have all three of our images and will perform the optimization process later.