Classification de la couverture terrestre à l'aide de l'eo-learn. 3e partie

Lorsque vous avez besoin de meilleurs résultats que satisfaisants


Partie 1
2e partie



La transition de la zone de l'hiver à l'été est composée d'images Sentinel-2. Vous pouvez remarquer quelques différences dans les types de couverture dans la neige, qui ont été décrites dans un article précédent.


Préface


Les deux dernières semaines ont été très difficiles. Nous avons publié les première et deuxième parties de nos articles sur la classification de la couverture sur l'ensemble du pays en utilisant le cadre eo-learn . eo-learn est une bibliothèque open source pour créer une couche entre la réception et le traitement d'images satellites et l'apprentissage automatique. Dans les articles précédents des exemples, nous n'avons indiqué qu'un petit sous-ensemble des données et montré les résultats uniquement sur un petit pourcentage de l'ensemble de la zone d'intérêt (AOI - zone d'intérêt). Je sais que cela semble au moins pas très impressionnant, et peut-être très grossier de notre part. Pendant tout ce temps, vous avez été tourmenté par des questions sur la façon dont vous pouvez utiliser ces connaissances et les transférer au niveau suivant .


Ne vous inquiétez pas, c'est à cela que sert le troisième article de cette série! Prenez une tasse de café et asseyez-vous ...


Toutes nos données vous appartiennent!


Êtes-vous déjà assis? Peut-être laisser le café sur la table pendant une seconde, car maintenant vous entendrez les meilleures nouvelles pour aujourd'hui ...
Chez Sinergise, nous avons décidé de publier l'ensemble complet de données pour la Slovénie pour 2017. Gratuitement. Vous pouvez accéder librement à 200 Go de données sous la forme de ~ 300 fragments d'EOPatch, chacun d'environ 1000x1000, dans une résolution de 10m! Vous pouvez en savoir plus sur le format EOPatch dans le dernier article sur l' eo-learn , mais en fait c'est un conteneur pour les données géo-temporelles EO (Observation de la Terre) et non-EO: par exemple, les images satellites, les masques, les cartes, etc.



Structure EOPatch )


Nous n'avons pas piraté lorsque nous avons téléchargé ces données. Chaque EOPatch contient des images Sentinel-2 L1C, leur masque s2cloudless correspondant et la carte officielle de la couverture terrestre au format raster!


Les données sont stockées sur AWS S3 à: http://eo-learn.sentinel-hub.com/


La désérialisation d'un objet EOPatch est assez simple:


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

Par conséquent, vous obtenez un objet de la structure suivante:


 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 ) 

L'accès aux différents attributs EOPatch est le suivant:


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

EOExecute Order 66


Génial, les données se chargent. Pendant que nous attendons l'achèvement de ce processus, examinons les capacités d'une classe qui n'a pas encore été discutée dans ces articles - EOExecutor . Ce module est engagé dans l'exécution et la surveillance du pipeline et permet d'utiliser le multi-threading sans efforts inutiles. Plus de recherches sur Stack Overflow pour savoir comment paralléliser correctement le pipeline ou comment faire fonctionner la barre de progression dans ce mode - nous avons déjà tout fait pour vous!


En outre, il gère les erreurs qui se produisent et peut générer un bref résumé du processus d'exécution. Ce dernier est le moment le plus important pour être sûr de la répétabilité de vos résultats à l'avenir, afin que l'utilisateur n'ait pas à passer un temps de travail précieux à rechercher les paramètres qu'il a utilisés jeudi dernier à 9h après une nuit entière de réjouissances (ne mélangez pas alcool et programmation ça vaut le coup!). Cette classe est également capable de générer un joli graphique de dépendance pour le pipeline, que vous pouvez montrer à votre patron!



Graphique de dépendance de pipeline généré par eo-learn


Expériences d'apprentissage automatique


Comme promis, cet article est principalement destiné à étudier différents modèles avec eo-learn utilisant les données que nous avons fournies. Ci-dessous, nous avons préparé deux expériences où nous étudions l'effet des nuages ​​et différents algorithmes de rééchantillonnage pendant l'interpolation temporelle sur le résultat final. Après tout cela, nous commencerons à travailler avec les réseaux de convolution (CNN) et comparerons les résultats de deux approches - l'analyse pixel par pixel de l'arbre de décision et l'apprentissage en profondeur à l'aide de réseaux de neurones convolutionnels.


Malheureusement, on ne peut pas donner une réponse sans ambiguïté quant aux décisions à prendre lors des expériences. Vous pouvez étudier le sujet plus en profondeur et faire des hypothèses afin de décider si le jeu en vaut la chandelle, mais en fin de compte, le travail se résumera à des essais et des erreurs.


Jouez avec les nuages


Les nuages ​​sont une énorme douleur dans le monde de l'OE, en particulier en ce qui concerne les algorithmes d'apprentissage automatique, où vous souhaitez les déterminer et les supprimer de l'ensemble de données pour une interpolation basée sur des valeurs manquantes. Mais quel est le bénéfice de cette procédure? Est-ce que ça vaut le coup? Rußwurm et Körner, dans leur article Classification multi-temporelle de la couverture terrestre avec encodeurs récurrents séquentiels, ont même montré que pour l'apprentissage en profondeur, le processus de filtrage des nuages ​​est probablement absolument sans importance, car le classificateur lui-même est capable de détecter les nuages ​​et de les ignorer.



Activation de la couche d'entrée (en haut) et de la couche de modulation (en bas) dans la séquence d'images d'un fragment spécifique pour un réseau neuronal. Vous remarquerez peut-être que ce fragment de réseau a appris à créer des masques cloud et à filtrer les résultats obtenus. (Page 9 sur https://www.researchgate.net/publication/322975904_Multi-Temporal_Land_Cover_Classification_with_Sequential_Recurrent_Encoders )


Nous rappelons brièvement la structure de l'étape de filtrage des données (pour plus de détails, voir [article précédent] ()). Après avoir pris des instantanés Sentinel-2, nous commençons à filtrer les instantanés cloud. Toutes les images dans lesquelles le nombre de pixels non nuageux ne dépasse pas 80% sont soumises au filtrage (les valeurs de seuil peuvent différer selon les zones d'intérêt). Après cela, pour obtenir des valeurs de pixels sur des jours arbitraires, des masques de nuage sont utilisés afin de ne pas prendre en compte ces données.


Au total, quatre comportements sont possibles:


  1. avec filtre d'image, donné des masques de nuages
  2. pas de filtre d'instantané, compte tenu des masques de cloud
  3. avec filtre d'image, à l'exclusion des masques de nuage
  4. sans filtre d'image, à l'exclusion des masques de nuage


Affichage visuel de la pile d'images du satellite Sentinel-2. Les pixels transparents à gauche signifient des pixels manquants en raison de la couverture nuageuse. La pile centrale affiche les valeurs des pixels après avoir filtré les images et les interpoler avec un masque de nuage (cas 4), et la pile de droite montre le résultat de l'interpolation dans le cas sans filtrer les images et sans masques de nuage (1). (Notez la piste - apparemment, l'article contient une faute de frappe, et c'était le contraire - cas 1 au centre et 4 à droite).


Dans le dernier article, nous avons déjà effectué une variation du cas 1 et montré les résultats, nous allons donc les utiliser pour la comparaison. Préparer d'autres convoyeurs et former le modèle semble être une tâche simple - il vous suffit de vous assurer que nous comparons les valeurs correctes. Pour ce faire, il suffit de prendre le même ensemble de pixels pour entraîner et valider le modèle.


Les résultats sont présentés dans le tableau ci-dessous. Vous pouvez voir qu'en général, l'influence des nuages ​​sur le résultat du modèle est assez faible! Cela peut être dû au fait que la carte de référence est de très bonne qualité et que le modèle est capable d'ignorer la plupart des images. Dans tous les cas, ce comportement ne peut être garanti pour aucun AOI, alors prenez le temps de jeter cette étape hors de vos modèles!


ModèlePrécision [%]F_1 [%]
Pas de filtres, pas de masque92,892,6
Pas de filtres, avec masque94,293,9
Avec filtre, sans masque94,093,8
Avec filtre, avec masque94,494,1

L'impact des différentes approches de rééchantillonnage


Le choix des options de rééchantillonnage temporel n'est pas évident. D'une part, nous avons besoin d'un tableau détaillé d'images qui montrent bien les détails des images source - nous voulons inclure le nombre d'images le plus proche possible des données source. D'un autre côté, nous sommes limités par les ressources informatiques. La réduction de l'étape de rééchantillonnage double le nombre de trames après interpolation et augmente ainsi le nombre d'attributs utilisés dans la formation. Une telle amélioration vaut-elle le coût des ressources? C'est ce que nous devons découvrir.


Pour cette expérience, nous utiliserons la variante 1 de l'étape précédente. Après interpolation, nous rééchantillonnons avec les variations suivantes:


  1. Rééchantillonnage uniforme avec un intervalle de 16 jours
  2. Rééchantillonnage uniforme avec un intervalle de 8 jours
  3. Le choix des "meilleures" dates, le nombre coïncide avec le cas 2.

L'échantillon dans le cas 3 est basé sur le plus grand nombre de dates communes pour tous les EOPatch dans la zone d'intérêt sélectionnée

Le graphique montre le nombre de fragments EOPatch qui contiennent des données pour chaque jour de 2017 (bleu). Les lignes rouges indiquent les dates optimales pour le rééchantillonnage, qui sont basées sur les dates des images Sentinel-2 pour l'AOI 2017 donné.


En regardant le tableau ci-dessous, vous pouvez voir que les résultats ne sont pas très impressionnants, comme par le passé. Pour les cas 2 et 3, le temps passé double, mais la différence avec l'approche initiale est inférieure à 1%. Ces améliorations sont trop discrètes pour une utilisation pratique, nous pouvons donc considérer l'intervalle de 16 jours adapté à la tâche.


ModèlePrécision [%]F_1 [%]
Uniformément tous les 16 jours94,494,1
Uniformément tous les 8 jours94,594,3
Choisir les meilleures dates94,694,4

Résultats de la précision globale et de la F1 pondérée pour différents pipelines avec un changement dans l'approche du rééchantillonnage.


Deep Learning: Utilisation du réseau neuronal convolutif (CNN)


L'apprentissage en profondeur est devenu l'approche standard pour de nombreuses tâches, telles que la vision par ordinateur, le traitement de texte en langage naturel et le traitement du signal. Cela est dû à leur capacité à extraire des modèles à partir d'entrées multidimensionnelles complexes. Les approches classiques d'apprentissage automatique (comme les arbres de décision) ont été utilisées dans de nombreuses tâches de géodonnées temporelles. Les réseaux convolutifs, d'autre part, ont été utilisés pour analyser la corrélation spatiale entre les images adjacentes. Fondamentalement, leur utilisation se limitait à travailler avec des images uniques.


Nous voulions étudier l'architecture des modèles d'apprentissage profond et essayer d'en choisir une capable d'analyser à la fois les aspects spatiaux et temporels des données satellitaires.


Pour ce faire, nous avons utilisé Netvork temporel entièrement convolutionnel, TFCN, ou plutôt l'expansion temporelle vers U-Net, implémentée dans TensorFlow. Plus précisément, l'architecture utilise des corrélations spatio-temporelles pour améliorer le résultat. Un avantage supplémentaire est que la structure du réseau vous permet de mieux représenter les relations spatiales à différentes échelles grâce au processus de codage / décodage dans U-net. Comme dans les modèles classiques, en sortie, nous obtenons une matrice bidimensionnelle d'étiquettes, que nous comparerons avec la vérité.



Nous avons utilisé le modèle entraîné pour prédire les marques sur l'ensemble de test, et les valeurs obtenues ont été vérifiées avec la vérité. Dans l'ensemble, la précision était de 84,4% et F1 était de 85,4%.



Comparaison de différentes prédictions pour notre tâche. Image visuelle (en haut à gauche), vraie carte de référence (en haut à droite), prédiction du modèle LightGBM (en bas à gauche) et prédiction U-net (en bas à droite)


Ces résultats ne montrent que le travail initial sur ce prototype, qui n'est pas hautement optimisé pour la tâche en cours. Malgré cela, les résultats concordent avec certaines statistiques obtenues dans la région. Pour libérer le potentiel d'un réseau neuronal, il est nécessaire d'optimiser l'architecture (ensemble d'attributs, la profondeur du réseau, le nombre de circonvolutions), ainsi que de définir des hyper paramètres (vitesse d'apprentissage, nombre d'époques, pondération de classe). Nous nous attendons à approfondir ce sujet (ha ha) encore plus, et prévoyons de distribuer notre code lorsqu'il sera sous une forme acceptable.


D'autres expériences


Vous pouvez trouver de nombreuses façons d'améliorer vos résultats actuels, mais nous ne pouvons ni les trier ni les essayer tous. C'est à ce moment que vous apparaissez sur la scène! Montrez ce que vous pouvez faire avec cet ensemble de données et aidez-nous à améliorer les résultats!


Par exemple, un de nos collègues dans un proche avenir sera engagé dans la classification de la couverture basée sur la pile temporelle d'images individuelles à l' aide de réseaux de convolution. L'idée est que certaines surfaces, par exemple artificielles, peuvent être distinguées sans caractéristiques temporelles - assez spatiales. Nous serons heureux d'écrire un article séparé lorsque ce travail aboutira à des résultats!


Du traducteur


Malheureusement, la partie suivante de cette série d'articles n'est pas sortie, ce qui signifie que les auteurs n'ont pas montré d'exemples de code source avec la construction de U-Net. Comme alternative, je peux vous proposer les sources suivantes:


  1. U-Net: Réseaux convolutionnels pour la segmentation d'images biomédicales - Olaf Ronneberger, Philipp Fischer, Thomas Brox est l'un des articles de base sur l'architecture U-Net qui n'implique pas de données temporelles.
  2. https://eo-learn.readthedocs.io/en/latest/examples/land-cover-map/SI_LULC_pipeline.html - La page de documentation eo-learn, où se trouve (éventuellement) une version plus récente des pipelines de 1.2 parties.
  3. https://github.com/divamgupta/image-segmentation-keras - Un référentiel avec plusieurs réseaux implémentés à l'aide de keras. J'ai quelques questions sur les implémentations (elles sont légèrement différentes de celles décrites dans les articles originaux), mais en général, les solutions sont facilement adaptables à des fins personnelles et fonctionnent assez bien.

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


All Articles