Partie 1
3e partie
Passer des données aux résultats sans quitter votre ordinateur

Une pile d'images d'une petite zone en Slovénie, et une carte avec une couverture terrestre classée obtenue en utilisant les méthodes décrites dans l'article.
Préface
La deuxiÚme partie d'une série d'articles sur la classification de la couverture terrestre à l'aide de la bibliothÚque eo-learn. Nous vous rappelons que le premier article a démontré ce qui suit:
- Diviser AOI (zone d'intĂ©rĂȘt) en fragments appelĂ©s EOPatch
- RĂ©ception d'images et de masques de nuages ââprovenant des satellites Sentinel-2
- Calcul d'informations supplémentaires telles que NDWI , NDVI
- Créer un masque de référence et l'ajouter aux données source
De plus, nous avons menĂ© une Ă©tude de surface des donnĂ©es, ce qui est une Ă©tape extrĂȘmement importante avant de commencer une plongĂ©e dans l'apprentissage automatique. Les tĂąches ci-dessus ont Ă©tĂ© complĂ©tĂ©es par un exemple sous la forme d'un cahier Jupyter , qui contient dĂ©sormais des Ă©lĂ©ments de cet article.
Dans cet article, nous terminerons la préparation des données et construirons également le premier modÚle de construction de cartes d'occupation du sol pour la Slovénie en 2017.
Préparation des données
La quantité de code directement liée à l'apprentissage automatique est assez faible par rapport au programme complet. La part du lion du travail consiste à effacer les données, à les manipuler de maniÚre à garantir une utilisation transparente avec le classificateur. Cette partie du travail sera décrite ci-dessous.

Un diagramme de pipeline d'apprentissage automatique qui montre que le code lui-mĂȘme en utilisant ML est une petite fraction de l'ensemble du processus. Source
Filtrage d'images dans le cloud
Les nuages ââsont des entitĂ©s qui apparaissent gĂ©nĂ©ralement Ă une Ă©chelle dĂ©passant notre EOPatch moyen (1000x1000 pixels, rĂ©solution 10m). Cela signifie que tout site peut ĂȘtre complĂštement couvert de nuages ââĂ des dates alĂ©atoires. Ces images ne contiennent pas d'informations utiles et ne consomment que des ressources, nous les ignorons donc en fonction du rapport des pixels valides au nombre total et fixons un seuil. Nous pouvons appeler valides tous les pixels qui ne sont pas classĂ©s comme des nuages ââet qui sont situĂ©s Ă l'intĂ©rieur d'une image satellite. Notez Ă©galement que nous n'utilisons pas les masques fournis avec les images Sentinel-2, car ils sont calculĂ©s au niveau des images complĂštes (la taille de l'image S2 complĂšte est de 10980 Ă 10980 pixels, environ 110 Ă 110 km), ce qui signifie que, pour la plupart, il n'est pas nĂ©cessaire pour notre AOI. Pour dĂ©terminer les nuages, nous utiliserons l'algorithme du paquet s2cloudless pour obtenir un masque de pixels de nuage.
Dans notre bloc-notes, le seuil est fixĂ© Ă 0,8, nous sĂ©lectionnons donc uniquement les images remplies de donnĂ©es normales Ă 80%. Cela peut sembler une valeur assez Ă©levĂ©e, mais comme les nuages ââne sont pas un problĂšme trop important pour notre AOI, nous pouvons nous le permettre. Il convient de noter que cette approche ne peut ĂȘtre appliquĂ©e sans rĂ©flĂ©chir Ă aucun point de la planĂšte, car la zone que vous avez choisie peut ĂȘtre couverte de nuages ââpendant une partie importante de l'annĂ©e.
Interpolation temporelle
En raison du fait que des images peuvent ĂȘtre ignorĂ©es Ă certaines dates, ainsi qu'en raison de dates d'acquisition d'AOI incohĂ©rentes, le manque de donnĂ©es est un phĂ©nomĂšne trĂšs courant dans le domaine de l'observation de la Terre. Une façon de rĂ©soudre ce problĂšme est d'imposer un masque de validitĂ© de pixel (Ă partir de l'Ă©tape prĂ©cĂ©dente) et d'interpoler les valeurs pour "remplir les trous". Ă la suite du processus d'interpolation, les valeurs de pixels manquantes peuvent ĂȘtre calculĂ©es pour crĂ©er un EOPatch qui contient des instantanĂ©s sur des jours uniformĂ©ment rĂ©partis. Dans cet exemple, nous avons utilisĂ© l'interpolation linĂ©aire, mais il existe d'autres mĂ©thodes, dont certaines sont dĂ©jĂ implĂ©mentĂ©es dans eo-learn.

Sur la gauche se trouve une pile d'images Sentinel-2 à partir d'un AOI sélectionné au hasard. Les pixels transparents signifient des données manquantes en raison des nuages. L'image de droite montre la pile aprÚs interpolation, en tenant compte des masques de nuages.
Les informations temporelles sont extrĂȘmement importantes dans la classification de la couverture, et encore plus importantes dans la tĂąche d'identification d'une culture de germination. Tout cela est dĂ» au fait qu'une grande quantitĂ© d'informations sur la couverture terrestre est cachĂ©e dans la façon dont la parcelle change tout au long de l'annĂ©e. Par exemple, lorsque vous affichez les valeurs NDVI interpolĂ©es, vous pouvez voir que les valeurs dans les forĂȘts et les champs atteignent leurs maximums au printemps / Ă©tĂ© et chutent fortement en automne / hiver, tandis que l'eau et les surfaces artificielles maintiennent ces valeurs Ă peu prĂšs constantes tout au long de l'annĂ©e. Les surfaces artificielles ont des valeurs NDVI lĂ©gĂšrement plus Ă©levĂ©es par rapport Ă l'eau et rĂ©pĂštent partiellement le dĂ©veloppement des forĂȘts et des champs, car dans les villes, vous pouvez souvent trouver des parcs et d'autres vĂ©gĂ©taux. Vous devez Ă©galement prendre en compte les limites associĂ©es Ă la rĂ©solution des images - souvent dans la zone couverte par un pixel, vous pouvez observer plusieurs types de couverture en mĂȘme temps.

Développement temporel des valeurs NDVI pour les pixels de types spécifiques de couverture terrestre tout au long de l'année
Mise en mémoire tampon négative
Bien qu'une rĂ©solution d'image de 10 m soit suffisante pour un trĂšs large Ă©ventail de tĂąches, les effets secondaires des petits objets sont assez importants. Ces objets sont situĂ©s Ă la frontiĂšre entre diffĂ©rents types de couverture, et ces pixels se voient attribuer les valeurs d'un seul des types. Pour cette raison, lors de la formation du classificateur, un bruit excessif est prĂ©sent dans les donnĂ©es d'entrĂ©e, ce qui aggrave le rĂ©sultat. De plus, des routes et d'autres objets d'une largeur de 1 pixel sont prĂ©sents sur la carte d'origine, bien qu'ils soient extrĂȘmement difficiles Ă identifier Ă partir des images. Nous appliquons une mise en mĂ©moire tampon nĂ©gative de 1 pixel Ă la carte de rĂ©fĂ©rence, supprimant presque toutes les zones problĂ©matiques de l'entrĂ©e.

Carte de référence AOI avant (gauche) et aprÚs (droite) mise en mémoire tampon négative
Sélection aléatoire des données
Comme mentionnĂ© dans un article prĂ©cĂ©dent, l'AOI complet est divisĂ© en environ 300 fragments, chacun composĂ© de ~ 1 million de pixels. Il s'agit d'une quantitĂ© assez impressionnante de ces mĂȘmes pixels, nous prenons donc environ 40 000 pixels pour chaque EOPatch pour obtenir un ensemble de donnĂ©es de 12 millions de copies. Ătant donnĂ© que les pixels sont pris uniformĂ©ment, un grand nombre n'a pas d'importance sur la carte de rĂ©fĂ©rence, car ces donnĂ©es sont inconnues (ou ont Ă©tĂ© perdues aprĂšs l'Ă©tape prĂ©cĂ©dente). Il est logique de filtrer ces donnĂ©es afin de simplifier la formation du classificateur, car nous n'avons pas besoin de lui apprendre Ă dĂ©finir l'Ă©tiquette «pas de donnĂ©es». La mĂȘme procĂ©dure est rĂ©pĂ©tĂ©e pour l'ensemble de test, car ces donnĂ©es dĂ©gradent artificiellement les indicateurs de qualitĂ© des prĂ©dictions du classificateur.
Nous avons divisĂ© les donnĂ©es d'entrĂ©e en ensembles de formation / test Ă un ratio de 80/20%, respectivement, au niveau d'EOPatch, ce qui nous garantit que ces ensembles ne se coupent pas. Nous divisons Ă©galement les pixels de l'ensemble pour la formation en ensembles pour les tests et la validation croisĂ©e de la mĂȘme maniĂšre. AprĂšs la sĂ©paration, nous obtenons un tableau numpy.ndarray
de dimension (p,t,w,h,d)
, oĂč:
p
est le nombre d' EOPatch
dans l'ensemble de données
t
- le nombre d'images interpolées pour chaque EOPatch
* w, h, d
- largeur, hauteur et nombre de couches dans les images, respectivement.
AprÚs avoir sélectionné les sous-ensembles, la largeur w
correspond au nombre de pixels sélectionnés (par exemple, 40 000), tandis que la dimension h
est 1. La différence de forme du tableau ne change rien, cette procédure n'est nécessaire que pour simplifier le travail avec les images.
Les données des capteurs et du masque d
dans n'importe quelle image t dĂ©terminent les donnĂ©es d'entrĂ©e pour la formation, oĂč de telles instances totalisent p*w*h
. Afin de convertir les données en un formulaire digestible pour le classifieur, nous devons réduire la dimension du tableau de 5 à la matrice du formulaire (p*w*h, d*t)
. C'est facile Ă faire en utilisant le code suivant:
import numpy as np p, t, w, h, d = features_array.shape
Une telle procĂ©dure permettra de faire une prĂ©diction sur de nouvelles donnĂ©es de mĂȘme forme, puis de les reconvertir et de les visualiser par des moyens standards.
Création d'un modÚle d'apprentissage automatique
Le choix optimal du classificateur dĂ©pend fortement de la tĂąche spĂ©cifique, et mĂȘme avec le bon choix, nous ne devons pas oublier les paramĂštres d'un modĂšle spĂ©cifique, qui doit ĂȘtre changĂ© d'une tĂąche Ă l'autre. Il est gĂ©nĂ©ralement nĂ©cessaire de mener de nombreuses expĂ©riences avec diffĂ©rents ensembles de paramĂštres afin de dire avec prĂ©cision ce qui est nĂ©cessaire dans une situation particuliĂšre.
Dans cette sĂ©rie d'articles, nous utilisons le package LightGBM , car il s'agit d'un cadre intuitif, rapide, distribuĂ© et productif pour la crĂ©ation de modĂšles basĂ©s sur des arbres de dĂ©cision. Pour sĂ©lectionner des hyperparamĂštres de classifieur, on peut utiliser diffĂ©rentes approches, telles que la recherche de grille , qui doivent ĂȘtre testĂ©es sur un ensemble de tests. Par souci de simplicitĂ©, nous allons ignorer cette Ă©tape et utiliser les paramĂštres par dĂ©faut.

Le schéma de travail des arbres de décision dans LightGBM. Source
La mise en Ćuvre du modĂšle est assez simple, et puisque les donnĂ©es se prĂ©sentent dĂ©jĂ sous la forme d'une matrice, nous alimentons simplement ces donnĂ©es Ă l'entrĂ©e du modĂšle et attendons. FĂ©licitations! Maintenant, vous pouvez dire Ă tout le monde que vous ĂȘtes engagĂ© dans l'apprentissage automatique et que vous serez le gars le plus Ă la mode lors d'une fĂȘte, tandis que votre mĂšre sera inquiĂšte de la rĂ©bellion des robots et de la mort de l'humanitĂ©.
Validation du modĂšle
La formation de modĂšles d'apprentissage automatique est facile. La difficultĂ© est de bien les former. Pour cela, nous avons besoin d'un algorithme adaptĂ©, d'une carte de rĂ©fĂ©rence fiable et d'une quantitĂ© suffisante de ressources informatiques. Mais mĂȘme dans ce cas, les rĂ©sultats peuvent ne pas ĂȘtre ce que vous vouliez, donc vĂ©rifier le classificateur avec des matrices d'erreur et d'autres mesures est absolument nĂ©cessaire pour au moins une certaine confiance dans les rĂ©sultats de votre travail.
Matrice d'erreur
Les matrices d'erreur sont les premiĂšres choses Ă considĂ©rer lors de l'Ă©valuation de la qualitĂ© des classificateurs. Ils indiquent le nombre d'Ă©tiquettes correctement et incorrectement prĂ©dites pour chaque Ă©tiquette de la carte de rĂ©fĂ©rence et vice versa. Habituellement, une matrice normalisĂ©e est utilisĂ©e, oĂč toutes les valeurs des lignes sont divisĂ©es par le montant total. Cela montre si le classificateur n'a pas un biais vers un certain type de couverture par rapport Ă un autre

Deux matrices d'erreur normalisées du modÚle entraßné.
Pour la plupart des classes, le modÚle montre de bons résultats. Pour certaines classes, des erreurs se produisent en raison d'un déséquilibre dans les données d'entrée. Nous voyons que le problÚme est, par exemple, les buissons et l'eau, pour lesquels le modÚle confond souvent les étiquettes de pixels et les identifie de maniÚre incorrecte. En revanche, ce qui est marqué comme buisson ou eau correspond assez bien à la carte de référence. à partir de l'image suivante, nous pouvons remarquer que des problÚmes surviennent pour les classes qui ont un petit nombre d'instances de formation - cela est principalement dû à la petite quantité de données dans notre exemple, mais ce problÚme peut se produire dans n'importe quelle tùche réelle.

La fréquence d'apparition des pixels de chaque classe dans l'ensemble d'apprentissage.
Caractéristiques de fonctionnement du récepteur - Courbe ROC
Les classificateurs prĂ©disent les Ă©tiquettes avec une certaine certitude, mais ce seuil pour une Ă©tiquette particuliĂšre peut ĂȘtre modifiĂ©. La courbe ROC montre la capacitĂ© du classificateur Ă faire des prĂ©dictions correctes lors de la modification du seuil de sensibilitĂ©. Habituellement, ce graphique est utilisĂ© pour les systĂšmes binaires , mais il peut ĂȘtre utilisĂ© dans notre cas si nous calculons la caractĂ©ristique «étiquette par rapport Ă toutes les autres» pour chaque classe. L'axe des abscisses montre des rĂ©sultats faussement positifs (nous devons minimiser leur nombre), et l'axe des ordonnĂ©es montre des rĂ©sultats vrais positifs (nous devons augmenter leur nombre) Ă diffĂ©rents seuils. Un bon classificateur peut ĂȘtre dĂ©crit par une courbe sous laquelle l'aire de la courbe est maximale. Cet indicateur est Ă©galement connu sous le nom d'aire sous courbe, AUC. Ă partir des graphiques des courbes ROC, on peut tirer les mĂȘmes conclusions sur un nombre insuffisant d'exemples de la classe des «buissons», bien que la courbe de l'eau soit bien meilleure - cela est dĂ» au fait que visuellement l'eau est trĂšs diffĂ©rente des autres classes, mĂȘme avec un nombre insuffisant d'exemples dans les donnĂ©es.

Courbes ROC du classificateur, sous la forme de "un contre tous" pour chaque classe. Les nombres entre parenthĂšses sont des valeurs AUC.
L'importance des symptĂŽmes
Si vous souhaitez approfondir les subtilitĂ©s du classificateur, vous pouvez consulter le graphique d'importance des fonctionnalitĂ©s, qui nous indique quels signes ont le plus influencĂ© le rĂ©sultat final. Certains algorithmes d'apprentissage automatique, tels que celui que nous avons utilisĂ© dans cet article, renvoient ces valeurs. Pour les autres modĂšles, cette mĂ©trique doit ĂȘtre considĂ©rĂ©e par nous-mĂȘmes.

La matrice d'importance des caractéristiques pour le classificateur de l'exemple
Bien que d'autres signes au printemps (NDVI) soient gĂ©nĂ©ralement plus importants, nous voyons qu'il existe une date exacte Ă laquelle l'un des signes (B2 - bleu) est le plus important. Si vous regardez les photos, il s'avĂšre que l'AOI pendant cette pĂ©riode Ă©tait couverte de neige. On peut conclure que la neige rĂ©vĂšle des informations sur la couverture sous-jacente, ce qui aide grandement le classificateur Ă dĂ©terminer le type de surface. Il convient de rappeler qu'un tel phĂ©nomĂšne est spĂ©cifique Ă l'AOI observĂ© et en gĂ©nĂ©ral, il ne peut ĂȘtre invoquĂ©.

PiĂšce EOatch AOI 3x3 couverte de neige
Résultats de prédiction
AprÚs validation, nous comprenons mieux les forces et les faiblesses de notre modÚle. Si nous ne sommes pas satisfaits de la situation actuelle, vous pouvez apporter des modifications au pipeline et réessayer. AprÚs avoir optimisé le modÚle, nous définissons une EOTask simple qui accepte EOPatch et le modÚle de classificateur, fait une prédiction et l'applique au fragment.

Image de Sentinel-2 (à gauche), vérité (au centre) et prédiction (à droite) pour un fragment aléatoire d'AOI. Vous pouvez remarquer des différences dans les images, qui peuvent s'expliquer par l'utilisation d'une mise en mémoire tampon négative sur la carte d'origine. En général, le résultat pour cet exemple est satisfaisant.
La voie Ă suivre est claire. Il est nĂ©cessaire de rĂ©pĂ©ter la procĂ©dure pour tous les fragments. Vous pouvez mĂȘme les exporter au format GeoTIFF et les coller Ă l'aide de gdal_merge.py .
Nous avons téléchargé GeoTIFF collé sur notre portail GeoPedia, vous pouvez voir les résultats en détail ici

Capture d'écran de la prédiction de la couverture terrestre Slovénie 2017 en utilisant l'approche de ce post. Disponible dans un format interactif sur le lien ci-dessus
Vous pouvez également comparer les données officielles avec le résultat du classificateur. Faites attention à la différence entre les concepts d' utilisation des terres et de couverture des sols , que l'on retrouve souvent dans les tùches d'apprentissage automatique - il n'est pas toujours facile de mapper les données des registres officiels aux classes dans la nature. à titre d'exemple, nous montrons deux aéroports en Slovénie. Le premier est Levets, prÚs de la ville de Celje . Cet aéroport est petit, principalement utilisé pour des jets privés, et est recouvert d'herbe. Officiellement, le territoire est marqué comme surface artificielle, bien que le classificateur soit capable d'identifier correctement le territoire comme herbe, voir ci-dessous.

Image de Sentinel-2 (à gauche), vraie (au centre) et prédiction (à droite) pour la zone autour du petit aéroport sportif. Le classificateur définit la piste comme de l'herbe, bien qu'elle soit marquée comme surface artificielle dans les données actuelles.
En revanche, dans le plus grand aéroport de Slovénie, Ljubljana , les zones marquées comme surface artificielle sur la carte sont des routes. Dans ce cas, le classificateur distingue les structures, tout en distinguant correctement l'herbe et les champs du territoire voisin.

Image de Sentinel-2 (gauche), vérité (centre) et prédiction (droite) pour la zone autour de Ljubljana. Le classificateur détermine la piste et les routes, tout en distinguant correctement l'herbe et les champs dans le quartier
Voila!
Vous savez maintenant créer un modÚle fiable à l'échelle nationale! N'oubliez pas d'ajouter cela à votre CV.