Patch-Wise-Training und vollständig Faltungs-Training in einem vollständig Faltungs-Neuronalen Netzwerk

8

In der Arbeit über ein vollständig faltungsorientiertes neuronales Netzwerk erwähnen die Autoren sowohl das Patch-weise Training als auch das vollständig faltungsorientierte Training.

Mein Verständnis für den Aufbau des Trainingssets ist wie folgt:

M*MExtrahieren Sie bei einem gegebenen Bild Unterbilder mit N*N, wobei ( N<M). Die ausgewählten Teilbilder überlappen sich untereinander. Für jeden Stapel im Trainingsprozess können alle Teilbilder für ein bestimmtes Bild oder mehrere Bilder enthalten sein.

Ist mein Verständnis richtig? Was ist dann der Unterschied zwischen Patch-Training und vollständig Faltungs-Training? Ich füge den entsprechenden Abschnitt als Referenz hinzu.

Geben Sie hier die Bildbeschreibung ein

user3125
quelle
Du hast das Recht.
Michael R. Chernick

Antworten:

8

Grundsätzlich nimmt ein vollständig faltungsorientiertes Training das gesamte MxM-Bild auf und erzeugt Ausgaben für alle Teilbilder in einem einzigen ConvNet-Vorwärtsdurchlauf . Das Patchwise-Training schneidet die Teilbilder explizit aus und erzeugt Ausgaben für jedes Teilbild in unabhängigen Vorwärtsdurchläufen . Daher ist ein vollständig gefaltetes Training normalerweise wesentlich schneller als ein Patch-Training.

Für ein vollständig konvolutionäres Training nehmen Sie also folgende Aktualisierungen vor:

  1. Geben Sie das gesamte MxM-Bild (oder mehrere Bilder) ein.
  2. Durch ConvNet drücken -> eine vollständige Karte der Ausgaben erhalten (maximale Größe MxM pro Bild, möglicherweise kleiner)
  3. Nehmen Sie Aktualisierungen vor, indem Sie alle Ausgaben verlieren

Dies ist zwar recht schnell, schränkt jedoch Ihren Trainings-Sampling-Prozess im Vergleich zum Patchwise-Training ein: Sie müssen viele Aktualisierungen am selben Image vornehmen(eigentlich alle möglichen Aktualisierungen für alle Teilbilder) während eines Schrittes Ihres Trainings. Aus diesem Grund schreiben sie, dass ein vollständig faltungsbezogenes Training nur dann mit einem Patchwise-Training identisch ist, wenn jedes Empfangsfeld (auch als Teilbild bezeichnet) eines Bildes in einem Trainingstapel des Patchwise-Trainingsverfahrens enthalten ist (für das Patchwise-Training könnten auch zwei von zehn möglich sein Teilbilder aus Bild A, drei von acht möglichen Teilbildern aus Bild B usw. in einem Stapel). Dann argumentieren sie, dass Sie, wenn Sie nicht alle Ausgaben während des vollständig gefalteten Trainings verwenden, dem Patchwise-Training wieder näher kommen (da Sie nicht alle möglichen Aktualisierungen für alle Teilbilder eines Bildes in einem einzigen Trainingsschritt vornehmen). Sie verschwenden jedoch einen Teil der Berechnung. Auch in Abschnitt 4.4 / Abbildung 5,

Robintibor
quelle
Hallo robintibor, danke für die Antwort. Sie erwähnen, dass "ganzes MxM-Bild (oder mehrere Bilder) eingeben". Meinen Sie damit, dass Sie das gesamte Bild in das Netzwerk einspeisen, ohne Unterbilder zu erstellen, bevor Sie das Netzwerk einspeisen? In der Praxis müssen wir bei einer sehr großen Bildgröße in der Regel zunächst Teilbilder erstellen. Ist mein Verständnis richtig?
user3125
Hi @ user3125 Ja, füttere das gesamte Bild oder normalerweise sogar mehrere Bilder in einem Stapel. Ich denke, es kommt selten vor, dass ein 2D-Bild zu groß ist, um es im Speicher des Netzwerks zu übertragen. Vielleicht müssen Sie die Stapelgröße reduzieren, dh die Anzahl der (vollständigen, nicht sub-) Bilder, die Sie gleichzeitig in das Netzwerk einspeisen Zeit.
Robintibor
Hallo robintibor, danke für die Klarstellung. Mein Szenario ist, dass wir eine begrenzte Anzahl von Bildern (200 ~ 300) mit großer Pixelgröße (980 * 980) haben. Daher denke ich darüber nach, eine große Anzahl kleiner Bilder für Schulungszwecke zu erstellen.
user3125
OK, ich verstehe. Für 980 * 980 dimensionale Bilder und drei Farbkanäle sollten Sie ungefähr 11 MB pro Bild haben, vorausgesetzt, float32 = 4 Byte pro Pixel: (980 * 980 * 3 * 4 Byte) / (1024 ^ 2,0) = 10,9909 MB. Daher sollten mehrere Bilder problemlos auf eine normale GPU passen, aber dann bestimmt Ihre Netzwerkstruktur (Anzahl der Filter, Anzahl der Ebenen, beim Downsampling usw.), wie viel Speicher für einen gesamten Vorwärts-Rückwärts-Durchgang verwendet wird. Ich schlage vor, ganze Bilder durch das Netzwerk zu schieben und die Stapelgröße (Anzahl der gleichzeitig verarbeiteten Bilder) zu
erhöhen,