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 und storage.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 Objekttabelle
    • bigquery.models.getData für das Modell
    • bigquery.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. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

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

  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

Dataset erstellen

Erstellen Sie ein Dataset mit dem Namen resnet_inference_test:

SQL

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. 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

  1. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

  2. 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

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Klicken Sie auf Daten hinzufügen und dann auf Externe Datenquelle.

  3. Wählen Sie in der Liste Verbindungstyp die Option BigLake und Remotefunktionen (Cloud Resource) aus.

  4. Geben Sie im Feld Verbindungs-ID lake-connection ein.

  5. Klicken Sie auf Verbindung erstellen.

  6. 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

  1. 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
    
  2. Führen Sie den bq show-Befehl aus, um Informationen über die Verbindung abzurufen:

    bq show --connection us.lake-connection
    
  3. Kopieren Sie aus der properties-Spalte den Wert des serviceAccountId-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

  1. Zur Seite IAM & Verwaltung.

    IAM & Verwaltung aufrufen

  2. Klicken Sie auf Zugriff erlauben.

    Das Dialogfeld Principals hinzufügen wird geöffnet.

  3. Geben Sie im Feld Neue Hauptkonten die Dienstkonto-ID ein, die Sie zuvor kopiert haben.

  4. Wählen Sie im Feld Rolle auswählen die Option Cloud Storage und dann Storage-Objekt-Betrachter aus.

  5. 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

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. 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:

  1. Laden Sie das ResNet 50-Modell auf Ihren lokalen Computer herunter. Dadurch erhalten Sie eine saved_model.pb-Datei und einen variables-Ordner für das Modell.
  2. Laden Sie die Dateien saved_model.pb und variables auf den zuvor erstellten Bucket hoch.

Modell in BigQuery ML laden

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. 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:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie im Explorer-Bereich Ihr Projekt, erweitern Sie das Dataset resnet_inference_test und maximieren Sie dann den Knoten Modelle.

  3. Klicken Sie auf das Modell resnet.

  4. Klicken Sie im angezeigten Modellbereich auf den Tab Schema.

  5. 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.

  6. 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 Funktion ML.DECODE_IMAGE. In diesem Fall lautet der Feldname input_1.

Inferenz ausführen

Führen Sie mit dem Modell resnet Inferenz für die Objekttabelle vision_images aus:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. 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

  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.