2016-10-02 6 views
14

Kann die Keras Eingabebilder mit unterschiedlicher Größe verarbeiten? Zum Beispiel können im vollständig konvolutionellen neuralen Netzwerk die Eingabebilder eine beliebige Größe haben. Allerdings müssen wir die Eingabeform angeben, wenn wir ein Netzwerk von Keras erstellen. Wie können wir Keras verwenden, um mit verschiedenen Eingabegrößen umzugehen, ohne die Eingabebilder auf die gleiche Größe zu skalieren? Danke für jede Hilfe.Kann Can Keras Eingabebilder mit unterschiedlicher Größe behandeln?

Antwort

9

Das Implementieren beliebig großer Eingangsarrays mit den gleichen Rechenkernen kann viele Herausforderungen mit sich bringen - z. Auf einer GPU müssen Sie wissen, wie viel Puffer zu reservieren sind und wie wenig Sie Ihre Schleifen abwickeln müssen. Dies ist der Hauptgrund, warum Keras konstante Eingabeformen benötigt, Eingaben mit variabler Größe sind zu schmerzhaft.

Dies tritt häufiger bei der Verarbeitung von Sequenzen variabler Länge wie Sätze in NLP. Der übliche Ansatz ist eine obere Grenze auf die Größe (und zuschneiden längere Sequenzen), und dann Pad die Sequenzen mit Nullen bis zu dieser Größe.

(Sie können auch auf Nullwerte Maskierung umfassen Berechnungen auf den gepolsterten Bereichen zu überspringen, mit der Ausnahme, dass die Faltungsschichten in Keras möglicherweise nicht noch maskierten Eingänge unterstützen ...)

Ich bin nicht sicher, ob für 3D Datenstrukturen, der Overhead des Auffüllens ist nicht prohibitiv - wenn Sie beginnen, Speicherfehler zu erhalten, besteht die einfachste Problemumgehung darin, die Stapelgröße zu reduzieren. Lassen Sie uns wissen, wie Sie diesen Trick auf Bilder angewendet haben!

16

Ja. Ändern Sie einfach Ihre Eingabeform in Form = (n_channels, Keine, Keine). Dabei steht n_channels für die Anzahl der Kanäle in Ihrem Eingangsbild.

Ich verwende Theano Backend aber so, wenn Sie verwenden tensorflow Sie es ändern könnte müssen (None, None, n_channels)

Sie verwenden sollten:

input_shape = (1, None, None)

Keine in einer Form bezeichnet eine variable Dimension. Beachten Sie, dass nicht alle Layer mit solchen variablen Dimensionen arbeiten, da einige Layer Shape-Informationen (wie Flatten) erfordern. https://github.com/fchollet/keras/issues/1920

Zum Beispiel würde keras funktionale API Ihre Eingangsschicht mit sein:

Für einen RGB-Datensatz

inp = Input(shape=(3,None,None)) 

für einen Grau-Datensatz

inp = Input(shape=(1,None,None)) 
+0

Hallo maz, ich habe genau das gleiche Problem. Kann ich nach meinen Vorschlägen Bilder mit verschiedenen Größen für das Training verwenden, und ähnlich kann ich Segmentierungen für Bilder mit unterschiedlicher Größe vorhersagen. – user288609

+0

Nie versucht Training mit verschiedenen Bildgrößen, aber im Idealfall sollte es funktionieren. In der Vorhersage jedoch habe ich es versucht und es funktioniert (ymmv natürlich). Im schlimmsten Fall müssten Sie Bilder in derselben Größe einspeisen. – maz

Verwandte Themen