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: Anda akan dikenai biaya penyimpanan untuk tabel objek yang Anda buat di BigQuery.
  • BigQuery ML: Anda akan dikenai biaya untuk model yang Anda buat dan inferensi yang dilakukan di BigQuery ML.
  • Cloud Storage: Anda akan dikenai biaya untuk objek yang Anda simpan di 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. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Enable the BigQuery and BigQuery Connection API APIs.

    Enable the APIs

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

    Buka pemilih project

  6. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  7. Enable the BigQuery and BigQuery Connection API APIs.

    Enable the APIs

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.

    Aktifkan 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 Add data, lalu klik External data source.

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

gsutil

Jalankan perintah gsutil iam chdi Cloud Shell:

gsutil iam ch serviceAccount:MEMBER:objectViewer gs://BUCKET_NAME

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.