Wie gehe ich mit großen Bildern in CNN um?


15

Angenommen, es sind 10K-Bilder der Größe 2400 x 2400 erforderlich, um in CNN verwendet zu werden. Meiner Ansicht nach werden herkömmliche Computer von Nutzen sein, die die Benutzer verwenden. Nun stellt sich die Frage, wie mit so großen Bildgrößen umgegangen werden kann, wenn keine Downsampling-Rechte bestehen.

Hier sind die Systemanforderungen: -

Ubuntu 16.04 64-Bit-RAM 16 GB GPU 8 GB HDD 500 GB

1) Gibt es Techniken, um mit so großen Bildern umzugehen, die trainiert werden müssen?
2) Welche Chargengröße ist angemessen zu verwenden?
3) Gibt es Vorkehrungen, die ich treffen oder die ich in Bezug auf Hardwareressourcen erhöhen oder verringern kann?

Antworten:


14

Nun stellt sich die Frage, wie mit so großen Bildgrößen umgegangen werden kann, wenn keine Downsampling-Rechte bestehen

Ich gehe davon aus, dass die von Ihnen mittlere Verkleinerung des Eingang Abwärtsabtastens bevor es in CNN vorbei. Convolutional Layer ermöglicht das Downsampling des Bildes innerhalb eines Netzwerks durch Auswahl eines großen Schritts, wodurch Ressourcen für die nächsten Layer gespart werden. Genau das muss es tun, sonst passt Ihr Modell nicht in die GPU.

1) Gibt es Techniken, um mit so großen Bildern umzugehen, die trainiert werden müssen?

Häufig skalieren Forschungen die Bilder auf eine vernünftige Größe. Wenn dies jedoch keine Option für Sie ist, müssen Sie Ihr CNN einschränken. Zusätzlich zum Downsampling in frühen Schichten würde ich empfehlen, die FC-Schicht (die normalerweise die meisten Parameter verwendet) zugunsten der Faltungsschicht zu entfernen . Außerdem müssen Sie Ihre Daten in jeder Epoche streamen, da sie nicht in Ihre GPU passen.

Beachten Sie, dass dies nicht die hohe Rechenlast in den frühen Schichten verhindert, da die Eingabe so groß ist: Faltung ist eine teure Operation, und die ersten Schichten führen in jedem Vorwärts- und Rückwärtsdurchlauf eine Menge davon aus. Kurz gesagt, das Training wird langsam sein.

2) Welche Chargengröße ist angemessen zu verwenden?

Hier ist ein weiteres Problem. Ein einzelnes Bild benötigt 2400x2400x3x4(3 Kanäle und 4 Bytes pro Pixel) ~ 70 MB, sodass Sie sich kaum eine Stapelgröße 10 leisten können. Realistischer wäre 5. Beachten Sie, dass der größte Teil des Speichers von CNN-Parametern belegt wird. Ich denke, in diesem Fall ist es sinnvoll, die Größe zu reduzieren, indem Sie 16-Bit-Werte anstelle von 32-Bit verwenden. Auf diese Weise können Sie die Stapel verdoppeln.

3) Gibt es Vorkehrungen, die ich treffen oder die ich in Bezug auf Hardwareressourcen erhöhen oder verringern kann?

Ihr Engpass ist der GPU-Speicher. Wenn Sie sich eine andere GPU leisten können, holen Sie sich diese und teilen Sie das Netzwerk auf. Alles andere ist im Vergleich zum GPU-Speicher unbedeutend.


1
Vielen Dank. Ich bin bereits einigen der Vorschläge gefolgt, die Sie in dieser Antwort gemacht haben. Gute Antwort.
WaterRocket8236

5

Normalerweise werden für Bilder die Pixeldichtewerte als Feature-Set verwendet, was in diesem Fall zu einem ziemlich großen Feature-Set führt. Ein Down-Sampling der Bilder wird ebenfalls nicht empfohlen, da Sie möglicherweise wichtige Daten verlieren (tatsächlich verlieren).

[1] Es gibt jedoch einige Techniken, mit denen Sie die Größe des Feature-Sets reduzieren können. Ansätze wie PCA (Principle Component Analysis) unterstützen Sie bei der Auswahl wichtiger Feature-Teilmengen.

Detaillierte Informationen finden Sie unter http://spark.apache.org/docs/latest/ml-features.html#pca .

[2] Um den Rechenaufwand beim Trainieren Ihres neuronalen Netzwerks zu verringern, können Sie anstelle der herkömmlichen Verwendung des Gradientenabstiegs-Ansatzes den stochastischen Gradientenabstieg verwenden, der die Größe des für das Training in den einzelnen Iterationen erforderlichen Datensatzes verringert. Auf diese Weise würde sich die Größe Ihres Datensatzes, der in einer Iteration verwendet werden soll, verringern und die für das Trainieren des Netzwerks erforderliche Zeit verringern.

Die genaue zu verwendende Chargengröße hängt von Ihrer Verteilung des Trainingsdatensatzes und des Testdatensatzes ab. Eine allgemeinere Verwendung ist 70-30. Wobei Sie auch den oben erwähnten stochastischen Ansatz verwenden können, um die erforderliche Zeit zu reduzieren.

Detail für Stochastic Gradient Descent http://scikit-learn.org/stable/modules/sgd.html

[3] Die Hardware scheint für ein Upgrade geeignet zu sein, dennoch sollten Sie sich bei Bedarf Cloud-Lösungen wie AWS ansehen, bei denen Sie ein kostenloses Kontoabonnement bis zu einer bestimmten Nutzungsgrenze erhalten können.


Danke für die Antwort. Aktualisieren Sie die Antwort, wenn Sie weitere Informationen erhalten.
WaterRocket8236

Vielen Dank für diesen Link auf Stochastic Gradient Descent und willkommen bei AI!
DukeZhou

2

Solche großen Daten können nicht in Ihren Speicher geladen werden. Teilen wir das, was Sie tun können, in zwei Teile auf:

  1. Skalieren Sie alle Ihre Bilder auf kleinere Dimensionen. Sie können sie auf 112 x 112 Pixel skalieren. In Ihrem Fall ist das Zuschneiden nicht erforderlich, da Sie ein quadratisches Bild haben. Sie werden immer noch nicht in der Lage sein, alle diese Bilder auf ein Ziel in Ihren RAM zu laden.

  2. Die beste Option ist die Verwendung einer Generatorfunktion, mit der die Daten stapelweise eingespeist werden. Bitte beziehen Sie sich auf die Verwendung von fit_generator, wie sie in Keras verwendet wird. Wenn Ihre Modellparameter zu groß werden, um in den GPU-Speicher zu passen, sollten Sie die Batch-Normalisierung oder die Verwendung eines Residual-Modells in Betracht ziehen, um die Anzahl der Parameter zu verringern.


3
Warum sollten Sie eine Größe von 112 x 112 Pixel wählen? Es ist keine Potenz von 2 und kein Teiler von 2400.
Andi R

@AndiR. Hier ist das Ding. Wenn es um die Eingabedimension geht, kann man die Größe frei wählen. Dies liegt daran, dass bei Dimensionsinkompatibilitäten im Netzwerk das Problem einfach durch Auffüllen mit Nullen behoben werden kann. Daher gibt es keine feste Methodik für die Größe der Eingabe. Man muss vorsichtig sein, um sicherzustellen, dass zu viel Downsampling die Eingangsqualität nicht beeinträchtigt. Bitte schauen Sie sich dieses Papier an, das die Abmessung 112x112 verwendet. ( cv-foundation.org/openaccess/content_iccv_2015/papers/… )
Rocksyne
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.