Tutorial: Menjalankan inferensi pada tabel objek menggunakan model klasifikasi

Tutorial ini menunjukkan cara membuat tabel objek berdasarkan gambar dari set data publik, lalu menjalankan inferensi pada tabel objek tersebut menggunakan model ResNet 50.

Model ResNet 50

Model ResNet 50 menganalisis file gambar dan menampilkan sejumlah vektor yang mewakili kemungkinan bahwa suatu gambar termasuk dalam class yang sesuai (logits). Untuk informasi selengkapnya, lihat bagian Penggunaan di halaman TensorFlow Hub model.

Input model ResNet 50 mengambil tensor DType = float32 dalam bentuk [-1, 224, 224, 3]. Outputnya adalah array tensor tf.float32 dalam bentuk [-1, 1024].

Izin yang diperlukan

  • Untuk membuat set data, Anda memerlukan izin bigquery.datasets.create.
  • Untuk membuat resource koneksi, Anda memerlukan izin berikut:

    • bigquery.connections.create
    • bigquery.connections.get
  • Untuk memberikan izin ke akun layanan koneksi, Anda memerlukan izin berikut:

    • resourcemanager.projects.setIamPolicy
  • Untuk membuat tabel objek, Anda memerlukan izin berikut:

    • bigquery.tables.create
    • bigquery.tables.update
    • bigquery.connections.delegate
  • Untuk membuat bucket, Anda memerlukan izin storage.buckets.create.

  • Untuk mengupload model ke Cloud Storage, Anda memerlukan izin storage.objects.create dan storage.objects.get.

  • Untuk memuat model ke BigQuery ML, Anda memerlukan izin berikut:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Untuk menjalankan inferensi, Anda memerlukan izin berikut:

    • bigquery.tables.getData pada tabel objek
    • bigquery.models.getData pada model
    • bigquery.jobs.create

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

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

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Untuk informasi selengkapnya tentang harga penyimpanan BigQuery, lihat Harga penyimpanan dalam dokumentasi BigQuery.

Untuk informasi selengkapnya tentang harga BigQuery ML, baca Harga BigQuery ML dalam dokumentasi BigQuery.

Untuk informasi selengkapnya tentang harga Cloud Storage, lihat halaman harga Cloud Storage.

Sebelum memulai

  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. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Aktifkan API BigQuery and BigQuery Connection API.

    Mengaktifkan API

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Aktifkan API BigQuery and BigQuery Connection API.

    Mengaktifkan API

Membuat set data

Buat set data bernama resnet_inference_test:

SQL

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. Di panel Editor, jalankan pernyataan SQL berikut:

    CREATE SCHEMA `PROJECT_ID.resnet_inference_test`;

    Ganti PROJECT_ID dengan project ID Anda.

bq

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Activate Cloud Shell

  2. Jalankan perintah bq mk untuk membuat set data:

    bq mk --dataset --location=us PROJECT_ID:resnet_inference_test

    Ganti PROJECT_ID dengan project ID Anda.

Buat koneksi

Buat koneksi bernama lake-connection:

Konsol

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. Klik Tambahkan, lalu klik Sumber data eksternal.

  3. Dalam daftar Connection type, pilih BigLake and remote functions (Cloud Resource).

  4. Di kolom Connection ID, ketik lake-connection.

  5. Klik Create connection.

  6. Di panel Connection info, salin nilai dari kolom Service account id dan simpan di suatu tempat. Anda memerlukan informasi ini untuk memberikan izin ke akun layanan koneksi.

bq

  1. Di Cloud Shell, jalankan perintah bq mk untuk membuat koneksi:

    bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \
    lake-connection
    
  2. Jalankan perintah bq show untuk mengambil informasi tentang koneksi:

    bq show --connection us.lake-connection
    
  3. Dari kolom properties, salin nilai properti serviceAccountId dan simpan di suatu tempat. Anda memerlukan informasi ini untuk memberikan izin ke akun layanan koneksi.

Membuat bucket Cloud Storage

Buat bucket Cloud Storage untuk menampung file model.

Memberikan izin ke akun layanan koneksi

Konsol

  1. Buka halaman IAM & Admin.

    Buka IAM & Admin

  2. Klik Grant Access.

    Dialog Add principals akan terbuka.

  3. Di kolom New principals, masukkan ID akun layanan yang Anda salin sebelumnya.

  4. Di kolom Select a role, pilih Cloud Storage, lalu pilih Storage Object Viewer.

  5. Klik Simpan.

gcloud

Jalankan perintah gcloud storage buckets add-iam-policy-bindingdi Cloud Shell:

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:MEMBER \
--role=roles/storage.objectViewer

Ganti MEMBER dengan ID akun layanan yang Anda salin sebelumnya. Ganti BUCKET_NAME dengan nama bucket yang Anda buat sebelumnya.

Untuk informasi selengkapnya, lihat Menambahkan akun utama ke kebijakan tingkat bucket.

Membuat tabel objek

Buat tabel objek bernama vision_images berdasarkan file gambar di bucket gs://cloud-samples-data/vision publik:

SQL

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. Di panel Editor, jalankan pernyataan SQL berikut:

    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

Di Cloud Shell, jalankan perintah bq mk untuk membuat koneksi:

bq mk --table \
--external_table_definition='gs://cloud-samples-data/vision/*.jpg@us.lake-connection' \
--object_metadata=SIMPLE \
resnet_inference_test.vision_images

Mengupload model ke Cloud Storage

Dapatkan file model dan sediakan di Cloud Storage:

  1. Download model ResNet 50 ke mesin lokal Anda. Tindakan ini akan memberi Anda file saved_model.pb dan folder variables untuk model.
  2. Upload file saved_model.pb dan folder variables ke bucket yang Anda buat sebelumnya.

Memuat model ke BigQuery ML

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. Di panel Editor, jalankan pernyataan SQL berikut:

    CREATE MODEL `resnet_inference_test.resnet`
    OPTIONS(
      model_type = 'TENSORFLOW',
      model_path = 'gs://BUCKET_NAME/*');

    Ganti BUCKET_NAME dengan nama bucket yang telah Anda buat sebelumnya.

Memeriksa model

Periksa model yang diupload untuk melihat kolom input dan output-nya:

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. Di panel Explorer, luaskan project Anda, luaskan set data resnet_inference_test, lalu luaskan node Models.

  3. Klik model resnet.

  4. Di panel model yang terbuka, klik tab Schema.

  5. Lihat bagian Label. Elemen ini mengidentifikasi kolom yang merupakan output menurut model. Dalam hal ini, nilai nama kolom adalah activation_49.

  6. Lihat bagian Features. Bagian ini mengidentifikasi kolom yang harus dimasukkan ke dalam model. Anda mereferensikannya dalam pernyataan SELECT untuk fungsi ML.DECODE_IMAGE. Dalam hal ini, nilai nama kolom adalah input_1.

Menjalankan inferensi

Jalankan inferensi pada tabel objek vision_images menggunakan model resnet:

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. Di panel Editor, jalankan pernyataan SQL berikut:

    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)
    );

    Hasilnya akan terlihat seperti berikut:

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

Pembersihan

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.