Pretraining für die Fernerkundung

Remote Sensing Satellite Data Convolutional Neural Networks Image Segmentation UNet Pretraining Transfer Learning

In diesem Blogbeitrag werde ich eine Reihe von Pretraining-Aufgaben beschreiben, die man entweder einzeln oder in Kombination verwenden kann, um gute "Start"-Gewichte zu erhalten, bevor man ein Modell auf dem eigentlichen gelabelten Datensatz trainiert. 


Typischerweise fallen Fernerkundungsaufgaben unter den Begriff der semantischen Segmentierung, daher sind alle hier beschriebenen Pretraining-Aufgaben für Aufgaben gedacht, die eine Vorhersage für jedes Pixel ausgeben und ein U-Net als Architektur verwenden.

Hintergrund

Die Fernerkundung (Analyse von Satelliten- oder Luftbildern) ist aufgrund der großen Menge an verfügbaren Daten eine großartige Deep Learning-Anwendung. ESAs Archiv an Sentinel-Bildern enthält z.B. ~10PB, was ungefähr 7000 Mal der Größe von ImageNet entspricht!


Leider gibt es hier einen kleinen Haken: Labels für Fernerkundungsbilder sind oft extrem schwierig zu erstellen. Bei unserem Projekt zur Erfassung konvektiver Wolken beispielsweise waren in vielen Fällen Expertenwissen und die Verwendung von externen Radardaten erforderlich, um das Labeling durchzuführen. 


 Eine Möglichkeit, die enorme Menge an ungelabelten Daten zu nutzen, besteht darin, ein Modell auf eine Pretraining-Aufgabe zu trainieren, für die wir leicht Labels generieren können. Hoffentlich kann unser neuronales Netzwerk dadurch Features lernen, die auch für die Hauptaufgabe, an der wir interessiert sind, nützlich sind. Dieser Ansatz wird auch als Transfer-Lernen bezeichnet.

Image Inpainting

Hier blocken wir zufällig Blöcke eines Bildes aus und versuchen, ihren Inhalt vorherzusagen.


Ich habe ein Beispiel für die Ausgabe eines Modells beigefügt. Dieses wurde mit einer Kombination aus L1 und Adversarial Loss unter Verwendung von 50 zufällig ausgewählten Sentinel-2-Überlandbildern trainiert. Das Modell verwendet alle 13 Kanäle sowohl für die Ausgabe als auch für die Eingabe, aber ich habe nur die RGB-Kanäle gezeigt.


Man kann sehen, dass es bei einigen Hintergründen besser abschneidet als bei anderen. Wir könnten dies wahrscheinlich verbessern, indem wir noch mehr Daten herunterladen und mit den Hyperparametern spielen.

Straßensegmentierung

OpenStreetMap ist eine hervorragende Quelle für kostenlose, Open-Source-Geodaten. Die Python-Bibliothek osmnx macht es sehr einfach, sie herunterzuladen und mit ihnen zu arbeiten.


Unten sehen Sie zwei Beispiele von Sentinel 2-Bildkacheln mit hervorgehobenen Straßen.


Der Nachteil hierbei ist, dass die Vollständigkeit von OpenStreeMap weltweit sehr unterschiedlich ist. Sie sollten auch darauf achten, Tunnel aus dem Datenbestand zu entfernen!

Dies ist eine schwer zu erlernende Aufgabe: Die Satellitenbilder sind wolkig, die Straßen haben typischerweise eine Breite von unter 10m (minimale Sentinelgröße 2 Pixel) und OpenStreetMap ist nicht vollständig. Tatsächlich besteht die Gefahr, dass wir uns zu sehr auf die in OpenStreetMap vorhandenen Straßen einstellen, anstatt Straßen im Allgemeinen zu erfassen.

LCLU Segmentierung

Der Kopernikus-Landüberwachungsdienst liefert Rasterdaten zur Landbedeckung/Landnutzung (LCLU) mit 100m Auflösung. Wir können ein Modell trainieren, um eine Segmentierung dieser Daten durchzuführen.


Unten sehen Sie Inputs, Targets und Outputs aus dem Validierungssatz eines Modells, das darauf trainiert ist, die Landbedeckung mit Hilfe von Sentinel-1-Daten vorherzusagen.

Cross-Sensor-Übersetzung

Schließlich können wir mit der Übersetzung zwischen Sentinel-1- und Sentinel-2-Daten unter Verwendung einer CycleGAN-Architektur experimentieren.


Daran arbeiten wir derzeit, daher habe ich noch kein Beispielbild, das ich zeigen könnte. Hoffentlich können wir auf diese Weise gleichzeitig Modelle für Sentinel 1 und Sentinel 2 vortrainieren.

Zukünftige Arbeit

Der wichtigste nächste Schritt besteht darin, die Auswirkung des Pretrainings für diese Aufgaben auf ein reales Problem wie unser ASMSpotter-Projekt rigoros zu bewerten.


In Zukunft würden wir gerne mit weiteren Aufgaben experimentieren. Wir könnten auch das Training für eine große Anzahl von Aufgaben kombinieren, um mithilfe des Reptile-Algorithmus von OpenAI Startgewichte zu lernen, die gut auf neue Aufgaben generalisieren.


Halten Sie Ausschau nach einem zukünftigen Beitrag, der systematische Ergebnisse für die Wirkung dieser Vorübungsaufgaben sowie weitere Aktualisierungen enthält!