Klassifizierung der Landbedeckung mittels Eo-Learn. Teil 3

Wenn Sie bessere Ergebnisse als zufriedenstellend benötigen


Teil 1
Teil 2



Der Übergang der Zone vom Winter zum Sommer besteht aus Sentinel-2-Bildern. Sie können einige Unterschiede in den Arten der Abdeckung im Schnee feststellen, die in einem vorherigen Artikel beschrieben wurden.


Vorwort


Die letzten Wochen waren sehr schwierig. Wir haben den ersten und zweiten Teil unserer Artikel über die Klassifizierung der Deckung im ganzen Land unter Verwendung des eo-learn Frameworks veröffentlicht. eo-learn ist eine Open-Source-Bibliothek zum Erstellen einer Ebene zwischen dem Empfangen und Verarbeiten von Satellitenbildern und maschinellem Lernen. In früheren Artikeln in den Beispielen haben wir nur einen kleinen Teil der Daten angegeben und die Ergebnisse nur für einen kleinen Prozentsatz des gesamten Interessenbereichs (AOI - Interessenbereich) gezeigt. Ich weiß, dass dies zumindest nicht sehr beeindruckend und vielleicht sehr unhöflich von unserer Seite aussieht. Während dieser ganzen Zeit wurden Sie von Fragen gequält, wie Sie dieses Wissen nutzen und auf die nächste Ebene übertragen können.


Keine Sorge, dafür ist der dritte Artikel in dieser Reihe gedacht! Nehmen Sie sich eine Tasse Kaffee und nehmen Sie Platz ...


Alle unsere Daten gehören Ihnen!


Sitzen Sie schon Vielleicht lassen Sie den Kaffee noch eine Sekunde auf dem Tisch, denn jetzt hören Sie die besten Nachrichten für heute ...
Wir bei Sinergise haben beschlossen, den vollständigen Datensatz für Slowenien für 2017 zu veröffentlichen. Kostenlos. Sie können frei auf 200 GB Daten in Form von ~ 300 EOPatch-Fragmenten zugreifen, die jeweils ungefähr die Größe von 1000 x 1000 haben und eine Auflösung von 10 m haben! Weitere Informationen zum EOPatch-Format finden Sie im letzten Beitrag zu eo-learn . Tatsächlich handelt es sich jedoch um einen Container für geo-temporale EO- (Earth Observation) und Nicht-EO-Daten: z. B. Satellitenbilder, Masken, Karten usw.



EOPatch-Struktur )


Wir haben nicht gehackt, als wir diese Daten heruntergeladen haben. Jedes EOPatch enthält Sentinel-2 L1C-Bilder, die entsprechende s2cloudless- Maske und die offizielle Landbedeckungskarte im Rasterformat!


Die Daten werden in AWS S3 unter folgender Adresse gespeichert: http://eo-learn.sentinel-hub.com/


Das Deserialisieren eines EOPatch-Objekts ist ganz einfach:


 EOPatch.load('path_to_eopatches/eopatch-0x6/') 

Als Ergebnis erhalten Sie ein Objekt mit folgender Struktur:


 EOPatch( data: { BANDS: numpy.ndarray(shape=(80, 1010, 999, 6), dtype=float32) } mask: { CLM: numpy.ndarray(shape=(80, 1010, 999, 1), dtype=uint8) IS_DATA: numpy.ndarray(shape=(80, 1010, 999, 1), dtype=uint8) IS_VALID: numpy.ndarray(shape=(80, 1010, 999, 1), dtype=bool) } mask_timeless: { LULC: numpy.ndarray(shape=(1010, 999, 1), dtype=uint8) VALID_COUNT: numpy.ndarray(shape=(1010, 999, 1), dtype=int64) } meta_info: { maxcc: 0.8 service_type: 'wcs' size_x: '10m' size_y: '10m' time_difference: datetime.timedelta(-1, 86399) time_interval: (datetime.datetime(2017, 1, 1, 0, 0), datetime.datetime(2017, 12, 31, 0, 0)) } bbox: BBox(((370230.5261411405, 5085303.344972428), (380225.31836121203, 5095400.767924464)), crs=EPSG:32633) timestamp: [datetime.datetime(2017, 1, 1, 10, 4, 7), ..., datetime.datetime(2017, 12, 25, 10, 15, 32)], length=80 ) 

Der Zugriff auf die verschiedenen EOPatch-Attribute ist wie folgt:


 eopatch.timestamp eopatch.mask['LULC'] eopatch.data['CLM'][0] eopatch.data['BANDS'][5][..., [3, 2, 1]] 

EOExecute Order 66


Großartig, die Daten werden geladen. Während wir auf den Abschluss dieses Prozesses warten, werfen wir einen Blick auf die Funktionen einer Klasse, die in diesen Artikeln noch nicht behandelt wurde - EOExecutor . Dieses Modul befasst sich mit der Ausführung und Überwachung der Pipeline und ermöglicht die Verwendung von Multithreading ohne unnötigen Aufwand. Keine Suche mehr im Stapelüberlauf, wie die Pipeline korrekt parallelisiert werden kann oder wie der Fortschrittsbalken in diesem Modus funktioniert - wir haben bereits alles für Sie erledigt!


Darüber hinaus werden auftretende Fehler behandelt und eine kurze Zusammenfassung des Ausführungsprozesses erstellt. Letzteres ist der wichtigste Moment, um die Wiederholbarkeit Ihrer Ergebnisse in Zukunft sicherzustellen, damit der Benutzer keine kostbare Arbeitszeit damit verbringen muss, nach Parametern zu suchen, die er letzten Donnerstag um 9 Uhr nach einer ganzen Nacht voller Feierlichkeiten verwendet hat (mischen Sie keinen Alkohol und keine Programmierung) es lohnt sich!). Diese Klasse kann auch ein schönes Abhängigkeitsdiagramm für die Pipeline erstellen, das Sie Ihrem Chef zeigen können!



Von eo-learn generiertes Pipeline-Abhängigkeitsdiagramm


Experimente zum maschinellen Lernen


Wie versprochen, soll dieser Artikel hauptsächlich verschiedene Modelle mit eo-learn anhand der von uns bereitgestellten Daten untersuchen. Im Folgenden haben wir zwei Experimente vorbereitet, in denen wir die Auswirkung von Wolken und verschiedenen Resampling-Algorithmen während der zeitlichen Interpolation auf das Endergebnis untersuchen. Nach all dem werden wir mit Faltungsnetzwerken (CNN) arbeiten und die Ergebnisse zweier Ansätze vergleichen - Pixel-für-Pixel-Analyse des Entscheidungsbaums und Deep Learning unter Verwendung von Faltungs-Neuronalen Netzen.


Leider kann man keine eindeutige Antwort geben, welche Entscheidungen während der Experimente getroffen werden sollten. Sie können den Themenbereich genauer studieren und Annahmen treffen, um zu entscheiden, ob das Spiel die Kerze wert ist, aber letztendlich wird die Arbeit immer noch auf Versuch und Irrtum hinauslaufen.


Spiel mit den Wolken


Wolken sind ein großer Schmerz in der Welt von EO, insbesondere wenn es um Algorithmen für maschinelles Lernen geht, bei denen Sie sie bestimmen und aus dem Datensatz für die Interpolation basierend auf fehlenden Werten entfernen möchten. Aber wie groß ist der Nutzen dieses Verfahrens? Lohnt es sich? Rußwurm und Körner haben in einem Artikel über die zeitliche Klassifizierung der Landbedeckung mit sequentiellen wiederkehrenden Encodern sogar gezeigt, dass das Verfahren zur Wolkenfilterung für tiefes Lernen wahrscheinlich absolut unwichtig ist, da der Klassifikator selbst Wolken erkennen und ignorieren kann.



Aktivierung der Eingangsschicht (oben) und der Modulationsschicht (unten) in der Folge von Bildern eines bestimmten Fragments für ein neuronales Netzwerk. Möglicherweise stellen Sie fest, dass dieses Netzwerkfragment gelernt hat, Cloud-Masken zu erstellen und die erzielten Ergebnisse zu filtern. (Seite 9 unter https://www.researchgate.net/publication/322975904_Multi-Temporal_Land_Cover_Classification_with_Sequential_Recurrent_Encoders )


Wir erinnern uns kurz an die Struktur des Datenfilterungsschritts (Einzelheiten siehe [vorheriger Artikel] ()). Nachdem wir Sentinel-2-Snapshots erstellt haben, filtern wir Cloud-Snapshots. Alle Bilder, bei denen die Anzahl der nicht trüben Pixel 80% nicht überschreitet, werden überprüft (Schwellenwerte können für verschiedene interessierende Bereiche unterschiedlich sein). Danach werden Wolkenmasken verwendet, um Pixelwerte an beliebigen Tagen zu erhalten, um solche Daten nicht zu berücksichtigen.


Insgesamt sind vier Verhaltensweisen möglich:


  1. mit Bildfilter, gegebene Wolkenmasken
  2. Kein Schnappschussfilter bei Cloud-Masken
  3. mit Bildfilter ohne Wolkenmasken
  4. ohne Bildfilter, ohne Wolkenmasken


Visuelle Anzeige des Bildstapels vom Sentinel-2-Satelliten. Transparente Pixel auf der linken Seite bedeuten fehlende Pixel aufgrund der Wolkendecke. Der mittlere Stapel zeigt die Pixelwerte, nachdem die Bilder gefiltert und mit einer Wolkenmaske interpoliert wurden (Fall 4), und der Stapel rechts zeigt das Interpolationsergebnis in dem Fall ohne Filterung der Bilder und ohne Wolkenmasken (1). (Notizspur - anscheinend enthält der Artikel einen Tippfehler, und es war das Gegenteil gemeint - Fall 1 in der Mitte und 4 rechts).


Im letzten Artikel haben wir bereits eine Variation von Fall 1 durchgeführt und die Ergebnisse gezeigt, sodass wir sie zum Vergleich verwenden werden. Das Vorbereiten anderer Förderer und das Trainieren des Modells klingt nach einer einfachen Aufgabe - Sie müssen nur sicherstellen, dass wir die richtigen Werte vergleichen. Verwenden Sie dazu einfach denselben Pixelsatz, um das Modell zu trainieren und zu validieren.


Die Ergebnisse sind in der folgenden Tabelle aufgeführt. Sie sehen, dass der Einfluss von Wolken auf das Ergebnis des Modells im Allgemeinen recht gering ist! Dies kann daran liegen, dass die Referenzkarte von sehr guter Qualität ist und das Modell die meisten Bilder ignorieren kann. In jedem Fall kann dieses Verhalten für keinen AOI garantiert werden. Nehmen Sie sich also Zeit, um diesen Schritt aus Ihren Modellen herauszuholen!


ModellGenauigkeit [%]F_1 [%]
Keine Filter, keine Maske92.892.6
Keine Filter mit Maske94.293.9
Mit Filter, ohne Maske94.093.8
Mit Filter, mit Maske94.494.1

Die Auswirkungen verschiedener Resampling-Ansätze


Die Wahl der zeitlichen Resampling-Optionen ist nicht offensichtlich. Einerseits benötigen wir eine detaillierte Reihe von Bildern, die die Details der Quellbilder gut darstellen - wir möchten den Quelldaten die nächstmögliche Anzahl von Bildern hinzufügen. Andererseits sind wir durch Rechenressourcen begrenzt. Durch Reduzieren des Resampling-Schritts wird die Anzahl der Frames nach der Interpolation verdoppelt und somit die Anzahl der Attribute erhöht, die im Training verwendet werden. Ist eine solche Verbesserung die Kosten der Ressourcen wert? Das müssen wir herausfinden.


Für dieses Experiment verwenden wir Variation 1 aus dem vorherigen Schritt. Nach der Interpolation werden die folgenden Variationen erneut abgetastet:


  1. Gleichmäßiges Resampling im Abstand von 16 Tagen
  2. Einheitliches Resampling im Abstand von 8 Tagen
  3. Die Wahl der "besten" Daten, die Anzahl stimmt mit Fall 2 überein.

Die Stichprobe in Fall 3 basiert auf der größten Anzahl gemeinsamer Daten für alle EOPatchs in der ausgewählten AOI

Die Grafik zeigt die Anzahl der EOPatch-Fragmente, die Daten für jeden Tag des Jahres 2017 enthalten (blau). Die roten Linien zeigen die optimalen Daten für das Resampling, die auf den Daten der Sentinel-2-Bilder für den angegebenen AOI 2017 basieren.


In der folgenden Tabelle können Sie sehen, dass die Ergebnisse nicht sehr beeindruckend sind, wie in früheren Erfahrungen. In den Fällen 2 und 3 verdoppelt sich der Zeitaufwand, aber der Unterschied zum ursprünglichen Ansatz beträgt weniger als 1%. Solche Verbesserungen sind für die praktische Anwendung zu unauffällig, sodass wir das für die Aufgabe geeignete 16-Tage-Intervall in Betracht ziehen können.


ModellGenauigkeit [%]F_1 [%]
Gleichmäßig alle 16 Tage94.494.1
Gleichmäßig alle 8 Tage94.594.3
Auswahl der besten Daten94.694.4

Ergebnisse der Gesamtgenauigkeit und der gewichteten F1 für verschiedene Pipelines mit einer Änderung des Ansatzes zur erneuten Probenahme.


Deep Learning: Verwenden des Convolutional Neural Network (CNN)


Deep Learning ist zum Standardansatz für viele Aufgaben geworden, wie z. B. Computer Vision, Textverarbeitung in natürlicher Sprache und Signalverarbeitung. Dies liegt an ihrer Fähigkeit, Muster aus komplexen mehrdimensionalen Eingaben zu extrahieren. Klassische Ansätze des maschinellen Lernens (wie Entscheidungsbäume) wurden in vielen zeitlichen Geodatenaufgaben verwendet. Faltungsnetzwerke wurden andererseits verwendet, um die räumliche Korrelation zwischen benachbarten Bildern zu analysieren. Grundsätzlich beschränkte sich ihre Verwendung auf die Arbeit mit einzelnen Bildern.


Wir wollten die Architektur von Deep-Learning-Modellen untersuchen und versuchen, eines auszuwählen, das gleichzeitig räumliche und zeitliche Aspekte von Satellitendaten analysieren kann.


Zu diesem Zweck verwendeten wir Temporal Fully-Convolutional Netvork, TFCN bzw. die in TensorFlow implementierte zeitliche Erweiterung auf U-Net. Insbesondere verwendet die Architektur räumlich-zeitliche Korrelationen, um das Ergebnis zu verbessern. Ein zusätzlicher Vorteil ist, dass Sie dank der Netzwerkstruktur dank des Kodierungs- / Dekodierungsprozesses in U-net räumliche Beziehungen in verschiedenen Maßstäben besser darstellen können. Wie bei den klassischen Modellen erhalten wir am Ausgang eine zweidimensionale Matrix von Beschriftungen, die wir mit der Wahrheit vergleichen werden.



Wir haben das trainierte Modell verwendet, um Markierungen auf dem Testsatz vorherzusagen, und die erhaltenen Werte wurden mit der Wahrheit überprüft. Insgesamt betrug die Genauigkeit 84,4% und F1 85,4%.



Vergleich verschiedener Vorhersagen für unsere Aufgabe. Visuelles Bild (oben links), echte Referenzkarte (oben rechts), LightGBM-Modellvorhersage (unten links) und U-Net-Vorhersage (unten rechts)


Diese Ergebnisse zeigen nur die ersten Arbeiten an diesem Prototyp, der für die aktuelle Aufgabe nicht stark optimiert ist. Trotzdem stimmen die Ergebnisse mit einigen in der Region erhaltenen Statistiken überein. Um das Potenzial eines neuronalen Netzwerks auszuschöpfen, müssen die Architektur (Satz von Attributen, Netzwerktiefe, Anzahl der Faltungen) sowie Hyperparameter (Lerngeschwindigkeit, Anzahl der Epochen, Klassengewichtung) optimiert werden. Wir gehen davon aus, dass wir uns noch eingehender mit diesem Thema befassen (ha ha) und planen, unseren Code zu verteilen, wenn er in akzeptabler Form vorliegt.


Andere Experimente


Sie können viele Möglichkeiten finden, um Ihre aktuellen Ergebnisse zu verbessern, aber wir können sie nicht alle aussortieren oder ausprobieren. In diesem Moment erscheinen Sie auf der Szene! Zeigen Sie, was Sie mit diesem Datensatz tun können, und helfen Sie uns, die Ergebnisse zu verbessern!


In naher Zukunft wird sich beispielsweise einer unserer Kollegen mit der Klassifizierung der Abdeckung anhand des zeitlichen Stapels einzelner Bilder unter Verwendung von Faltungsnetzwerken befassen. Die Idee ist, dass einige Oberflächen, zum Beispiel künstliche, ohne zeitliche Merkmale unterschieden werden können - ziemlich räumlich. Wir werden gerne einen separaten Artikel schreiben, wenn diese Arbeit zu Ergebnissen führt!


Vom Übersetzer


Leider ist der nächste Teil dieser Artikelserie nicht erschienen, was bedeutet, dass die Autoren beim Erstellen von U-Net keine Beispiele für Quellcode gezeigt haben. Alternativ kann ich folgende Quellen anbieten:


  1. U-Net: Faltungsnetzwerke für die biomedizinische Bildsegmentierung - Olaf Ronneberger, Philipp Fischer und Thomas Brox sind einer der grundlegenden Artikel zur U-Net-Architektur, die keine zeitlichen Daten enthalten.
  2. https://eo-learn.readthedocs.io/en/latest/examples/land-cover-map/SI_LULC_pipeline.html - Die eo-learn-Dokumentationsseite, auf der sich (möglicherweise) eine neuere Version von Pipelines mit 1,2 Teilen befindet.
  3. https://github.com/divamgupta/image-segmentation-keras - Ein Repository mit mehreren Netzwerken, die mit Keras implementiert wurden. Ich habe einige Fragen zu Implementierungen (sie unterscheiden sich geringfügig von den in den Originalartikeln beschriebenen), aber im Allgemeinen lassen sich die Lösungen leicht für persönliche Zwecke anpassen und funktionieren recht gut.

Source: https://habr.com/ru/post/de453354/


All Articles