Classification de la couverture terrestre Ă  l'aide de l'eo-learn. Partie 1

Bonjour, Habr! Je vous présente la traduction de l'article " Classification de la couverture terrestre avec eo-learn: Part 1 " par Matic Lubej.


2e partie
3e partie


Préface


Il y a environ six mois, la premiĂšre validation a Ă©tĂ© effectuĂ©e dans le rĂ©fĂ©rentiel eo-learn sur GitHub. Aujourd'hui, eo-learn est devenu une merveilleuse bibliothĂšque open source, prĂȘte Ă  ĂȘtre utilisĂ©e par toute personne intĂ©ressĂ©e par les donnĂ©es EO (Earth Observation - etc. trans.). Tout le monde dans l'Ă©quipe Sinergise attendait le moment de la transition de l'Ă©tape de construction des outils nĂ©cessaires Ă  l'Ă©tape de leur utilisation pour l'apprentissage automatique. Il est temps de vous prĂ©senter une sĂ©rie d'articles concernant la classification de la couverture terrestre Ă  l'aide d' eo-learn



eo-learn est une bibliothÚque Python open source qui agit comme un pont reliant l'observation de la Terre / télédétection à l'écosystÚme des bibliothÚques d'apprentissage automatique Python. Nous avons déjà écrit un article séparé sur notre blog , que nous vous recommandons de vous familiariser avec. La bibliothÚque utilise des primitives des bibliothÚques numpy et numpy pour stocker et manipuler les données des satellites. Pour le moment, il est disponible dans le référentiel GitHub , et la documentation est disponible sur le lien approprié vers ReadTheDocs .



Image satellite Sentinel-2 et masque NDVI d'une petite zone en Slovénie en hiver


Pour dĂ©montrer les capacitĂ©s de l' eo-learn , nous avons dĂ©cidĂ© d'utiliser notre convoyeur multi-temporel pour classer la couverture du territoire de la RĂ©publique de SlovĂ©nie (le pays oĂč nous vivons), en utilisant les donnĂ©es de 2017. La procĂ©dure complĂšte pouvant ĂȘtre trop compliquĂ©e pour un article, nous avons dĂ©cidĂ© de la diviser en trois parties. GrĂące Ă  cela, il n'est pas nĂ©cessaire de sauter les Ă©tapes et de passer immĂ©diatement Ă  l'apprentissage automatique - nous devons d'abord comprendre vraiment les donnĂ©es avec lesquelles nous travaillons. Chaque article sera accompagnĂ© d'un exemple de cahier Jupyter. De plus, pour les personnes intĂ©ressĂ©es, nous avons dĂ©jĂ  prĂ©parĂ© un exemple complet couvrant toutes les Ă©tapes.


  • Dans le premier article, nous vous guiderons Ă  travers la procĂ©dure de sĂ©lection / division d'une zone d'intĂ©rĂȘt (ci-aprĂšs - AOI, zone d'intĂ©rĂȘt) et l'obtention des informations nĂ©cessaires, telles que les donnĂ©es des capteurs satellites et des masques de nuages. Nous montrons Ă©galement un exemple de la façon de crĂ©er un masque raster de donnĂ©es sur la couverture rĂ©elle d'un territoire Ă  partir de donnĂ©es vectorielles. Toutes ces Ă©tapes sont nĂ©cessaires pour obtenir un rĂ©sultat fiable.
  • Dans la deuxiĂšme partie, nous plongons tĂȘte baissĂ©e dans la prĂ©paration des donnĂ©es pour la procĂ©dure d'apprentissage automatique. Ce processus comprend le prĂ©lĂšvement d'Ă©chantillons alĂ©atoires pour la formation \ la validation des pixels, la suppression d'images de nuages, l'interpolation de donnĂ©es temporelles pour remplir des «trous», etc.
  • Dans la troisiĂšme partie, nous considĂ©rerons la formation et la validation du classificateur, ainsi que, bien sĂ»r, de beaux graphismes!


Image satellite Sentinel-2 et masque NDVI d'une petite zone en Slovénie en été


Zone d'intĂ©rĂȘt? Choisissez!


La bibliothĂšque eo-learn vous permet de diviser AOI en petits fragments qui peuvent ĂȘtre traitĂ©s dans des conditions de ressources informatiques limitĂ©es. Dans cet exemple, la frontiĂšre slovĂšne a Ă©tĂ© prise de la Terre naturelle , cependant, vous pouvez sĂ©lectionner une zone de n'importe quelle taille. Nous avons Ă©galement ajoutĂ© un tampon Ă  la frontiĂšre, aprĂšs quoi la dimension AOI Ă©tait d'environ 250x170 km. En utilisant la magie des geopandas et des bibliothĂšques geopandas , nous avons créé un outil pour briser l'AOI. Dans ce cas, nous avons divisĂ© le territoire en 25x17 carrĂ©s de la mĂȘme taille, Ă  la suite de quoi nous avons reçu ~ 300 fragments de 1000x1000 pixels, dans une rĂ©solution de 10m. La dĂ©cision de diviser en fragments est prise en fonction de la puissance de calcul disponible. À la suite de cette Ă©tape, nous obtenons une liste de carrĂ©s couvrant l'AOI.



AOI (territoire de la Slovénie) est divisé en petits carrés d'une taille d'environ 1000x1000 pixels dans une résolution de 10m.


Réception de données des satellites Sentinel


AprĂšs avoir dĂ©terminĂ© les carrĂ©s, eo-learn vous permet de tĂ©lĂ©charger automatiquement les donnĂ©es des satellites Sentinel. Dans cet exemple, nous obtenons toutes les images Sentinel-2 L1C qui ont Ă©tĂ© prises en 2017. Il convient de noter que les produits Sentinel-2 L2A, ainsi que des sources de donnĂ©es supplĂ©mentaires (Landsat-8, Sentinel-1) peuvent ĂȘtre ajoutĂ©s au pipeline de la mĂȘme maniĂšre. Il convient Ă©galement de noter que l'utilisation de produits L2A peut amĂ©liorer les rĂ©sultats de classification, mais nous avons dĂ©cidĂ© d'utiliser L1C pour la polyvalence de la solution. Cela a Ă©tĂ© fait en utilisant sentinelhub-py , une bibliothĂšque qui fonctionne comme un wrapper sur les services Sentinel-Hub. L'utilisation de ces services est gratuite pour les instituts de recherche et les start-ups, mais dans d'autres cas, il est nĂ©cessaire de s'abonner.



Images en couleur d'un fragment Ă  diffĂ©rents jours. Certaines images sont nuageuses, ce qui signifie qu'un dĂ©tecteur de nuages ​​est nĂ©cessaire.


En plus des donnĂ©es Sentinel, eo-learn vous permet d'accĂ©der en toute transparence au cloud et aux donnĂ©es de probabilitĂ© de cloud grĂące Ă  la bibliothĂšque s2cloudless . Cette bibliothĂšque fournit des outils pour dĂ©tecter automatiquement les nuages pixel par pixel . Les dĂ©tails peuvent ĂȘtre lus ici .



Masques de nuage pour les images ci-dessus. La couleur indique la probabilité de trouble d'un pixel spécifique (bleu - faible probabilité, jaune - élevé).


Ajout de données réelles


Enseigner avec un enseignant nĂ©cessite une carte avec des donnĂ©es rĂ©elles ou de la vĂ©ritĂ© . Le dernier terme ne doit pas ĂȘtre pris Ă  la lettre, car en rĂ©alitĂ©, les donnĂ©es ne sont qu'une approximation de ce qui est en surface. Malheureusement, le comportement du classificateur dĂ©pend fortement de la qualitĂ© de cette carte ( cependant, comme pour la plupart des autres tĂąches de l'apprentissage automatique ). Les cartes Ă©tiquetĂ©es sont le plus souvent disponibles sous forme de donnĂ©es vectorielles au format shapefile (par exemple, fournies par l'État ou la communautĂ© ). eo-learn contient des outils pour rasteriser des donnĂ©es vectorielles sous la forme d'un masque raster.



Processus de pixellisation des données en masques à l'aide de l'exemple d'un carré. Les polygones dans un fichier vectoriel sont affichés sur l'image de gauche, les masques raster pour chaque étiquette sont affichés au milieu - les couleurs noir et blanc indiquent la présence et l'absence d'un attribut spécifique, respectivement. L'image de droite montre un masque raster combiné dans lequel différentes couleurs indiquent différentes étiquettes.


Tout mettre ensemble


Toutes ces tĂąches se comportent comme des blocs de construction qui peuvent ĂȘtre combinĂ©s en une sĂ©quence pratique d'actions exĂ©cutĂ©es pour chaque carrĂ©. En raison du nombre potentiellement extrĂȘmement Ă©levĂ© de tels fragments, l'automatisation du pipeline est absolument nĂ©cessaire


 #   eo_workflow = eolearn.core.LinearWorkflow( add_sentinel2_data, #     Sentinel-2 add_cloud_mask, #     append_ndvi, #  NDVI append_ndwi, #  NDWI append_norm, #     add_valid_mask, #     add_count_valid, #  -      *reference_task_array, #        save_task #   ) 

Apprendre Ă  connaĂźtre les donnĂ©es rĂ©elles est la premiĂšre Ă©tape du travail avec des tĂąches de ce type. À l'aide de masques de nuages ​​associĂ©s Ă  des donnĂ©es de Sentinel-2, vous pouvez dĂ©terminer le nombre d'observations de qualitĂ© de tous les pixels, ainsi que la probabilitĂ© moyenne de nuages ​​dans une zone particuliĂšre. GrĂące Ă  cela, vous pouvez mieux comprendre les donnĂ©es existantes et les utiliser lors du dĂ©bogage d'autres problĂšmes.



Image en couleur (à gauche), masque du nombre de mesures de qualité pour 2017 (au centre) et probabilité moyenne de couverture nuageuse pour 2017 (à droite) pour un fragment aléatoire d'AOI.


Quelqu'un pourrait ĂȘtre intĂ©ressĂ© par le NDVI moyen pour une zone arbitraire, ignorant les nuages. À l'aide de masques de nuage, vous pouvez calculer la valeur moyenne de n'importe quelle entitĂ©, en ignorant les pixels sans donnĂ©es. Ainsi, grĂące aux masques, nous pouvons effacer les images du bruit pour presque toutes les fonctionnalitĂ©s de nos donnĂ©es.



NDVI moyen de tous les pixels d'un fragment AOI aléatoire tout au long de l'année. La ligne bleue montre le résultat du calcul obtenu en ignorant les valeurs à l'intérieur des nuages. La ligne orange indique la valeur moyenne lorsque tous les pixels sont pris en compte.


"Mais qu'en est-il de la mise à l'échelle?"


AprÚs avoir installé notre convoyeur en utilisant un exemple d'un fragment, tout ce qui reste à faire est de démarrer automatiquement une procédure similaire pour tous les fragments (en parallÚle, si les ressources le permettent), pendant que vous vous détendez avec une tasse de café et pensez à la taille du patron qui sera agréablement surpris les résultats de votre travail. AprÚs la fin du pipeline, vous pouvez exporter les données qui vous intéressent dans une seule image au format GeoTIFF. Le script gdal_merge.py reçoit les images et les combine, résultant en une image qui couvre tout le pays.



Le nombre de coups corrects pour AOI en 2017. Des rĂ©gions avec un grand nombre d'images sont situĂ©es sur le territoire oĂč se croisent la trajectoire des satellites Sentinel-2A et Sentinel-2B. Au milieu de cela ne se produit pas.


À partir de l'image ci-dessus, nous pouvons conclure que les donnĂ©es d'entrĂ©e sont hĂ©tĂ©rogĂšnes - pour certains fragments, le nombre d'images est deux fois plus Ă©levĂ© que pour d'autres. Cela signifie que nous devons prendre des mesures pour normaliser les donnĂ©es - telles que l'interpolation le long de l'axe du temps.


L'exĂ©cution du pipeline spĂ©cifiĂ© prend environ 140 secondes pour un fragment, ce qui donne au total ~ 12 heures lors du dĂ©marrage du processus tout au long de la zone d'intĂ©rĂȘt. La plupart du temps, il s'agit de tĂ©lĂ©charger des donnĂ©es satellite. Le fragment non compressĂ© moyen avec la configuration dĂ©crite prend environ 3 Go, ce qui donne au total ~ 1 To d'espace pour l'ensemble de l'AOI.


Exemple dans un cahier Jupyter


Pour une introduction plus simple au code eo-learn , nous avons préparé un exemple couvrant les sujets abordés dans cet article. L'exemple est conçu comme un bloc-notes Jupyter, et vous pouvez le trouver dans le répertoire d' exemples du package eo-learn .

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


All Articles