Entraînement à l'aide de l'algorithme intégré de classification d'images

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 classification d'images et comment l'utiliser.

Présentation

L'algorithme intégré de classification d'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 classification d'images :

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

Mettre en forme les données d'entrée pour l'entraînement

L'algorithme intégré de classification d'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

TensorFlow propose un script que vous pouvez utiliser pour convertir vos images JPEG au format TFRecord.

Vous pouvez utiliser le script dans les cas suivants :

  • Vous stockez les images dans Cloud Storage.
  • Vous disposez de fichiers CSV contenant les chemins d'accès aux images dans Cloud Storage, ainsi que les étiquettes correspondantes. Exemple :

    gs://cloud-ml-data/img/flower_photos/daisy/754296579_30a9ae018c_n.jpg,daisy
    gs://cloud-ml-data/img/flower_photos/dandelion/18089878729_907ed2c7cd_m.jpg,dandelion
    
  • Vous stockez ces fichiers CSV dans Cloud Storage.

L'exemple suivant montre comment exécuter le script :

  1. Téléchargez le script :

    curl https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/jpeg_to_tf_record.py > ./jpeg_to_tf_record.py
    
  2. Si vous ne l'avez pas déjà fait, définissez des variables pour l'ID de votre projet et le nom du bucket :

    PROJECT_ID="YOUR_PROJECT_ID"
    BUCKET_NAME="YOUR_BUCKET_NAME"
    
  3. Créez une liste de toutes les étiquettes possibles pour votre ensemble de données dans un fichier temporaire :

    cat << EOF > /tmp/labels.txt
    daisy
    dandelion
    roses
    sunflowers
    tulips
    EOF
    
  4. Exécutez le script à l'aide des données de fleurs provenant du bucket public cloud-ml-data et de votre liste d'étiquettes :

    python -m jpeg_to_tf_record.py \
           --train_csv gs://cloud-ml-data/img/flower_photos/train_set.csv \
           --validation_csv gs://cloud-ml-data/img/flower_photos/eval_set.csv \
           --labels_file /tmp/labels.txt \
           --project_id $PROJECT_ID \
           --output_dir gs://$BUCKET_NAME/flowers_as_tf_record
    

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 classification d'images, vos données d'image doivent être structurées au format tf.Example avec les champs suivants :

  • image/encoded correspond à la chaîne d'image brute.

  • image/class/label est une étiquette d'entier unique pour l'image correspondante. Les étiquettes multiples ne sont pas acceptées.

    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 compris dans l'intervalle [1, 5].

Exemple :

{
    'image/encoded': '<encoded image data>',
    'image/class/label': 2
}

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['image_bytes'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: Placeholder:0
    inputs['key'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: key:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['classes'] tensor_info:
        dtype: DT_INT64
        shape: (-1)
        name: ArgMax:0
    outputs['key'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: Identity:0
    outputs['probabilities'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 1000)
        name: softmax_tensor:0
  Method name is: tensorflow/serving/predict

Entrées :

  • image_bytes : octets bruts de l'image (non décodés). Cette valeur est identique à la valeur image/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 :

  • classes : étiquette de classe (entier) prédite, qui est celle dont la probabilité est la plus élevée.
  • key : clé de sortie.
  • probabilities : probabilité (probability) (entre 0 et 1) pour chaque classe (class) (de 0 à la valeur définie pour num_classes).

Voici un exemple d'entrées et de sorties de prédiction :

prediction_input: {
  'image_bytes': 'some_raw_image_bytes',
  'key': ['test_key'])
}

prediction_output: {
  'probabilities': [[0.1, 0.3, 0.6]],
  'classes': [2],
  'key': ['test_key'],
}

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:
  # Use a cluster with many workers and a few parameter servers.
  scaleTier: CUSTOM
  masterType: n1-highmem-16
  masterConfig:
    imageUri: gcr.io/cloud-ml-algos/image_classification:latest
  workerType:  cloud_tpu
  workerConfig:
   imageUri: gcr.io/cloud-ml-algos/image_classification:latest
   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 classification d'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-highmem-16
  masterConfig:
    imageUri: gcr.io/cloud-ml-algos/image_classification:latest
  workerType:  cloud_tpu
  workerConfig:
   imageUri: gcr.io/cloud-ml-algos/image_classification:latest
   tpuTfVersion: 1.14
   acceleratorConfig:
     type: TPU_V2
     count: 8
  workerCount: 1
  # The following are hyperparameter configs.
  hyperparameters:
   goal: MAXIMIZE
   hyperparameterMetricTag: top_1_accuracy
   maxTrials: 6
   maxParallelTrials: 3
   enableTrialEarlyStopping: True
   params:
   - parameterName: initial_learning_rate
     type: DOUBLE
     minValue: 0.001
     maxValue: 0.2
     scaleType: UNIT_LOG_SCALE
EOF

Envoyer une tâche d'entraînement pour la classification d'images

Cette section explique comment envoyer une tâche d'entraînement à l'aide de l'algorithme intégré de classification d'images.

Console

Sélectionner un algorithme

  1. Accédez à la page "Tâches" d'AI Platform Training dans Google Cloud Console :

    Page "Tâches" d'AI Platform Training

  2. 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é.

  3. Sur la page Créer une tâche d'entraînement, sélectionnez Classification d'images, puis cliquez sur Suivant.

Sélectionner vos données d'entraînement et de validation

  1. 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".
  2. 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.

  3. 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".
  4. 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.

  5. 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 classification d'images.

Envoyer la tâche

Dans l'onglet Paramètres de la tâche :

  1. Saisissez un ID de tâche unique.
  2. Entrez une région disponible (telle que "us-central1").
  3. 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.
    1. Sous Type de maître, sélectionnez un type de machine disponible.
    2. 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

  1. 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_classification:latest"
    
    # Variables for constructing descriptive names for JOB_ID and JOB_DIR
    DATASET_NAME="flowers"
    ALGORITHM="image_classification"
    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}"
    
  2. Envoyez la tâche :

    gcloud ai-platform jobs submit training $JOB_ID \
      --region=$REGION \
      --config=config.yaml \
      --master-image-uri=$IMAGE_URI \
      -- \
      --training_data_path=$TRAINING_DATA_PATH \
      --validation_data_path=$VALIDATION_DATA_PATH \
      --job-dir=$JOB_DIR \
      --max_steps=30000 \
      --train_batch_size=128 \
      --num_classes=5 \
      --num_eval_images=100 \
      --initial_learning_rate=0.128 \
      --warmup_steps=1000 \
      --model_type='efficientnet-b4'
  3. 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