004af3c950a54c2a96962986d52317fa

Machine learning supervisé évolutif sur Open Data Cube

  • Prérequis : cette série de carnets suppose une certaine connaissance de l’apprentissage automatique, des concepts statistiques et de la programmation Python. Les débutants doivent envisager de parcourir les carnets précédents du référentiel deafrica-sandbox-notebooks avant de tenter d’exécuter cette série de carnets.

Aperçu

La classification des images satellites à l’aide de techniques d’apprentissage automatique supervisé (ML) est devenue une pratique courante dans la littérature sur la télédétection. L’apprentissage automatique offre un moyen efficace d’identifier des classes complexes de couverture terrestre de manière relativement efficace. Cependant, la mise en œuvre judicieuse de classificateurs d’apprentissage automatique n’est pas toujours simple en raison des exigences en matière de données de formation, des exigences de calcul et du défi de trier un nombre croissant de bibliothèques de logiciels. Ajoutez à cela la complexité de la gestion de gros volumes de données satellite et la tâche peut devenir difficile à gérer.

Cette série de blocs-notes vise à réduire la difficulté d’exécution de classificateurs d’apprentissage automatique sur l’imagerie satellite en guidant l’utilisateur à travers les étapes nécessaires à la classification des données satellite à l’aide de l’Open Data Cube <https://www.opendatacube.org/>`__ (ODC). Cela se fait de deux manières. Tout d’abord, les étapes critiques d’un flux de travail ML (dans le contexte de l’ODC) sont décomposées en blocs-notes discrets qui sont largement documentés. Et deuxièmement, un certain nombre de fonctions Python personnalisées ont été écrites pour simplifier l’exécution de ML sur l’ODC. Il s’agit notamment (entre autres) de collect_training_data et de predict_xr, tous deux contenus dans le package deafrica_tools.classification. Ces fonctions sont présentées et expliquées plus en détail dans les sections correspondantes des cahiers.

Cette série de blocs-notes comprend quatre notebooks principaux (ainsi qu’un cinquième bloc-notes facultatif), qui représentent chacun une étape critique dans un flux de travail ML.

  1. Extract_training_data.ipynb explique comment extraire des données d’entraînement (couches d’entités) de l’ODC à l’aide de géométries dans un fichier de formes (ou geojson). L’objectif de ce notebook est de familiariser les utilisateurs avec la fonction collect_training_data afin que vous puissiez extraire les données appropriées pour votre cas d’utilisation.

  2. « Inspect_training_data.ipynb » : après avoir extrait les données de formation de l’ODC, il est important d’inspecter les données à l’aide d’un certain nombre de méthodes statistiques pour aider à comprendre si nos couches de fonctionnalités sont utiles pour distinguer les classes.

  3. Evaluate_optimize_fit_classifier.ipynb : à l’aide des données de formation extraites dans le premier bloc-notes, ce notebook évalue d’abord la précision d’un modèle ML donné (à l’aide d’une validation croisée imbriquée en k-fold), effectue une optimisation des hyperparamètres, puis ajuste un modèle sur les données de formation.

  4. Classify_satellite_data.ipynb : c’est ici que nous chargeons les données satellite et les classons à l’aide du modèle créé dans le notebook précédent. Le bloc-notes vous demande d’abord de fournir un certain nombre de petits emplacements de test afin que nous puissions observer visuellement la façon dont le modèle classe les données réelles. La dernière partie du bloc-notes tente de classer une région beaucoup plus vaste.

  5. Object-based_filtering.ipynb : ce bloc-notes est fourni en option. Il vous guide dans la conversion de votre classification basée sur les pixels en une classification basée sur les objets à l’aide de la segmentation d’image.

L’exemple par défaut dans les blocs-notes utilise un ensemble de données d’entraînement contenant des étiquettes « culture » et « non-culture » (étiquetées respectivement 1 et 0 dans le fichier geojson) d’Égypte. Les données d’entraînement sont appelées « crop_training_egypt.geojson » et se trouvent dans le dossier « data/ ». À la fin de cette série de blocs-notes, nous aurons produit un modèle permettant d’identifier les zones de terres cultivées en Égypte et nous générerons un masque de terres cultivées (sous forme de géotiff) pour la région autour de la ville de Faiyum, en Égypte.

Si vous souhaitez commencer à exécuter votre propre flux de travail de classification, la première étape consiste à remplacer ces données d’entraînement par les vôtres dans le bloc-notes « Extract_training_data.ipynb ». Bien entendu, il est préférable de parcourir d’abord l’exemple par défaut pour vous assurer de bien comprendre le contenu avant de modifier les blocs-notes pour votre cas d’utilisation spécifique.

Remarques importantes

  • Il existe de nombreuses méthodes différentes pour exécuter des modèles ML et l’approche utilisée ici peut ne pas convenir à votre propre problème de classification. Cela est particulièrement vrai pour le bloc-notes « Evaluate_optimize_fit_classifier.ipynb », qui a été conçu pour s’adapter aux données d’entraînement par défaut. Il est conseillé de rechercher les différentes méthodes d’évaluation et d’entraînement d’un modèle pour déterminer l’approche qui vous convient le mieux. N’oubliez pas que la première étape de toute recherche scientifique consiste à définir précisément le problème.

  • Le mot « Scalable » dans le titre Scalable ML on the ODC fait référence à l’évolutivité dans les limites de la machine que vous exécutez. Ces notebooks s’appuient sur dask (et dask-ml) pour gérer la mémoire et distribuer les calculs sur plusieurs cœurs. Cependant, les notebooks sont configurés pour fonctionner sur une seule machine. Par exemple, si votre machine dispose de 2 cœurs et de 16 Go de RAM (ce sont les spécifications du Sandbox par défaut), vous ne pourrez alors charger et classer les données que jusqu’à cette limite de 16 Go (et la parallélisation sera limitée à 2 cœurs). L’accès à des machines plus grandes est nécessaire pour étendre les analyses à de très grandes zones. Il est peu probable que vous puissiez utiliser ces notebooks pour classer les données satellites à l’échelle d’un pays à l’aide de machines de la taille d’un ordinateur portable. Pour mieux comprendre comment nous utilisons dask, jetez un œil au dask notebook.

Ressources utiles

  • Il existe de nombreux cours en ligne qui peuvent vous aider à comprendre les fondamentaux de l’apprentissage automatique avec Python, par exemple edX, coursera.

  • La documentation Scikit-learn fournit des informations sur les modèles disponibles et leurs paramètres.

  • Cet article de synthèse fournit un bon aperçu de l’apprentissage automatique dans le contexte de la télédétection.

  • Le notebook autonome, Machine_learning_with_ODC.ipynb, dans le dossier Real_world_examples/ est un élément complémentaire de ces notebooks et fournit une version plus succincte (mais moins descriptive) du flux de travail démontré ici.


Commencer

Pour commencer à travailler sur les blocs-notes de ce flux de travail « Scalable ML sur l’ODC », accédez au premier bloc-notes « Extract_training_data.ipynb ».

  1. Extraire_les_données_de_formation

  2. Inspecter_les_données_de_formation

  3. Évaluer_optimiser_l’ajustement_classificateur

  4. Classifier_les_données_satellites

  5. Filtrage basé sur les objets


Informations Complémentaires

Licence Le code de ce notebook est sous licence Apache, version 2.0 <https://www.apache.org/licenses/LICENSE-2.0>`__.

Les données de Digital Earth Africa sont sous licence Creative Commons Attribution 4.0 <https://creativecommons.org/licenses/by/4.0/>.

Contact Si vous avez besoin d’aide, veuillez poster une question sur le canal Slack DE Africa <https://digitalearthafrica.slack.com/> ou sur le GIS Stack Exchange <https://gis.stackexchange.com/questions/ask?tags=open-data-cube> en utilisant la balise open-data-cube (vous pouvez consulter les questions posées précédemment `ici <https://gis.stackexchange.com/questions/tagged/open-data-

Si vous souhaitez signaler un problème avec ce notebook, vous pouvez en déposer un sur Github.

Version de Datacube compatible

[ ]: