Tutoriel : Exécuter une inférence sur une table d'objets à l'aide d'un modèle de classification

Ce tutoriel explique comment créer une table d'objets basée sur les images d'un ensemble de données public, puis comment exécuter une inférence sur cette table d'objets à l'aide du modèle ResNet 50.

Modèle ResNet 50

Le modèle ResNet 50 analyse les fichiers image et génère un lot de vecteurs représentant la probabilité qu'une image appartienne à la classe correspondante (logit). Pour en savoir plus, consultez la section Utilisation de la page TensorFlow Hub du modèle.

L'entrée du modèle ResNet 50 utilise un Tensor de type DType = float32 sous la forme [-1, 224, 224, 3]. Le résultat est un tableau de Tensors de tf.float32 sous la forme [-1, 1024].

Autorisations requises

  • Pour créer l'ensemble de données, vous devez disposer de l'autorisation bigquery.datasets.create.
  • Pour créer la ressource de connexion, vous devez disposer des autorisations suivantes :

    • bigquery.connections.create
    • bigquery.connections.get
  • Pour accorder des autorisations au compte de service de la connexion, vous devez disposer de l'autorisation suivante :

    • resourcemanager.projects.setIamPolicy
  • Pour créer la table d'objets, vous devez disposer des autorisations suivantes :

    • bigquery.tables.create
    • bigquery.tables.update
    • bigquery.connections.delegate
  • Pour créer le bucket, vous devez disposer de l'autorisation storage.buckets.create.

  • Pour importer le modèle dans Cloud Storage, vous devez disposer des autorisations storage.objects.create et storage.objects.get.

  • Pour charger le modèle dans BigQuery ML, vous devez disposer des autorisations suivantes :

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Pour exécuter une inférence, vous devez disposer des autorisations suivantes :

    • bigquery.tables.getData sur la table d'objets
    • bigquery.models.getData sur le modèle
    • bigquery.jobs.create

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

  • BigQuery: You incur storage costs for the object table you create in BigQuery.
  • BigQuery ML: You incur costs for the model you create and the inference you perform in BigQuery ML.
  • Cloud Storage: You incur costs for the objects you store in Cloud Storage.

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Pour plus d'informations sur la tarification de stockage BigQuery, consultez les tarifs de stockage dans la documentation BigQuery.

Pour en savoir plus sur les tarifs de BigQuery ML, consultez la page Tarifs de BigQuery ML dans la documentation BigQuery.

Pour en savoir plus sur les tarifs de Cloud Storage, consultez la page Tarifs de Cloud Storage.

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and BigQuery Connection API APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and BigQuery Connection API APIs.

    Enable the APIs

Créer une réservation

Pour utiliser un modèle importé avec une table d'objets, vous devez créer une réservation qui utilise l'édition Enterprise ou Enterprise Plus de BigQuery, puis créer une attribution de réservation qui utilise le type de job QUERY.

Créer un ensemble de données

Créez un ensemble de données nommé resnet_inference_test :

SQL

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le volet Éditeur, exécutez l'instruction SQL suivante :

    CREATE SCHEMA `PROJECT_ID.resnet_inference_test`;

    en remplaçant PROJECT_ID par l'ID de votre projet :

bq

  1. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

  2. Exécutez la commande bq mk pour créer l'ensemble de données :

    bq mk --dataset --location=us PROJECT_ID:resnet_inference_test

    Remplacez PROJECT_ID par l'ID du projet.

Créer une connexion

Créez une connexion nommée lake-connection :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Cliquez sur Ajouter, puis sur Source de données externe.

  3. Dans la liste Type de connexion, sélectionnez BigLake et fonctions distantes (ressource Cloud).

  4. Dans le champ ID de connexion, saisissez lake-connection.

  5. Cliquez sur Create connection (Créer une connexion).

  6. Dans le volet Informations de connexion, copiez la valeur du champ ID du compte de service, puis enregistrez-la quelque part. Vous avez besoin de ces informations pour accorder des autorisations au compte de service de la connexion.

bq

  1. Dans Cloud Shell, exécutez la commande bq mk pour créer la connexion :

    bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \
    lake-connection
    
  2. Exécutez la commande bq show pour récupérer les informations concernant la connexion :

    bq show --connection us.lake-connection
    
  3. Dans la colonne properties, copiez la valeur de la propriété serviceAccountId et enregistrez-la. Vous avez besoin de ces informations pour accorder des autorisations au compte de service de la connexion.

Créer un bucket Cloud Storage

Créez un bucket Cloud Storage pour contenir les fichiers du modèle.

Accorder des autorisations au compte de service de la connexion

Console

  1. Accédez à la page IAM et administration.

    Accéder à IAM et administration

  2. Cliquez sur Accorder l'accès.

    La boîte de dialogue Ajouter des comptes principaux s'ouvre.

  3. Dans le champ Nouveaux comptes principaux, saisissez l'ID du compte de service que vous avez copié précédemment.

  4. Dans le champ Sélectionnez un rôle, sélectionnez Cloud Storage, puis Lecteur d'objets Storage.

  5. Cliquez sur Enregistrer.

gcloud

Dans Cloud Shell, exécutez la commande gcloud storage buckets add-iam-policy-binding :

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:MEMBER \
--role=roles/storage.objectViewer

Remplacez MEMBER par l'ID du compte de service que vous avez copié précédemment. Remplacez BUCKET_NAME par le nom du bucket que vous venez de créer.

Pour plus d'informations, consultez la section Ajouter un compte principal à une stratégie au niveau du bucket.

Créer une table d'objets

Créez une table d'objets nommée vision_images basée sur les fichiers image du bucket public gs://cloud-samples-data/vision :

SQL

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le volet Éditeur, exécutez l'instruction SQL suivante :

    CREATE EXTERNAL TABLE resnet_inference_test.vision_images
    WITH CONNECTION `us.lake-connection`
    OPTIONS(
      object_metadata = 'SIMPLE',
      uris = ['gs://cloud-samples-data/vision/*.jpg']
    );

bq

Dans Cloud Shell, exécutez la commande bq mk pour créer la connexion :

bq mk --table \
--external_table_definition='gs://cloud-samples-data/vision/*.jpg@us.lake-connection' \
--object_metadata=SIMPLE \
resnet_inference_test.vision_images

Importer le modèle dans Cloud Storage

Récupérez les fichiers du modèle et rendez-les disponibles dans Cloud Storage :

  1. Téléchargez le modèle ResNet 50 sur votre ordinateur local. Vous obtenez ainsi un fichier saved_model.pb et un dossier variables pour le modèle.
  2. Importez le fichier saved_model.pb et le dossier variables dans le bucket que vous avez créé précédemment.

Charger le modèle dans BigQuery ML

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le volet Éditeur, exécutez l'instruction SQL suivante :

    CREATE MODEL `resnet_inference_test.resnet`
    OPTIONS(
      model_type = 'TENSORFLOW',
      model_path = 'gs://BUCKET_NAME/*');

    Remplacez BUCKET_NAME par le nom du bucket que vous avez créé précédemment.

Inspecter le modèle

Inspectez le modèle importé pour afficher ses champs d'entrée et de sortie :

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le volet Explorateur, développez votre projet, l'ensemble de données resnet_inference_test, puis le nœud Modèles.

  3. Cliquez sur le modèle resnet.

  4. Dans le volet du modèle qui s'affiche, cliquez sur l'onglet Schéma.

  5. Consultez la section Étiquettes. Cela permet d'identifier les champs générés par le modèle. Dans le cas présent, la valeur du nom de champ est activation_49.

  6. Examinez la section Caractéristiques. Cela permet d'identifier les champs qui doivent être saisis dans le modèle. Vous les référencez dans l'instruction SELECT pour la fonction ML.DECODE_IMAGE. Dans le cas présent, la valeur du nom de champ est input_1.

Exécuter une inférence

Exécutez l'inférence sur la table d'objets vision_images à l'aide du modèle resnet :

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le volet Éditeur, exécutez l'instruction SQL suivante :

    SELECT *
    FROM ML.PREDICT(
      MODEL `resnet_inference_test.resnet`,
      (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 224, 224, FALSE) AS input_1
      FROM resnet_inference_test.vision_images)
    );

    Le résultat doit ressembler à ce qui suit :

    -------------------------------------------------------------------------------------------------------------------------------------
    | activation_49           | uri                                                                                           | input_1 |
    ------------------------------------------------------------------------------------------------------------------------------------
    | 1.0254175464297077e-07  | gs://cloud-samples-data/vision/automl_classification/flowers/daisy/21652746_cc379e0eea_m.jpg  | 0.0     |
    ------------------------------------------------------------------------------------------------------------------------------------
    | 2.1671139620593749e-06  |                                                                                               | 0.0     |
    --------------------------                                                                                               -----------
    | 8.346052027263795e-08   |                                                                                               | 0.0     |
    --------------------------                                                                                               -----------
    | 1.159310958342985e-08   |                                                                                               | 0.0     |
    ------------------------------------------------------------------------------------------------------------------------------------
    

Effectuer un nettoyage

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.