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 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 mobilenet_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.mobilenet_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. Maximieren Sie im Bereich Explorer Ihr Projekt, maximieren Sie den Knoten Explorer und wählen Sie die Verbindung us.lake-connection aus.

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

  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

  1. Cloud Storage-Bucket erstellen
  2. Erstellen Sie zwei Buckets im Bucket, einen mit dem Namen mobilenet für die Modelldateien und einen mit dem Namen flowers für das Dataset.

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.

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:

  1. Laden Sie das Blumen-Dataset auf Ihren lokalen Computer herunter.
  2. Entpacken Sie die Datei flower_photos.tgz:
  3. Laden Sie den Ordner flower_photos in den Ordner flowers des zuvor erstellten Buckets hoch.
  4. Löschen Sie nach Abschluss des Uploads die Datei LICENSE.txt im Ordner flower_photos.

Objekttabelle erstellen

Erstellen Sie eine Objekttabelle mit dem Namen sample_images anhand des hochgeladenen Blumen-Datasets:

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

  1. Laden Sie das MobileNet V3-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 in den Ordner mobilenet des Buckets hoch, den Sie zuvor erstellt haben.

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 `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:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

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

  3. Klicken Sie auf das Modell mobilenet.

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

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

Inferenz ausführen

Führen Sie mit dem Modell mobilenet Inferenz für die Objekttabelle sample_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 `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

  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.