Classification des images - TensorFlow - Amazon SageMaker

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Classification des images - TensorFlow

L'algorithme Amazon SageMaker Image Classification est un TensorFlow algorithme d'apprentissage supervisé qui prend en charge l'apprentissage par transfert avec de nombreux modèles préentraînés issus du TensorFlow Hub. Utilisez l'apprentissage par transfert pour affiner l'un des modèles pré-entraînés disponibles sur votre propre jeu de données, même si une grande quantité de données d'image n'est pas disponible. L'algorithme de classification des images prend une image en entrée et génère en sortie une probabilité pour chaque étiquette de classe fournie. Les jeux de données d'entraînement doivent être composés d'images au format .jpg, .jpeg ou .png.

Comment utiliser l' TensorFlow algorithme de classification des SageMaker images

Vous pouvez utiliser la classification des images TensorFlow en tant qu'algorithme SageMaker intégré d'Amazon. La section suivante décrit comment utiliser la classification des images TensorFlow avec le SDK SageMaker Python. Pour plus d'informations sur l'utilisation de la classification des images, TensorFlow depuis l'interface utilisateur Amazon SageMaker Studio Classic, consultezSageMaker JumpStart.

L' TensorFlow algorithme de classification des images prend en charge l'apprentissage par transfert à l'aide de l'un des modèles TensorFlow Hub préentraînés compatibles. Pour obtenir la liste de tous les modèles pré-entraînés disponibles, consultez TensorFlow Modèles de hub. Chaque modèle pré-entraîné possède un model_id unique. L'exemple suivant utilise la MobileNet version V2 1.00 224 (model_id:tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4) pour affiner un ensemble de données personnalisé. Les modèles préentraînés sont tous prétéléchargés depuis le TensorFlow Hub et stockés dans des compartiments Amazon S3 afin que les tâches de formation puissent être exécutées de manière isolée sur le réseau. Utilisez ces artefacts d'apprentissage de modèles prégénérés pour créer un SageMaker estimateur.

Tout d'abord, récupérez l'URI de l'image Docker, l'URI du script d'entraînement et l'URI du modèle pré-entraîné. Ensuite, modifiez les hyperparamètres comme bon vous semble. Vous pouvez consulter un dictionnaire Python de tous les hyperparamètres disponibles et de leurs valeurs par défaut avec hyperparameters.retrieve_default. Pour plus d’informations, consultez Classification des images - TensorFlow Hyperparamètres. Utilisez ces valeurs pour créer un SageMaker estimateur.

Note

Les valeurs par défaut des hyperparamètres sont différentes selon les modèles. Pour les modèles plus grands, la taille de lot par défaut est plus petite et l'hyperparamètre train_only_top_layer a pour valeur "True".

Cet exemple utilise le jeu de données tf_flowers, qui contient cinq classes d'images de fleurs. Nous avons prétéléchargé le jeu de données TensorFlow sous licence Apache 2.0 et l'avons rendu disponible avec Amazon S3. Pour affiner votre modèle, appelez .fit à l'aide de l'emplacement Amazon S3 de votre jeu de données d'entraînement.

from sagemaker import image_uris, model_uris, script_uris, hyperparameters from sagemaker.estimator import Estimator model_id, model_version = "tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4", "*" training_instance_type = "ml.p3.2xlarge" # Retrieve the Docker image train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None) # Retrieve the training script train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training") # Retrieve the pretrained model tarball for transfer learning train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training") # Retrieve the default hyper-parameters for fine-tuning the model hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version) # [Optional] Override default hyperparameters with custom values hyperparameters["epochs"] = "5" # The sample training data is available in the following S3 bucket training_data_bucket = f"jumpstart-cache-prod-{aws_region}" training_data_prefix = "training-datasets/tf_flowers/" training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}" output_bucket = sess.default_bucket() output_prefix = "jumpstart-example-ic-training" s3_output_location = f"s3://{output_bucket}/{output_prefix}/output" # Create SageMaker Estimator instance tf_ic_estimator = Estimator( role=aws_role, image_uri=train_image_uri, source_dir=train_source_uri, model_uri=train_model_uri, entry_point="transfer_learning.py", instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=hyperparameters, output_path=s3_output_location, ) # Use S3 path of the training data to launch SageMaker TrainingJob tf_ic_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Interface d'entrée et de sortie pour l' TensorFlow algorithme de classification des images

Chacun des modèles préentraînés répertoriés dans TensorFlow Hub Models peut être affiné pour n'importe quel ensemble de données contenant un certain nombre de classes d'images. Sachez comment formater vos données d'entraînement pour les saisir dans le TensorFlow modèle de classification des images.

  • Format d'entrée des données d'entraînement : vos données d'entraînement doivent être un répertoire contenant autant de sous-répertoires que le nombre de classes. Chaque sous-répertoire doit contenir des images appartenant à cette classe au format .jpg, .jpeg ou .png.

Voici un exemple de structure du répertoire d'entrée. Cet exemple de jeu de données comporte deux classes : roses et dandelion. Les fichiers image de chaque dossier de classe peuvent porter n'importe quel nom. Le répertoire d'entrée doit être hébergé dans un compartiment Amazon S3 avec un chemin similaire au suivant : s3://bucket_name/input_directory/. Notez que le / de fin est obligatoire.

input_directory |--roses |--abc.jpg |--def.jpg |--dandelion |--ghi.jpg |--jkl.jpg

Les modèles entraînés génèrent en sortie des fichiers de mappage d'étiquettes qui associent les noms de dossiers de classes aux indices de la liste des probabilités des classes de sortie. Ce mappage suit l'ordre alphabétique. Par exemple, dans l'exemple ci-dessus, la classe pissenlits est l'indice 0 et la classe roses est l'indice 1.

Après entraînement, vous disposez d'un modèle affiné que vous pouvez continuer à entraîner à l'aide d'un entraînement incrémentiel ou déployer pour l'inférence. L' TensorFlow algorithme de classification des images ajoute automatiquement une signature de prétraitement et de post-traitement au modèle affiné afin qu'il puisse prendre des images en tant que probabilités de classe d'entrée et de retour. Le fichier qui mappe les indices de classe aux étiquettes de classe est enregistré avec les modèles.

Entraînement incrémentiel

Vous pouvez amorcer l'entraînement d'un nouveau modèle avec des artefacts provenant d'un modèle avec lequel vous vous êtes déjà entraîné SageMaker. L'entraînement incrémentiel permet de gagner du temps lorsque vous souhaitez entraîner un nouveau modèle avec des données identiques ou similaires.

Note

Vous ne pouvez amorcer qu'un modèle de classification d' SageMaker images avec un autre TensorFlow modèle de classification d'images dans TensorFlow lequel vous avez été entraîné SageMaker.

Vous pouvez utiliser n'importe quel jeu de données pour l'entraînement incrémentiel, à condition que l'ensemble de classes reste le même. L'étape d'entraînement incrémentiel est similaire à l'étape d'affinage, mais au lieu de commencer par un modèle pré-entraîné, vous commencez par un modèle affiné existant. Pour un exemple d'entraînement incrémentiel avec l' TensorFlow algorithme de classification SageMaker d'images, consultez le bloc-notes d'exemple Introduction to SageMaker TensorFlow - Classification d'images.

Inférence à l'aide de l'algorithme de classification des images TensorFlow

Vous pouvez héberger le modèle affiné issu de votre formation en classification d' TensorFlow images à des fins d'inférence. Toute image d'entrée pour l'inférence doit être au format .jpg, .jpeg ou .png et présenter un type de contenu application/x-image. L' TensorFlowalgorithme de classification des images redimensionne automatiquement les images d'entrée.

L'exécution de l'inférence permet d'obtenir des valeurs de probabilité, des étiquettes de classe pour toutes les classes et l'étiquette prédite correspondant à l'indice de classe présentant la probabilité la plus élevée, codé au format JSON. Le TensorFlow modèle de classification des images traite une seule image par demande et ne produit qu'une seule ligne. Voici un exemple de réponse au format JSON :

accept: application/json;verbose {"probabilities": [prob_0, prob_1, prob_2, ...], "labels": [label_0, label_1, label_2, ...], "predicted_label": predicted_label}

Si accept a pour valeur application/json, le modèle génère en sortie uniquement des probabilités. Pour plus d'informations sur l'entraînement et l'inférence avec l' TensorFlow algorithme de classification d'images, consultez le bloc-notes d'exemple Introduction à SageMaker TensorFlow la classification d'images.

Recommandation d'instance Amazon EC2 pour l'algorithme de classification des images TensorFlow

L' TensorFlow algorithme de classification des images prend en charge toutes les instances de CPU et de GPU pour l'entraînement, notamment :

  • ml.p2.xlarge

  • ml.p2.16xlarge

  • ml.p3.2xlarge

  • ml.p3.16xlarge

  • ml.g4dn.xlarge

  • ml.g4dn.16.xlarge

  • ml.g5.xlarge

  • ml.g5.48xlarge

Nous recommandons d'utiliser les instances de GPU avec davantage de mémoire pour l'entraînement avec de grandes tailles de lot. Les instances de CPU (telles que M5) et de GPU (P2, P3, G4dn ou G5) peuvent être utilisées pour l'inférence.

Classification des images - TensorFlow exemples de carnets

Pour plus d'informations sur l'utilisation de l' TensorFlow algorithme de classification SageMaker d'images pour l'apprentissage par transfert sur un ensemble de données personnalisé, consultez le bloc-notes Introduction to SageMaker TensorFlow - Classification d'images.

Pour savoir comment créer et accéder à des instances de bloc-notes Jupyter dans lesquelles vous pouvez exécuter l'exemple SageMaker, consultez. Instances Amazon SageMaker Notebook Après avoir créé une instance de bloc-notes et l'avoir ouverte, sélectionnez l'onglet SageMakerExemples pour afficher la liste de tous les SageMaker exemples. Pour ouvrir un bloc-notes, choisissez son onglet Use (Utiliser), puis Create copy (Créer une copie).