[PYTHON] J'ai essayé d'utiliser ESPCN

introduction

Cet article est [ici](https://aiotadiary.wp.xdomain.jp/2020/02/27/espcn%e3%82%92%e7%94%a8%e3%81%84%e3%81% 9f% e8% b6% 85% e8% a7% a3% e5% 83% 8f% e3% 82% 92% e3% 82% 84% e3% 81% a3% e3% 81% a6% e3% 81% bf% Ceci est une réécriture de l'article e3% 81% 9f /) pour qiita.

Super résolution

En un mot, super-résolution signifie "augmenter la résolution de l'image". Lorsque vous entendez cela, vous pouvez penser que vous étirez simplement l'image, mais lorsque vous réduisez l'image, les informations de l'image d'origine sont inévitablement perdues. Faisons une simple vérification. Tout d'abord, réduisez de moitié la taille de l'image appropriée. Utilisez ensuite la méthode bilinéaire pour agrandir l'image afin qu'elle soit de la même taille que l'image d'origine. Le résultat est l'image ci-dessous. image.png L'image de gauche est l'image ci-dessous, et l'image de droite est l'image qui a été réduite puis agrandie.

C'est difficile à comprendre en un coup d'œil, mais même si la résolution est la même, elle devient floue et les petites fonctionnalités disparaissent. La tâche de la super-résolution n'est pas seulement d'augmenter la résolution, mais de la convertir en une image haute résolution tout en compensant les petites fonctionnalités.

À propos de l'ESPCN

ESPCN (réseau neuronal convolutif sous-pixel efficace) est un modèle de super-résolution basé sur un réseau neuronal profond annoncé en 2016.

Un modèle similaire est le SRCNN (Super-Resolution Convolutional Neural Network) annoncé en 2015. Il s'agit d'un modèle qui utilise un réseau neuronal pour les tâches de super-résolution et le transforme en une image haute résolution avec trois couches de convolution.

Une particularité d'ESPCN est que lorsque vous augmentez la résolution, vous ajoutez généralement une opération appelée convolution inverse, mais cette opération peut générer un bruit de type grille. Pour surmonter cela, ESPCN augmente la résolution par une opération appelée Pixel Shuffle. Par exemple, si vous souhaitez doubler la taille d'une image, créez quatre images juste avant la sortie et combinez les quatre images dans une relation de position fixe pour la sortie.

image.png

Mise en œuvre et résultats

J'ai appris en utilisant le code de ici et l'image obtenue par grattage. À propos, environ 10 000 images ont été utilisées pour l'apprentissage. image.png L'image de gauche est l'image du bas, l'image du centre est réduite puis agrandie et l'image de droite utilise ESPCN.

Il y a un léger sentiment d'incongruité dans les détails par rapport à l'image d'origine, mais elle a été presque restaurée. Si vous l'utilisez, il semble que vous puissiez également augmenter la résolution des vidéos.

À la fin

Cette fois, j'ai essayé la super résolution en utilisant ESPCN. Il semble intéressant d'essayer de créer des API en utilisant un tel modèle. De plus, il semble que vous puissiez également utiliser ce modèle pour augmenter la résolution des images générées à l'aide du GAN, etc.

Voici les sites et articles auxquels j'ai fait référence lors de la création de cet article.

[Image super-résolution: mise en œuvre / apprentissage ESPCN pytorch](https://nykergoto.hatenablog.jp/entry/2019/05/28/%E7%94%BB%E5%83%8F%E3%81% AE% E8% B6% 85% E8% A7% A3% E5% 83% 8F% E5% BA% A6% E5% 8C% 96% 3A_ESPCN_% E3% 81% AE_pytorch_% E5% AE% 9F% E8% A3% 85_ / _% E5% AD% A6% E7% BF% 92)  Image Super-Resolution Using Deep Convolutional Networks(2015)  Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network(2016)

Recommended Posts

J'ai essayé d'utiliser ESPCN
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser Summpy
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser openpyxl
J'ai essayé d'utiliser Ipython
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
J'ai essayé d'utiliser doctest
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser la fenêtre de temps
[J'ai essayé d'utiliser Pythonista 3] Introduction
J'ai essayé d'utiliser RandomForest
J'ai essayé d'utiliser BigQuery ML
J'ai essayé d'utiliser Amazon Glacier
J'ai essayé d'utiliser git inspector
J'ai essayé d'utiliser magenta / TensorFlow
J'ai essayé d'utiliser AWS Chalice
J'ai essayé d'utiliser l'émojinateur Slack
J'ai essayé d'utiliser Rotrics Dex Arm # 2
J'ai essayé d'utiliser Rotrics Dex Arm
J'ai essayé d'utiliser GrabCut d'OpenCV
J'ai essayé d'utiliser Thonny (Python / IDE)
J'ai essayé de communiquer avec le client serveur en utilisant tmux
J'ai essayé l'apprentissage par renforcement avec PyBrain
J'ai essayé l'apprentissage en profondeur avec Theano
J'ai essayé d'utiliser le notebook jupyter d'une manière ou d'une autre
[Kaggle] J'ai essayé le sous-échantillonnage en utilisant un apprentissage déséquilibré
J'ai essayé de photographier une vague de tortue en utilisant OpenPose
J'ai essayé d'utiliser l'API checkio
J'ai essayé le traitement asynchrone en utilisant asyncio
J'ai essayé de gratter
J'ai essayé PyQ
J'ai essayé AutoKeras
J'ai essayé le moulin à papier
J'ai essayé django-slack
J'ai essayé Django
J'ai essayé spleeter
J'ai essayé cgo
J'ai essayé d'utiliser Amazon SQS avec django-celery
J'ai essayé d'utiliser Azure Speech to Text.
J'ai essayé d'utiliser l'API de données YOUTUBE V3
J'ai essayé d'utiliser du sélénium avec du chrome sans tête