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.
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.
quelle
Solche großen Daten können nicht in Ihren Speicher geladen werden. Teilen wir das, was Sie tun können, in zwei Teile auf:
quelle