Anleitung: Inferenz für eine Objekttabelle mithilfe eines Featurevektormodells ausführen
In dieser Anleitung erfahren Sie, wie Sie eine Objekttabelle basierend auf den Bildern aus dem Blumen-Dataset erstellen und dann mit demMobileNet V3-Modell.
Das MobileNet V3-Modell
Das MobileNet V3-Modell analysiert Bilddateien und gibt ein Featurevektor-Array zurück. Das Array des Merkmalsvektors ist eine Liste numerischer Elemente, die die Eigenschaften der analysierten Bilder beschreiben. Jeder Merkmalsvektor beschreibt einen mehrdimensionalen Merkmalbereich und stellt die Koordinaten des Bildes in diesem Bereich bereit. Sie können die Merkmalsvektorinformationen für ein Bild verwenden, um das Bild weiter zu klassifizieren, z. B. mithilfe einer Kosinus-Ähnlichkeit zur Gruppierung ähnlicher Bilder.
Die Modelleingabe in MobileNet V3 verwendet einen Tensor von DType
tf.float32
in der Form [-1, 224, 224, 3]
. Die Ausgabe ist ein Array von Tensoren von tf.float32
in der Form[-1, 1024]
.
Erforderliche Berechtigungen
- Zum Erstellen des Datasets benötigen Sie die Berechtigung
bigquery.datasets.create
. Zum Erstellen der Verbindungsressource benötigen Sie die folgenden Berechtigungen:
bigquery.connections.create
bigquery.connections.get
Zum Erteilen von Berechtigungen für das Dienstkonto der Verbindung benötigen Sie die folgende Berechtigung:
resourcemanager.projects.setIamPolicy
Zum Erstellen der Objekttabelle benötigen Sie die folgenden Berechtigungen:
bigquery.tables.create
bigquery.tables.update
bigquery.connections.delegate
Zum Erstellen des Buckets benötigen Sie die Berechtigung
storage.buckets.create
.Zum Hochladen des Datasets und des Modells in Cloud Storage benötigen Sie die Berechtigungen
storage.objects.create
undstorage.objects.get
.Zum Laden des Modells in BigQuery ML benötigen Sie die folgenden Berechtigungen:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
Zum Ausführen von Inferenzen benötigen Sie die folgenden Berechtigungen:
bigquery.tables.getData
für die Objekttabellebigquery.models.getData
für das Modellbigquery.jobs.create
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von 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.
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Weitere Informationen zu BigQuery-Speicherpreisen finden Sie unter Speicherpreise in der BigQuery-Dokumentation.
Weitere Informationen zu den Preisen für BigQuery ML finden Sie in der BigQuery-Dokumentation unter Preise für BigQuery ML.
Weitere Informationen zu den Preisen von Cloud Storage erhalten Sie auf der Seite Cloud Storage – Preise.
Hinweis
- 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.
Dataset erstellen
Erstellen Sie ein Dataset mit dem Namen mobilenet_inference_test
:
SQL
Rufen Sie die Seite BigQuery auf.
Führen Sie im Bereich Editor die folgende SQL-Anweisung aus:
CREATE SCHEMA `PROJECT_ID.mobilenet_inference_test`;
Ersetzen Sie
PROJECT_ID
durch Ihre Projekt-ID.
bq
Aktivieren Sie Cloud Shell in der Google Cloud Console.
Erstellen Sie das Dataset mit dem Befehl
bq mk
.bq mk --dataset --location=us PROJECT_ID:resnet_inference_test
Ersetzen Sie
PROJECT_ID
durch Ihre Projekt-ID.
Verbindung herstellen
Erstellen Sie eine Verbindung mit dem Namen lake-connection
:
Console
Rufen Sie die Seite BigQuery auf.
Klicken Sie auf
Hinzufügen und dann auf Externe Datenquelle.Wählen Sie in der Liste Verbindungstyp die Option BigLake und Remotefunktionen (Cloud Resource) aus.
Geben Sie im Feld Verbindungs-ID
lake-connection
ein.Klicken Sie auf Verbindung erstellen.
Maximieren Sie im Bereich Explorer Ihr Projekt, maximieren Sie den Knoten Externe Verbindungen und wählen Sie die Verbindung
us.lake-connection
aus.Kopieren Sie im Bereich Verbindungsinformationen den Wert aus dem Feld Dienstkonto-ID. Sie benötigen diese Informationen, um dem Dienstkonto der Verbindung im Cloud Storage-Bucket, den Sie im nächsten Schritt erstellen, die Berechtigung zu erteilen.
bq
Führen Sie in Cloud Shell den
bq mk
-Befehl aus, um die Verbindung zu erstellen:bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \ lake-connection
Führen Sie den
bq show
-Befehl aus, um Informationen über die Verbindung abzurufen:bq show --connection us.lake-connection
Kopieren Sie aus der
properties
-Spalte den Wert desserviceAccountId
-Attributs und speichern Sie ihn an einem beliebigen Ort. Sie benötigen diese Informationen, um dem Dienstkonto der Verbindung Berechtigungen zu erteilen.
Cloud Storage-Bucket erstellen
- Cloud Storage-Bucket erstellen
- Erstellen Sie zwei Buckets im Bucket, einen mit dem Namen
mobilenet
für die Modelldateien und einen mit dem Namenflowers
für das Dataset.
Dem Dienstkonto der Verbindung Berechtigungen gewähren
Console
Zur Seite IAM & Verwaltung.
Klicken Sie auf Zugriff erlauben.
Das Dialogfeld Principals hinzufügen wird geöffnet.
Geben Sie im Feld Neue Hauptkonten die Dienstkonto-ID ein, die Sie zuvor kopiert haben.
Wählen Sie im Feld Rolle auswählen die Option Cloud Storage und dann Storage-Objekt-Betrachter aus.
Klicken Sie auf Speichern.
gcloud
Führen Sie in Cloud Shell den folgenden gcloud storage buckets add-iam-policy-binding
-Befehl aus:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:MEMBER \ --role=roles/storage.objectViewer
Ersetzen Sie MEMBER
durch die zuvor kopierte Dienstkonto-ID. Ersetzen Sie BUCKET_NAME
durch den Namen des Buckets, den Sie zuvor erstellt haben.
Weitere Informationen finden Sie unter Hauptkonto zu einer Richtlinie auf Bucket-Ebene hinzufügen.
Dataset in Cloud Storage hochladen
Rufen Sie die Dataset-Dateien ab und stellen Sie sie in Cloud Storage bereit:
- Laden Sie das Blumen-Dataset auf Ihren lokalen Computer herunter.
- Entpacken Sie die Datei
flower_photos.tgz
: - Laden Sie den Ordner
flower_photos
in den Ordnerflowers
des zuvor erstellten Buckets hoch. - Löschen Sie nach Abschluss des Uploads die Datei
LICENSE.txt
im Ordnerflower_photos
.
Objekttabelle erstellen
Erstellen Sie eine Objekttabelle mit dem Namen sample_images
anhand des hochgeladenen Blumen-Datasets:
SQL
Rufen Sie die Seite BigQuery auf.
Führen Sie im Bereich Editor die folgende SQL-Anweisung aus:
CREATE EXTERNAL TABLE mobilenet_inference_test.sample_images WITH CONNECTION `us.lake-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://BUCKET_NAME/flowers/*']);
Ersetzen Sie
BUCKET_NAME
durch den Namen des Buckets, den Sie zuvor erstellt haben.
bq
Führen Sie in Cloud Shell den bq mk
-Befehl aus, um die Verbindung zu erstellen:
bq mk --table \ --external_table_definition='gs://BUCKET_NAME/flowers/*@us.lake-connection' \ --object_metadata=SIMPLE \ mobilenet_inference_test.sample_images
Ersetzen Sie BUCKET_NAME
durch den Namen des Buckets, den Sie zuvor erstellt haben.
Laden Sie das Modell in Cloud Storage hoch.
Rufen Sie die Modelldateien ab und stellen Sie sie in Cloud Storage bereit:
- Laden Sie das MobileNet V3-Modell auf Ihren lokalen Computer herunter. Dadurch erhalten Sie eine
saved_model.pb
-Datei und einenvariables
-Ordner für das Modell. - Laden Sie die Dateien
saved_model.pb
undvariables
in den Ordnermobilenet
des Buckets hoch, den Sie zuvor erstellt haben.
Modell in BigQuery ML laden
Rufen Sie die Seite BigQuery auf.
Führen Sie im Bereich Editor die folgende SQL-Anweisung aus:
CREATE MODEL `mobilenet_inference_test.mobilenet` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/mobilenet/*');
Ersetzen Sie
BUCKET_NAME
durch den Namen des Buckets, den Sie zuvor erstellt haben.
Modell prüfen
Prüfen Sie das hochgeladene Modell, um seine Eingabe- und Ausgabefelder zu ermitteln:
Rufen Sie die Seite BigQuery auf.
Maximieren Sie im Explorer-Bereich Ihr Projekt, erweitern Sie das Dataset
mobilenet_inference_test
und maximieren Sie dann den Knoten Modelle.Klicken Sie auf das Modell
mobilenet
.Klicken Sie im angezeigten Modellbereich auf den Tab Schema.
Sehen Sie sich den Abschnitt Labels an. Dieser gibt die Felder an, die vom Modell ausgegeben werden. In diesem Fall lautet der Feldname
feature_vector
.Sehen Sie sich den Abschnitt Features an. Dieser gibt die Felder an, die in das Modell eingegeben werden müssen. Sie verweisen in der
SELECT
-Anweisung für die FunktionML.DECODE_IMAGE
. In diesem Fall lautet der Feldnameinputs
.
Inferenz ausführen
Führen Sie mit dem Modell mobilenet
Inferenz für die Objekttabelle sample_images
aus:
Rufen Sie die Seite BigQuery auf.
Führen Sie im Bereich Editor die folgende SQL-Anweisung aus:
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) );
Die Antwort sollte in etwa so aussehen:
-------------------------------------------------------------------------------------------------------------- | 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 | —-------------------------------------------------------------------------------------------------------------
Bereinigen
- 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.