[PYTHON] [AI] Deep Learning für das Entrauschen von Bildern

Einführung

Es ist lange her, dass Deep Learning seine Position im Bereich des Opportunity-Lernens fest etabliert hat. Es gibt viele Anwendungsbereiche von Deep Learning, aber dieses Mal möchte ich eine kurze Zusammenfassung und einige Demos zur Anwendung von "Image Denoising" vorstellen, was äußerst nützlich und praktisch ist. .. Wir machen auch normales Entrauschen und Entrauschen, wenn nur Rauschbilder als Einstellung nahe am eigentlichen Problem verfügbar sind.

Was ist Image Denoising?

Bildentrauschung ist wörtlich "Rauschentfernung aus dem Bild". Fotos und Videodaten, die mit einer Kamera aufgenommen wurden, werden aufgrund verschiedener Faktoren wie der Aufnahmeumgebung verrauscht, was zu einer Verringerung der Sichtbarkeit im Vergleich zum Originalbild führt. Das Wiederherstellen des Originalbilds aus einem Bild mit einem solchen Rauschen wird als Entrauschen bezeichnet und nicht nur auf die Bilder angewendet, die wir normalerweise sehen, sondern auch auf den Bereich medizinischer Bilder wie die Rauschentfernung aus CT- und MRT-Bildern. Es ist gewesen.

Deep Learning for Image Denoising

Glättungsprozesse wie Medianfilter, Gauß-Filter und gleitende Durchschnitte werden seit langem als grundlegende Methoden zum Entfernen von Bildrauschen verwendet. Auf dem Gebiet des maschinellen Lernens werden seit langem Methoden unter Verwendung neuronaler Netze vorgeschlagen, die jedoch nicht die gängigen Methoden waren. Beginnend mit der Erfindung der Faltungs-Neuronalen Netze hat Deep Learning jedoch eine überwältigende Leistung im Bildbereich gezeigt, und seine Anwendung auf dem Gebiet der Entrauschung hat rasch Fortschritte gemacht. Es ist eines der Gebiete, die Tag und Nacht noch erforscht werden, und eines der Hauptthemen bei Top-Computer-Vision-Konferenzen.

Im Folgenden werden einige der wichtigsten Methoden und Demos zum Entrauschen mit Deep Learning vorgestellt.

Demo 1. Denoise aus handgeschriebenem Text

Die Daten werden erneut mit MNIST (handgeschriebenes Textbild) verwendet. Lernen Sie ein Modell, das Rauschen entfernt, indem Sie ein Bild mit Rauschen als Eingabedaten und das Originalbild als korrekte Daten verwenden und ein neues Rauschbild entrauschen.

test.png

Eingabedaten: 50.000 Rauschbilder mit Gaußschem Rauschen zu den richtigen Antwortdaten hinzugefügt Richtige Antwortdaten: 50.000 Originalbilder

Als Modell zum Lernen werden wir zusätzlich zum üblichen CNN (Convolutional Neural Network) die folgenden drei vergleichen.

  1. CAE(Convolutional Autoencoder)

  2. DnCNN(Denoising Convolutional Neural Network)

  3. Win5-RB(Wide Inference Network 5layer + Resnet and BatchNormalization)

  4. CAE(Convolutional Autoencoder) Autocoder ist eine Art neuronaler Netzwerkarchitektur, die die Ausgabedaten trainiert, um sich den Eingabedaten anzunähern, und wird hauptsächlich im Bereich der Dimensionsreduktion verwendet. Encoder und Decoder sind gepaart, und die Struktur ist so, dass die Eingabedaten von Encoder in latente Variablen komprimiert und von Decoder aus den komprimierten latenten Variablen wiederhergestellt werden.

Indem die Dimension der latenten Variablen kleiner als die Eingabedaten gemacht wird, ist es möglich, niedrigdimensionale Merkmale zu erfassen, die die Eingabedaten reproduzieren können, und da ein neuronales Netz für Codierer und Decodierer verwendet wird, ist eine nichtlineare Dimensionsreduktion möglich. Es wird nicht nur zur Dimensionsreduzierung verwendet, sondern auch zur Rauschentfernung aufgrund der Eigenschaften "Komprimieren auf latente Variablen zum Erfassen wesentlicher Merkmale" und "Wiederherstellen von Bildern mit Decoder" und verwandelt das Eingabebild in ein Rauschbild. Auf diese Weise ist Entrauschen möglich (auch als Entrauschen-Autoencoder bekannt).

CAE ersetzt die Encoder- und Decoder-Neuronale Netze von Autoencoder durch Faltungs-Neuronale Netze, und die Genauigkeit der Entrauschung aus Bilddaten wird durch die Verwendung der Faltungs-Neuronalen Netze erheblich verbessert.

  1. DnCNN(Denoising Convolutional Neural Network) DnCNN ist, wie der Name "Denosing" andeutet, ein CNN, das darauf abzielt, Rauschen zu entfernen. DnCNN ist ein mehrschichtiges CNN, das aus 17 Schichten besteht, in denen Faltung und Chargennormalisierung wiederholt auf das Eingabebild angewendet werden.

Die Chargennormalisierung ist eine Methode zur Normalisierung der Ausgabe jeder Schicht des neuronalen Netzes und kann das Problem der internen Kovariatenverschiebung (die Verteilung jeder Schicht ändert sich während des Trainings) unterdrücken, was zur Verbesserung der Lerneffizienz und -genauigkeit beiträgt. Ich werde. Eines der Hauptmerkmale von DnCNN ist außerdem, dass es das Framework von ResNet (Restnetzwerk) verwendet, sodass die Rauschkomponente aus dem Rauschbild geschätzt wird, anstatt das Bild mit entferntem Rauschen und Rauschen direkt zu schätzen. Das Originalbild wird geschätzt, indem die Komponenten aus dem Rauschbild entfernt werden. Im Rahmen von Denoise liegen die Eingangs- und Ausgangswerte häufig nahe beieinander, auch wenn der Rauschpegel niedrig ist, und es ist ineffizient, ein Lernen nahe einer einheitlichen Abbildung mit einer nichtlinearen Abbildung unter Verwendung eines endlichen neuronalen Netzes durchzuführen, sodass die Differenz gelernt wird. Dies wird die Lerneffizienz verbessern. Wenn beispielsweise kein Unterschied besteht, muss die konstante Abbildung nicht mit einem neuronalen Netz trainiert werden, und das Gewicht jeder Schicht kann einfach auf 0 gesetzt werden. Als Implementierungsmethode lernt das neuronale Netz den Unterschied, indem es den Eingabewert so wie er ist umgeht und ihn mit der letzten Schicht verbindet.

  1. Win5-RB(Wide Inference Network 5layer + Resnet and BatchNormalization) Win5-RB ist ein Modell, bei dem das Wide Inference Network (Win) 5 Schichten hat und durch Resnet (R) und Batch Normalization (B) verbunden ist. Beim Entrauschen wird nicht nur die Tiefe der Schicht, sondern auch die Anzahl der Filter berücksichtigt Es wird behauptet, dass es effektiv ist, die Kernelgröße größer als das normale CNN zu machen, und es wird Wide Inference genannt. Aus Entrauschungsexperimenten unter Verwendung verschiedener Daten wurden 128 Filter und eine Kernelgröße von 7 × 7 übernommen, und die Ausdruckskraft jeder Schicht ist aufgrund der Anzahl der Filter und der Größe der Kernelgröße hoch, und die Netzwerkkonfiguration ist flacher als DnCNN. Ich werde.

Modellbau

Die Modellkonstruktion erfolgt mit Keras in Google Colaboratory. Der Umriss jedes Modells ist wie folgt.

図12.png

** Verschiedene Lernparameter **

Ergebnis

Als Test ist das Entrauschungsergebnis aus dem Rauschbild mit hinzugefügtem Gaußschen Rauschen wie folgt.

図1.png

In CNN tritt an einigen Stellen so etwas wie Unschärfe auf, aber in CAE, DnCNN, Win5-RB kann Rauschen auf einem Niveau gut entfernt werden, bei dem der Unterschied zum Originalbild kaum erkennbar ist.

Win5-RB hat mit 10.000 Testbildern die höchste Genauigkeit in MSE (mittlerer quadratischer Fehler).

Modell- MSE
CNN 0.01171
CAE 0.00991
DnCNN 0.00943
Win5-RB 0.00873

Demo auf Flask

Mit dem trainierten Modell habe ich eine Demo erstellt, die von Flask in Echtzeit verarbeitet werden kann. Dies ist eine Demo bei CAE, aber Sie können sehen, dass sie Rauschen gut entfernt.

Demo 2. Rauschen nur in der Situation von Rauschdaten

In Demo 1 haben wir ein Modell erstellt, das Rauschkomponenten mithilfe eines Rauschbilds und eines rauschfreien Originalbilds entfernt. Ist es, wie Sie vielleicht bereits bemerkt haben, überhaupt möglich, das Originalbild ohne Rauschen zu erhalten? Beim eigentlichen Problem ist es häufig der Fall, dass das Originalbild ohne Rauschen nicht verfügbar ist und nur das Bild mit Rauschen verfügbar ist. In Anbetracht eines solchen realen Problems werden wir das Entrauschen in einer Situation durchführen, in der nur Rauschbilder erhalten werden können.

Noise2Noise Noise2Noise (N2N) ist eine Lernmethode zur Rauschunterdrückung, bei der nur Rauschbilder während des Lernens verwendet werden. Die Leistung ist vergleichbar mit Lernmethoden, bei denen rauschfreie Bilder (korrekte Antwortdaten) verwendet werden, obwohl nur Rauschbilder verwendet werden. Es ist eine Technik, die ausgegeben werden kann. Mit einem Wort, indem Sie die Konvertierung von einem Rauschbild in ein Rauschbild (Noise2Noise) lernen, lernen Sie die Konvertierung von einem Rauschbild in ein rauschfreies Bild (korrekte Antwortdaten).

図4.png

Nachfolgend finden Sie eine kurze Erklärung. Die Aufgabe des Entfernens von Rauschen aus dem Rauschbild $ \ hat {x} _i $ und dem rauschfreien Originalbild $ y_i $ pair $ (\ hat {x} _i, y_i) $ besteht darin, den folgenden Erfahrungsverlust zu minimieren. Es ist formuliert.

\tag{1}
\underset{\theta}{argmin} \displaystyle \sum_i L(f_\theta(\hat{x}_i),y_i)

Wobei $ f_ {\ theta} $ der Umrechnungsparameter (z. B. CNN-Gewicht) unter der Bedingung der Verlustfunktion $ L $ ist. Andererseits ist in Noise2Noise das richtige Bild auch ein Rauschbild, sodass der folgende Erfahrungsverlust, bei dem $ y_i $ zu $ \ hat {y} _i $ wird, minimiert wird.

\tag{2}
\underset{\theta}{argmin} \displaystyle \sum_i L(f_\theta(\hat{x}_i),\hat{y}_i)

In Noise2Noise Zielverteilung mit Eingabebedingungenp(y|x)Zu optimierende Parameter, auch wenn sie durch eine Verteilung mit demselben erwarteten Wert ersetzt werden\thetaBehauptet, dass es sich nicht ändern wird. Mit anderen Worten, selbst wenn das Ziel ein Rauschbild ist, ist der erwartete Wert$E \{ \hat{y} _i | \hat{x} _i \} = y _i Denn es ist(1)Wann(2)Wird bei der Optimierung erhaltenf _\theta$は等価であるWannいう事になります(Die Varianz des Schätzergebnisses ist jedoch der Durchschnitt der Rauschvarianz am Ziel geteilt durch die Anzahl der Trainingsmuster.)。

Dies ist im Kontext der Regression leicht zu verstehen. Wenn Sie das zugrunde liegende Modell aus den resultierenden Stichproben ableiten möchten, gibt es unzählige Kombinationen von Stichproben, in denen dasselbe Modell abgeleitet werden kann. Selbst wenn der beobachtete Wert aufgrund von Rauschen variiert, ist der erwartete Wert der Variation daher der gleiche wie bei der ursprünglichen Stichprobe ($ E \ {\ hat {y} _i | \ hat {x} _i \ } = y _i $) ist das Modell, das durch Minimieren des Verlusts aus der Probe erhalten wird, dasselbe wie das Modell, das durch Minimieren des Verlusts in einem rauschfreien Bild erhalten wird. Dies ist der Grund, warum es möglich ist, die Umwandlung von einem Rauschbild in ein rauschfreies Bild (korrekte Antwortdaten) zu lernen, indem die Umwandlung von einem Rauschbild in ein Rauschbild (Noise2Noise) gelernt wird.

図6.png

Modellbau

Das Training verwendet Rauschbilder für die Eingabe bzw. das Ziel.

図7.png

Das Modell verwendet Win5-RB und verwendet dieselben Lernparameter wie in Demo 1.

Ergebnis

Als Test ist das Entrauschungsergebnis aus dem Rauschbild mit hinzugefügtem Gaußschen Rauschen wie folgt.

N2N.png

Überraschenderweise wurde das Rauschen entfernt, obwohl nur Rauschbilder zum Lernen verwendet werden. Als ich die Zeitung zum ersten Mal las, war ich skeptisch, aber ich war ziemlich überrascht, dieses Ergebnis zu sehen. Auf diese Weise kann N2N Rauschen auch in Situationen entfernen, in denen es schwierig ist, korrekte Antwortdaten zu erhalten. Es ist also ersichtlich, dass es sich um eine epochale Technologie handelt, die den Bereich der verfügbaren Szenen erheblich erweitert.

In dem Artikel wird berichtet, dass die Leistung mit der Lernmethode unter Verwendung von rauschfreien Bildern (korrekte Antwortdaten) vergleichbar ist, wobei jedoch der MSE-Wert für 10.000 Testbilder betrachtet wird, Demo 1 unter Verwendung der korrekten Antwortdaten Es ist ein hoher Wert im Vergleich zu.

Modell- MSE
Win5-RB(N2N) 0.0425

Betrachten wir zur Betrachtung ein Histogramm der Pixelwerte der Bilder während des Trainings und Testens (0 entspricht Schwarz und 1 entspricht Weißpixelwerten).

図8.png

Da das Zielbild zum Zeitpunkt des Lernens in Demo 1 das Originalbild ohne Rauschen (Original) ist, enthält der Pixelwert viele Nullen, während das Zielbild in Demo 2 ein Rauschbild ist, sodass die Anzahl der Nullen aufgrund von Rauschen und Pixeln abnimmt Sie sehen, dass die Werte gleichmäßig verteilt sind. Mit Blick auf das geschätzte Bild zeigt Win5-RB von Demo 1 eine Verteilung in der Nähe des Testbilds (Verteilung, bei der 0 und 1 klar voneinander getrennt sind), aber das geschätzte Bild von Demo 2 ist von 0 und 1 zentriert. Die Verteilung basiert auf. Mit anderen Worten, beim Lernen von einem Rauschbild zu einem Rauschbild versteht es sich, dass dieses Ergebnis erhalten wird, weil es zur Minimierung der Verlustfunktion beiträgt, indem ein Wert angegeben wird, der nahe an einer kurzen Zeit liegt, anstatt 0 oder 1 klar anzugeben. Ich werde. Das diesmal verwendete handgeschriebene Zeichenbild kommt einem Binärbild nahe, und die Vorspannung ist extrem groß, so dass geschlossen wird, dass ein solches Ergebnis erhalten wurde. Wenn man das Bild des tatsächlichen Schätzergebnisses von Demo 2 betrachtet, kann man sehen, dass das Bild insgesamt etwas dünn ist, obwohl die Form fest erfasst wird und die Verteilung der Pixelwerte wie ein natürliches Bild ist. Es scheint, dass eine höhere Leistung erzielt wird, wenn sie links und rechts sanft ist.

Zusammenfassung

Wir haben die Anwendung von Deep Learning auf dem Gebiet der Bildentrauschung eingeführt und Rauschen in Fällen entfernt, in denen das Lernen auf korrekten Bildern ohne Rauschen basiert, und in Fällen, in denen nur Rauschbilder verfügbar sind, was dem eigentlichen Problem nahe kommt. Dieses Mal haben wir uns auf das Gaußsche Rauschen konzentriert, aber das Papier zeigt auch, dass es eine effektive Methode für Sesamsalzgeräusche und andere Geräusche ist.

Dieses Mal haben wir eine Rauschentfernung durchgeführt, aber ich möchte nicht den Rauschpegel, sondern auch die Wiederherstellung durch Deep Learning einführen, wenn das Bild einen großen Fehler aufweist.

Qiita Artikel ・ [[AI] Deep Metric Learning](https://qiita.com/jw-automation/items/7bbe1c872fcec7fa6c1d) ・ [Eine Falle, mit der jeder problemlos einen RPA erstellen kann](https://qiita.com/jw-automation/items/78d823a6cb278f7015b5) ・ [Eine Falle, die jeder, der eine VBA erstellen kann, problemlos erstellen kann](https://qiita.com/jw-automation/items/38c28016bf5162e76c59) ・ [Ich habe ein UiPath-Codierungsprüfwerkzeug [RPA] erstellt](https://qiita.com/jw-automation/items/003dd0ef116cf968c3a8) ・ [Der Grund, warum RPA so gut ist, dass Sie Ihr Verständnis von RPA vertiefen können](https://qiita.com/jw-automation/items/836391dfde3fb1ac83d6) ・ [Von RPA empfohlene Bücher](https://qiita.com/jw-automation/items/3c141c50c7a163943fd9) ・ [Personen, die für die RPA-Entwicklung geeignet sind, Personen, die dies nicht tun](https://qiita.com/jw-automation/items/828933731611b9ec601f) ・ [Ich habe versucht, die Herstellung von Sushi zu automatisieren](https://qiita.com/jw-automation/items/a906f7a79e72add7b577)

Demo

Recommended Posts

[AI] Deep Learning für das Entrauschen von Bildern
[AI] Deep Metric Learning
Lesen und implementieren Sie Deep Residual Learning für die Bilderkennung
Implementierung eines Deep Learning-Modells zur Bilderkennung
Python-Lernplan für KI-Lernen
Deep Learning Bilderkennung 1 Theorie
Deep Learning für die Bildung von Verbindungen?
Tiefes Lernen
Deep Learning 2 durch Implementierung gelernt (Bildklassifizierung)
Erste Schritte für Anfänger des maschinellen Lernens (KI)
Bilderkennungsmodell mit Deep Learning im Jahr 2016
Machen Sie Ihren eigenen PC für tiefes Lernen
Bildausrichtung: von SIFT bis Deep Learning
[Deep Learning] Nogisaka Gesichtserkennung ~ Für Anfänger ~
Deep Learning Bilderkennung 3 nach der Modellerstellung
Informationen zur Datenerweiterungsverarbeitung für tiefes Lernen
Python-Lernplan für das KI-Lernen Fortschrittsmanagement
Starten Sie Deep Learning
Aufgeblasenes Lernbild
Python Deep Learning
Deep Learning × Python
Erstes tiefes Lernen ~ Kampf ~
Bildersammlung Python-Skript zum Erstellen von Datensätzen für maschinelles Lernen
Python: Deep Learning-Praxis
Deep Learning / Aktivierungsfunktionen
Deep Learning Bildanalyse beginnend mit Kaggle und Keras
[Erkennung von Abnormalitäten] Erkennen Sie Bildverzerrungen durch Fernunterricht
Deep Learning 1 Übung des Deep Learning
Deep Learning / Cross Entropy
Erstes tiefes Lernen ~ Vorbereitung ~
Erstes tiefes Lernen ~ Lösung ~
Ich habe versucht, tief zu lernen
Techniken zum Verständnis der Grundlagen von Deep-Learning-Entscheidungen
Tiefes Lernen mit Python Kapitel 2 (Material für runde Vorlesung)
Python: Deep Learning Tuning
Deep Learning Großtechnologie
Zusammenfassung zum Lernen von RAPIDS
Eine Szene, in der GPU für tiefes Lernen nützlich ist?
Deep Learning / Softmax-Funktion
Tipps zum Umgang mit Eingaben variabler Länge im Deep Learning Framework
Japanische Übersetzung der öffentlichen Unterrichtsmaterialien des Deep Learning Nano Degree
Erstellen Sie mit Docker eine Umgebung für "Deep Learning von Grund auf neu"
Richten Sie AWS (Ubuntu 14.04) für Deep Learning ein (installieren Sie CUDA, cuDNN).
Erstellen Sie eine KI, die Zuckerbergs Gesicht mit tiefem Lernen identifiziert learning (Datenlernen)
[Deep Learning] Bildklassifizierung mit Faltungsnetz [DW Tag 4]
Klassifizieren Sie CIFAR-10-Bilddatensätze mithilfe verschiedener Modelle des Deep Learning
Eine Geschichte über einen 40-jährigen Ingenieurmanager, der "Deep Learning for ENGINEER" bestanden hat
Deep Learning mit Shogi AI auf Mac und Google Colab
Datensatz für maschinelles Lernen
Japanische Vorverarbeitung für maschinelles Lernen
Deep Learning von Grund auf 1-3 Kapitel
Versuchen Sie es mit TensorFlow
Deep Learning Gaiden ~ GPU-Programmierung ~
<Kurs> Tiefes Lernen: Day2 CNN
Lernablauf für Python-Anfänger
Deep Learning / LSTM Scratch Code
<Kurs> Tiefes Lernen: Tag 1 NN
Deep Kernel Learning mit Pyro