Zufälliges Beschneiden und Spiegeln in konvolutionellen neuronalen Netzen

8

In einer Reihe von Forschungsberichten, die ich über Convolutional Neural Networks (CNN) gelesen habe, sehe ich, dass Menschen zufällig eine quadratische Region (z. B. 224x224) aus den Bildern zuschneiden und sie dann nach dem Zufallsprinzip horizontal spiegeln. Warum wird dieses zufällige Zuschneiden und Umdrehen durchgeführt? Warum schneiden Menschen immer auch eine quadratische Region? Können CNNs nicht in rechteckigen Regionen arbeiten?

    
chronosynclastic 29.09.2015, 11:06
quelle

2 Antworten

15

Dies wird als Datenerweiterung bezeichnet. Indem Sie Transformationen auf die Trainingsdaten anwenden, fügen Sie synthetische Datenpunkte hinzu. Dadurch wird das Modell zusätzlichen Variationen ausgesetzt, ohne dass weitere Daten gesammelt und kommentiert werden müssen. Dies kann dazu führen, dass die Überanpassung reduziert und die Verallgemeinerungsfähigkeit des Modells verbessert wird.

Die Intuition hinter Spiegeln eines Bildes besteht darin, dass ein Objekt gleichermaßen als Spiegelbild erkennbar sein soll. Beachten Sie, dass das horizontale Spiegeln häufig verwendet wird. Vertikal spiegeln ist nicht immer sinnvoll, aber das hängt von den Daten ab.

Die Idee hinter cropping ist, den Beitrag des Hintergrunds in der CNN-Entscheidung zu reduzieren. Das ist nützlich, wenn Sie Etiketten haben, um zu lokalisieren, wo sich Ihr Objekt befindet. Dadurch können Sie Umgebungsregionen als negative Beispiele verwenden und einen besseren Detektor erstellen. Zufälliges Zuschneiden kann auch als Regularizer fungieren und basiert Ihre Klassifikation auf dem Vorhandensein von Teilen des Objekts, anstatt alles auf ein sehr unterschiedliches Merkmal zu fokussieren, das nicht immer vorhanden sein kann.

  

Warum beschneiden Leute immer eine quadratische Region?

Dies ist keine Einschränkung von CNNs. Es könnte eine Einschränkung einer bestimmten Implementierung sein. Oder von Entwurf, weil die Annahme einer quadratischen Eingabe zur Optimierung der Implementierung für die Geschwindigkeit führen kann. Ich würde nicht allzu viel darüber lesen.

CNNs mit variabler Eingabe und fester Eingabe:

Dies ist nicht speziell zum Zuschneiden auf ein Quadrat, sondern allgemeiner gesagt, warum die Eingabe manchmal in der Größe verändert / beschnitten / verzerrt wird, bevor sie in ein CNN eingegeben wird:

Beachten Sie, dass beim Entwerfen eines CNN entschieden werden muss, ob Eingaben mit variabler Größe unterstützt werden sollen oder nicht. Faltungsoperationen, Pooling und Nichtlinearitäten funktionieren für alle Eingabemaße. Wenn Sie jedoch CNNs zum Lösen der Bildklassifizierung verwenden, erhalten Sie normalerweise eine (n) vollständig verbundene (n) Schicht (en) wie die logistische Regression oder MLP. Die vollständig verbundene Schicht ist, wie der CNN einen Ausgangsvektor mit fester Größe erzeugt. Der Ausgang fester Größe kann den CNN auf einen Eingang fester Größe beschränken.

Es gibt definitiv Problemumgehungen, um Eingaben mit variabler Größe zu ermöglichen und dennoch eine Ausgabe fester Größe zu erzeugen. Am einfachsten ist es, eine Faltungsschicht zu verwenden, um eine Klassifizierung über regulären Patches in einem Bild durchzuführen. Diese Idee gibt es schon seit einiger Zeit. Die Absicht dahinter war, mehrere Vorkommen von Objekten in dem Bild zu erkennen und jedes Auftreten zu klassifizieren. Das früheste Beispiel, das mir einfällt, ist die Arbeit von Yann LeCuns Gruppe in den 1990ern, gleichzeitig Ziffern in einer Zeichenkette zu klassifizieren und zu lokalisieren . Dies wird als Drehen eines CNN mit vollständig verbundenen Schichten in ein vollständig konnektives Netzwerk bezeichnet. Die neuesten Beispiele für vollkonvolutionäre Netzwerke werden angewendet, um semantische Segmentierung zu lösen und jedes Pixel in einem Bild zu klassifizieren . Hier ist es erforderlich, eine Ausgabe zu erzeugen, die den Dimensionen des Eingangs entspricht. Eine andere Lösung besteht darin, das globale Pooling am Ende eines CNN zu verwenden, um Feature-Maps variabler Größe in Ausgaben fester Größe zu konvertieren. Die Größe des Pooling-Fensters entspricht der Feature-Map, die vom letzten Conv berechnet wurde. Ebene.

    
ypx 29.09.2015, 12:40
quelle
1

@ypx gibt bereits eine gute Antwort darauf, warum Datenerweiterung benötigt wird. Ich werde mehr Informationen darüber geben, warum Menschen quadratische Bilder fester Größe als Eingabe verwenden.

Warum Eingabebild mit fester Größe?

Wenn Sie grundlegendes Wissen über konvolutionelle neuronale Netzwerke haben, werden Sie wissen, dass es für Faltungs-Pooling-Layer und Nicht-Linearitäts-Layer gut ist, dass die Eingabebilder eine variable Größe haben. Neuronale Netzwerke haben normalerweise vollständig verbundene Schichten als Klassifizierer, das Gewicht zwischen den letzten Conv-Schichten und der ersten vollständig verbundenen Schicht ist festgelegt. Wenn Sie ein Eingabebild mit variabler Netzwerkgröße eingeben, tritt ein Problem auf, da die Größe und das Gewicht der Feature-Map nicht übereinstimmen. Das ist einer der Gründe, warum ein Eingabebild mit fester Größe verwendet wird.

Ein weiterer Grund ist, dass durch die Festlegung der Bildgröße die Trainingszeit neuronaler Netzwerke reduziert werden kann. Dies liegt daran, dass die meisten (wenn nicht alle) Deep-Learning-Pakete geschrieben werden, um einen Stapel von Bildern im Tensorformat (normalerweise in Form (N, C, H, W)) zu verarbeiten, N ist die Batchgröße, C ist die Kanalnummer, H und W sind Breite und Höhe des Bildes). Wenn Ihre Eingabebilder keine feste Größe haben, können Sie sie nicht in einen Stapel packen. Auch wenn das Netzwerk ein Eingabebild mit variabler Größe verarbeiten kann, müssen Sie immer noch 1 Bild gleichzeitig eingeben. Dies ist langsamer im Vergleich zur Stapelverarbeitung.

Können wir Eingabebilder mit variabler Größe verwenden?

Ja, solange Sie einen Eingang mit fester Größe für vollständig verbundene Ebenen erstellen können, spielt die Größe des Eingabebilds keine Rolle. Eine gute Wahl ist das adaptive Pooling, bei dem Feature-Maps mit festen Ausgaben aus Feature-Maps mit variabler Größe erstellt werden. Im Moment bietet PyTorch zwei adaptive Pooling-Layer für Bilder, nämlich AdaptiveMaxPool2d und AdaptiveAvgPool2d . Sie können Layer verwenden, um ein neuronales Netzwerk aufzubauen, das Eingabebilder variabler Größe akzeptieren kann.

    
jdhao 12.11.2017 14:09
quelle