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
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.
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
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
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
←: Image générée Image réelle: → ←: Image générée Image réelle: →
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.
À 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.
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
[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 Pour devenir un Youtuber virtuel [Live008]
--Hoshigai Suisei [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)
Tout d'abord, je vais montrer l'image de visage animée générée pour chaque époque.
epoch10
epoch50
epoch100
epoch200
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: →
À 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.
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.
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