Verstehen von tf.extract_image_patches zum Extrahieren von Patches aus einem Image

8

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?

    
deeptigp 21.11.2016, 23:38
quelle

2 Antworten

21

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.

    
Neal 22.11.2016, 09:20
quelle
3

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.

    
Ken Shirriff 23.11.2016 05:10
quelle