Was sind Entfaltungsschichten?


188

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 fyij
fff
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 Eingangsdimkk×kksNnInput dims2n

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?


3
In dieser Videovorlesung wird Dekonvolution / Upsampling erläutert: youtu.be/ByjaPdWXKJ4?t=16m59s
user199309

6
In der Hoffnung, dass es für jeden nützlich sein könnte, habe ich ein Notizbuch angefertigt , um zu untersuchen, wie Faltung und transponierte Faltung in TensorFlow (0.11) verwendet werden können. Vielleicht helfen einige praktische Beispiele und Abbildungen ein bisschen mehr zu verstehen, wie sie funktionieren.
AkiRoss

1
Für mich gab diese Seite eine bessere Erklärung, die auch den Unterschied zwischen Entfaltung und transponierter Faltung erklärt: towardsdatascience.com/…
T.Antoni

Ist Upsampling nicht eher ein Rückwärts-Pooling als eine rückwärts gestaffelte Faltung, da es keine Parameter hat?
Ken Fehling

Hinweis: Der Name „deconvolutional Schicht“ irreführend ist , weil diese Schicht nicht nicht durchführen Entfaltungs .
user76284

Antworten:


210

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).

Abbildung 1

Im Falle von Schritt zwei und Polstern würde die transponierte Faltung wie folgt aussehen (Abbildung 2):

Figur 2

Weitere (großartige) Visualisierungen der Faltungsarithmetik finden Sie hier .


16
Nur um sicherzugehen, dass ich es verstanden habe: "Deconvolution" ist so ziemlich dasselbe wie "Convolution", aber Sie fügen etwas Polster hinzu? (Um das Bild / wenn s> 1 auch um jedes Pixel)?
Martin Thoma

17
Ja, eine Entfaltungsschicht führt auch eine Faltung durch! Deshalb passt die transponierte Faltung so viel besser als der Name und der Begriff Entfaltung ist tatsächlich irreführend.
David Dao

11
Warum sagen Sie in Abbildung 1 "kein Auffüllen", wenn die Eingabe tatsächlich mit Nullen aufgefüllt ist?
Stas S

8
Übrigens: In TensorFlow heißt es jetzt transponierte Faltung: tensorflow.org/versions/r0.10/api_docs/python/…
Martin Thoma

9
Vielen Dank für diese sehr intuitive Antwort, aber ich bin verwirrt darüber, warum der zweite Fall der 'Schritt zwei'-Fall ist. Er verhält sich genauso wie der erste, wenn der Kernel verschoben wird.
Demonstration

49

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):

DeconvolutionLayer<Dtype>::Forward_gpu
ConvolutionLayer<Dtype>::Backward_gpu
CuDNNConvolutionLayer<Dtype>::Backward_gpu
BaseConvolutionLayer<Dtype>::backward_cpu_gemm

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.

Ich weiß jedoch nicht, wie das Lernen von Faltungsschichten funktioniert. (Ich verstehe, wie einfach MLPs mit Gefälle lernen, wenn das hilft).

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.

(my notation here assumes that convolution is y = x*w+b where '*' is the convolution operation)

7
Ich denke, das ist die beste Antwort auf diese Frage.
kli_nlpr

8
Ich stimme zu, dass dies die beste Antwort ist. Die Top-Antwort enthält hübsche Animationen, aber bis ich diese Antwort gelesen habe, sahen sie für mich wie normale Windungen mit willkürlichem Abstand aus. Oh, wie die Leute von einer Augenweide bewegt werden.
Reii Nakano

1
Stimmen Sie zu, die akzeptierte Antwort hat nichts erklärt. Das ist viel besser.
BjornW

Vielen Dank für Ihre großartige Erklärung. Ich kann momentan nicht herausfinden, wie ich das Backprop richtig mache. Könnten Sie mir dazu bitte einen Hinweis geben?
Bastian

33

Schritt für Schritt Mathematik, die erklärt, wie die Transponierungsfaltung das 2x-Upsampling mit 3x3-Filter und 2er-Schritten durchführt:

Bildbeschreibung hier eingeben

Das einfachste TensorFlow-Snippet zur Validierung der Mathematik:

import tensorflow as tf
import numpy as np

def test_conv2d_transpose():
    # input batch shape = (1, 2, 2, 1) -> (batch_size, height, width, channels) - 2x2x1 image in batch of 1
    x = tf.constant(np.array([[
        [[1], [2]], 
        [[3], [4]]
    ]]), tf.float32)

    # shape = (3, 3, 1, 1) -> (height, width, input_channels, output_channels) - 3x3x1 filter
    f = tf.constant(np.array([
        [[[1]], [[1]], [[1]]], 
        [[[1]], [[1]], [[1]]], 
        [[[1]], [[1]], [[1]]]
    ]), tf.float32)

    conv = tf.nn.conv2d_transpose(x, f, output_shape=(1, 4, 4, 1), strides=[1, 2, 2, 1], padding='SAME')

    with tf.Session() as session:
        result = session.run(conv)

    assert (np.array([[
        [[1.0], [1.0],  [3.0], [2.0]],
        [[1.0], [1.0],  [3.0], [2.0]],
        [[4.0], [4.0], [10.0], [6.0]],
        [[3.0], [3.0],  [7.0], [4.0]]]]) == result).all()

Ich denke, Ihre Berechnung ist hier falsch. Die Zwischenausgabe sollte 3+ 2 * 2 = 7 sein, dann sollte für einen 3x3-Kernel die Endausgabe 7-3 + 1 = 5x5 sein
Alex

Sorry, @Alex, aber ich verstehe nicht, warum die Zwischenausgabe 7 ist. Können Sie das bitte näher erläutern?
andriys

2
@andriys Warum wird in dem von Ihnen gezeigten Bild das Endergebnis beschnitten?
James Bond

28

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:

  • Dekonvolutionelle Netzwerke Matthew D. Zeiler, Dilip Krishnan, Graham W. Taylor und Rob Fergus, Abteilung für Informatik, Courant Institute, New York University

Diese Folien sind für Deconvolutional Networks.


29
Ist es möglich, den Inhalt eines dieser Links in einem kurzen Absatz zusammenzufassen? Die Links könnten für weitere Recherchen nützlich sein, aber im Idealfall sollte eine Stapelaustauschantwort genügend Text enthalten, um die Grundfrage zu beantworten, ohne dass die Site verlassen werden muss.
Neil Slater

Es tut mir leid, aber der Inhalt dieser Seiten ist zu groß, um in einem kurzen Absatz zusammengefasst zu werden.
Azrael

12
Eine vollständige Zusammenfassung ist nicht erforderlich, nur eine Überschrift - z. B. "Ein dekonvolutionelles neuronales Netzwerk ähnelt einem CNN, ist jedoch so trainiert, dass Features in einer verborgenen Schicht verwendet werden können, um die vorherige Schicht zu rekonstruieren (und durch Wiederholung über Ebenen hinweg, eventuell die Die Eingabe kann aus der Ausgabe rekonstruiert werden.) Auf diese Weise kann sie unbeaufsichtigt trainiert werden, um allgemeine Funktionen auf hoher Ebene in einer Problemdomäne zu erlernen - normalerweise Bildverarbeitung eigene Antwort).
Neil Slater

6
Obwohl die Links gut sind, wäre eine kurze Zusammenfassung des Modells in eigenen Worten besser gewesen.
SmallChess

11

Ich habe gerade einen großartigen Artikel von der Theaon-Website zu diesem Thema gefunden [1]:

Die Notwendigkeit für transponierte Windungen ergibt sich im Allgemeinen aus dem Wunsch, eine Transformation in die entgegengesetzte Richtung einer normalen [...] Faltung zu verwenden, um Feature-Maps auf einen höherdimensionalen Raum zu projizieren. dh von einem 4-dimensionalen Raum in einen 16-dimensionalen Raum abbilden, während das Konnektivitätsmuster der Faltung beibehalten wird.

Transponierte Windungen - auch als fraktionierte Windungen bezeichnet - tauschen die Vorwärts- und Rückwärtsgänge einer Windung aus. Um es so auszudrücken: Der Kernel definiert eine Faltung, aber ob es sich um eine direkte Faltung oder eine transponierte Faltung handelt, hängt davon ab, wie die Vorwärts- und Rückwärtsdurchläufe berechnet werden.

Die transponierte Faltungsoperation kann als Gradient einer gewissen Faltung in Bezug auf ihre Eingabe angesehen werden, wie dies in der Praxis üblicherweise der Fall ist.

Schließlich ist zu beachten, dass es immer möglich ist, eine transponierte Faltung mit einer direkten Faltung zu implementieren. Der Nachteil besteht darin, dass der Eingabe normalerweise viele Spalten und Zeilen mit Nullen hinzugefügt werden, was zu einer viel weniger effizienten Implementierung führt.

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:

Die Transponierte (oder allgemeiner die hermitische oder konjugierte Transponierte) eines Filters ist einfach das passende Filter [3]. Dies wird gefunden, indem der Kernel zeitlich umgekehrt und das Konjugat aller Werte genommen wird [2].

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


1
Nit Kommissionierung, aber der Link sollte sein: deeplearning.net/software/theano_versions/dev/tutorial/…
Herbert

1
Ich denke das ist die beste Antwort !!!
kli_nlpr

10

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.


6

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.


5

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

xn={xn}n=={,x1,x0,x1,}

ynxn

(yx)n=k=ynkxk

q=(q0,q1,q2)x=(x0,x1,x2,x3)T

qx=(q1q000q2q1q000q2q1q000q2q1)(x0x1x2x3)

kN

kxn=xnk

kk1

kxn={xn/kn/kZ0otherwise

k=3

3{,x0,x1,x2,x3,x4,x5,x6,}={,x0,x3,x6,}
3{,x0,x1,x2,}={x0,0,0,x1,0,0,x2,0,0,}

k=2

2x=(x0x2)=(10000010)(x0x1x2x3)

und

2x=(x00x10)=(10000100)(x0x1)

k=kT


Deep Learning Convolutions nach Teilen

qx

  • kk(qx)
  • k(kq)x
  • kq(kx)

q(kx)=q(kTx)=(k(q)T)Tx

(q)q

q(kx)=(q1q000q2q1q000q2q1q000q2q1)(10000100)(x0x1)=(q1q200q0q1q200q0q1q200q0q1)T(10000010)T(x0x1)=((10000010)(q1q200q0q1q200q0q1q200q0q1))T(x0x1)=(k(q)T)Tx

Wie man sieht, ist die transponierte Operation, also der Name.

Verbindung zum Nearest Neighbor Upsampling

2(11)xq2(11)qxq=(q0q1q2)

(11)q=(q0q0+q1q1+q2q2),

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.


Hervorragende Antwort. Eine mathematisch / symbolische Perspektive zu nehmen, macht die Dinge oft klarer. Stimmt es, dass der Begriff "Entfaltung" in diesem Zusammenhang mit der bestehenden Terminologie in Konflikt gerät ?
user76284

Es kollidiert nicht wirklich, es macht einfach keinen Sinn. Dekonvolution nur eine Faltung mit Upsampling-Operator. Der Begriff Entfaltung klingt wie eine Art Umkehroperation. Die Rede von einem Inversen ist hier nur im Zusammenhang mit Matrixoperationen sinnvoll. Es multipliziert mit der inversen Matrix und nicht mit der inversen Operation der Faltung (wie Division gegen Multiplikation).
André Bergner

zθx=zzθz=x

θz=xz=(θ)+x

Kurz gesagt, die sogenannte "Entfaltungsschicht" des OP führt tatsächlich keine Entfaltung durch. Es tut etwas anderes (was Sie in Ihrer Antwort beschrieben haben).
user76284

4

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

  • Was ist Upsampling?
  • Was sind die Parameter dieser Faltung?
  • Sind die Gewichte fest oder trainierbar?
    • In dem Artikel heißt es: "Wir initialisieren das 2x-Upsampling zur bilinearen Interpolation, lassen aber zu, dass die Parameter gelernt werden [...]".
    • Die entsprechende Github-Seite gibt jedoch an: "In unseren ursprünglichen Experimenten wurden die Interpolationsschichten auf bilineare Kernel initialisiert und dann gelernt. In Folgeexperimenten und dieser Referenzimplementierung werden die bilinearen Kernel fixiert."
    • → feste gewichte

Einfaches Beispiel

  1. Stellen Sie sich folgendes Eingabebild vor:

Bild eingeben

  1. Fractional Strided Convolutions arbeiten, indem Faktor-1 = 2-1 = 1 Nullen zwischen diese Werte eingefügt werden und dann später Schritt = 1 angenommen wird. So erhalten Sie das folgende 6x6 gepolsterte Bild

gepolstertes Bild

  1. Der bilineare 4x4-Filter sieht so aus. Seine Werte werden so gewählt, dass die verwendeten Gewichte (= alle Gewichte, die nicht mit einer eingefügten Null multipliziert werden) sich zu 1 summieren. Seine drei eindeutigen Werte sind 0,56, 0,19 und 0,06. Darüber hinaus ist das Zentrum des Filters gemäß der Konvention das Pixel in der dritten Reihe und dritten Spalte.

Filter

  1. Wenn Sie den 4x4-Filter auf das aufgefüllte Bild anwenden (mit padding = 'same' und stride = 1), erhalten Sie das folgende 6x6-Bild mit Überabtastung:

Hochskaliertes Bild

  1. Diese Art von Upsampling wird für jeden Kanal einzeln durchgeführt (siehe Zeile 59 in https://github.com/shelhamer/fcn.berkeleyvision.org/blob/master/surgery.py ). Am Ende ist das 2x-Upsampling wirklich eine sehr einfache Größenänderung mit bilinearer Interpolation und Konventionen zum Umgang mit Rändern. 16x oder 32x Upsampling funktioniert meiner Meinung nach ähnlich.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.