Deep Feature Interpolation for Image Content Changes
L'interpolation profonde des caractéristiques (DFI) est une technique permettant de donner à une image certains attributs (par exemple, «sourire», «personnes âgées», «barbu»). En tant que méthode pour attribuer un attribut spécifique, une méthode utilisant un Réseau Adversaire Génératif (GAN) tel que "Autoencoding au-delà des pixels en utilisant une métrique de similarité apprise" est connue. Cependant, DFI adopte une approche différente de celle du GAN. L'article peut être trouvé à https://arxiv.org//abs/1611.05507.
Comme on le sait dans "A Neural Algorithm of Artistic Style", à partir de la Feature Map (sortie de couche intermédiaire) obtenue en entrant une image dans CNN. , Vous pouvez restaurer l'image. Il y a une explication dans Algorithm for converting style, donc la lecture de ce blog approfondira votre compréhension. Dans DFI, "Feature Map d'une image avec un attribut spécifique" est obtenu en ajoutant un vecteur d'attribut à "Feature Map obtenu à partir d'une image". Ensuite, "l'image avec des attributs spécifiques" est restaurée à partir de la carte des caractéristiques obtenue.
Suivez la procédure ci-dessous pour convertir l'image.
Voici un diagramme de l'algorithme utilisé dans l'article. Le numéro de l'étape est dans le papier et est différent de cet article.
Je l'ai implémenté avec Chainer. https://github.com/dsanno/chainer-dfi
Utilisons DFI pour donner à l'image du visage un attribut de sourire.
Dans l'article, la carte des caractéristiques a été calculée à l'aide d'images de l'ensemble de données des faces étiquetées dans la nature (LFW). Le LFW contient plus de 13 000 images et vecteurs de visage qui quantifient les attributs des images de visage tels que «Homme» et «Souriant». Dans le document, en tant qu'image similaire à utiliser comme ensemble source / cible, une image avec de nombreux attributs communs avec l'image d'origine a été sélectionnée. Essayez de faire sourire l'image incluse dans LFW de la même manière. Le résultat est le suivant.
L'image originale | Sourire | Sourire+Ouvrez la bouche |
---|---|---|
Les paramètres, etc. sont les suivants.
J'ai essayé de convertir l'image distribuée sur Pakutaso.
Je vais faire l'expression qui me fait ressentir un petit sourire nerveux. Le paramètre de poids $ \ alpha $ a été modifié dans la plage 0,1-0,5. Si le poids est trop important, la distorsion de l'image augmentera également.
Poids 0.1 | Poids 0.2 | Poids 0.3 |
---|---|---|
Poids 0.4 | Poids 0.5 | |
J'ai montré ci-dessus que vous pouvez faire sourire une image de visage, mais cette méthode ajoute-t-elle vraiment des attributs à l'image? Je pense que non. Le CNN utilisé est à des fins de reconnaissance d'image et sa carte des caractéristiques n'apprend pas des attributs spécifiques. Par conséquent, ce qui peut être généré en utilisant la différence de la carte des caractéristiques entre la source et l'ensemble cible est la «différence d'image moyenne entre la source et la cible». Si l'attribut est sourire, cela signifie qu'une image de sourire est générée en ajoutant «une différence d'image entre un visage qui ne rit pas et un sourire» à l'image d'origine.
Étant donné que nous ajoutons uniquement des différences d'image, il est nécessaire d'aligner la disposition des parties du visage entre l'image d'origine et l'image source / cible. En fait, si l'image d'origine et l'image source / cible n'ont pas la même position de visage, les lèvres peuvent apparaître dans une position étrange. L'ensemble de données d'image de visage utilisé n'inclut pas les informations de placement des pièces ou les attributs d'orientation du visage, mais la position et la taille du visage dans l'image sont alignées, donc je pense que cela fonctionne généralement. Afin d'effectuer une conversion d'image plus naturelle, je pense qu'il est nécessaire de sélectionner l'image source / cible en tenant compte de la disposition des parties du visage.
Le document compare également les images générées avec des méthodes basées sur le GAN. Veuillez consulter le papier pour les images réellement générées. Ici, nous comparerons les caractéristiques des méthodes.
DFI | Base GAN | |
---|---|---|
Avez-vous besoin d'un modèle formé? | nécessaire | Inutile |
Pré-apprentissage | Inutile | Besoin de former le modèle de génération d'image |
Un temps de génération d'image(Lors de l'utilisation du GPU) | Des dizaines de secondes | Cela prend moins d'une seconde |
Image requise pour la génération d'image | Des dizaines à des centaines d'images similaires sont nécessaires lors de la génération d'images | Aucun |
J'écrirai sur la différence entre la description de l'article et la mise en œuvre utilisée cette fois. Si vous n'êtes pas intéressé par les détails de l'implémentation, vous pouvez l'ignorer.
Le papier dit "Nous utilisons les couches convolutives du réseau VGG-19 normalisé pré-entraîné sur ILSVRC2012", et vous pouvez voir que la carte des caractéristiques est normalisée. La normalisation de la carte des caractéristiques est décrite dans "Comprendre les représentations d'images profondes en les inversant", mais cela signifie diviser la carte des caractéristiques par la norme L2. La normalisation n'a pas été effectuée pour les raisons suivantes.
Dans l'article, conv3_1, conv4_1 et conv5_1 parmi les couches intermédiaires des couches VGG-19 sont utilisées comme cartes d'entités. Ce point est le même pour cette implémentation. De plus, l'article déclare: "Le vecteur $ \ phi (x) $ consiste en des activations concaténées du Il dit convnet lorsqu'il est appliqué à l'image x ", et vous pouvez voir que plusieurs cartes d'entités sont combinées. Cependant, cela fonctionnait sans combiner les cartes d'entités, donc il n'a pas été combiné dans cette implémentation.
Vecteur d'attribut dans le papier