[PYTHON] Verstehen Sie die Funktion der Faltung am Beispiel der Bildverarbeitung

Einführung

Als Übung in "Von Mosaikentfernung lernen: Modernes Deep Learning" von koshian2 wurde die Faltfunktion als Beispiel genommen. Dieses Mal möchte ich zusammenfassen, was ich über diese Faltungsfunktion verstanden habe. https://qiita.com/koshian2/items/aefbe4b26a7a235b5a5e

Dieses Buch ist auch für Leute wie mich verständlich, die mit maschinellem Lernen begonnen haben. Es wird in einer leicht verständlichen Reihenfolge anhand der Grundlagen erklärt. Insbesondere war es gut, dass das neueste Papier überprüft wurde. Die neuesten Artikel, die in allgemeinen Buchhandlungen verteilt werden, sind ungefähr ein oder zwei Jahre her. Es ist ein Buch, in dem Sie sich leidenschaftlich für tiefes Lernen fühlen, und ich bin froh, dass Sie es gekauft haben.

Was ist Faltung?

Faltung wird im Faltungs-Neuronalen Netz verwendet, das für tiefes Lernen bekannt ist. Irgendwie ist es ein küchenähnliches Wort, und ich habe das Gefühl, dass ich es vorerst in Worten sagen möchte.

image.png

Die Berechnung der Faltung erfolgt nach der im Bild gezeigten Methode. Nehmen Sie eine 3x3-Zelle aus der Eingabematrix, multiplizieren Sie sie mit einer Matrix, die als Faltungskern bezeichnet wird, und addieren Sie die Summe als Ausgabe.   Dies unterscheidet sich von dem sogenannten Forward Propagation Network, in dem die Einheiten in der benachbarten Schicht vollständig verbunden sind (siehe Abbildung unten).

002.png

Faltberechnung


X=\left(
\begin{array}{cc} 
0 & 1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 & 9 \\
10 & 11 & 12 & 13 & 14 \\
15 & 16 & 17 & 18 & 19 \\
20 & 21 & 22 & 23 & 24 \\
\end{array}
\right)

\\
kernel=\left(
\begin{array}{cc} 
0 & 1 & 2  \\
3 & 4 & 5 \\
6 & 7 & 8 \\

\end{array}
\right)

Dieses Mal definieren wir die Eingabe als X in 5x5 Zeilen und den Kernelkoeffizienten als Kernel in 3x3 Zeilen.

c.ipynp



import numpy as np

def conv(inputs, kernel):
  outputs = np.zeros((3,3),inputs.dtype)
  for i in range(3): #Berechnen Sie dreimal in Zeilenrichtung.
    for j in range (3): #Berechnen Sie dreimal in Spaltenrichtung.
      patch= X[i:i+3,j:j+3]
      prod = patch * kernel #Multiplizieren Sie die Masse und den Kernel.
      sum =  np.sum(prod) #Fügen Sie die Hänge hinzu.
      outputs[i,j] = sum #Fügen Sie einen Wert in die Ausgabeebene ein.
  return outputs

#Definiert eine Matrix von X. Der Punkt ist, es durch Umformen in 5x5 umzuwandeln.
X = np.arange(25,dtype=np.float32).reshape(5,5)

#Fügen Sie einen Wert in die Ausgabeebene ein.
kernel = np.arange(9, dtype = np.float32).reshape(3,3)
conv(X,kernel)

Outputs=\left(
\begin{array}{cc} 
312 & 348 & 384  \\
492 & 528 & 564 \\
672 & 708 & 744 \\

\end{array}
\right)


Ich konnte rechnen.

Bildfaltungsverarbeitung mit Tensorflow

Durch die Bildverarbeitung kann das Bild ausgeblendet, schwarzweiß gemacht und die Kanten verbessert werden. Dies geschieht durch den gerade zusammengefassten Faltungsprozess.

Hier ist das Originalfoto. Dies ist ein Foto, das ich gemacht habe, als ich letztes Jahr ins Aquarium ging.

004.png

Verarbeiten Sie das Bild mit einem Kantenverbesserungsfilter. Bei Verwendung von Tensorflow ist die Reihenfolge der Tensorachsen sinnvoll. Im Bild ist die Reihenfolge im Wesentlichen Batch, vertikale Auflösung, horizontale Auflösung und Kanal. Daher ist es beim Hinzufügen von Achsen (Abmessungen) erforderlich, diese Reihenfolge zu beachten. Auch auf dem Programm wie unten

c.ipynp


float_img[ :, :, :, i:i+1]

Da es 3 Kanäle (R, G, B) für Farbbilder gibt, muss i für den 4. Kanal gedreht werden.

c.ipynp


kernel = []
kernel = np.array([0,0,0,0,10,0,0,0,0]).reshape(3,3,1,1)
kernel = 0.5* kernel.astype(np.float32)


outputs = []
float_img = tf.cast(img,tf.float32)/255.0
for i in range(3):
  conv_result = tf.nn.conv2d(float_img[:,:,:,i:i+1],kernel,1,'SAME')
  outputs.append(conv_result)
outputs = tf.concat(outputs, axis = -1)

fig = plt.figure(figsize=(14,14))
ax = fig.gca()
ax.imshow(outputs[0].numpy())

Der verwendete Kantenverbesserungsfilterkern ist wie folgt.

kernel=\frac{1}{2}\left(
\begin{array}{cc} 
-1 & -1 & -1  \\
-1 & 10 & -1 \\
-1 & -1 & -1 \\

\end{array}
\right)

image.png

Auf diese Weise konnten wir den gleichen Effekt wie ImageFilter.EDGE_ENHANCE in PIL erzielen, einer Bibliothek, die häufig in der Bildverarbeitung verwendet wird. Auf diese Weise konnten wir bestätigen, dass das, was beim Falten und bei der Bildverarbeitung getan wird, dasselbe ist. Der Kernel kann unscharf, schwarzweiß sein oder die Ausgabe kann wie angegeben geändert werden. Sie können auch einen anderen Effekt erzielen, indem Sie diesen Wert abhängig von der Position des Eingangs ändern. Ich würde gerne mehr über diesen Kernel erfahren.

Das vollständige Programm finden Sie hier. https://github.com/Fumio-eisan/convol_20200307

Recommended Posts

Verstehen Sie die Funktion der Faltung am Beispiel der Bildverarbeitung
Die Bildanzeigefunktion von iTerm ist praktisch bei der Verarbeitung von Bildern.
Faltungsfilterung durch Matrix-Reinventor der Python-Bildverarbeitung-
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
Beispiel für die Verwendung von Python> function> * args als Argument
Maschinelles Lernen des Sports - Analyse der J-League als Beispiel - ②
Bildverarbeitung? Die Geschichte, Python für zu starten
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Python> Funktion> Beispiel für die Übernahme der Funktion als Argument> Karte (Lambda x: 2 ** x, [1, 2, 3]) / local () ['myprint'] (3.1415, 2.718)
Ich habe versucht, die Support-Vektor-Maschine sorgfältig zu verstehen (Teil 1: Ich habe den Polynom / RBF-Kernel am Beispiel von MakeMoons ausprobiert).
Zeichnen auf Jupyter mit der Plot-Funktion von Pandas
Hinweis: Bedeutung der Angabe von nur * (Sternchen) als Argument in der Funktionsdefinition von Python
[Python] [Windows] Speichern Sie einen Screenshot als Bild
Tweet die Niederschlagswahrscheinlichkeit als Teil der Funktion des Bots
Beispiel für die Verwendung von Lambda
[Pokemon-Schwertschild] Ich habe versucht, die Urteilsgrundlage des tiefen Lernens anhand der Drei-Familien-Klassifikation als Beispiel zu visualisieren
Bayesianische Schätzung am Beispiel des Münzwurfs Siehe die hintere Verteilung für jeden Versuch
Speichern Sie das Eingangsvideo von der Aufnahmekarte als Bild
Django gibt den Inhalt der Datei als HTTP-Antwort zurück
Fügen Sie das Bild mit Pythons openpyxl in eine Excel-Datei ein
Sprachverarbeitung 100 Knocks-29: Holen Sie sich die URL des Flaggenbildes
Eine Methode zum Konvertieren des Bildstils unter Beibehaltung der Farbe
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Ablauf des Ergebnisses der asynchronen Verarbeitung mit Django und Sellerie
Berücksichtigen Sie die Verarbeitungsgeschwindigkeit, um den Bildpuffer mit numpy.ndarray zu verschieben
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
[Python] Erklärt anhand eines Beispiels, wie die Formatierungsfunktion verwendet wird
Verwendung von Lambda (beim Übergeben einer Funktion als Argument einer anderen Funktion)
Versuchen Sie, Elasticsearch als Grundlage für Ihr Frage- und Antwortsystem zu verwenden
Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 1)
[Fabric] Ich war süchtig danach, Boolesche Werte als Argument zu verwenden. Notieren Sie sich also die Gegenmaßnahmen.
Die Geschichte, ein Tool zum Laden von Bildern mit Python zu erstellen ⇒ Speichern unter
Bilderfassung von Firefox mit Python
Beurteilung des hintergrundbeleuchteten Bildes mit OpenCV
Berechnung des Normalenvektors mittels Faltung
Verstehen Sie den Inhalt der sklearn-Pipeline
Extrahieren Sie Feature-Punkte eines Bildes
Ruft die Attribute eines Objekts ab
Vorsichtsmaßnahmen bei Verwendung der Funktion urllib.parse.quote
Umweltfreundliches Scraping mit Bildverarbeitung
Notation des Template Matchings mittels Faltung
Bilderkennung von Früchten mit VGG16
Ich habe versucht, das Gesichtsbild mit sparse_image_warp von TensorFlow Addons zu transformieren
100 Sprachverarbeitung Knock-93 (unter Verwendung von Pandas): Berechnung der Genauigkeitsrate der Analogie-Aufgabe
Lassen Sie uns über die Tonkurve der Bildverarbeitung sprechen ~ LUT ist erstaunlich ~
[Python] [Excel] Betreiben Sie Excel-Tabellen in Python mit openpyxl (am Beispiel eines Testblatts).
Die eval () -Funktion, die eine Zeichenfolge als Ausdruck in Python berechnet
Über die Hauptaufgaben der Bildverarbeitung (Computer Vision) und die verwendete Architektur
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Ein Beispiel für die Antwort auf die Referenzfrage der Studiensitzung. Mit Python.
Achten Sie beim Erstellen einer Bildmaske mit Numpy auf den Typ
Ich habe versucht, die Lernfunktion im neuronalen Netzwerk sorgfältig zu verstehen, ohne die Bibliothek für maschinelles Lernen zu verwenden (erste Hälfte).