Wie berechne rezeptive Feld Größe?
Bin ich beim Lesen Papier über die Verwendung von CNN(Convolutional neural network) für die Objekterkennung.
Umfangreiche feature-Hierarchien für eine genaue Objekterkennung und semantische Segmentierung
Hier ist ein Zitat, über das rezeptive Feld:
The pool5 feature map is 6x6x256 = 9216 dimensional. Ignoring boundary effects, each pool5 unit has a receptive field of 195x195 pixels in the original 227x227 pixel input. A central pool5 unit has a nearly global view,
while one near the edge has a smaller, clipped support.
Meine Fragen sind:
- Was ist die definition der rezeptiven Feld?
- Wie Sie berechnen Lage und Größe der rezeptiven Feld?
- Wie können wir berechnen bounding-rect der rezeptiven Feld mit caffe/pycaffe?
- hier ist ein on-line-Rechner von rezeptiven Feld: fomoro.com/tools/receptive-fields
Du musst angemeldet sein, um einen Kommentar abzugeben.
1) Es ist die Größe der Fläche der Pixel, die Auswirkungen auf die Leistung der letzten Gehirnwindung.
2) Für jede Faltung und Bündelung Betrieb, berechnen Sie die Größe der Ausgabe. Nun finden Sie die input-Größe, die Ergebnisse in einer output-Größe von 1x1. Das ist die Größe der rezeptiven Feld
3) brauchen Sie nicht zu verwenden eine Bibliothek, um es zu tun. Für jeden 2x2-pooling wird die Ausgabe der Größe um die Hälfte reduziert wird entlang jeder dimension. Für strided Windungen, die Sie auch teilen Sie die Größe der einzelnen Dimensionen durch die Schrittlänge. Können Sie haben, sich zu rasieren Weg von etwas von der dimension abhängig, wenn Sie Polsterung für Ihren Windungen. Der einfachste Fall ist die Verwendung von padding = floor(kernel size/2), so dass eine Faltung Dosis über keine zusätzlichen Veränderungen auf der Ausgabe-Größe.
Hier ist ein weiterer Weg, um berechnet rezeptive Feld direkt. Stackoverflow unterstützt keine mathematische Formel, für eine besser lesbare version, entnehmen Sie bitte Berechnung Rezeptive Feld von CNN
Des rezeptiven Feldes (RF) $l_k$ layer $k$ ist:
$$ l_k = l_{k-1} + ((f_k - 1) * prod_{i=1}^{k-1}s_i) $$
wo $l_{k-1}$ ist das rezeptive Feld des layer - $k-1$, $f_k$ ist der filter Größe
(Höhe oder Breite, aber vorausgesetzt, Sie sind gleich hier), und $s_i$ ist die Schrittlänge
der layer $i$.
Den oben aufgeführten Formel berechnet rezeptive Feld von unten nach oben (aus der Schicht
1). Intuitiv, RF in der Ebene $k$ deckt $(f_k - 1) * s_{k-1}$ mehr Pixel
relativ mit layer - $k-1$. Jedoch das Inkrement umgesetzt werden muss, um die
erste Schicht, also die Schrittweite ist ein Fakt --- ein Schritt in layer - $k-1$ ist
exponentiell mehr Fortschritte in den unteren Schichten.
Hoffe, das ist hilfreich.
Tensorflow unterstützt nun das rezeptive Feld der Berechnung, indem Sie einfach
tf.contrib.receptive_field
Sehen https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/receptive_field für details.
Wie oben, mit möglicherweise korrekte Berechnung von RF:
Hier ist das python-Skript berechnet den RF-Größe zusätzlich zu der Schrittlänge und der Größe der Ausgabe.
Davon ausgehen, dass wir eine Netzwerk-Architektur, die nur umfassen mehrere convolution-Schichten. Für jede convolution-Schicht, definieren wir ein Quadrat kernel-Größe und eine Dilatation rate. Auch, davon Ausgehen, dass die Schrittlänge ist 1. So können Sie berechnen die rezeptiven Feldes von dem Netzwerk, indem Sie das folgende Stück python-code:
Als ein Beispiel, lassen Sie uns berechnen, das rezeptive Feld (RF) der bekannten DnCNN (Rauschunterdrückung convolutional neural network) [1].
Verwenden Sie das obige Stück code mit der folgenden Eingänge werden zur Berechnung des RF des Netzwerks. (Sie erhalten RF=35).
[1] Zhang, Kai, et al. "Über eine Gauß-denoiser: Passives lernen von deep cnn für Bild-Rauschunterdrückung." IEEE Transactions on Image Processing 26.7 (2017): 3142-3155.