L'entraînement à l'aide des algorithmes intégrés d'AI Platform Training vous permet d'envoyer votre ensemble de données et d'entraîner un modèle sans avoir à écrire un code d'entraînement. Cette page explique comment fonctionne l'algorithme intégré de détection d'objets au sein des images et comment l'utiliser.
Présentation
L'algorithme intégré de détection d'objets au sein des images utilise vos ensembles de données d'entraînement et de validation pour entraîner des modèles en continu. Il renvoie ensuite le modèle SavedModel le plus précis généré pendant l'exécution de la tâche d'entraînement. Vous pouvez également utiliser le réglage d'hyperparamètres pour obtenir le modèle le plus précis possible. Le modèle SavedModel exporté peut être utilisé directement pour la prédiction, soit en local, soit dans AI Platform Prediction pour le service de production.
Limites
Les algorithmes d'images intégrés permettent d'effectuer des entraînements avec des processeurs, des GPU ou des TPU uniques. Le modèle SavedModel obtenu est compatible avec les processeurs et les GPU.
Les fonctionnalités suivantes ne sont pas compatibles avec l'entraînement à l'aide de l'algorithme intégré de détection d'objets au sein des images :
- Entraînement distribué. Pour exécuter une tâche d'entraînement distribué TensorFlow sur AI PlatformTraining, vous devez créer une application d'entraînement.
- Entraînement multi-GPU. Les algorithmes intégrés utilisent un seul GPU à la fois. Pour tirer pleinement parti de l'entraînement avec plusieurs GPU sur une même machine, vous devez créer une application d'entraînement. Pour en savoir plus, consultez la page concernant les types de machines.
Types de machines compatibles
Voici les niveaux d'évolutivité et types de machines d'AI Platform Training qui sont compatibles :
- Niveau d'évolutivité
BASIC
- Niveau d'évolutivité
BASIC_TPU
- Niveau d'évolutivité
CUSTOM
avec n'importe lequel des types de machine Compute Engine compatible avec AI Platform Training. - Niveau d'évolutivité
CUSTOM
avec n'importe lequel des anciens types de machine suivants :standard
large_model
complex_model_s
complex_model_m
complex_model_l
standard_gpu
standard_p100
standard_v100
large_model_v100
complex_model_m_gpu
complex_model_l_gpu
complex_model_m_p100
complex_model_m_v100
complex_model_l_v100
TPU_V2
(8 cœurs)
Autoriser Cloud TPU à accéder à votre projet
Pour autoriser le nom de compte de service Cloud TPU associé à votre projet Google Cloud, procédez comme suit :
Obtenez le nom de votre compte de service Cloud TPU en appelant
projects.getConfig
. Exemple :PROJECT_ID=PROJECT_ID curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://ml.googleapis.com/v1/projects/$PROJECT_ID:getConfig
Enregistrez les valeurs des champs
serviceAccountProject
ettpuServiceAccount
renvoyées par l'API.Initialisez le compte de service Cloud TPU :
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" -d '{}' \ https://serviceusage.googleapis.com/v1beta1/projects/<serviceAccountProject>/services/tpu.googleapis.com:generateServiceIdentity
Ajoutez ensuite le compte de service Cloud TPU en tant que membre de votre projet, avec le rôle Agent de service Cloud ML. Effectuez les étapes suivantes dans Google Cloud Console ou à l'aide de l'outil de ligne de commande gcloud
:
Console
- Connectez-vous à Google Cloud Console, puis sélectionnez le projet dans lequel vous utilisez le TPU.
- Choisissez IAM et administration > IAM.
- Cliquez sur le bouton Ajouter pour ajouter un membre au projet.
- Saisissez le compte de service TPU dans la zone de texte Membres.
- Cliquez sur la liste déroulante Rôles.
- Activez le rôle Agent de service Cloud ML (Agents de service > Agent de service Cloud ML).
gcloud
Définissez les variables d'environnement contenant votre ID de projet et le compte de service Cloud TPU :
PROJECT_ID=PROJECT_ID SVC_ACCOUNT=your-tpu-sa-123@your-tpu-sa.google.com.iam.gserviceaccount.com
Attribuez le rôle
ml.serviceAgent
au compte de service Cloud TPU :gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent
Pour en savoir plus sur l'attribution de rôles aux comptes de service, consultez la documentation IAM.
Mettre en forme les données d'entrée pour l'entraînement
L'algorithme intégré de détection d'objets au sein des images exige que vos données d'entrée soient au format tf.Examples
et enregistrées dans des fichiers TFRecord. La structure de données tf.Example
et le format de fichier TFRecord sont tous deux conçus pour une lecture efficace des données avec TensorFlow.
Le format TFRecord est un format simple utilisé pour le stockage d'une séquence d'enregistrements binaires.
Dans ce cas, tous les enregistrements contiennent des représentations binaires d'images. Chaque image, ainsi que sa ou ses étiquettes de classe, est représentée au format tf.Example
. Vous pouvez enregistrer de nombreuses images tf.Example
dans un seul fichier TFRecord. Vous pouvez également partitionner un ensemble de données volumineux entre plusieurs fichiers TFRecord.
En savoir plus sur TFRecord et tf.Example
Convertir vos images au format TFRecord
Pour convertir des images au format requis pour obtenir des prédictions, suivez le guide Préparer les entrées pour la détection d'objets dans le guide de Model Garden de TensorFlow.
Vérifier les autorisations du bucket Cloud Storage
Pour stocker vos données, utilisez un bucket Cloud Storage dans le projet Google Cloud que vous utilisez pour exécuter les tâches AI Platform Training. Sinon, accordez à AI Platform Training l'accès au bucket Cloud Storage où vos données sont stockées.
Format d'entrée requis
Pour effectuer des entraînements avec l'algorithme intégré de détection d'objets au sein des images, vos données d'image doivent être structurées au format tf.Example
avec les champs suivants :
image/encoded
est l'image brute encodée sous forme de chaîne.image/object/class/label
est une liste d'étiquettes d'entiers pour l'image correspondante (une étiquette par cadre).L'ensemble d'étiquettes d'entiers utilisées pour votre ensemble de données doit être une séquence consécutive commençant par
1
. Par exemple, si votre ensemble de données comporte cinq classes, chaque étiquette doit être un entier dans l'intervalle[1, 5]
.image/object/bbox/xmin
est une liste de coordonnées X normalisées à gauche pour l'image correspondante (une coordonnée par cadre). Chaque coordonnée doit se trouver dans l'intervalle[0, 1]
.image/object/bbox/xmax
est une liste de coordonnées X normalisées à droite pour l'image correspondante (une coordonnée par cadre). Chaque coordonnée doit se trouver dans l'intervalle[0, 1]
.image/object/bbox/ymin
est une liste de coordonnées Y normalisées en haut pour l'image correspondante (une coordonnée par cadre). Chaque coordonnée doit se trouver dans l'intervalle[0, 1]
.{
image/object/bbox/ymax
est une liste de coordonnées Y normalisées en bas pour l'image correspondante (une coordonnée par case). Chaque coordonnée doit se trouver dans l'intervalle[0, 1]
.
L'exemple suivant montre la structure d'un objet tf.Example
pour une image contenant deux cadres de délimitation. Le premier cadre est étiqueté 1
, son coin supérieur gauche correspond aux coordonnées normalisées (0.1, 0.4)
et son coin inférieur droit aux coordonnées normalisées (0.5, 0.8)
. Le deuxième cadre est étiqueté 2
, son coin supérieur gauche correspond aux coordonnées normalisées (0.3, 0.5)
et son coin inférieur droit aux coordonnées normalisées (0.4, 0.7)
.
{
'image/encoded': '<encoded image data>',
'image/object/class/label': [1, 2],
'image/object/bbox/xmin': [0.1, 0.3],
'image/object/bbox/xmax': [0.5, 0.4],
'image/object/bbox/ymin': [0.4, 0.5],
'image/object/bbox/ymax': [0.8, 0.7]
}
Ce format tf.Example
suit celui utilisé dans le script de détection d'objets TFRecord.
Obtenir le meilleur modèle SavedModel en sortie
Une fois l'entraînement terminé, AI Platform Training écrit un modèle TensorFlow SavedModel dans le bucket Cloud Storage que vous avez spécifié comme jobDir
lorsque vous avez envoyé la tâche. Le modèle SavedModel est écrit dans jobDir/model
. Par exemple, si vous envoyez la tâche dans gs://your-bucket-name/your-job-dir
, AI Platform Training écrit le modèle SavedModel dans gs://your-bucket-name/your-job-dir/model
.
Si vous avez activé le réglage d'hyperparamètres, AI Platform Training renvoie le modèle TensorFlow SavedModel avec la précision la plus élevée obtenue pendant l'entraînement. Par exemple, si vous avez envoyé une tâche d'entraînement composée de 2 500 étapes et que la précision était la plus élevée à 2 000 étapes, vous obtenez un modèle TensorFlow SavedModel enregistré à partir de ce point particulier.
Chaque essai d'AI Platform Training écrit le modèle TensorFlow SavedModel avec la plus grande précision dans son propre répertoire au sein de votre bucket Cloud Storage. Par exemple, gs://your-bucket-name/your-job-dir/model/trial_{trial_id}
.
La signature du modèle SavedModel obtenu est la suivante :
signature_def['serving_default']:
The given SavedModel SignatureDef contains the following input(s):
inputs['encoded_image'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: encoded_image_string_tensor:0
inputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: key:0
The given SavedModel SignatureDef contains the following output(s):
outputs['detection_boxes'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100, 4)
name: detection_boxes:0
outputs['detection_classes'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100)
name: detection_classes:0
outputs['detection_scores'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100)
name: detection_scores:0
outputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: Identity:0
outputs['num_detections'] tensor_info:
dtype: DT_FLOAT
shape: (-1)
name: num_detections:0
Method name is: tensorflow/serving/predict
Entrées :
encoded_image
: octets bruts de l'image (non décodés). Cette valeur est identique à la valeurimage/encoded
stockée dans tf.Example.key
: identifiant de valeur de chaîne de l'entrée de prédiction. Cette valeur est transmise via la clé de sortie (key
). Pour la prédiction par lot, cela permet de mapper les données de sortie de prédiction aux données d'entrée.
Sorties :
num_detections
: nombre de cadres de délimitation détectés.detection_boxes
: liste des coordonnées ([ymin, xmin, ymax, xmax
]) relatives (valeur [0,1
]) des cadres de délimitation pour la détection.detection_classes
: liste des étiquettes de classe (entier) prédites pour chaque cadre de détection dansdetection_boxes
.detection_scores
: liste descores
pour chaque cadre de détection dansdetection_boxes
.key
: clé de sortie.
Voici un exemple de sorties de prédiction :
{u'detection_classes': [1.0, 3.0, 3.0, ...],
u'key': u'test_key',
u'num_detections': 100.0,
u'detection_scores': [0.24401935935020447, 0.19375669956207275, 0.18359294533729553, ...]]}
Exemples de configurations
Si vous envoyez une tâche à l'aide de gcloud
, vous devez créer un fichier config.yaml
contenant les spécifications de votre type de machine et du réglage d'hyperparamètres. Si vous utilisez Google Cloud Console, vous n'avez pas besoin de créer ce fichier. Découvrez comment envoyer une tâche d'entraînement.
L'exemple de fichier config.yaml
suivant montre comment allouer des ressources TPU pour votre tâche d'entraînement :
cat << EOF > config.yaml
trainingInput:
scaleTier: CUSTOM
masterType: n1-standard-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: NVIDIA_TESLA_P100
count: 1
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
tpuTfVersion: 1.14
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
EOF
Utilisez ensuite votre fichier config.yaml
pour envoyer une tâche d'entraînement.
Configurer le réglage d'hyperparamètres
Pour utiliser le réglage d'hyperparamètres, incluez votre configuration de réglage d'hyperparamètres dans le même fichier config.yaml
que la configuration de votre machine.
Vous trouverez de brèves explications sur chaque hyperparamètre dans Google Cloud Console, ainsi qu'une explication plus complète dans la documentation de référence sur l'algorithme intégré de détection d'objets au sein des images.
L'exemple de fichier config.yaml
suivant montre comment allouer des ressources TPU pour votre tâche d'entraînement et inclut la configuration du réglage d'hyperparamètres :
cat << EOF > config.yaml
trainingInput:
# Use a cluster with many workers and a few parameter servers.
scaleTier: CUSTOM
masterType: n1-standard-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: NVIDIA_TESLA_P100
count: 1
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
# The following are hyperparameter configs.
hyperparameters:
goal: MAXIMIZE
hyperparameterMetricTag: "AP"
maxTrials: 6
maxParallelTrials: 3
enableTrialEarlyStopping: True
params:
- parameterName: initial_learning_rate
type: DOUBLE
minValue: 0.001
maxValue: 0.1
scaleType: UNIT_LOG_SCALE
EOF
Envoyer une tâche d'entraînement pour la détection d'objets au sein des images
Cette section explique comment envoyer une tâche d'entraînement à l'aide de l'algorithme intégré de détection d'objets au sein des images.
Console
Sélectionner un algorithme
Accédez à la page "Tâches" d'AI Platform Training dans Google Cloud Console :
Cliquez sur le bouton Nouvelle tâche d'entraînement. Dans les options qui s'affichent en dessous, cliquez sur Entraînement de l'algorithme intégré.
Sur la page Créer une tâche d'entraînement, sélectionnez image object detection (Détection d'objets au sein des images), puis cliquez sur Suivant.
Sélectionner vos données d'entraînement et de validation
Dans le menu déroulant sous Données d'entraînement, indiquez si vous utilisez un ou plusieurs fichiers :
- Pour un seul fichier, sélectionnez "Utiliser un fichier unique stocké dans un bucket GCS".
- Pour plusieurs fichiers, sélectionnez "Utiliser plusieurs fichiers stockés dans un répertoire Cloud Storage".
Pour Chemin d'accès au répertoire, cliquez sur Parcourir. Dans le panneau de droite, cliquez sur le nom du bucket dans lequel vous avez importé les données d'entraînement, puis accédez à votre fichier.
Si vous sélectionnez plusieurs fichiers, utilisez des caractères génériques dans Nom générique. Le chemin d'accès GCS complet s'affiche en dessous pour vous aider à confirmer qu'il est correct.
Dans le menu déroulant sous Données de validation, indiquez si vous utilisez un ou plusieurs fichiers :
- Pour un seul fichier, sélectionnez "Utiliser un fichier unique stocké dans un bucket GCS".
- Pour plusieurs fichiers, sélectionnez "Utiliser plusieurs fichiers stockés dans un répertoire Cloud Storage".
Pour Chemin d'accès au répertoire, cliquez sur Parcourir. Dans le panneau de droite, cliquez sur le nom du bucket dans lequel vous avez importé les données d'entraînement, puis accédez à votre fichier.
Si vous sélectionnez plusieurs fichiers, utilisez des caractères génériques dans Nom générique. Le chemin d'accès GCS complet s'affiche en dessous pour vous aider à confirmer qu'il est correct.
Dans Répertoire de sortie, saisissez le chemin d'accès à votre bucket Cloud Storage, où vous souhaitez qu'AI Platform Training stocke les résultats de votre tâche d'entraînement. Vous pouvez renseigner directement le chemin de votre bucket Cloud Storage ou cliquer sur le bouton Parcourir pour le sélectionner.
Pour maintenir une bonne organisation, créez un répertoire dans votre bucket Cloud Storage destiné à cette tâche d'entraînement. Utilisez pour cela le panneau Parcourir.
Cliquez sur Suivant.
Définir les arguments algorithmiques
Chaque argument spécifique à un algorithme affiche une valeur par défaut pour les tâches d'entraînement sans réglage d'hyperparamètres. Si vous activez le réglage d'hyperparamètres pour un argument algorithmique, vous devez spécifier ses valeurs minimale et maximale.
Pour en savoir plus sur tous les arguments algorithmiques, cliquez sur les liens dans Google Cloud Console et consultez la documentation de référence sur l'algorithme intégré de détection d'objets au sein des images.
Envoyer la tâche
Dans l'onglet Paramètres de la tâche :
- Saisissez un ID de tâche unique.
- Entrez une région disponible (telle que "us-central1").
- Pour les types de machines, sélectionnez "CUSTOM" pour le niveau d'évolutivité.
Une section vous invitant à indiquer les spécifications de votre cluster personnalisé s'affiche.
- Sous Type de maître, sélectionnez un type de machine disponible.
- Si vous souhaitez utiliser des TPU, définissez le type de nœud de calcul sur cloud_tpu. Le nombre de nœuds de calcul est défini sur 1 par défaut.
Cliquez sur Terminé pour envoyer la tâche d'entraînement.
gcloud
Définissez des variables d'environnement pour votre tâche :
PROJECT_ID="YOUR_PROJECT_ID" BUCKET_NAME="YOUR_BUCKET_NAME" # Specify the same region where your data is stored REGION="YOUR_REGION" gcloud config set project $PROJECT_ID gcloud config set compute/region $REGION # Set Cloud Storage paths to your training and validation data # Include a wildcard if you select multiple files. TRAINING_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/train-*.tfrecord" VALIDATION_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/eval-*.tfrecord" # Specify the Docker container for your built-in algorithm selection IMAGE_URI="gcr.io/cloud-ml-algos/image_object_detection:latest" # Variables for constructing descriptive names for JOB_ID and JOB_DIR DATASET_NAME="coco" ALGORITHM="object_detection" MODEL_NAME="${DATASET_NAME}_${ALGORITHM}" DATE="$(date '+%Y%m%d_%H%M%S')" # Specify an ID for this job JOB_ID="${MODEL_NAME}_${DATE}" # Specify the directory where you want your training outputs to be stored JOB_DIR="gs://${BUCKET_NAME}/algorithm_training/${JOB_ID}"
Envoyez la tâche :
gcloud ai-platform jobs submit training $JOB_ID \ --region=$REGION \ --config=config.yaml \ --job-dir=$JOB_DIR \ -- \ --training_data_path=$TRAINING_DATA_PATH \ --validation_data_path=$VALIDATION_DATA_PATH \ --train_batch_size=64 \ --num_eval_images=500 \ --train_steps_per_eval=2000 \ --max_steps=22500 \ --num_classes=90 \ --warmup_steps=500 \ --initial_learning_rate=0.08 \ --fpn_type="nasfpn" \ --aug_scale_min=0.8 \ --aug_scale_max=1.2
Une fois la tâche envoyée, vous pouvez afficher les journaux à l'aide des commandes
gcloud
suivantes :gcloud ai-platform jobs describe $JOB_ID gcloud ai-platform jobs stream-logs $JOB_ID
Étape suivante
- Découvrez comment utiliser votre propre ensemble de données avec le script de détection d'objets TFRecord.
- Consultez la documentation de référence sur l'algorithme intégré de détection d'objets au sein des images, afin d'en savoir plus sur les différents paramètres.