Intelligence artificielle

Animer gAnime avec StyleGAN: l'outil

Animer gAnime avec StyleGAN: l'outil


Didacticiel détaillé sur un outil de recherche GAN à source ouverte

Visualisation de la carte de caractéristiques 158 sur une couche de résolution 64x64

Ceci est un blog tutoriel / technique pour un outil de recherche sur lequel j’ai travaillé en tant que projet personnel. Tandis qu’une partie importante du blog suppose que vous avez accès à l’outil en le lisant, j’ai essayé d’inclure suffisamment de captures d’écran pour que son fonctionnement soit clair, même si vous n’avez pas le temps de l’essayer vous-même.

Dans le didacticiel, nous allons interagir avec un modèle StyleGAN expérimenté pour créer des animations telles que celles-ci:

Animation spatialement isolée des cheveux, de la bouche et des yeux

Dans l'animation ci-dessus, les transformations qui changent la bouche, les yeux et les cheveux sont généralement séparées. C’est souvent préférable à d’autres méthodes (dont je suis au courant) pour créer des animations de conversation avec des GAN, susceptibles de provoquer des effets secondaires tels que la perte de cheveux:

Nous allons créer une autre animation pour montrer comment les modifications de l’attribut "bouche" peuvent influer sur les autres parties d’une image. Notez l'épaississement et l'amincissement des cheveux le long des bords.

Nous allons également créer des détecteurs de caractéristiques faciales heuristiques simples en utilisant des cartes de caractéristiques situées à différentes couches du réseau:

Utilisation de cartes de caractéristiques à différentes couches pour détecter la bouche, les yeux et les joues

Ces détecteurs peuvent ensuite être utilisés pour automatiser des modifications significatives afin d’isoler des parties d’images:

Ces images générées étaient dans un seul lot sans intervention humaine ou un jeu de données étiqueté

Aucune de ces étapes n’exige d’étiquette pour le kit de formation, mais un peu de travail manuel est nécessaire.

Vous pouvez télécharger une version compilée de l'outil à partir de l'un des liens suivants:

sha256: ec2a11185290c031b57c51edb08bf786298201eb36f801b26552684c43bd69c4

Il est livré avec un modèle formé sur un jeu de données anime (sur lequel plusieurs projets sont basés). Malheureusement, en raison de la nature de l'ensemble de données, la diversité des sexes est insuffisante. J'essaie actuellement de former un modèle pour produire des images masculines de meilleure qualité, mais cela prendra un certain temps. Le jeu de données contient également des images NSFW, et bien que j’aie généré des milliers d’images et que je n’aie jamais rien rencontré, je n’ai pas vérifié chacune des images du jeu d’apprentissage (le risque peut augmenter avec de grandes modifications des cartes de caractéristiques dans les couches précédentes). Si vous rencontrez des problèmes, vous pouvez créer un problème dans https://github.com/nolan-dev/GANInterface et je tenterai de vous répondre.

Ce blog comporte deux parties: un tutoriel de base et un tutoriel avancé. Le didacticiel de base montre comment utiliser cet outil et ne devrait nécessiter que peu de connaissances techniques (bien qu’il inclue certaines explications techniques pour les personnes intéressées). Le didacticiel avancé montre comment personnaliser l'outil et est plus technique. Vous devez par exemple être familiarisé avec les cartes de fonctions dans les réseaux de neurones à convolution.

J'ai introduit l'outil dans un blog précédent et partagé le code source, mais le faire fonctionner à partir de là est compliqué et nécessite un modèle formé à mon implémentation StyleGAN personnalisée. J'espère que fournir une version compilée de l'outil et un modèle pré-formé facilitera son utilisation. L'outil fait partie d'un projet plus vaste (y compris une réimplémentation de StyleGAN) abordé dans le blog précédent, mais sa lecture n'est pas une condition préalable à la création de ce blog. Voici un lien si vous êtes intéressé:

Comme il s’agit d’un outil de recherche, j’ai régulièrement ajouté et soustrait des fonctionnalités afin de mieux comprendre le fonctionnement du modèle et de déterminer le meilleur moyen d’interagir avec celui-ci. Il y a beaucoup de fonctionnalités mineures, mais les principales incluent:

  • Modifier le vecteur latent qui produit une image afin d'interpoler entre les images, d'exprimer certaines caractéristiques et de faire des compromis entre qualité et variation (astuce de troncature)
  • Modifier les cartes de fonctions pour modifier des emplacements spécifiques dans une image: ceci peut être utilisé pour l'animation
  • Lire et traiter les cartes de caractéristiques pour détecter automatiquement les caractéristiques significatives
  • Automatisez tout ce qui précède en créant des travaux par lots

Comme pour le blog précédent, mon objectif est d’obtenir le point de vue d’autres personnes sur le sujet, de détailler mon expérience de travail sur le projet et de recevoir des critiques / corrections constructives. Le format de didacticiel de ce blog vise à atténuer l’interface utilisateur sous-développée de l’outil et à permettre son utilisation sans traiter le code source compliqué. Malheureusement, il s’agit uniquement de Windows, mais il a été testé sur une instance Windows AWS de niveau libre (Microsoft Windows Server 2019 Base, la génération d’images sera toutefois lente avec ce comportement).

Un petit mot avant de commencer: j'ai modifié l'outil en même temps que celui-ci. Certaines captures d'écran sont donc légèrement différentes de la version actuelle, mais tout se trouve à peu près au même endroit.

Une fois que vous avez téléchargé et ouvert le fichier zip lié ci-dessus, plusieurs fichiers / dossiers vous seront présentés:

Je vais en expliquer quelques-unes plus en détail dans la section avancée (3.3), mais à ce stade, le seul fichier important est GanStudio.exe. Lorsque vous l'exécutez, cliquez sur OK pour les disclaimers (et espérons ne pas avoir d'erreur), vous verrez quelque chose comme ce qui suit:

En raison de la complexité de l'interface utilisateur, la première fois que je fais référence à une partie de l'outil de ce didacticiel, une capture d'écran à proximité s'affiche, avec la partie pertinente indiquée en rouge. Beaucoup d'éléments de l'interface utilisateur ont des info-bulles.

Installer:

L’utilisation de cet outil implique une interaction avec l’explorateur Windows et il est plus facile de visualiser les fichiers générés avec des icônes «Grand» ou «Très grand». Sélectionnez l’un de ceux-ci en cliquant avec le bouton droit de la souris sur une fenêtre de l’explorateur et en sélectionnant ‘View’:

Dans de nombreux cas, il est également utile de trier les images par date de modification, également via le menu contextuel:

Générer une nouvelle image

Pour tester la génération d'images, cliquez sur Générer un nouveau (3). Cela produira un nouveau code latent et affichera l'image correspondante. Remarque La génération de la première image prend généralement plus de temps que les images suivantes.

L'image a été créée de manière aléatoire, mais a été interpolée pour être proche de l'image "moyenne". Cela se traduit par des images de meilleure qualité, mais réduit les variations. Si vous avez le curseur de qualité (1) au même endroit que l'image ci-dessus, votre image sera probablement similaire: une fille aux cheveux brunâtre aux yeux violets et / ou bleus.

Charger une image

Pour que les images de ce didacticiel soient cohérentes avec ce que l'outil produira, j'ai fourni un exemple d'image. Cliquez sur ‘Importer l’image’ (ci-dessus, 2). Cela créera une boîte de dialogue de fichier ouverte dans le répertoire ‘portraits’. Accédez au répertoire situé au-dessus de "portraits" et sélectionnez "fichiers de tutoriel":

Double-cliquez sur sample_01.png pour le charger. Toutes les images que vous générez sont enregistrées dans le dossier ‘portraits’ et vous pouvez les charger à nouveau à l’aide de cette méthode.

Les GAN ne peuvent normalement pas charger une image arbitraire. Cependant, cet outil ajoutera le code latent qui a généré l'image à chaque fichier PNG écrit sur le disque. Le bouton Importer une image lit le code latent qui a été écrit dans l'image sélectionnée. Tant que l'outil a chargé le modèle qui a généré l'image, il sera capable de la recréer.

Modifier l'attribut

Passez la souris sur l'étiquette d'attribut qui a été coupée pour voir le nom complet

Pour commencer à modifier les attributs, sélectionnez l’onglet ‘Attributs_0’ (ci-dessus). Les attributs comprennent la couleur des cheveux / des yeux, l'intensité du fond, des accessoires et l'état de la bouche (sourire / ouvert). Déplacer un curseur qui correspond à un attribut à droite augmentera l'influence de cet attribut sur l'image, le déplacer à gauche diminuera cette influence. Certains fonctionnent mieux que d'autres. Après avoir sélectionné un emplacement, appuyez sur ‘Update This Image’ (ci-dessus). Voici quelques exemples:

De gauche à droite / de haut en bas: open_mouth positive, skin_tone positif, arrière-plan négatif et black_hair négatif, une blonde_hair positive et un sourire négatif

Un inconvénient de cette modification des attributs est qu’ils ne sont pas toujours isolés dans l’espace; La modification d'un attribut qui ne devrait affecter qu'une partie d'une image aura également une incidence sur d'autres parties. Ceci est particulièrement problématique si nous voulons créer des animations. Pour voir le problème en action, procédez comme suit (capture d'écran ci-dessous pour référence):

  1. Faites défiler jusqu'au curseur "open_mouth"
  2. Déplacez-le vers la droite
  3. Appuyez sur ‘Update This Image’. La bouche devrait maintenant être légèrement ouverte
  4. Sélectionner Lot-> Attribut-> Spectre
  5. Sélectionnez "OK" pour générer 5 images et "Non" pour l'invite "Glisser au-delà de 0?".

Cela produira 5 images avec l'attribut «bouche ouverte» qui passe de 0 à l'emplacement sélectionné sur le curseur:

Le fait de les jeter dans un générateur de gif produit l'animation suivante:

Ordre des images basé sur le premier nombre du fichier: 0, 1, 2, 3, 4, 3, 2, 1

Comme vous pouvez le constater, les caractéristiques de l’image changent même si nous n’avions sélectionné qu’un attribut lié à la bouche.

Modifier des emplacements spécifiques

Dans cette section, nous apporterons une modification à la bouche sans modifier d’autres fonctionnalités. Malheureusement, à ce stade, les images importées avec le bouton Importer une image ne refléteront pas les modifications apportées ici.

Répétez les instructions dans la Charger une image section pour revenir à l’image de base (ou réinitialiser les curseurs d’attributs et mettre à jour). Utilisez l’onglet ‘Spatial’ (ci-dessous) pour modifier les parties isolées d’une image.

L’interface utilisateur est compliquée, mais pour cette section, nous n’utiliserons que quelques parties. La première chose à faire est d’indiquer quelle partie de l’image nous voulons changer:

  1. Sélectionnez l'onglet "mouth_open".
  2. Cliquez, maintenez enfoncé et faites glisser le curseur sur la bouche avant de vous laisser aller.

Cela effectue une sélection autour de la bouche et garantit que nos modifications de l'image n'influenceront que la zone sélectionnée.

Cliquez sur les emplacements dans ces carrés pour les créer sur votre image, ou cliquez et faites glisser le curseur sur cette partie de l'image.

Cela produira un carré vert clair, à moins que l'option «Permuter le vert pour le bleu dans la visualisation» soit sélectionnée. Cette option sera sélectionnée pour ce didacticiel afin d’améliorer la visibilité et, espérons-le, sera plus conviviale pour les daltoniens lorsque nous commencerons à traiter les zones rouges qui indiquent une influence négative.

Si vous avez sélectionné un emplacement par erreur, vous pouvez supprimer des carrés en maintenant ‘contrôle’ lorsque vous effectuez une sélection:

Supprimer une sélection non désirée. Cliquez et faites glisser en maintenant la touche Ctrl enfoncée pour supprimer plusieurs sélections.

Vous trouverez ci-dessous toutes les manières de "dessiner" sur l’image. Certains ne sont pas encore nécessaires, mais seront utiles plus tard:

  1. Cliquez avec le bouton gauche de la souris pour créer une boîte dont la taille dépend de la résolution sélectionnée (pour plus d'informations à ce sujet ultérieurement). Cette case indique une influence positive à cet endroit et sera soit verte soit bleue en fonction de vos paramètres.
  2. Clic droit pour produire une boîte rouge d'influence négative à cet endroit
  3. Ctrl + clic pour effacer une boîte à un endroit
  4. Cliquez et faites glisser pour dessiner une grande zone rectangulaire lorsque vous effectuez l'une des opérations ci-dessus.
  5. Si vous ne cochez pas la case «Aucune sélection», vous pouvez sélectionner plusieurs fois le même emplacement pour augmenter la magnitude (positive ou négative) de la sélection. Ceci est visualisé comme une intensité de couleur plus élevée et des cases plus épaisses.

Avec la bouche sélectionnée, déplacez le curseur sous l'onglet 'mouth_open' vers la droite jusqu'à ce que le nombre situé en bas à gauche se situe autour de 100. Ce curseur est le "Curseur Multiplicateur de la fonctionnalité", qui influence de manière exponentielle l'onglet actif lorsqu'il est déplacé vers la droite (influence positive) ou la gauche (influence négative). Le nombre situé dans le coin inférieur gauche du curseur à environ 100, sélectionnez "Mettre à jour cette image":

Cela devrait produire l'image suivante:

Comme l'indique le nom de l'onglet, cela a ouvert la bouche. Essayons d’animer avec cette méthode. Sélectionner Lot-> Fmap-> Combinatoric (Je vais expliquer pourquoi on l’appelle ainsi dans le didacticiel avancé):

Sélectionnez 5 pour les images à générer:

Sélectionnez 0 pour le point de départ. Le lot comprendra 5 images avec le curseur régulièrement espacé entre le point de départ et le point final (0, 20, 40, 80, 100). Comme la bouche est fermée par défaut dans cette image, un point de départ égal à 0 (aucune influence) signifie fermé.

Cela produira 5 images avec moins d’enchevêtrement spatial que la méthode de l’attribut:

Un générateur de gif produit les éléments suivants:

Ce même processus peut être utilisé avec les autres onglets et différents onglets peuvent être combinés. Si vous utilisez le Combinatoire générateur de lots, vous devez maintenir la barre de multiplication à zéro pour tous les onglets sauf celui qui est actif afin d'éviter de produire des combinaisons de plusieurs onglets. Cela peut être fait en appuyant sur ‘Définir tout à zéro’ avant de modifier le multiplicateur de l’onglet actif:

Voici une liste de certains des changements possibles. Notez que l'utilisation de grands multiplicateurs a de bonnes chances de produire des artefacts étranges:

  1. red_or_blue_eyes

Avec les points de départ et d'arrivée suivants:

La boîte de dialogue indique en fait le point de départ, il s'agit d'une ancienne capture d'écran. Le point de départ correspond à la première image générée dans le lot et le point final correspond à la dernière.

Produit:

2. rougir

Paramètres:

Si la capture d'écran et l'outil ne sont pas d'accord, croyez-le. Ceci est une ancienne capture d'écran (devrait indiquer le point de départ au lieu du point de fin)

Animation:

3. serre-tête

Paramètres:

En fait, j’avais la variable pour cette invite appelée ‘startValue’ à l’origine, je ne sais pas pourquoi je l’ai faite dire End Point. Vous avez peut-être deviné qu'il s'agit d'une vieille capture d'écran

Animation:

4. cheveux

Paramètres:

Vous penseriez qu'il serait logique de commencer par le nombre le plus bas et de terminer par le nombre le plus élevé, mais il s'agit en fait d'une ancienne capture d'écran et le point final devrait être le point de départ. Il commencera à 100 et descendra à -257

Animation:

Ces paramètres influencent légèrement la bouche car le champ de réception effectif des convolutions à la fin du réseau couvre de nombreux emplacements spatiaux dans les premières couches.

5. ice_is_nice (???)

Paramètres:

Nous sélectionnons l’ensemble de l’image ici. Pour des scénarios comme celui-ci, je préconiserais l’utilisation de la méthode cliquer / glisser sur un clic 4096 fois avec une extrême précision. Aussi: il faut dire Point de départ au lieu de Point final

Animation:

Exemple de modification tardive dans le réseau: les détails sont influencés, mais la structure globale reste la même

Autres choses à essayer:

  • Batch génère de nouvelles images avec la qualité et attribue des barres à différents endroits:
  • Utilisez ‘Définir comme image de base’ (ci-dessous) pour interpoler la barre de qualité entre l’image actuelle (au lieu de la moyenne) et les nouvelles images. Cela peut être utile pour rechercher de nouvelles images légèrement différentes de l’image actuelle lorsqu’elles sont combinées avec Lot-> Nouvelles latentes (au dessus de).
  • Utilisez ‘Basculer Précédent’ pour basculer rapidement entre l’image actuelle et la précédente pour examiner les modifications.
Concentrez-vous sur la boîte rouge, pas sur la boîte bleue autour de "Basculer Afficher la sélection" sur laquelle j'ai cliqué plus tôt. Pour le moment, la sélection d’émissions ne fonctionne même pas.
  • Utilisation Divers-> Interpoler entre deux images générer un spectre d'images entre deux images existantes.

Cette section suppose une certaine connaissance des réseaux de neurones convolutionnels et de StyleGAN.

3.1 Trouver de nouvelles fonctionnalités

Les onglets de la section "spatiale" (mouth_open, hairband, etc.) correspondent aux valeurs ajoutées aux cartes de caractéristiques spécifiques d'une couche spécifique. Essayez de sélectionner l'onglet mouth_open. Dans la liste déroulante au-dessus des onglets, la résolution devrait être: 16x16. Les premières couches de StyleGAN ont des cartes de caractéristiques basse résolution, tandis que les couches ultérieures ont des cartes de caractéristiques haute résolution (la résolution double régulièrement). Comme les images que nous générons mesurent 256 x 256 pixels, la couche qui correspond à 16 x 16 est au début du réseau. Pour afficher les cartes de caractéristiques modifiées par l’onglet mouth_open, appuyez sur ‘Afficher tous les mappes Fmap ', cochez la case‘ Filtrer à zéro ’, puis sélectionnez l’onglet' Entrée de la carte de fonctions ':

Cela signifie que les emplacements spatiaux sélectionnés dans l'image en cliquant dessus sont multipliés par -2, puis multipliés par le curseur multiplicateur de la carte des caractéristiques, et le résultat est ajouté à la carte des caractéristiques 33 sur le calque ayant une résolution de 16x16.

Certains onglets influencent plusieurs cartes de fonctionnalités:

Les cartes de caractéristiques influencées par l’onglet ‘Hairband’, visualisées en cliquant sur ‘View All Fmap Mults’.

J'ai trouvé ces multiplicateurs manuellement en jouant avec l'outil. J'ai utilisé deux méthodes:

  1. Pour modifier un attribut existant dans une image (par exemple, bouche), j'utilise essais et erreurs en modifiant différentes cartes de caractéristiques et en recherchant celle qui produit le résultat souhaité.
  2. Pour ajouter un attribut (bande de cheveux), je vois quelles cartes de fonctionnalités sont actives lorsque cet attribut est présent.

Dans les deux prochaines sections, je passerai en revue des exemples pour ces méthodes.

Méthode 1: Modifier la bouche

Etant donné que le réseau peut générer des images avec des bouches ouvertes et fermées (nécessaires pour tromper le discriminateur) et que les cartes de caractéristiques de chaque couche sont des représentations de l'image finale, il est logique de modifier les cartes de caractéristiques pour ouvrir ou fermer une bouche. . Cependant, il n’est pas garanti que la modification d’une seule carte de caractéristiques entraîne un changement significatif - il se peut que nous devions modifier une combinaison de nombreuses cartes de caractéristiques pour obtenir le résultat souhaité. Cela dit, les cartes à caractéristiques uniques sont plus faciles à utiliser (du moins avec l'outil actuel). Voir comment chacune d'elles influence une image peut servir de point de départ.

Voici comment j’ai trouvé la carte de caractéristiques 33 pour ouvrir / fermer la bouche. Tout d’abord, j’ai ajouté un onglet 16x16 avec le bouton ‘Ajouter un onglet’ (ci-dessous). J'ai choisi cette résolution car elle produit des boîtes d'une taille raisonnable. Des résolutions plus petites changeraient les zones situées au-delà de la bouche, tandis que des résolutions plus grandes entraînent souvent des modifications plus fines que l'ouverture ou la fermeture d'une bouche (le choix de la résolution est heuristique à ce stade). En cliquant à nouveau sur 'View All Fmap Mults', nous constatons qu'aucune carte de caractéristiques n'est définie pour le nouvel onglet. Ensuite, j'ai déplacé le curseur vers 190, encore une fois, une décision heuristique basée sur l'expérience passée avec le modèle. Enfin, comme nous l’avions fait auparavant, j’ai sélectionné les deux boîtes contenant la bouche.

Ajout d'un nouvel onglet, ce qui n'influence initialement aucune carte d'entités

Ensuite, j'ai sélectionné Lot -> Fmap -> Alignement sur l'axeet sélectionné 512 images à générer.

Cela produira réellement 1024 images, car pour chaque carte de caractéristiques, elle ajoute et soustrait la valeur spécifiée dans la barre de multiplication (190 dans ce cas) à la position spatiale marquée dans l'image (la bouche). La génération par lots ouvre une fenêtre indiquant le nombre d'images générées et vous permettant d'interrompre le processus. En cliquant sur le compteur en regard de "Générer une image", vous ouvrez le répertoire dans lequel elles sont écrites:

Le nombre ajouté aux noms de fichier est la carte de caractéristiques qui a été modifiée.

L’échantillon qui commence par «33_n_sample» (n signifie négatif) a clairement la bouche ouverte, contrairement à «33_p_sample». Cela signifie que lorsque 190 a été soustrait de la carte des caractéristiques 33 autour de la bouche, la bouche s’est ouverte.

Je règle la carte de fonctions 33 sur -1 à l’aide de la case "Définir Fmap" (ci-dessous). Cela fait en sorte que déplacer le curseur vers la droite ouvre la bouche (ce qui semble plus intuitif que de régler la carte de fonctions 33 sur 1 et d'avoir l'onglet appelé "mouth_close"), et j'ai renommé l'onglet "mouth_open" à l'aide du bouton "Renommer l'onglet". . Le bouton Enregistrer les onglets situé à côté de l'onglet Renommer peut être utilisé pour enregistrer les onglets.

Méthode 2: Ajouter un bandeau

Cette méthode repose sur la recherche d'images existantes avec l'attribut souhaité. Cela nécessite de travailler avec une base d’images, qui peut être générée avec Lot-> Nouvelles latentes. Dans ces cas, je déplace généralement la barre de qualité un peu au-delà du milieu pour garantir une variation raisonnable.

Quelques centaines d’échantillons peuvent nécessiter plusieurs bandelettes. J’en ai ajouté un au répertoire tutorial_files que je chargerai pour ce tutoriel (sample_02.png). Avant de le charger, créez un onglet 16x16 et assurez-vous que "Fmaps To Get" est défini sur "Tout" ou "Onglet actuel" (ci-dessous). Ces options permettent d’obtenir et de stocker une sortie supplémentaire du réseau lors de la création d’une nouvelle image: les fonctions sont mappées pour l’onglet en cours ou pour tous les onglets. Cela peut ralentir un peu les choses, ce n’est donc pas l’option par défaut (elle a également pour l'instant une probabilité de 0,5% de provoquer un crash, ce qui est pertinent pour les lots volumineux).

Ensuite, procédez comme suit:

  1. Sélectionnez des cases autour du bandeau
  2. Sous "Ajouter une carte de fonctions de vue", sélectionnez "Trier par similarité avec les sélections".
  3. Appuyez sur "Mettre à jour cette image".

Ceci ajoute un tas de boutons à l’onglet ‘Feature Map Output’:

Ces boutons correspondent aux cartes de caractéristiques. Ils sont triés en fonction de la magnitude du produit scalaire de la carte des caractéristiques et de la sélection sur l'image (une fois qu'ils ont été aplatis). Cela rend les cartes de grande magnitude autour du bandeau plus tôt dans la liste des boutons.

Voici un exemple de la 310e carte de caractéristiques. Le bleu correspond aux valeurs positives, le rouge au négatif. Plus la valeur absolue est grande à un endroit, plus la zone dessinée ici est épaisse et saturée.

Cette carte de caractéristiques semble avoir de grandes valeurs positives autour du serre-tête, mais également autour de la bouche. Bien qu’il soit clairement utilisé pour plus que des bandeaux, nous pouvons essayer de le modifier pour voir quel est le résultat. Définissez la carte de fonctions 310 sur 1 pour cet onglet, effacez les sélections autour du bandeau (ctrl + clic et faites glisser), puis chargez à nouveau sample_01.png.

Essayez de sélectionner les cheveux, d’augmenter le poids à environ 100, et de mettre à jour l’image:

… Pas beaucoup changé. Cependant, comme nous n’avons produit aucun artefact étrange, il n’est pas inutile d’augmenter sa magnitude au-delà de 100.

Vers 600, nous obtenons ce qui ressemble à un bandeau. Mon hypothèse initiale est que l'une des raisons pour lesquelles nous devons utiliser une grande ampleur est que les bandes pour cheveux sont rares.

Pour l’onglet bandeau inclus avec l’outil, j’ai défini sur 3 autres cartes de caractéristiques, actives autour du bandeau, à 3. Le réglage sur un nombre supérieur à 1 permet de normaliser la plage attendue des onglets afin de définir le multiplicateur sur environ 100 devraient exprimer l'attribut recherché.

3.2 Détection automatique des fonctionnalités

Un problème avec la façon dont nous avons modifié les attributs est qu’il faut sélectionner manuellement les carrés à modifier. C’est définitivement un inconvénient par rapport à la modification du vecteur latent dans la direction «mouth_open», qui ne nous demandait pas de connaître l’emplacement de la bouche (même si cela modifie également les caractéristiques autres que la bouche). Cela empêche la méthode de bien évoluer; Bien que plus facile que de dessiner, chaque modification nécessite toujours une intervention humaine. Cependant, comme nous l'avons vu dans la section précédente, certaines cartes de caractéristiques sont en corrélation avec l'emplacement des attributs: peut-être que la carte de caractéristiques 310 pourrait être utilisée pour détecter de manière générique des bandes pour cheveux, par exemple. Voyons si nous pouvons trouver un moyen de détecter la bouche dans une image en utilisant simplement une combinaison linéaire de cartes de caractéristiques.

Tout d'abord, répétez le processus utilisé pour obtenir les cartes de caractéristiques actives autour d'un bandeau, mais cette fois-ci, sélectionnez la bouche:

Comme auparavant, nous pouvons cliquer sur un bouton pour afficher une carte des fonctionnalités:

Cette méthode est toutefois un peu lente pour visualiser et comparer un grand nombre de cartes de caractéristiques. A la place, tapez 20 dans la zone de texte située sous le bouton ‘Ajouter à partir d’une sortie’ et appuyez sur le bouton. Ensuite, appuyez sur ‘View Multiple Fmaps’.

‘Ajouter à partir de la sortie’ avec 20 ajoute les cartes de fonctions des 20 premiers boutons à la zone de texte ‘Fmaps’, et ‘Afficher plusieurs Fmaps’ les affiche toutes côte à côte.

Les 4 premiers (avec plusieurs autres), qui correspondent aux cartes de fonctions 234, 34, 370 et 498, semblent tous être des détecteurs de bouche. Cependant, nous ne savons pas s’ils détectent systématiquement la bouche pour de nouvelles images. Pour tester cela, nous pouvons générer plusieurs nouvelles images avec la barre de qualité à droite du centre pour une variance décente. Assurez-vous d’abord que «Record Feature Maps» est coché. Utilisez «Réinitialiser l’historique» pour effacer les enregistrements existants. Assurez-vous également que ‘Fmaps To Get’ est défini sur ‘Onglet actuel’ (l’outil n’enregistre pas l’historique de toutes les résolutions, mais uniquement la résolution correspondant à l’onglet actuel). Ensuite, nous pouvons générer un certain nombre de nouvelles images en utilisant Lot-> Nouvelles latentes et l'outil enregistrera leurs cartes de caractéristiques.

Dans ce cas, je générerai 10 nouvelles images, qui seront différentes des vôtres. Pour afficher la même carte de fonctions pour toutes les images, saisissez-la dans la zone Fmaps et sélectionnez ‘Afficher l’historique’. Je le ferai pour chacun des 234, 34 et 370.

234:

34:

370:

Le fait que la bouche ne change pas beaucoup de position ne fait pas de mal, mais ces cartes de caractéristiques semblent la suivre de manière fiable.

Le même processus peut être appliqué à d'autres attributs dans d'autres couches. Voici quelques exemples:

Yeux:

Des joues:

Contexte:

Dans de nombreux cas, j'obtiens les résultats les plus cohérents en combinant plusieurs cartes de caractéristiques. Pour ce faire, j’ai rendu les scripts python appelables depuis l’outil (ce qui pourrait également s’avérer utiles pour les futures fonctionnalités), car j’ai préféré faire du traitement de données multidimensionnel avec numpy. L'outil utilise la variable d'environnement PATH pour rechercher le fichier pythonw.exe. Il doit donc être défini avant l'exécution de l'outil. La fonctionnalité de script est la fonctionnalité la plus récente de l'outil et est même moins développée que les autres. Voici un exemple:

spatial_map.py est stocké dans le répertoire ‘scripts’ et vous devrez installer ses dépendances pour l’utiliser. L'outil transmet le chemin d'accès à un répertoire où sont écrites les cartes de fonctions spécifiées dans "Cartes de fonctions de script". Il combine ensuite ces cartes de caractéristiques et génère le résultat, qui est lu par l'outil et utilisé pour effectuer des sélections dans l'image. Voici un exemple qui utilise certaines des cartes de caractéristiques que nous avons trouvées précédemment et qui sont corrélées avec l’emplacement de la bouche:

En déplaçant le curseur de la bouche sur ~ 100 et en mettant à jour l'image, la bouche s'ouvre normalement.

Cela nous permet d’automatiser la création d’images avec certains attributs.

En sélectionnant "Exécuter et modifier" sous "Exécuter le script lors de la génération", en définissant le paramètre mouth_open sur environ 100 et en générant de nouvelles latentes, vous pouvez vous assurer que les nouvelles images ont la bouche ouverte. En définissant mouth_open sur -100 et en appliquant les paramètres au répertoire contenant des images à bouche ouverte, nous pouvons générer les mêmes images avec des bouches fermées.

L'application des paramètres à un répertoire peut être faite avec Divers-> Appliquer les curseurs actuels au répertoire et en sélectionnant le répertoire avec les images générées:

Alternativement, cela peut être réalisé en une fois en utilisant le Lot-> Fmap-> Nouvelle combinatoire latente:

Notez que cette option effectuera une modification combinatoire basée sur tous les onglets avec des multiplicateurs non nuls. Par exemple, si l’onglet "Cheveux" a un multiplicateur différent de zéro et que nous sélectionnons 3 images "Cheveux" à générer et 2 "Bouche_open", il créera 6 variations de chaque image avec les attributs suivants:

  • cheveux courts, bouche fermée
  • cheveux courts, bouche ouverte
  • cheveux mi-longs, bouche fermée
  • cheveux mi-longs, bouche ouverte
  • cheveux longs, bouche fermée
  • cheveux longs, bouche ouverte

Quelques points supplémentaires sur les scripts:

  • Vous pouvez ajouter un multiplicateur devant les cartes de caractéristiques pour modifier l’influence de différentes cartes lorsqu’elles sont combinées.
  • La résolution des cartes de caractéristiques utilisées pour détecter les caractéristiques faciales n'a pas besoin de correspondre à la résolution à laquelle nous avons entré des données. Le script doit redimensionner au besoin:
  • Il existe d'autres utilisations potentielles pour les scripts, telles que l'enregistrement d'une représentation des cartes de caractéristiques à des fins d'analyse une fois l'outil fermé.

Ceci couvre la plupart des fonctionnalités de l’outil. Dans la section suivante, je discuterai de l'architecture plus en détail.

3.3 Détails de l'outil

Afficher plus

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Articles similaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bouton retour en haut de la page
Fermer