[PYTHON] Essayez d'exécuter wav2pix pour générer une image de visage à partir de la voix (il existe également une génération de visage animée)

introduction

Le monde de l'apprentissage profond, en particulier les réseaux d'adversaires génératifs (GAN), s'est considérablement développé ces dernières années, et je pense que la recherche progresse dans divers domaines tels que le texte en image, la conversion vocale et la séparation des sources sonores.

Dans cette conférence, j'écrirai librement sur wav2pix, qui génère des images faciales à partir de la voix.

Paper: WAV2PIX: SPEECH-CONDITIONED FACE GENERATION USING GENERATIVEADVERSARIAL NETWORKS

Aperçu approximatif

無題45.png https://imatge-upc.github.io/wav2pix/

Le modèle proposé comprend les trois modules suivants.

Je vais expliquer brièvement chaque module.

Tout d'abord, concernant Speech Encoder, il semble que le décodeur du Speech Enhancement Generative Adversarial Network (SEGAN) soit utilisé. SEGAN est un modèle de bout en bout d'amélioration de la voix utilisant le GAN. Je vais omettre l'explication détaillée, mais veuillez vous référer à cette démo.

Ensuite, il semble que le Generator Network et le Discriminator Network soient inspirés des Least Squares Generative Adversarial Networks (LSGAN). LSGAN a approfondi sa compréhension sur ce site.

Quick Start À partir de maintenant, nous expliquerons l'exemple d'exécution de wav2pix.

Environnement d'exécution

L'environnement que j'ai essayé cette fois est le suivant. OS: Ubuntu 18.04 LTS CPU: i3-4130 3.40GHz Mémoire: 16 Go GPU: GeForce GTX 1660 Ti (6GB)

Docker Version: Docker version 19.03.8

1. Obtenez et créez Dockerfile

imatge-upc / wav2pix décrit comment l'exécuter, mais j'ai créé mon propre Dockerfile pour ceux qui ont du mal à préparer l'environnement d'exécution. Donc, cette fois, j'écrirai principalement l'opération avec Docker.

Tout d'abord, récupérons le Dockerfile que j'ai créé. ★ Veuillez noter les points suivants!

hôte


$ git clone https://github.com/Nahuel-Mk2/docker-wav2pix.git
$ cd docker-wav2pix/
$ docker build . -t docker-wav2pix

Lorsque vous avez terminé, assurez-vous d'avoir une image.

hôte


$ docker images
REPOSITORY          TAG                               IMAGE ID            CREATED             SIZE
docker-wav2pix      latest                            8265bc421f7a        4 hours ago         5.36GB

2. Démarrez Docker / Train / Test

2.1. Démarrez Docker

Commençons Docker.

hôte


$ docker run -it --rm --gpus all --ipc=host docker-wav2pix

2.2. Train Faites un effort avant de prendre le train. Remplacez le chemin requis dans le fichier de configuration et enregistrez-le. ★ Si vous ne le faites pas, la formation et le test généreront une erreur lors de l'exécution, alors soyez prudent!

récipient


$ echo -e "# training pickle files path:\n"\
"train_faces_path: /home/user/wav2pix/pickle/faces/train_pickle.pkl\n"\
"train_audios_path: /home/user/wav2pix/pickle/audios/train_pickle.pkl\n"\
"# inference pickle files path:\n"\
"inference_faces_path: /home/user/wav2pix/pickle/faces/test_pickle.pkl\n"\
"inference_audios_path: /home/user/wav2pix/pickle/audios/test_pickle.pkl" > /home/user/wav2pix/config.yaml

Si vous pouvez faire ce qui précède, exécutons Train.

récipient


$ cd wav2pix
$ python runtime.py

★ Il a fallu environ 3 heures dans mon environnement pour terminer le train. Si vous attendez patiemment ou spécifiez l'époque d'exécution comme suit, cela se terminera tôt. ★ Vous pouvez ignorer en toute sécurité l'erreur Visdom.

récipient


$ python runtime.py --epochs 100

--epochs: spécifiez le nombre d'époques (200 par défaut)

2.3. Test Lorsque le train est terminé, exécutez Test. Puisqu'il est nécessaire d'appeler le modèle entraîné, il est nécessaire d'écrire un argument supplémentaire que lors de l'exécution de Train.

récipient


$ python runtime.py --pre_trained_disc /home/user/wav2pix/checkpoints/disc_200.pth --pre_trained_gen /home/user/wav2pix/checkpoints/gen_200.pth --inference

--pre_trained_disc: chemin du discriminateur formé --pre_trained_gen: chemin du générateur formé --inference: indicateur d'exécution d'inférence

Lorsque vous avez terminé, vérifiez l'image générée.

hôte


$ docker cp 89c8d43b0765:/home/user/wav2pix/results/ .

★ Si vous ne connaissez pas le CONTAINER ID, exécutez "docker ps" pour le vérifier.

hôte


$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
89c8d43b0765        docker-wav2pix      "/bin/bash"         4 hours ago         Up 4 hours                              vigilant_murdock

3. Image générée à partir de l'audio (extrait partiel)

←: Image générée Image réelle: → ←: Image générée Image réelle: → jaimealtozano_1550.jpg1550_2.png    jaimealtozano_1600.jpg1560_2.png

javiermuniz_1250.jpg1250_2.png    javiermuniz_1300.jpg1300_2.png

Pour les deux personnes de cet exemple d'ensemble de données, je pense que les images générées qui montrent qu'ils sont relativement des visages ont été créées. J'ai également constaté que je comprenais ma personnalité dans une certaine mesure. Cependant, il a été souligné dans le document que l'image était rugueuse.

prime

Ex.1 Création de l'ensemble de données requis pour générer une image de visage animée

À partir de là, je voudrais générer une image de visage animée en utilisant ce wav2pix. Cela dit, il n'y a pas d'ensemble de données comprenant des images de visage audio et animées, vous devez donc créer le vôtre. Par conséquent, nous allons créer un ensemble de données Virtual YouTuber (VTuber) en faisant référence à l'ensemble de données YouTuber créé dans l'article.

La figure ci-dessous montre comment créer l'ensemble de données expliqué dans l'article. Le processus est divisé en vidéo et parole de la vidéo YouTuber, et enfin il est créé sous forme de paire de données. Le principal changement concerne uniquement le fichier en cascade de détection de visage. Le fichier cascade utilisé est ici.

無題50.png

Les vidéos utilisées pour créer les données avec les VTubers ciblés cette fois sont les suivantes. Pour l'audio, la section sans BGM ou SE est utilisée comme données. (Titres omis)

--Kizunaai

image.png

[Les accidents de diffusion seront publiés tels quels! ] Merci pour 1 million de personnes en LIVE! !! [Diffusion en direct] Nous avons tous parlé d'anime!

--Chat image.png Pour devenir un Youtuber virtuel [Live008]

--Hoshigai Suisei image.png [Officiel] "MUSIC SPACE of Hoshigai Suisei" # 01 premier semestre (diffusé le 5 avril 2020) [Officiel] "MUSIC SPACE of Hoshigai Suisei" # 01 deuxième semestre (diffusé le 5 avril 2020) [Officiel] "MUSIC SPACE of Hoshigai Suisei" # 04 premier semestre (diffusé le 26 avril 2020)

Ex.2 Image générée à partir de l'audio (visage animé)

Tout d'abord, je vais montrer l'image de visage animée générée pour chaque époque.

A partir de chaque numéro d'époque, on peut voir qu'une image faciale similaire a été générée à l'époque 10, mais à mesure que le nombre augmente, l'individualité est clairement reflétée dans l'image générée. Maintenant, comparons les deux types suivants pour voir à quel point l'image générée est proche de la réalité.

◆ Comparaison entre l'image générée (epoch200) et le réel

part1                  part2

←: Image générée Image réelle: → ←: Image générée Image réelle: → image.pngimage.png    image.pngimage.png image.pngimage.png    image.pngimage.png image.pngimage.png    image.pngimage.png

À partir de la partie 1, il a été confirmé qu'une image était générée à partir de chaque voix de VTuber qui pouvait fermement apprendre l'individualité. Cependant, j'ai pensé qu'il fallait noter que part2 peut générer des images différentes des vraies.

Résumé

Cette fois, j'ai expliqué wav2pix qui génère une image de visage à partir de la voix et a exécuté un échantillon. J'ai également essayé de générer une image de visage animée en modifiant l'ensemble de données. En ce qui concerne l'image animée du visage, j'ai pu générer quelque chose de plus tangible que ce à quoi je m'attendais, il peut donc être bon d'essayer d'augmenter la résolution à l'avenir. Aussi, je me demande s'il est possible de générer des illustrations à partir de l'audio dans le futur s'il existe différentes images faciales.

Site de référence

SPEECH-CONDITIONED FACE GENERATION USING GENERATIVE ADVERSARIAL NETWORKS J'ai fait du machine learning pour changer les voix de Kizunaai et Nekomasu Unable to write to file </torch_18692_1954506624> Référence d'exécution Docker

Recommended Posts

Essayez d'exécuter wav2pix pour générer une image de visage à partir de la voix (il existe également une génération de visage animée)
Essayez d'extraire une chaîne de caractères d'une image avec Python3
Comment créer un ensemble de données d'image de visage utilisé dans l'apprentissage automatique (3: Génération d'images de visage à partir d'images candidates, partie 1)
Essayez de générer une image avec aliénation
Essayez d'embellir avec Talking Head Anime à partir d'une seule image [préparation python]
Comment générer un objet Python à partir de JSON
Effectuez une recherche Twitter à partir de Python et essayez de générer des phrases avec la chaîne de Markov.