Skip To Content

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 TensorFlow Lite 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, la structure TensorFlow Lite est utilisée pour entraîner un modèle de Deep Learning destiné aux applications mobiles. Le processus va être entraîné pour classer des espèces de plantes et créer les fichiers correspondants à déployer pour inférence directe.

Conditions requises

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

  • Jeu de données d’entraînement composé d’images variées d’espèces de plantes étiquetées.
    Remarque :

    Le jeu de données fait environ 440 Mo, mais seuls 200 Mo sont utilisés dans l’exemple qui suit. Si vous n’avez pas accès au 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 votre 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 Notebook Server Manager avec un accès administrateur et cliquez sur Settings (Paramètres) > Runtimes.
    Remarque :

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

  • Le Deep Learning sollicite d’importantes ressources de calcul, c’est pourquoi il est recommandé d’utiliser un processeur graphique puissant pour traiter les jeux de données volumineux.

Importations de bibliothèques Python

Importez les bibliothèques Python suivantes :

#To enable TensorFlow as backend
%env ARCGIS_ENABLE_TF_BACKEND=1
 
import os
from pathlib import Path
 
from arcgis.gis import GIS
from arcgis.learn import prepare_data, FeatureClassifier
 
gis = GIS("home")

Charger des données dans votre espace de travail

Chargez le jeu de données dans l’espace de travail de votre 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
#Use export_training_data() to get the training data
filepath = "/arcgis/home/train_200MB_a_tensorflow-lite_model_for_identifying_plant_species.zip"
 
#Extract zip
import zipfile
with zipfile.ZipFile(filepath, "r") as zip_ref:
   zip_ref.extractall(Path(filepath).parent)
 
#Get the data path
data_path = Path(os.path.join(os.path.splitext(filepath)[0]))
 
#Filter non-RGB images
from glob import glob
from PIL import Image
 
for image_filepath in glob(os.path.join(data_path, "images", "**","*.jpg")):
   if Image.open(image_filepath).mode != "RGB":
       os.remove(image_filepath)

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=data_path,
    dataset_type="Imagenet",
    batch_size=64,
    chip_size=224
)

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 vos données

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

data.show_batch(rows=2)

Charger l’architecture du modèle

Le modèle Classification d’entités dans arcgis.learn va déterminer la classe de chaque entité. Ce modèle requiert les paramètres suivants :

  • backbone : chaîne facultative. Modèle de réseau neuronal convolutif backbone utilisé pour l’extraction d’entités, qui est resnet34 par défaut. Parmi les backbones pris en charge, notons les modèles de la famille ResNet et les modèles Timm spécifiés (prise en charge expérimentale) des backbones ().
  • back-end : chaîne facultative.

    Contrôle la structure back-end à utiliser pour ce modèle, qui est 'pytorch' par défaut.

model = FeatureClassifier(data, backbone="MobileNetV2", backend="tensorflow")

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 vos 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 de votre 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.000691831 #from the first run

Ajustement du modèle

La méthode fit() est utilisée pour entraîner votre 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)

Visualiser les résultats

Pour valider les résultats de votre modèle dans votre notebook, vous pouvez utiliser la méthode show_results() afin de comparer les prédictions de votre 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 de votre 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("Plant-identification-25-tflite", framework="tflite")

Déployer le modèle

Votre 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 des fichiers .dlpk, reportez-vous à la rubrique Dénombrer les voitures dans les images aériennes à l’aide du Deep Learning.