Détection d'objets - 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.

Détection d'objets - TensorFlow

L'algorithme Amazon SageMaker Object Detection 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 Model Garden. 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 détection d'objets prend une image en entrée et génère en sortie une liste de zones de délimitation. 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 détection d' SageMaker objets

Vous pouvez utiliser Object Detection TensorFlow en tant qu'algorithme SageMaker intégré d'Amazon. La section suivante décrit comment utiliser la détection d'objets TensorFlow avec le SDK SageMaker Python. Pour plus d'informations sur l'utilisation de la détection d'objets, TensorFlow depuis l'interface utilisateur Amazon SageMaker Studio Classic, consultezFormez, déployez et évaluez des modèles préentraînés avec SageMaker JumpStart.

L' TensorFlow algorithme Object Detection prend en charge l'apprentissage par transfert à l'aide de l'un des TensorFlow modèles préentraînés compatibles. Pour obtenir la liste de tous les modèles pré-entraînés disponibles, consultez TensorFlow Modèles. Chaque modèle pré-entraîné possède un model_id unique. L'exemple suivant utilise ResNet 50 (model_id:tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8) 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 de plus amples informations, veuillez consulter Détection d'objets - 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. Par exemple, pour les modèles plus grands, le nombre d'époques par défaut est inférieur.

Cet exemple utilise le jeu de données PennFudanPed, qui contient des images de piétons dans la rue. Nous avons pré-téléchargé le jeu de données et l'avons mis à disposition 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-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8", "*" 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 hyperparameters 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" # Sample training data is available in this bucket training_data_bucket = f"jumpstart-cache-prod-{aws_region}" training_data_prefix = "training-datasets/PennFudanPed_COCO_format/" training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}" output_bucket = sess.default_bucket() output_prefix = "jumpstart-example-od-training" s3_output_location = f"s3://{output_bucket}/{output_prefix}/output" # Create an Estimator instance tf_od_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, ) # Launch a training job tf_od_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Pour plus d'informations sur l'utilisation de l' TensorFlow algorithme de détection d' SageMaker objets pour l'apprentissage par transfert sur un ensemble de données personnalisé, consultez le bloc-notes Introduction à SageMaker TensorFlow la détection d'objets.

Interface d'entrée et de sortie pour l' TensorFlow algorithme de détection d'objets

Chacun des modèles préentraînés répertoriés dans TensorFlow Modèles 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 détection d'objets.

  • Training data input format (Format d'entrée des données d'entraînement) : vos données d'entraînement doivent être dans un sous-répertoire nommé images, contenant un fichier annotations.json.

Voici un exemple de structure du répertoire d'entrée. 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 |--images |--abc.png |--def.png |--annotations.json

Le fichier annotations.json doit contenir des informations sur les cadres de délimitation et leurs étiquettes de classe sous la forme d'un dictionnaire "images" et de clés "annotations". La valeur de la clé "images" doit être une liste de dictionnaires. Il doit y avoir un dictionnaire pour chaque image avec les informations suivantes : {"file_name": image_name, "height": height, "width": width, "id": image_id}. La valeur de la clé "annotations" doit également être une liste de dictionnaires. Il doit y avoir un dictionnaire pour chaque cadre de délimitation avec les informations suivantes : {"image_id": image_id, "bbox": [xmin, ymin, xmax, ymax], "category_id": bbox_label}.

Après la formation, un fichier de mappage d'étiquettes et un modèle entraîné sont enregistrés dans votre compartiment Amazon S3.

Entraînement incrémentiel

Vous pouvez amorcer l'entraînement d'un nouveau modèle à l'aide d'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 un modèle de détection d' SageMaker objets qu'avec un autre TensorFlow modèle de détection d'objets 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 plus d'informations sur l'utilisation de l'entraînement progressif avec le bloc-notes « Détection SageMaker d'objets » TensorFlow, consultez le bloc-notes « Introduction à SageMaker TensorFlow la détection d'objets ».

Inférence avec l'algorithme de détection d'objets TensorFlow

Vous pouvez héberger le modèle affiné issu de votre entraînement à la détection d' TensorFlow objets à 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' TensorFlow algorithme Object Detection - redimensionne automatiquement les images d'entrée.

L'exécution de l'inférence donne des cadres de délimitation, des classes prédites et les scores de chaque prédiction codée au format JSON. Le TensorFlow modèle Object Detection - 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 {"normalized_boxes":[[xmin1, xmax1, ymin1, ymax1],....], "classes":[classidx1, class_idx2,...], "scores":[score_1, score_2,...], "labels": [label1, label2, ...], "tensorflow_model_output":<original output of the model>}

Si accept est défini sur application/json, le modèle ne génère que des boîtes, des classes et des scores normalisés.

Recommandation d'instance Amazon EC2 pour l'algorithme de détection d'objets TensorFlow

L' TensorFlow algorithme Object Detection - prend en charge toutes les instances de GPU pour l'entraînement, notamment :

  • ml.p2.xlarge

  • ml.p2.16xlarge

  • ml.p3.2xlarge

  • ml.p3.16xlarge

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 ou P3) peuvent être utilisées pour l'inférence. Pour obtenir une liste complète des instances de SageMaker formation et d'inférence dans toutes AWS les régions, consultez Amazon SageMaker Pricing.

Détection d'objets - TensorFlow exemples de carnets

Pour plus d'informations sur l'utilisation de l' TensorFlow algorithme de détection d' SageMaker objets pour l'apprentissage par transfert sur un ensemble de données personnalisé, consultez le bloc-notes Introduction à SageMaker TensorFlow la détection d'objets.

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).