Exemple : processus de Deep Learning de bout en bout

En général, les modèles de Deep Learning sont volumineux et requièrent une puissance de calcul importante. En intégrant l’entraînement de modèles avec ArcGIS API for Python, vous pouvez créer des modèles de Deep Learning à la fois compacts et adaptés au déploiement mobile.

Dans cet exemple de processus de notebook, le modèle Multi-task Road Extractor (Extracteur de routes multitâche) est utilisé pour extraire un réseau routier de l’imagerie satellite.

Conditions requises

Pour effectuer ce processus, les conditions suivantes doivent être remplies :

  • Téléchargez le jeu de données d’entraînement, constitué des données SpaceNet des axes médians de routes dans la région de Paris.
    Remarque :

    Si vous n’avez pas accès à ce jeu de données d’entraînement, vous devez disposer de Raster Server pour générer des données d’entraînement adéquates au format requis.

  • Pour exécuter ce processus, la mémoire de l’environnement Notebook doit être limitée à 15 Go maximum. Dans les environnements Notebook Standard et Avancé, la mémoire est limitée respectivement à 4 Go et 6 Go par défaut. Pour changer cette limite, connectez-vous à ArcGIS Enterprise Manager et cliquez sur Capabilities (Fonctionnalités) > Settings (Notebook services) (Paramètres [services de notebook]) > Runtimes.
    Remarque :

    La limite de mémoire nécessaire pour ce processus dépend de la taille des données d’entraînement.

Importations de bibliothèques Python

Importez les bibliothèques Python suivantes :

from arcgis.gis import GIS
gis = GIS("home")

import os, zipfile
from pathlib import Path

from arcgis.learn import prepare_data, MultiTaskRoadExtractor

Charger des données dans l’espace de travail

Chargez le jeu de données dans l’espace de travail du notebook dans Files, sous la forme d’un fichier .zip contenant des fragments d’image étiquetés dans un dossier nommé images.

#Adding zipped file from workspace
filepath = training_data = gis1.content.get('itemID')
filepath = training_data.download(save_path='/arcgis/home/input', file_name=training_data.name)
filepath
assert os.path.exists(filepath) == 1

#Extract zip
with zipfile.ZipFile(filepath, 'r') as zip_ref:
    zip_ref.extractall(Path(filepath).parent)
 
#Get the data path
output_path = Path(os.path.join(os.path.splitext(filepath)[0]))

Préparer vos données

La fonction prepare_data() dans ArcGIS API for Python prépare les données pour les processus de Deep Learning. La fonction lit les échantillons d’entraînement et automatise le traitement de préparation des données en appliquant différentes transformations et augmentations aux données d’entraînement. Grâce à ces augmentations, les modèles peuvent être entraînés avec des données limitées, ce qui évite le surajustement des modèles.

data = prepare_data(
    path=output_path,
    batch_size=4,
    chip_size=512
)
data.classes

Pour plus d’informations sur les paramètres de la fonction prepare_data(), reportez-vous à la rubrique Référence de l’API arcgis.learn.

Visualiser les données

Une fois les données préparées, vous pouvez utiliser la fonction show_batch() pour en visualiser des échantillons.

data.show_batch(alpha=1)

Charger l’architecture du modèle

La structure Multi-task Road Extractor (Extracteur de routes multitâche) dans arcgis.learn prend en charge deux architectures qui peuvent être définies à l’aide du paramètre mt1_model. Ce paramètre peut être défini sur l’architecture linknet ou hourglass.

Les paramètres avancés spécifiques du modèle peuvent éventuellement être définis à cette étape :

  • gaussian_thresh : définit le seuil gaussien, qui vous permet de définir la largeur de route requise.
  • orient_bin_size : définit la taille de groupe des angles d’orientation.
  • orient_theta : définit la largeur du masque d’orientation.

model = MultiTaskRoadExtractor(data, mtl_model="hourglass")

Calculer la vitesse d’apprentissage

ArcGIS API for Python utilise l’outil de recherche de vitesse d’apprentissage de fast.ai pour trouver la vitesse d’apprentissage optimale pour entraîner les modèles. Utilisez la méthode lr_find() pour rechercher la vitesse d’apprentissage optimale pour entraîner un modèle puissant. Une fois la vitesse d’apprentissage déterminée avec la première exécution du modèle, vous pouvez la transmettre sous forme de valeur fixe pour les exécutions suivantes de réentraînement du modèle.

lr = model.lr_find()
#lr =  0.0005754 #from the first run

Ajustement du modèle

La méthode fit() est utilisée pour entraîner le modèle. Avec cette méthode, un paramètre d’époque doit être indiqué en entrée. L’époque définit le nombre de fois où le modèle sera exposé à l’intégralité du jeu de données d’entraînement. Chaque époque permet au modèle d’apprendre et d’ajuster ses pondérations en fonction des données. Dans l’exemple suivant, le modèle est exécuté pour trois époques aux fins des tests.

Il est recommandé de commencer avec 25 époques pour obtenir un modèle plus précis pour le déploiement.

model.fit(3, lr=lr, early_stopping=True)

Visualiser les résultats

Pour valider les résultats du modèle dans le notebook, vous pouvez utiliser la méthode show_results() afin de comparer les prédictions du modèle aux images aléatoires de réalité de terrain.

model.show_results(rows=4, thresh=0.2)

Enregistrer le modèle

Vérifiez la précision du modèle d’entraînement, puis enregistrez-le pour déploiement ultérieur. Par défaut, le modèle est enregistré en tant que fichier .dlpk dans le sous-dossier des modèles du dossier des données d’entraînement.

model.save('/arcgis/home/road_model_for_spacenet_data')

Déployer le modèle

Le fichier .dlpk enregistré peut maintenant être déployé avec d’autres jeux de données et partagé au sein de votre organisation. Pour plus d’informations sur l’utilisation d’un fichier .dlpk, reportez-vous à la rubrique Exemple : inférence à l’aide d’un modèle pré-entraîné.