Ich habe kürzlich Fully Convolutional Networks for Semantic Segmentation von Jonathan Long, Evan Shelhamer und Trevor Darrell gelesen. Ich verstehe nicht, was "Dekonvolutionsschichten" tun / wie sie funktionieren.
Der relevante Teil ist
3.3. Upsampling ist eine rückwärts gerichtete Faltung
Eine andere Möglichkeit, Grobausgänge mit dichten Pixeln zu verbinden, ist die Interpolation. Beispielsweise berechnet eine einfache bilineare Interpolation jede Ausgabe aus den nächsten vier Eingaben durch eine lineare Abbildung, die nur von den relativen Positionen der Eingabe- und Ausgabezellen abhängt. In gewisser Weise ist das Upsampling mit dem Faktor eine Faltung mit einem Teilschritt von 1 / f. Solange ganzzahlig ist, ist ein natürlicher Weg zum Upsampling daher die Rückwärtsfaltung (manchmal auch als Entfaltung bezeichnet) mit einem Ausgabeschritt von . Eine solche Operation ist trivial zu implementieren, da sie einfach die Vorwärts- und Rückwärtsdurchläufe der Faltung umkehrt. f f f
Auf diese Weise wird eine Aufwärtsabtastung im Netzwerk für ein Ende-zu-Ende-Lernen durch Rückausbreitung aus dem pixelweisen Verlust durchgeführt.
Es ist zu beachten, dass das Entfaltungsfilter in einer solchen Schicht nicht fest sein muss (z. B. auf bilineares Upsampling), sondern gelernt werden kann. Ein Stapel von Entfaltungsschichten und Aktivierungsfunktionen kann sogar ein nichtlineares Upsampling lernen.
In unseren Experimenten haben wir festgestellt, dass das Upsampling im Netzwerk schnell und effektiv ist, um eine dichte Vorhersage zu erlernen. Unsere beste Segmentierungsarchitektur verwendet diese Ebenen, um zu lernen, die Vorhersage in Abschnitt 4.2 zu verfeinern.
Ich glaube nicht wirklich verstanden zu haben, wie Faltungsschichten trainiert werden.
Ich glaube, ich habe verstanden, dass Faltungsschichten mit einer Kerngröße Filter der Größe lernen . Die Ausgabe einer Faltungsschicht mit der Kernelgröße , den Schritten und Filtern hat die Dimension . Ich weiß jedoch nicht, wie das Lernen von Faltungsschichten funktioniert. (Ich verstehe, wie einfach MLPs mit Gefälle lernen, wenn das hilft).k × k k s ∈ N n Eingangsdim
Wenn ich die Faltungsschichten richtig verstehe, habe ich keine Ahnung, wie dies rückgängig gemacht werden kann.
Könnte mir bitte jemand helfen, die Entfaltungsschichten zu verstehen?
quelle
Antworten:
Deconvolution Layer ist ein sehr unglücklicher Name und sollte eher als transponierte Faltungsschicht bezeichnet werden .
Visuell wird für eine transponierte Faltung mit Schritt Eins und ohne Auffüllung lediglich die ursprüngliche Eingabe (blaue Einträge) mit Nullen (weiße Einträge) aufgefüllt (Abbildung 1).
Im Falle von Schritt zwei und Polstern würde die transponierte Faltung wie folgt aussehen (Abbildung 2):
Weitere (großartige) Visualisierungen der Faltungsarithmetik finden Sie hier .
quelle
Ich denke, eine Möglichkeit, eine wirklich grundlegende Ebene der Faltung zu erreichen, besteht darin, dass Sie K-Filter, die Sie sich als K-Schablonen vorstellen können, über das Eingabebild schieben und K-Aktivierungen erzeugen, die jeweils einen Übereinstimmungsgrad mit einer bestimmten Schablone darstellen . Die umgekehrte Operation davon würde darin bestehen, K Aktivierungen zu nehmen und sie zu einem Vorbild der Faltungsoperation zu erweitern. Die intuitive Erklärung der inversen Operation ist daher grob gesagt eine Bildrekonstruktion, wenn die Schablonen (Filter) und Aktivierungen (der Übereinstimmungsgrad für jede Schablone) gegeben sind, und daher wollen wir auf der intuitiven Grundebene jede Aktivierung durch die Schablonenmaske in die Luft jagen und addieren sie.
Eine andere Möglichkeit zum Verständnis von Deconv besteht darin, die Implementierung der Deconvolution-Schicht in Caffe zu untersuchen (siehe die folgenden relevanten Codebits):
Sie können sehen, dass es in Caffe genau als Backprop für eine reguläre Vorwärtsfaltungsebene implementiert ist (für mich war es offensichtlicher, nachdem ich die Implementierung von Backprop in einer cuDNN-Conv-Ebene mit der mit GEMM implementierten ConvolutionLayer :: Backward_gpu verglichen habe). Wenn Sie also durcharbeiten, wie die Rückübertragung für die regelmäßige Faltung erfolgt, werden Sie verstehen, was auf mechanischer Berechnungsebene geschieht. Die Funktionsweise dieser Berechnung entspricht der im ersten Absatz dieses Klappentextes beschriebenen Intuition.
Um Ihre andere Frage innerhalb Ihrer ersten Frage zu beantworten, gibt es zwei Hauptunterschiede zwischen MLP-Backpropagation (vollständig verbundene Ebene) und Faltungsnetzen:
1) Der Einfluss von Gewichten ist lokalisiert, also finden Sie zuerst heraus, wie Sie Backprop für beispielsweise einen 3x3-Filter ausführen, der mit einem kleinen 3x3-Bereich eines Eingabebilds gefaltet ist und auf einen einzelnen Punkt im Ergebnisbild abgebildet wird.
2) Die Gewichte der Faltungsfilter werden für die räumliche Invarianz geteilt. In der Praxis bedeutet dies, dass im Vorwärtsdurchlauf derselbe 3 × 3-Filter mit den gleichen Gewichten für die Vorwärtsberechnung durch das gesamte Bild mit den gleichen Gewichten gezogen wird, um das Ausgabebild (für diesen bestimmten Filter) zu erhalten. Für Backprop bedeutet dies, dass die Backprop-Verläufe für jeden Punkt im Quellbild über den gesamten Bereich summiert werden, den wir diesen Filter während des Vorwärtsdurchlaufs gezogen haben. Beachten Sie, dass es auch unterschiedliche Verlustrate von x, w und bias gibt, da dLoss / dx rückpropagiert werden muss und dLoss / dw die Aktualisierung der Gewichte ist. w und bias sind unabhängige Eingaben in der Berechnungs-DAG (es gibt keine vorherigen Eingaben), sodass für diese keine Backpropagation erforderlich ist.
quelle
Schritt für Schritt Mathematik, die erklärt, wie die Transponierungsfaltung das 2x-Upsampling mit 3x3-Filter und 2er-Schritten durchführt:
Das einfachste TensorFlow-Snippet zur Validierung der Mathematik:
quelle
Die von Andrej Karpathy zur Stanford CS-Klasse CS231n : Convolutional Neural Networks for Visual Recognition gehörenden Notizen eignen sich hervorragend zur Erklärung von Convolutional Neural Networks.
Das Lesen dieses Dokuments soll Ihnen eine ungefähre Vorstellung geben von:
Diese Folien sind für Deconvolutional Networks.
quelle
Ich habe gerade einen großartigen Artikel von der Theaon-Website zu diesem Thema gefunden [1]:
Einfach ausgedrückt ist eine "transponierte Faltung" eine mathematische Operation unter Verwendung von Matrizen (genau wie eine Faltung), ist jedoch effizienter als die normale Faltungsoperation, wenn Sie von den gefalteten Werten zum Original zurückkehren möchten (entgegengesetzte Richtung). Aus diesem Grund wird in Implementierungen die Faltung bevorzugt, wenn die entgegengesetzte Richtung berechnet wird (dh um viele unnötige 0-Multiplikationen zu vermeiden, die durch die dünne Matrix verursacht werden, die aus dem Auffüllen der Eingabe resultiert).
Image ---> convolution ---> Result
Result ---> transposed convolution ---> "originalish Image"
Manchmal speichern Sie einige Werte entlang des Faltungspfads und verwenden diese Informationen beim "Zurückgehen" erneut:
Result ---> transposed convolution ---> Image
Das ist wahrscheinlich der Grund, warum es fälschlicherweise als "Entfaltung" bezeichnet wird. Es hat jedoch etwas mit der Matrixtransponierung der Faltung (C ^ T) zu tun, daher der passendere Name "transponierte Faltung".
Daher ist es sehr sinnvoll, die Rechenkosten zu berücksichtigen. Sie würden viel mehr für Amazon GPUS bezahlen, wenn Sie die transponierte Faltung nicht verwenden würden.
Lesen und beobachten Sie die Animationen hier sorgfältig: http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#no-zero-padding-unit-strides-transposed
Einige andere relevante Lektüre:
Ich bin auch neu in diesem Bereich und wäre für Feedback oder Korrekturen dankbar.
[1] http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html
[2] http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#transposed-convolution-arithmetic
[3] https://en.wikipedia.org/wiki/Matched_filter
quelle
Wir könnten PCA für die Analogie verwenden.
Bei Verwendung von conv besteht der Vorwärtsdurchlauf darin, die Koeffizienten der Hauptkomponenten aus dem Eingabebild zu extrahieren, und der Rückwärtsdurchlauf (der die Eingabe aktualisiert) besteht darin, die Koeffizienten zu verwenden (den Gradienten von), um ein neues Eingabebild zu rekonstruieren, so dass das Das neue Eingabebild hat PC-Koeffizienten, die besser mit den gewünschten Koeffizienten übereinstimmen.
Bei Verwendung von deconv werden der Vorwärtsdurchlauf und der Rückwärtsdurchlauf umgekehrt. Der Vorwärtsdurchlauf versucht, ein Bild aus PC-Koeffizienten zu rekonstruieren, und der Rückwärtsdurchlauf aktualisiert die PC-Koeffizienten, die für das Bild (den Gradienten) angegeben sind.
Der Dekonv.-Weiterleitungsdurchlauf führt genau die in diesem Beitrag angegebene Berechnung des Konv.-Gradienten durch: http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/
Aus diesem Grund werden in der caffe-Implementierung von deconv (siehe Andrei Pokrovskys Antwort) die Aufrufe backward_cpu_gemm () für den Vorwärtsdurchlauf und forward_cpu_gemm () für den Rückwärtsdurchlauf verwendet.
quelle
Zusätzlich zu David Daos Antwort: Es ist auch möglich, anders herum zu denken. Anstatt sich darauf zu konzentrieren, welche (niedrig aufgelösten) Eingabepixel zum Erzeugen eines einzelnen Ausgabepixels verwendet werden, können Sie sich auch darauf konzentrieren, welche einzelnen Eingabepixel zu welchem Bereich von Ausgabepixeln beitragen.
Dies geschieht in dieser Destillationsveröffentlichung , einschließlich einer Reihe sehr intuitiver und interaktiver Visualisierungen. Ein Vorteil des Denkens in diese Richtung ist, dass das Erklären von Schachbrettartefakten einfach wird.
quelle
Faltungen aus DSP-Sicht
Ich bin etwas spät dran, möchte aber trotzdem meine Sichtweise und Erkenntnisse teilen. Mein Hintergrund ist theoretische Physik und digitale Signalverarbeitung. Insbesondere habe ich Wavelets studiert und Faltungen befinden sich fast in meinem Rückgrat;)
Die Art und Weise, wie Menschen in der Deep Learning-Community über Faltungen sprechen, hat mich ebenfalls verwirrt. Aus meiner Sicht scheint eine richtige Trennung der Anliegen zu fehlen. Ich werde die Deep-Learning-Konvolutionen mit einigen DSP-Tools erklären.
Haftungsausschluss
Meine Erklärungen werden ein wenig handgewellt und nicht streng mathematisch sein, um die Hauptpunkte zu vermitteln.
Definitionen
und
Deep Learning Convolutions nach Teilen
Wie man sieht, ist die transponierte Operation, also der Name.
Verbindung zum Nearest Neighbor Upsampling
dh wir können einen wiederholten Upsampler mit Faktor 2 und eine Faltung mit einem Kernel der Größe 3 durch eine transponierte Faltung mit Kernelgröße 4 ersetzen. Diese transponierte Faltung hat die gleiche "Interpolationskapazität", könnte jedoch besser passende Interpolationen lernen.
Schlussfolgerungen und Schlussbemerkungen
Ich hoffe, ich konnte einige häufige Konvolutionen des Tiefenlernens klären, indem ich sie in die grundlegenden Operationen zerlegte.
Ich habe das Pooling hier nicht behandelt. Dies ist jedoch nur ein nichtlinearer Downsampler und kann auch in dieser Notation behandelt werden.
quelle
Ich hatte große Probleme zu verstehen, was genau in der Zeitung passiert ist, bis ich auf diesen Blog-Beitrag stieß: http://warmspringwinds.github.io/tensorflow/tf-slim/2016/11/22/upsampling-and-image-segmentation -mit-tensorflow-und-tf-slim /
Hier ist eine Zusammenfassung, wie ich verstehe, was in einem 2x-Upsampling passiert:
Informationen aus Papier
Einfaches Beispiel
quelle
Im folgenden Artikel werden Dekonvolutionsschichten erörtert. Sowohl aus architektonischer als auch aus Ausbildungssicht. Dekonvolutionelle Netzwerke
quelle