Transfert d'apprentissage pour les modèles de classification d'images TensorFlow dans Amazon SageMaker

Amazon Sage Maker offre une suite de algorithmes intégrés, modèles pré-entraînéset modèles de solutions prédéfinis pour aider les scientifiques des données et les praticiens de l'apprentissage automatique (ML) à démarrer rapidement la formation et le déploiement de modèles ML. Vous pouvez utiliser ces algorithmes et modèles pour l'apprentissage supervisé et non supervisé. Ils peuvent traiter différents types de données d'entrée, notamment des tableaux, des images et du texte.

À partir d'aujourd'hui, SageMaker fournit un nouvel algorithme intégré pour la classification des images : Classification des images – TensorFlow. Il s'agit d'un algorithme d'apprentissage supervisé qui prend en charge l'apprentissage par transfert pour de nombreux modèles pré-formés disponibles dans Hub TensorFlow. Il prend une image comme probabilité d'entrée et de sortie pour chacune des étiquettes de classe. Vous pouvez affiner ces modèles pré-formés à l'aide de l'apprentissage par transfert même lorsqu'un grand nombre d'images de formation ne sont pas disponibles. Il est disponible via le SageMaker algorithmes intégrés ainsi que par le Interface utilisateur JumpStart de SageMaker à l'intérieur Amazon SageMakerStudio. Pour plus d'informations, reportez-vous à sa documentation Classification des images – TensorFlow et l'exemple de cahier Introduction à SageMaker TensorFlow - Classification des images.

La classification d'images avec TensorFlow dans SageMaker permet un apprentissage par transfert sur de nombreux modèles pré-formés disponibles dans TensorFlow Hub. En fonction du nombre d'étiquettes de classe dans les données d'entraînement, une couche de classification est associée au modèle TensorFlow Hub pré-entraîné. La couche de classification se compose d'une couche d'abandon et d'une couche dense, qui est une couche entièrement connectée avec un régularisateur à 2 normes qui est initialisé avec des poids aléatoires. La formation du modèle a des hyperparamètres pour le taux d'abandon de la couche d'abandon et le facteur de régularisation L2 pour la couche dense. Ensuite, soit l'ensemble du réseau, y compris le modèle pré-entraîné, soit seule la couche de classification supérieure peut être affiné sur les nouvelles données d'apprentissage. Dans ce mode d'apprentissage par transfert, vous pouvez réaliser une formation même avec un ensemble de données plus petit.

Comment utiliser le nouvel algorithme de classification d'images TensorFlow

Cette section décrit comment utiliser l'algorithme de classification d'images TensorFlow avec le Kit de développement logiciel (SDK) SageMaker Python. Pour plus d'informations sur son utilisation à partir de l'interface utilisateur de Studio, consultez SageMaker JumpStart.

L'algorithme prend en charge l'apprentissage par transfert pour les modèles pré-formés répertoriés dans Modèles de hub TensorFlow. Chaque modèle est identifié par un identifiant unique model_id. Le code suivant montre comment affiner MobileNet V2 1.00 224 identifié par model_id tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4 sur un jeu de données d'entraînement personnalisé. Pour chaque model_id, afin de lancer une tâche de formation SageMaker via le Estimateur classe du SDK Python SageMaker, vous devez récupérer l'URI de l'image Docker, l'URI du script de formation et l'URI du modèle pré-formé via les fonctions utilitaires fournies dans SageMaker. L'URI du script de formation contient tout le code nécessaire au traitement des données, au chargement du modèle pré-formé, à la formation du modèle et à l'enregistrement du modèle formé pour l'inférence. L'URI du modèle pré-formé contient la définition de l'architecture du modèle pré-formé et les paramètres du modèle. Notez que l'URI de l'image Docker et l'URI du script d'entraînement sont les mêmes pour tous les modèles de classification d'images TensorFlow. L'URI de modèle pré-formé est spécifique au modèle particulier. Les archives tar du modèle pré-entraîné ont été pré-téléchargées à partir de TensorFlow Hub et enregistrées avec la signature de modèle appropriée dans Service de stockage simple Amazon (Amazon S3), de sorte que la tâche de formation s'exécute en isolation réseau. Voir le code suivant :

from sagemaker import image_uris, model_uris, script_uris
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 pre-trained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-ic-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

Avec ces artefacts de formation spécifiques au modèle, vous pouvez construire un objet du Estimateur classe:

# 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,
)

Ensuite, pour l'apprentissage par transfert sur votre jeu de données personnalisé, vous devrez peut-être modifier les valeurs par défaut des hyperparamètres de formation, qui sont répertoriés dans Hyperparamètres. Vous pouvez récupérer un dictionnaire Python de ces hyperparamètres avec leurs valeurs par défaut en appelant hyperparameters.retrieve_default, mettez-les à jour si nécessaire, puis transmettez-les à la classe Estimator. Notez que les valeurs par défaut de certains des hyperparamètres sont différentes pour différents modèles. Pour les grands modèles, la taille de lot par défaut est plus petite et le train_only_top_layer l'hyperparamètre est défini sur True. L'hyperparamètre Train_only_top_layer définit les paramètres du modèle qui changent pendant le processus de réglage fin. Si train_only_top_layer is True, les paramètres des couches de classification changent et les autres paramètres restent constants pendant le processus de réglage fin. D'autre part, si train_only_top_layer is False, tous les paramètres du modèle sont ajustés. Voir le code suivant :

from sagemaker import hyperparameters
# 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"

Le code suivant fournit un ensemble de données de formation par défaut hébergé dans des compartiments S3. Nous fournissons le tf_flowers jeu de données comme jeu de données par défaut pour affiner les modèles. L'ensemble de données comprend des images de cinq types de fleurs. Le jeu de données a été téléchargé depuis TensorFlow sous le Licence Apache 2.0.

# Sample training data is available in this 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}"

Enfin, pour lancer la tâche d'entraînement SageMaker pour affiner le modèle, appelez .fit sur l'objet de la classe Estimator, en passant l'emplacement S3 du jeu de données d'apprentissage :

# Launch a SageMaker Training job by passing s3 path of the training data
tf_ic_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Pour plus d'informations sur l'utilisation du nouvel algorithme de classification d'images SageMaker TensorFlow pour l'apprentissage par transfert sur un jeu de données personnalisé, déployez le modèle affiné, exécutez l'inférence sur le modèle déployé et déployez le modèle pré-formé tel quel sans ajustement préalable sur un ensemble de données personnalisé, consultez l'exemple de bloc-notes suivant : Introduction à SageMaker TensorFlow - Classification des images.

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

Vous pouvez affiner chacun des modèles pré-formés répertoriés dans Modèles de hub TensorFlow à n'importe quel ensemble de données comprenant des images appartenant à n'importe quel nombre de classes. L'objectif est de minimiser l'erreur de prédiction sur les données d'entrée. Le modèle renvoyé par le réglage fin peut être déployé davantage pour l'inférence. Voici les instructions sur la façon dont les données d'apprentissage doivent être formatées pour être entrées dans le modèle :

  • Entrée – Un répertoire avec autant de sous-répertoires que de classes. Chaque sous-répertoire doit contenir des images appartenant à cette classe au format .jpg, .jpeg ou .png.
  • Sortie – Un modèle affiné qui peut être déployé pour l'inférence ou peut être davantage formé à l'aide d'une formation incrémentielle. Une signature de prétraitement et de post-traitement est ajoutée au modèle affiné de sorte qu'il prend une image .jpg brute en entrée et renvoie des probabilités de classe. Un fichier de mappage des index de classe aux étiquettes de classe est enregistré avec les modèles.

Le répertoire d'entrée doit ressembler à l'exemple suivant si les données d'entraînement contiennent des images de deux classes : roses ainsi que dandelion. Le chemin S3 devrait ressembler à s3://bucket_name/input_directory/. Notez la fin / est requis. Les noms des dossiers et roses, dandelion, et les noms de fichiers .jpg peuvent être n'importe quoi. Le fichier de mappage d'étiquettes enregistré avec le modèle formé sur le compartiment S3 mappe les noms de dossier roses et pissenlit aux index de la liste des probabilités de classe générées par le modèle. Le mappage suit l'ordre alphabétique des noms de dossier. Dans l'exemple suivant, l'index 0 dans la liste de sortie du modèle correspond à dandelion, et l'indice 1 correspond à roses.

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

Inférence avec l'algorithme de classification d'images TensorFlow

Les modèles générés peuvent être hébergés pour l'inférence et prendre en charge les formats d'image codés .jpg, .jpeg et .png comme application/x-image type de contenu. L'image d'entrée est redimensionnée automatiquement. La sortie contient les valeurs de probabilité, les étiquettes de classe pour toutes les classes et l'étiquette prédite correspondant à l'index de classe avec la probabilité la plus élevée, encodée au format JSON. Le modèle de classification d'images TensorFlow traite une seule image par requête et ne génère qu'une seule ligne dans le JSON. 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}

If accept est fixé à application/json, alors le modèle ne produit que des probabilités. Pour plus de détails sur la formation et l'inférence, consultez l'exemple de bloc-notes Introduction à SageMaker TensorFlow - Classification des images.

Utiliser les algorithmes intégrés de SageMaker via l'interface utilisateur JumpStart

Vous pouvez également utiliser la classification d'images SageMaker TensorFlow et l'un des autres algorithmes intégrés en quelques clics via l'interface utilisateur JumpStart. JumpStart est une fonctionnalité SageMaker qui vous permet de former et de déployer des algorithmes intégrés et des modèles pré-formés à partir de divers frameworks ML et hubs de modèles via une interface graphique. Il vous permet également de déployer des solutions ML à part entière qui associent des modèles ML et divers autres services AWS pour résoudre un cas d'utilisation ciblé. Vérifier Exécutez la classification de texte avec Amazon SageMaker JumpStart à l'aide des modèles TensorFlow Hub et Hugging Face pour découvrir comment utiliser JumpStart pour entraîner un algorithme ou un modèle pré-entraîné en quelques clics.

Conclusion

Dans cet article, nous avons annoncé le lancement de l'algorithme intégré de classification d'images SageMaker TensorFlow. Nous avons fourni un exemple de code expliquant comment effectuer l'apprentissage par transfert sur un ensemble de données personnalisé à l'aide d'un modèle pré-entraîné de TensorFlow Hub utilisant cet algorithme. Pour plus d'informations, consultez Documentation et par exemple de cahier.


À propos des auteurs

Transférez l'apprentissage pour les modèles de classification d'images TensorFlow dans Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Dr Ashish Khetan est un scientifique appliqué senior avec Algorithmes intégrés d'Amazon SageMaker et aide à développer des algorithmes d'apprentissage automatique. Il a obtenu son doctorat à l'Université de l'Illinois à Urbana-Champaign. Il est un chercheur actif en apprentissage automatique et en inférence statistique, et a publié de nombreux articles dans les conférences NeurIPS, ICML, ICLR, JMLR, ACL et EMNLP.

Transférez l'apprentissage pour les modèles de classification d'images TensorFlow dans Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Dr Vivek Madan est un scientifique appliqué avec le Équipe Amazon SageMaker JumpStart. Il a obtenu son doctorat à l'Université de l'Illinois à Urbana-Champaign et a été chercheur postdoctoral à Georgia Tech. Il est un chercheur actif en apprentissage automatique et en conception d'algorithmes, et a publié des articles dans les conférences EMNLP, ICLR, COLT, FOCS et SODA.

Transférez l'apprentissage pour les modèles de classification d'images TensorFlow dans Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Joao Moura est architecte de solutions spécialisées en IA/ML chez Amazon Web Services. Il se concentre principalement sur les cas d'utilisation du NLP et aide les clients à optimiser la formation et le déploiement de modèles d'apprentissage en profondeur. Il est également un partisan actif des solutions ML low-code et du matériel spécialisé ML.

Transférez l'apprentissage pour les modèles de classification d'images TensorFlow dans Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Raju Penmatcha est un architecte de solutions spécialisé AI / ML chez AWS. Il travaille avec des clients du secteur de l'éducation, du gouvernement et des organisations à but non lucratif sur des projets liés à l'apprentissage automatique et à l'intelligence artificielle, les aidant à créer des solutions à l'aide d'AWS. Lorsqu'il n'aide pas les clients, il aime voyager dans de nouveaux endroits.

Horodatage:

Plus de Apprentissage automatique AWS