Anleitung: Inferenz für eine Objekttabelle mithilfe eines Klassifizierungsmodells ausführen
In dieser Anleitung erfahren Sie, wie Sie eine Objekttabelle anhand der Bilder aus einem öffentlichen Dataset erstellen und dann mithilfe des ResNet 50-Modells eine Inferenz für diese Objekttabelle ausführen.
ResNet 50-Modell
Das ResNet 50-Modell analysiert Bilddateien und gibt einen Batch von Vektoren aus, die die Wahrscheinlichkeit darstellen, dass ein Bild zur entsprechenden Klasse gehört (Logits). Weitere Informationen finden Sie im Abschnitt Nutzung auf der TensorFlow Hub-Seite des Modells.
Die ResNet 50-Modelleingabe verwendet einen Tensor von DType
= 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 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 resnet_inference_test
:
SQL
Rufen Sie die Seite BigQuery auf.
Führen Sie im Bereich Editor die folgende SQL-Anweisung aus:
CREATE SCHEMA `PROJECT_ID.resnet_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
Daten 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.
Kopieren Sie im Bereich Verbindungsinformationen den Wert aus dem Feld Dienstkonto-ID und speichern Sie ihn an einem beliebigen Ort. Sie benötigen diese Informationen, um dem Dienstkonto der Verbindung Berechtigungen 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
Erstellen Sie einen Cloud Storage-Bucket für die Modelldateien.
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.
gsutil
Führen Sie in Cloud Shell den folgenden gsutil iam ch
-Befehl aus:
gsutil iam ch serviceAccount:MEMBER:objectViewer gs://BUCKET_NAME
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.
Objekttabelle erstellen
Erstellen Sie eine Objekttabelle namens vision_images
, die auf den Bilddateien im öffentlichen gs://cloud-samples-data/vision
-Bucket basiert:
SQL
Rufen Sie die Seite BigQuery auf.
Führen Sie im Bereich Editor die folgende SQL-Anweisung aus:
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
Führen Sie in Cloud Shell den bq mk
-Befehl aus, um die Verbindung zu erstellen:
bq mk --table \
--external_table_definition='gs://cloud-samples-data/vision/*.jpg@us.lake-connection' \
--object_metadata=SIMPLE \
resnet_inference_test.vision_images
Laden Sie das Modell in Cloud Storage hoch.
Rufen Sie die Modelldateien ab und stellen Sie sie in Cloud Storage bereit:
- Laden Sie das ResNet 50-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
auf den zuvor erstellten Bucket hoch.
Modell in BigQuery ML laden
Rufen Sie die Seite BigQuery auf.
Führen Sie im Bereich Editor die folgende SQL-Anweisung aus:
CREATE MODEL `resnet_inference_test.resnet` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/*');
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
resnet_inference_test
und maximieren Sie dann den Knoten Modelle.Klicken Sie auf das Modell
resnet
.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
activation_49
.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 Feldnameinput_1
.
Inferenz ausführen
Führen Sie mit dem Modell resnet
Inferenz für die Objekttabelle vision_images
aus:
Rufen Sie die Seite BigQuery auf.
Führen Sie im Bereich Editor die folgende SQL-Anweisung aus:
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) );
Die Antwort sollte in etwa so aussehen:
------------------------------------------------------------------------------------------------------------------------------------- | 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 | —------------------------------------------------------------------------------------------------------------------------------------
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.