[PYTHON] Convertissez l'image du visage en une qualité d'image élevée avec PULSE afin que vous puissiez voir les pores et la texture

1.Tout d'abord

スクリーンショット 2020-07-14 14.08.30.png Avez-vous déjà voulu convertir une image basse résolution en image haute résolution?

En juin 2020, l'Université Duke a annoncé une méthode appelée ** PULSE ** qui augmente la conversion haute résolution, qui était auparavant le maximum de 8 fois, à 64 fois. Cela permet de convertir une image de visage de type mosaïque qui ne montre pas clairement les yeux et la bouche en une image de haute qualité qui vous permet de voir les pores et la texture. ** **

Cette fois, je vais vous présenter le résultat de l'essai du code source publié sur Github. Le code est créé par Google Colab et publié sur Github, donc si vous voulez l'essayer vous-même, ce ** "lien" ** Cliquez sur /Pulse_test.ipynb) et cliquez sur le bouton ** "Colab sur le Web" ** en haut de la feuille affichée pour la déplacer.

2. Algorithme

transformation.gif L'algorithme utilise un ** modèle GAN entraîné ** pour générer une ** "image convertie d'une image haute résolution en une basse résolution" **, et la différence entre celle-ci et ** "image basse résolution" **. En tant que ** perte **, nous voulons une image haute résolution qui minimise la ** perte **.

Ce qui est inquiétant, c'est que puisque le modèle GAN formé est utilisé, les images utilisées pour la formation peuvent être bien converties en haute résolution, mais les images non utilisées pour la formation fonctionnent également bien.

Donc, cette fois, je voudrais créer intentionnellement une image basse résolution (32 x 32 pixels) à partir de diverses images de visage et voir avec quelle précision cela peut être converti en une haute résolution (1024 x 1024 pixels). Le nombre d'optimisations (étapes) est de 1000.

3. Image du visage formé (jeu de données FFHQ)

Le modèle GAN entraîné utilisé dans ** PULSE ** est StyleGAN. Par conséquent, le FFHQ Dataset est utilisé pour l'entraînement, et cette image du visage devrait au moins fonctionner. Prenons maintenant trois images de l'ensemble de données FFHQ.

スクリーンショット 2020-07-14 15.21.21.png

La basse résolution est une image basse résolution (32 x 32), la haute résolution est une image convertie haute résolution (1024 x 1024) et Real est l'image originale qui a créé la basse résolution. Par conséquent, la précision de la conversion haute résolution peut être déterminée par la proximité ** de la haute résolution par rapport au réel. ** De toute évidence, l'image entraînée peut être convertie en haute résolution sans aucun problème.

4. Image de visage non apprise (étranger)

Alors, qu'en est-il des images faciales non apprises (étrangers)? Essayons avec les images de visage de trois étrangers obtenues par recherche sur le Web.

スクリーンショット 2020-07-14 15.21.34.png Hmmm, les étrangers semblent bien fonctionner même avec des images faciales qu'ils n'ont pas utilisées pour apprendre.

5. Image de visage non apprise (japonais)

Alors, qu'en est-il des images faciales non apprises (japonais)? Essayons avec les images de visage de trois Japonais obtenues par recherche sur le Web. Certes, il semble qu'il n'y ait pas beaucoup de japonais dans l'ensemble de données FFHQ, alors que se passe-t-il?

スクリーンショット 2020-07-14 15.21.48.png

C'est mieux que tu ne le penses. Je pense que la haute résolution a des yeux un peu différents et plus de rides sur le visage que Real, mais c'est OK. L'augmentation du nombre d'optimisations (étapes) semble s'améliorer un peu plus.

6. Test en supposant une situation réelle

En passant, jusqu'à présent, nous avons effectué un test pour réduire intentionnellement une image de haute qualité à 32 x 32 pixels et la convertir en une image de haute qualité, mais ce que nous voulons faire dans une scène réelle est de créer une image de basse qualité dès le début. Je veux le convertir en une qualité d'image élevée. Faisons ce test ici.

Le premier capitaine de l'ancien Nogizaka46, Reika Sakurai, [Wekipedia](https://ja.wikipedia.org/wiki/Reika Sakurai) a cette image au début. reika.jpg La taille de l'image est de 190 x 253 pixels, et s'il ne s'agit que de la partie du visage, elle sera d'environ 90 x 90 pixels. Maintenant, découpons l'image du visage de cette image et convertissons-la en haute qualité. Je vais essayer d'optimiser le nombre d'étapes (étapes) avec 6000.

reika_S_6000.png

Oh! Tu ne penses pas que c'est plutôt bien?

7. Résumé

J'ai été surpris qu'une conversion de haute qualité d'image dépassant les attentes soit possible. Si vous y réfléchissez bien, une image 32x32 pixels a la même quantité d'informations qu'un vecteur 1024 dimensions, il y a donc beaucoup de potentiel pour faire ressortir une image de haute qualité.

Malgré tout, j'ai pensé au grand plaisir de Duke. La méthode appelée PULSE, qui est complètement différente de la méthode conventionnelle, est intéressante.

Recommended Posts

Convertissez l'image du visage en une qualité d'image élevée avec PULSE afin que vous puissiez voir les pores et la texture
Codes que je vois souvent en travaillant chez SIer et comment les corriger - violation de la loi de Demeter
Comment traiter l'erreur "Impossible de charger le module" canberra-gtk-module "qui apparaît lorsque vous exécutez OpenCV
Comment gérer les erreurs lors de l'installation de whitenoise et du déploiement sur Heroku
Comment gérer les erreurs lors de l'installation de Python et de pip avec choco
Comment créer un environnement d'exécution Python et Jupyter avec VSCode
Convertissez l'image du visage en une qualité d'image élevée avec PULSE afin que vous puissiez voir les pores et la texture
Bon avec Python et xonsh pour que vous puissiez voir l'instance EC2 simplement en entrant dans le shell
Convertir des images du SDK FlyCapture en un formulaire pouvant être utilisé avec openCV
Convertissez des images numérisées déformées en PDF avec Pillow et PyPDF
Convertir un PDF en image avec ImageMagick