Entraîner un modèle de Deep Learning pour classification de nuage de points

La création d'un modèle de Deep Learning utilisable pour la classification d'un nuage de points comprend deux principales étapes : la préparation des données d'entraînement et l'entraînement lui-même. La première étape est généralement la plus difficile car il vous incombe d'apporter les données d'entraînement. Une fois que vous les avez, le reste du travail est effectué par l'ordinateur.

Les données d'entraînement sont des points classés que vous fournissez comme exemples pour que le réseau neuronal l'apprenne. De façon générale, plus vous fournissez d'exemples, plus l'apprentissage est bon. Vos exemples doivent être aussi précis que possible. Il est donc primordial de veiller à leur exactitude. La classification doit englober toutes les entités ou tous les éléments de paysage importants pour votre application. Il est par ailleurs souhaitable que les données d'entraînement soient diversifiées afin que le modèle soit plus générique, de même que les données de validation, afin que les métriques de performance obtenues soient plus réalistes. La diversité est la clé d'un meilleur entraînement.

Les nuages de points contiennent généralement des échantillons de tous types d'éléments pouvant être vus par un laser ou photographiés. Il ne serait pas réaliste, ni souhaitable, de vouloir classer chaque point dans une catégorie spécifique. Ce qu'il faut, ce sont des points d'intérêt à classer correctement. Vous pouvez laisser les autres points dans une classe en arrière-plan, ou classe pour tout le reste. Par exemple, si ce qui vous intéresse, ce sont les lignes électriques, la végétation ou les bâtiments, veillez à les classer correctement. Vous pouvez laisser tous les autres points non classés (par exemple, classe 1 pour le lidar format LAS).

Il n'y a pas de règle fixe sur la quantité de données à utiliser pour l'entraînement. De façon générale, plus vous pouvez fournir d'exemples, mieux c'est. Il existe évidemment des limites pratiques et à un certain point, vos efforts seront moins payants.

Préparation des données d'entraînement

Pour l'entraînement, vous avez besoin d'un nuage de points qui soit une bonne représentation des données que vous voulez classer. Idéalement, les données à classer sont recueillies dans le cadre du même projet que les données d'entraînement : même matériel, même spécifications de collecte. Le potentiel de réussite est alors à son maximum. Vous pouvez toutefois utiliser d'autres données, mais elles doivent avoir les mêmes caractéristiques que les données d'entraînement. L'espacement des points nominal et la densité sont un facteur clé, de même que la précision de position. Si vous choisissez d'inclure des attributs de points, comme l'intensité ou le numéro de retour lidar, dans l'entraînement afin d'améliorer la prédiction du modèle, vérifiez que ces attributs existent dans les données ciblées pour la classification.

Vous pouvez classer les données d'entraînement à l'aide de techniques manuelles ou automatisées. Il existe des outils de mise à jour des codes de classe LAS interactifs et un ensemble de classificateurs par règle. Il s'avère parfois utile de combiner les deux. Par exemple, commencez par établir une classification de base à l'aide des outils de géotraitement Classer e sol LAS et Classer des bâtiments LAS. Puis, sélectionnez comme sites d'entraînement des sous-zones bien représentatives, ou des tuiles si vous utilisez des LAS tuilés, dans votre jeu de données. Nettoyez manuellement ces zones et ajoutez d'autres classes le cas échéant. Utilisez ces sous-zones mises à jour et améliorées comme données d'entraînement.

Des données validations sont également requises. Elles servent à fournir une évaluation non biaisée du modèle pendant l'entraînement et à identifier et empêcher le surapprentissage, à savoir lorsque le modèle ne fonctionne bien qu'avec les données d'entrainement mais avec rien d'autre. Les données de validation doivent être similaires aux données d’entraînement en ce qu'elles couvrent des zones d'intérêt représentatives et utilisent les mêmes jeux de classification mais proviennent d'emplacements différents. Vous pouvez utiliser les mêmes données de projet que pour l'entraînement, mais des sous-ensembles différents. En général, il faut plus de données d'entraînement que de données de validation. S'il n'y a pas de règle, il n'est pas rare d'utiliser plusieurs fois plus de données d'entraînement que de données de validation.

Une fois vos données d'entraînement et de validation définies, vous devez réfléchir à un voisinage échantillon, ou une taille de bloc, approprié, que l'entraînement utilisera pour évaluer les points.

Taille de bloc

Les données de validation et d'entraînement de taille de bloc sont divisés en blocs plus petits, plus faciles à gérer. Ces blocs de points sont ensuite placés dans un format accessible par les bibliothèques de Deep Learning. Évaluez la taille approximative des blocs. L'objectif est qu'ils contiennent un nombre raisonnable de points pour la mémoire de GPU disponible. L'entraînement va charger les points et les structures de données secondaires pour autant de blocs à la fois qu'indiqué dans le paramètre d'entraînement nommé Taille du bloc. Il faut être ici attentif à une interaction entre plusieurs variables. Les lots contrôlent le nombre de blocs traités simultanément. Les blocs sont des ensembles de points et leurs attributs. Le nombre de points contenus dans un bloc dépend de la taille du bloc et de la densité de points à l'emplacement du bloc. Les blocs contiennent un nombre de points relativement cohérent si la densité du nuage de points est elle-même cohérente. Vous pouvez utiliser des jeux de données là où la densité de points varient beaucoup, mais cela nécessitera plus d'entraînement pour que cela fonctionne bien.

Même si votre estimation du nombre de points dans un bloc est correcte en moyenne, il y a toujours des écarts et vous devez donc établir une limite supérieure du nombre de points contenus dans un bloc. Pour ce faire, utilisez le paramètre Limite de points en bloc. Lorsqu'un bloc contient un nombre de points supérieur à cette limite, plusieurs blocs sont créés pour le même emplacement afin de garantir que toutes ses données sont utilisées.

Essayez de commencer par des blocs contenant en moyenne 8 000 points.

Pour estimer la taille d'un bloc, qui correspond à la longueur de son côté, vous devez connaitre l'espacement de points nominal des données et le nombre de points souhaité par bloc :

block_size = square_root(target_point_count) * 2d_point_spacing

Pour évaluer la taille du bloc, vous pouvez aussi prendre en considération la taille des objets ou entités qui vous intéressent. Par exemple, si vos entités sont sensiblement plus petites que la taille de bloc estimée ci-dessus, vous pouvez choisir de réduire la taille du bloc en conséquence.

Pour une GPU avec 8 Go de RAM dédiée, utilisez la taille de lot par défaut, 2, pour charger la valeur de deux blocs de points dans le GPU en même temps. Surveillez l'utilisation de la mémoire de GPU. Si vous trouvez qu'il reste encore beaucoup de mémoire de GPU disponible pendant l'entraînement, vous pouvez augmenter sans problème la taille des blocs afin d'en traiter plus à la fois.

Formation

L'entraînement implique la création d'un réseau neuronal convolutif (ou CNN) à l'aide de vos données de validation et d'entraînement. Le modèle qui en résulte sert à classifier les nuages de points LAS via un processus appelé inférence. PointCNN est une structure de Deep Learning en open source utilisée par ArcGIS pour l'entraînement et l'inférence. Vous pouvez utiliser le modèle sur vos propres données ou le partager avec d'autres personnes qui l'utiliseront sur les leurs. Le processus d'entraînement consomme beaucoup de ressources et peut prendre un certain temps. Heureusement, le résultat est compact. Les modèles eux-mêmes font généralement entre 15 et 20 Mo.

Les modèles en sortie sont composés de plusieurs fichiers qui sont placés ensemble dans un dossier. Un fichier Définition du modèle Esri (*.emd), qui est fichier JSON contenant des paramètres, et un fichier de données *.pth en font partie, ainsi que d'autres fichiers que vous pouvez consulter pour évaluer les résultats de l'entraînement. Un paquetage de Deep Learning (*.dlpk) est également placé dans le dossier en sortie. Il contient tous les fichiers pertinents paquetés en un à des fins de partage et de publication.

Par défaut, vous entraînez un modèle à partir de rien mais vous pouvez inclure pré-entraîné dans le processus. Dans ce cas, vous produisez un nouveau modèle en améliorant un modèle existant. L'entraînement supplémentaire va fournir d'autres exemples que le modèle va utiliser pour améliorer sa capacité à prédire des classifications correctes pour les points.

Le paramètre du nombre minimum de points par bloc de l'outil d'entraînement permet d'ignorer les blocs d'entrainement contenant un nombre insuffisant de points. Souvent, les blocs autour du périmètre d'un projet n'ont pas beaucoup de points. En outre, la limite de points par bloc peut être atteinte par un ou plusieurs blocs lors de la création des données d'apprentissage. Les blocs suivants vont donc retenir les points qui dépassent la limite. Dans les deux cas, les blocs avec relativement peu de points ne sont pas particulièrement utiles et il peut donc être judicieux de ne pas les inclure dans le processus d'entraînement.

Gestion des classes

La catégorie Managing Class (Gestion des classes) de l'outil de géotraitement Entraîner le modèle de classification du nuage de points contient des paramètres associés au ré-appariement de classe, aux classes d'intérêt et à l'attribution de nom aux classes.

Le ré-appariement de classes s'avère utile lorsque le modèle en sortie doit utiliser un ensemble de codes de classe différent avec un sens différent des données d'entraînement en entrée. Il est également utile pour fusionner des classes, par exemple, pour combiner trois classes de végétation en une.

Les codes de classes d'intérêt sont la cible de l'entraînement. Par défaut, toutes les classes des données d'entraînement en entrée sont utilisées pour créer le modèle. Mais le fait d'avoir plusieurs classes peut compliquer inutilement l'entraînement si vous n'êtes intéressé que par une classe, ou un type, d'entités. Par exemple, si vous voulez juste créer un modèle pour classer les conducteurs métalliques de ligne électrique, vous pouvez définit un code d'intérêt qui correspond uniquement à cela (classe 14 suivant la norme LAS, par exemple). Dans ce cas, vous êtes invité à fournir un code de classe d'arrière-plan. Il s'agit du code applicable à tout le reste. Ensuite, même si les données d'entraînement contiennent plusieurs classes, le modèle entraîné saura uniquement comment classer deux d'entre elles : la classe d'intérêt et l'arrière-plan.

Paramètres d'entraînement

La catégorie Training Parameters (Paramètres d'entraînement) de l'outil de traitement Entraîner le modèle de classification du nuage de points contient des paramètres spécifiques du processus d'entraînement lui-même plutôt que des données et des classes qu'il utilise.

L'entraînement est un processus itératif. Des passes sont effectuées sur les données sont balayées de façon répétitives jusqu'à ce qu'un critère soit satisfait. Un de ces critères est le Nombre maximum d'époques. Une époque représente une passe sur les données d'entraînement. Au sein de chaque époque, les données sont traitées par lots. Un lot est une collection d'un ou plusieurs blocs. La valeur Itérations par époque correspond au pourcentage de lots traités dans une époque. Par conséquent, si elle est inférieure à 100 %, cela signifie qu'un sous-ensemble de lots est en cours de traitement. La Taille du lot est le nombre de blocs contenus dans un lot. Les blocs d'un lot sont traités en parallèle. Si votre GPU a suffisamment de RAM dédiée, l'entraînement peut utiliser des lots de plus grande taille et réduire ainsi en général la durée totale du processus.

Vitesse d’apprentissage

La vitesse d'apprentissage est un paramètre de réglage qui contrôle comment ajuster le modèle chaque fois que ses pondérations sont mises à jour afin de viser un objectif de perte minimal. Elle influence la façon dont les nouvelles informations viennent remplacer les anciennes et représente donc la vitesse à laquelle le modèle apprend.

La vitesse d'apprentissage est un compromis. Si la valeur est trop faible, le temps d'entraînement peut être long et le modèle peut même finir par rester coincé. Si elle est trop élevée, il peut en résulter l'apprentissage d'un ensemble non optimal de pondérations et un processus d'apprentissage instable.

Il est donc difficile de déterminer à l'avance une vitesse d'apprentissage. L'outil Entraîner le modèle de classification du nuage de points peut estimer une valeur à votre place. Nous vous conseillons de laisser la valeur par défaut, vide, la première fois que vous entraînez un modèle et de laisser l'outil estimer la vitesse d'apprentissage. L'outil Entraîner le modèle de classification du nuage de points reporte la vitesse d'apprentissage dans ses messages. Il indique en outre la vitesse d'apprentissage dans un fichier nommé model_metrics.html, qui est enregistré dans le dossier des modèles en sortie à l'issue du processus d'entraînement. Pour en savoir plus sur les résultats générés par l'outil Entraîner le modèle de classification du nuage de points, reportez-vous à la rubrique Évaluer les résultats de l’entraînement d'un nuage de points.

Rubriques connexes