[PYTHON] Ich habe versucht, ESPCN zu verwenden

Einführung

Dieser Artikel ist [hier](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% Dies ist eine Neufassung des Artikels e3% 81% 9f /) für Qiita.

Super Auflösung

Kurz gesagt bedeutet Superauflösung "Erhöhen der Auflösung eines Bildes". Wenn Sie das hören, denken Sie vielleicht, dass Sie das Bild nur dehnen, aber wenn Sie das Bild verkleinern, gehen die Informationen des Originalbilds unweigerlich verloren. Lassen Sie uns eine einfache Überprüfung durchführen. Reduzieren Sie zunächst die Größe des entsprechenden Bildes auf die Hälfte. Verwenden Sie dann die bilineare Methode, um das Bild so zu vergrößern, dass es dieselbe Größe wie das Originalbild hat. Das Ergebnis ist das Bild unten. image.png Das Bild links ist das Bild unten, und das Bild rechts ist das Bild, das verkleinert und dann vergrößert wurde.

Es ist auf einen Blick schwer zu verstehen, aber selbst wenn die Auflösung gleich ist, wird es verschwommen und kleine Funktionen verschwinden. Die Aufgabe der Superauflösung besteht nicht nur darin, die Auflösung zu erhöhen, sondern sie in ein hochauflösendes Bild umzuwandeln und dabei kleine Merkmale zu kompensieren.

Über ESPCN

ESPCN (Efficient Sub-Pixel Convolutional Neural Network) ist ein auf einem tiefen neuronalen Netzwerk basierendes Super-Resolution-Modell, das 2016 angekündigt wurde.

Ein ähnliches Modell ist das 2015 angekündigte SRCNN (Super-Resolution Convolutional Neural Network). Dies ist ein Modell, das ein neuronales Netzwerk für Aufgaben mit hoher Auflösung verwendet und es in ein hochauflösendes Bild mit drei Faltungsschichten umwandelt.

Als ein besonderer Punkt von ESPCN wird beim Erhöhen der Auflösung normalerweise eine Operation hinzugefügt, die als umgekehrte Faltung bezeichnet wird, aber diese Operation kann gitterartiges Rauschen erzeugen. Um dies zu überwinden, erhöht ESPCN die Auflösung durch eine Operation namens Pixel Shuffle. Wenn Sie beispielsweise die Größe eines Bildes verdoppeln möchten, erstellen Sie kurz vor der Ausgabe vier Bilder und kombinieren Sie die vier Bilder für die Ausgabe in einer festen Positionsbeziehung.

image.png

Implementierung und Ergebnisse

Ich habe gelernt, den Code von hier und das durch Scraping erhaltene Bild zu verwenden. Übrigens wurden ca. 10.000 Bilder zum Lernen verwendet. image.png Das linke ist das untere Bild, das mittlere ist das Bild, das verkleinert und dann vergrößert wurde, und das rechte ist das Bild, das ESPCN verwendet.

Es gibt ein leichtes Gefühl der Inkongruenz in den Details im Vergleich zum Originalbild, aber es wurde fast restauriert. Wenn Sie dies verwenden, können Sie anscheinend auch die Auflösung von Videos erhöhen.

Am Ende

Dieses Mal habe ich eine Superauflösung mit ESPCN versucht. Es scheint interessant zu sein, APIs mit einem solchen Modell zu erstellen. Darüber hinaus können Sie dieses Modell anscheinend auch verwenden, um die Auflösung von Bildern zu erhöhen, die mit GAN usw. erstellt wurden.

Im Folgenden sind die Websites und Dokumente aufgeführt, auf die ich beim Erstellen dieses Artikels verwiesen habe.

[Superauflösendes Bild: Implementierung / Lernen von 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

Ich habe versucht, ESPCN zu verwenden
Ich habe versucht, parametrisiert zu verwenden
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, Mimesis zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, Pipenv zu verwenden
Ich habe versucht, Matplotlib zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, openpyxl zu verwenden
Ich habe versucht, Ipython zu verwenden
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe versucht, ngrok zu verwenden
Ich habe versucht, face_recognition zu verwenden
Ich habe versucht, Jupyter zu verwenden
Ich habe versucht, doctest zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, jinja2 zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, das Zeitfenster zu verwenden
[Ich habe versucht, Pythonista 3 zu verwenden] Einführung
Ich habe versucht, RandomForest zu verwenden
Ich habe versucht, BigQuery ML zu verwenden
Ich habe versucht, Amazon Glacier zu verwenden
Ich habe versucht, Git Inspector zu verwenden
Ich habe versucht, Magenta / TensorFlow zu verwenden
Ich habe versucht, AWS Chalice zu verwenden
Ich habe versucht, Slack Emojinator zu verwenden
Ich habe versucht, Rotrics Dex Arm # 2 zu verwenden
Ich habe versucht, Rotrics Dex Arm zu verwenden
Ich habe versucht, GrabCut von OpenCV zu verwenden
Ich habe versucht, Thonny (Python / IDE) zu verwenden.
Ich habe versucht, mit dem Server-Client über tmux zu kommunizieren
Ich habe versucht, mit PyBrain verstärkt zu lernen
Ich habe versucht, mit Theano tief zu lernen
Ich habe irgendwie versucht, ein Jupyter-Notebook zu verwenden
[Kaggle] Ich habe versucht, mit unausgeglichenem Lernen zu unterabtasten
Ich habe versucht, mit OpenPose eine Schildkrötenwelle zu schießen
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, asynchrone Verarbeitung mit Asyncio
Ich habe versucht zu kratzen
Ich habe PyQ ausprobiert
Ich habe AutoKeras ausprobiert
Ich habe es mit Papiermühle versucht
Ich habe versucht, Django-Slack
Ich habe es mit Django versucht
Ich habe es mit Spleeter versucht
Ich habe es mit cgo versucht
Ich habe versucht, Amazon SQS mit Django-Sellerie zu verwenden
Ich habe versucht, Azure Speech to Text zu verwenden.
Ich habe versucht, YOUTUBE Data API V3 zu verwenden
Ich habe versucht, Selen mit Headless-Chrom zu verwenden