Ich habe die folgende Methode tf.extract_image_patches in der Tensorflow-API gefunden , aber ich bin mir nicht sicher über seine Funktionalität.
Sagen Sie batch_size = 1
, und ein Bild hat die Größe 225x225x3
, und wir wollen Patches der Größe 32x32
extrahieren.
Wie genau verhält sich diese Funktion? Insbesondere erwähnt die Dokumentation die Dimension des Ausgangstensors als [batch, out_rows, out_cols, ksize_rows * ksize_cols * depth]
, aber was out_rows
und out_cols
sind, wird nicht erwähnt.
Idealerweise möchte ich bei einem Input Image Tensor der Größe 1x225x225x3
(wobei 1 die Batch-Größe ist) Kx32x32x3
als Ausgabe erhalten, wobei K
die Gesamtzahl der Patches und% co_de ist % ist die Dimension jedes Patches. Gibt es etwas im Tensorflow, das dies bereits erreicht?
So funktioniert die Methode:
ksizes
wird verwendet, um die Abmessungen jedes Patches festzulegen, oder mit anderen Worten, wie viele Pixel jedes Patch enthalten soll. strides
bezeichnet die Länge der Lücke zwischen dem Start eines Patches und dem Start des nächsten fortlaufenden Patches innerhalb des Originalbildes. rates
ist eine Zahl, die im Wesentlichen bedeutet, dass unser Patch um rates
pixel im Originalbild für jedes weitere Pixel springen soll, das in unserem Patch endet. (Das folgende Beispiel veranschaulicht dies.) padding
ist entweder "VALID", was bedeutet, dass jedes Patch vollständig im Image enthalten sein muss, oder "SAME", was bedeutet, dass Patches unvollständig sein dürfen (die restlichen Pixel werden mit Nullen aufgefüllt). Hier ist ein Beispielcode mit Ausgabe, um zu demonstrieren, wie es funktioniert:
%Vor%Ausgabe:
%Vor%So sieht beispielsweise unser erstes Ergebnis folgendermaßen aus:
%Vor% Wie Sie sehen können, haben wir 2 Zeilen und 2 Spalten mit Patches, was out_rows
und out_cols
sind.
Um Neals detaillierte Antwort zu erweitern, gibt es eine Menge Feinheiten mit Null-Padding bei Verwendung von "SAME", da extract_image_patches versucht, die Patches im Bild nach Möglichkeit zu zentrieren. Je nach Schritt kann oben und links ein Padding vorhanden sein oder nicht, und der erste Patch beginnt nicht unbedingt oben links.
Zum Beispiel das vorherige Beispiel erweitern:
%Vor%Bei einem Schritt von n = 1 wird das Bild rundherum mit Nullen aufgefüllt und der erste Patch beginnt mit Auffüllen. Andere Schritte füllen das Bild nur auf der rechten und unteren Seite oder gar nicht auf. Mit einem Schritt von n = 10 startet der einzelne Patch bei Element 34 (in der Mitte des Bildes).
tf.extract_image_patches wird von der Eigenbibliothek implementiert, insbesondere Tensor ImagePatchOp . Sie können diesen Code untersuchen, um genau zu sehen, wie Patch-Positionen und Padding berechnet werden.
Tags und Links python neural-network tensorflow