Tutoriel : Exécuter une inférence sur une table d'objets à l'aide d'un modèle de vecteur de caractéristiques
Ce tutoriel explique comment créer une table d'objets basée sur les images de l'ensemble de données sur les fleurs, puis comment exécuter une inférence sur cette table d'objets à l'aide du modèle MobileNet V3.
Modèle MobileNet V3
Le modèle MobileNet V3 analyse des fichiers image et renvoie un tableau de vecteurs de caractéristiques. Le tableau de vecteurs de caractéristiques est une liste d'éléments numériques qui décrivent les caractéristiques des images analysées. Chaque vecteur de caractéristiques décrit un espace de caractéristiques multidimensionnel et fournit les coordonnées de l'image dans cet espace. Vous pouvez utiliser les informations des vecteurs de caractéristiques sur une image pour affiner sa classification, par exemple en utilisant la similarité cosinus pour regrouper des images similaires.
L'entrée du modèle MobileNet V3 utilise un Tensor de DType
tf.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 l'ensemble de données et le modèle dans Cloud Storage, vous devez disposer des autorisations
storage.objects.create
etstorage.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'objetsbigquery.models.getData
sur le modèlebigquery.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.
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
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API 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é mobilenet_inference_test
:
SQL
Accédez à la page BigQuery.
Dans le volet Éditeur, exécutez l'instruction SQL suivante :
CREATE SCHEMA `PROJECT_ID.mobilenet_inference_test`;
en remplaçant
PROJECT_ID
par l'ID de votre projet :
bq
Dans la console Google Cloud, activez Cloud Shell.
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
Accédez à la page BigQuery.
Cliquez sur
Ajouter, puis sur Source de données externe.Dans la liste Type de connexion, sélectionnez BigLake et fonctions distantes (ressource Cloud).
Dans le champ ID de connexion, saisissez
lake-connection
.Cliquez sur Créer une connexion.
Dans le volet Explorateur, développez votre projet, développez le nœud Connexions externes, puis sélectionnez la connexion
us.lake-connection
.Dans le volet Informations de connexion, copiez la valeur du champ ID du compte de service. Vous avez besoin de ces informations pour accorder une autorisation au compte de service de la connexion sur le bucket Cloud Storage que vous créez à l'étape suivante.
bq
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
Exécutez la commande
bq show
pour récupérer les informations concernant la connexion :bq show --connection us.lake-connection
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.
- Créez deux dossiers dans le bucket, l'un nommé
mobilenet
pour les fichiers du modèle et l'autre nomméflowers
pour l'ensemble de données.
Accorder des autorisations au compte de service de la connexion
Console
Accédez à la page IAM et administration.
Cliquez sur Accorder l'accès.
La boîte de dialogue Ajouter des comptes principaux s'ouvre.
Dans le champ Nouveaux comptes principaux, saisissez l'ID du compte de service que vous avez copié précédemment.
Dans le champ Sélectionnez un rôle, sélectionnez Cloud Storage, puis Lecteur d'objets Storage.
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.
Importer l'ensemble de données dans Cloud Storage
Récupérez les fichiers de l'ensemble de données et rendez-les disponibles dans Cloud Storage :
- Téléchargez l'ensemble de données sur les fleurs sur votre ordinateur local.
- Décompressez le fichier
flower_photos.tgz
. - Importez le dossier
flower_photos
dans le dossierflowers
du bucket que vous avez créé précédemment. - Une fois l'importation terminée, supprimez le fichier
LICENSE.txt
du dossierflower_photos
.
Créer une table d'objets
Créez une table d'objets nommée sample_images
basée sur l'ensemble de données sur les fleurs que vous avez importé :
SQL
Accédez à la page BigQuery.
Dans le volet Éditeur, exécutez l'instruction SQL suivante :
CREATE EXTERNAL TABLE mobilenet_inference_test.sample_images WITH CONNECTION `us.lake-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://BUCKET_NAME/flowers/*']);
Remplacez
BUCKET_NAME
par le nom du bucket que vous avez créé précédemment.
bq
Dans Cloud Shell, exécutez la commande bq mk
pour créer la connexion :
bq mk --table \ --external_table_definition='gs://BUCKET_NAME/flowers/*@us.lake-connection' \ --object_metadata=SIMPLE \ mobilenet_inference_test.sample_images
Remplacez BUCKET_NAME
par le nom du bucket que vous avez créé précédemment.
Importer le modèle dans Cloud Storage
Récupérez les fichiers du modèle et rendez-les disponibles dans Cloud Storage :
- Téléchargez le modèle MobileNet V3 sur votre ordinateur local. Vous obtenez ainsi un fichier
saved_model.pb
et un dossiervariables
pour le modèle. - Importez le fichier
saved_model.pb
et le dossiervariables
dans le dossiermobilenet
du bucket que vous avez créé précédemment.
Charger le modèle dans BigQuery ML
Accédez à la page BigQuery.
Dans le volet Éditeur, exécutez l'instruction SQL suivante :
CREATE MODEL `mobilenet_inference_test.mobilenet` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/mobilenet/*');
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 :
Accédez à la page BigQuery.
Dans le volet Explorateur, développez votre projet, l'ensemble de données
mobilenet_inference_test
, puis le nœud Modèles.Cliquez sur le modèle
mobilenet
.Dans le volet du modèle qui s'affiche, cliquez sur l'onglet Schéma.
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
feature_vector
.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 fonctionML.DECODE_IMAGE
. Dans le cas présent, la valeur du nom de champ estinputs
.
Exécuter une inférence
Exécutez l'inférence sur la table d'objets sample_images
à l'aide du modèle mobilenet
:
Accédez à la page BigQuery.
Dans le volet Éditeur, exécutez l'instruction SQL suivante :
SELECT * FROM ML.PREDICT( MODEL `mobilenet_inference_test.mobilenet`, (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 224, 224, FALSE) AS inputs FROM mobilenet_inference_test.sample_images) );
Le résultat doit ressembler à ce qui suit :
-------------------------------------------------------------------------------------------------------------- | feature_vector | uri | inputs | —------------------------------------------------------------------------------------------------------------- | 0.850297749042511 | gs://mybucket/flowers/dandelion/3844111216_742ea491a0.jpg | 0.29019609093666077 | —------------------------------------------------------------------------------------------------------------- | -0.27427938580513 | | 0.31372550129890442 | —------------------------- ------------------------ | -0.23189745843410492 | | 0.039215687662363052 | —------------------------- ------------------------ | -0.058292809873819351 | | 0.29985997080802917 | —-------------------------------------------------------------------------------------------------------------
Effectuer un nettoyage
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.