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
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 : vous payez des frais de stockage pour la table d'objets que vous créez dans BigQuery.
- BigQuery ML : vous payez des frais pour le modèle que vous créez et l'inférence que vous effectuez dans BigQuery ML.
- Cloud Storage : des frais sont facturés pour les objets que vous stockez dans 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
- Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API BigQuery and BigQuery Connection API.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API BigQuery and BigQuery Connection API.
Créer un ensemble de données
Créez un ensemble de données nommé resnet_inference_test
:
SQL
Accédez à la page BigQuery.
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
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 des données, 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 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
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 pour contenir les fichiers de modèle.
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électionner un rôle, sélectionnez Cloud Storage, puis Lecteur des objets Storage.
Cliquez sur Enregistrer.
gsutil
Dans Cloud Shell, exécutez la commande gsutil iam ch
:
gsutil iam ch serviceAccount:MEMBER:objectViewer gs://BUCKET_NAME
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
Accédez à la page BigQuery.
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/*[email protected]' \
--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 :
- Téléchargez le modèle ResNet 50 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 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 `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 :
Accédez à la page BigQuery.
Dans le volet Explorateur, développez votre projet, l'ensemble de données
resnet_inference_test
, puis le nœud Modèles.Cliquez sur le modèle
resnet
.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
activation_49
.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 estinput_1
.
Exécuter une inférence
Exécutez l'inférence sur la table d'objets vision_images
à l'aide du modèle resnet
:
Accédez à la page BigQuery.
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
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.