[PYTHON] Une autre méthode de conversion de style utilisant le réseau neuronal convolutif

Méthode de conversion de style utilisant le réseau neuronal convolutif

"A Neural Algorithm of Artistic Style" (ci-après style Neural) est célèbre comme méthode de conversion de style utilisant le réseau de neurones convolutifs (CNN) et l'implémentation suivante il y a.

Une autre méthode de conversion de style est "Combining Markov Random Fields and Convolutional Neural Networks for Image Synthesis" (ci-après "conversion de style à l'aide de MRF"). Je vais vous présenter ceci.

J'ai implémenté cette technique dans Chainer. Le code source peut être trouvé à https://github.com/dsanno/chainer-neural-style.

Qu'est-ce que la conversion de style?

Exemple de conversion de style

Échantillon de l'auteur de l'article

https://github.com/chuanli11/CNNMRF

Exemple d'implémentation de Chainer

Image générée Image de contenu Image de style
Peinture à l'huile
Aquarelle De Chihiro Iwasaki "Hanaguruma
Dessin au stylo

Source de l'image:

Aperçu

La conversion de style à l'aide de MRF génère l'image suivante.

La différence est que le style Neural rapproche le style général de l'image de l'image de style, tandis que MRF rapproche le style local de l'image de style.

Implémentation existante

algorithme

Le titre inclut "Markov Random Field (MRF, Markov Random Field)", mais comme MRF n'est pas le cœur de l'algorithme, je vais omettre l'explication.

Entrée et sortie

Entrez l'image du contenu et l'image de style. Les images de contenu sont représentées par $ x_c $ et les images de style sont représentées par $ x_s $. L'image générée à afficher est représentée par $ x $.

CNN

Cette méthode utilise un CNN pour la reconnaissance d'image tel que VGG comme dans le style Neural.

Sortie de couche

La sortie d'un calque particulier lorsque l'image $ x $ est entrée dans le CNN est représentée par $ \ Phi (x) $. La sortie du calque lorsqu'une image de contenu est entrée est $ \ Phi (x_c) $, et la sortie du calque lorsqu'une image de style est entrée est $ \ Phi (x_s) $.

pièce

Générez un patch à partir de la sortie de la couche CNN. Un patch est une collection de $ k \ fois k $ zones de sortie de couche en une seule, et est un vecteur de longueur $ k \ fois k \ fois C $ ($ C $ est le nombre de canaux dans la sortie de couche). Vous pouvez générer plusieurs patchs à partir d'une couche, et le $ i $ th patch est représenté par $ \ Psi_i (\ Phi (x)) $.

Définition de l'énergie

Cet algorithme définit l'énergie en fonction de $ x $. Puis calculez $ x $ pour minimiser l'énergie. La définition de la fonction énergétique est la suivante. L'explication de chaque section est expliquée ci-dessous.

E(x) = E_s(\Phi(x), \Phi(x_s)) + \alpha_1 E_c(\Phi(x), \Phi(x_c)) + \alpha_2 \Upsilon(x) 

MRFs loss function

Un élément $ E_s $ est appelé fonction de perte MRF et sa définition est la suivante.

E_s(\Phi(x), \Phi(x_s)) = \sum^{m}_{i=1}||\Psi_i(\Phi(x)) - \Psi_{NN(i)}(\Phi(x_s))||^2

Cependant, $ NN (i) $ est défini par la formule suivante.

NN(i) := \mathop{\rm arg\,max}\limits_{j=1,...,m_s} \frac{\Psi_i(\Phi(x)) \cdot \Psi_j(\Phi(x_s))}{|\Psi_i(\Phi(x))| \cdot |\Psi_j(\Phi(x_s))|}

Dans l'article, c'est argmin, mais quand je regarde l'implémentation, argmax semble être correct. Cette formule a les significations suivantes.

Content loss function

Les deux éléments $ E_c $ sont appelés la fonction de perte de contenu et leurs définitions sont les suivantes.

E_c(\Phi(x), \Phi(x_c)) = ||\Phi(x) - \Phi(x_c)||^2

Cela signifie que plus la couche CNN générée à partir de $ x $ et la couche CNN générée à partir de $ x_c $ sont proches, plus l'énergie est petite.

Regularizer

Les trois éléments $ \ Upsilon $ sont des termes de régularisation pour lisser l'image. La définition est la suivante, $ x_ {i, j} $ est la valeur du pixel dont la coordonnée x est $ i $ et la coordonnée y est $ j $. Plus la différence entre les pixels adjacents est petite, plus l'énergie est petite.


\Upsilon(x) = \sum_{i,j}((x_{i,j+1} - x_{i,j})^2 + (x_{i+1,j} - x_{i,j})^2)

la mise en oeuvre

Je l'ai implémenté avec Chainer. Le CNN utilise le modèle VGG 16 couches, qui est également familier à Chainer-gogh. Le code source peut être trouvé à https://github.com/dsanno/chainer-neural-style.

Comparaison des méthodes

Temps d'exécution

Le temps d'exécution est plus court que le style Neural. Le style neuronal nécessite des milliers d'itérations, tandis que la conversion de style à l'aide de MRF nécessite des centaines d'itérations.

Différence de style

Avec le style Neural, l'utilisation des couleurs change radicalement, mais la conversion de style à l'aide de MRF ne change pas de manière significative l'utilisation des couleurs, et j'ai l'impression que le toucher de l'image change.

application

Il existe neural-doodle comme application de conversion de style utilisant MRF. neural-doodle vous permet de spécifier quel style spécifier dans quelle zone de l'image. Comme vous pouvez le voir en regardant l'image liée, la photo du visage est convertie au style de portrait de Goch, mais en spécifiant le style pour chaque zone, une conversion plus naturelle est réalisée.

Dans neural-doodle, la spécification de style est réalisée en concaténant le vecteur représentant le numéro de style (vecteur one-hot indiquant à quel style le patch correspond) au vecteur de patch sorti de la couche CNN.

Les références

Recommended Posts

Une autre méthode de conversion de style utilisant le réseau neuronal convolutif
Essayez d'utiliser TensorFlow-Part 2-Convolution Neural Network (MNIST)
Conversion de style par style neuronal
Implémenter un réseau neuronal convolutif
Expérience de réseau de neurones pliable
Modèle utilisant un réseau neuronal convolutif dans le traitement du langage naturel
Implémentation d'un réseau de neurones convolutifs utilisant uniquement Numpy
Implémentation simple d'un réseau neuronal à l'aide de Chainer
Qu'est-ce que le réseau neuronal convolutif?
Prédiction des survivants à l'aide du réseau neuronal titanesque de Kaggle [80,8%]
Implémentation de réseaux neuronaux "flous" avec Chainer
Implémentation de réseau neuronal simple à l'aide de la préparation Chainer-Data-
Implémentation de réseau neuronal simple à l'aide de la description du modèle Chainer-
Création d'un modèle de discrimination d'image (cifar10) à l'aide d'un réseau neuronal convolutif
[Chainer] Classification des documents par réseau de neurones convolutifs
Implémentation simple d'un réseau de neurones à l'aide de Chainer ~ Définition d'un algorithme d'optimisation ~
Apprentissage par renforcement 10 Essayez d'utiliser un réseau neuronal formé.
Réseau neuronal paramétrique
Estimation de l'auteur à l'aide du réseau neuronal et de Doc2Vec (Aozora Bunko)