Menjalankan inferensi pada tabel objek gambar
Dokumen ini menjelaskan cara menggunakan BigQuery ML untuk menjalankan inferensi pada tabel objek gambar.
Anda dapat menjalankan inferensi pada data gambar dengan menggunakan tabel objek sebagai input pada fungsi ML.PREDICT.
Untuk melakukannya, Anda harus terlebih dahulu memilih model yang sesuai, menguploadnya ke Cloud Storage, lalu mengimpornya ke BigQuery dengan menjalankan pernyataan CREATE MODEL.
Anda dapat membuat model sendiri, atau mendownload model dari TensorFlow Hub.
Batasan
- Penggunaan model yang diimpor BigQuery ML dengan tabel objek hanya didukung jika Anda menggunakan harga berbasis kapasitas melalui reservasi; harga sesuai permintaan tidak didukung.
- File gambar yang terkait dengan tabel objek harus memenuhi persyaratan berikut:
- Berukuran kurang dari 20 MB.
- Memiliki format JPEG, PNG, atau BMP.
- Ukuran gabungan file gambar yang terkait dengan tabel objek harus kurang dari 1 TB.
Modelnya harus berupa salah satu dari berikut ini:
- Model TensorFlow atau TensorFlow Lite dalam format SavedModel.
- Model PyTorch dalam format OnNX.
Model harus memenuhi persyaratan dan batasan input yang dijelaskan dalam Pernyataan
CREATE MODELuntuk mengimpor model TensorFlow.Ukuran serialisasi model harus kurang dari 450 MB.
Ukuran model yang di-deserialisasi (dalam memori) harus kurang dari 1.000 MB.
Tensor input model harus memenuhi kriteria berikut:
- Memiliki jenis data
tf.float32dengan nilai dalam[0, 1), atau memiliki jenis datatf.uint8dengan nilai dalam[0, 255). - Memiliki bentuk
[batch_size, weight, height, 3], dengan:batch_sizeharus berupa-1,None, atau1.widthdanheightharus lebih besar dari 0.
- Memiliki jenis data
Model harus dilatih dengan gambar di salah satu ruang warna berikut:
RGBHSVYIQYUVGRAYSCALE
Anda dapat menggunakan fungsi
ML.CONVERT_COLOR_SPACEuntuk mengonversi gambar input ke ruang warna yang digunakan untuk melatih model.
Contoh model
Model berikut di TensorFlow Hub berfungsi dengan BigQuery ML dan tabel objek gambar:
- ResNet 50. Untuk mencoba menggunakan model ini, lihat Tutorial: Menjalankan inferensi pada tabel objek menggunakan model klasifikasi.
- MobileNet V3. Untuk mencoba menggunakan model ini, lihat Tutorial: Menjalankan inferensi pada tabel objek dengan menggunakan model vektor fitur.
Izin yang diperlukan
- Untuk mengupload model ke Cloud Storage, Anda memerlukan izin
storage.objects.createdanstorage.objects.get. Untuk memuat model ke BigQuery ML, Anda memerlukan izin berikut:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
Untuk menjalankan inferensi, Anda memerlukan izin berikut:
bigquery.tables.getDatapada tabel objekbigquery.models.getDatapada modelbigquery.jobs.create
Sebelum memulai
- 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - Jika Anda telah membuat model sendiri, simpan model tersebut secara lokal. Jika Anda menggunakan model dari TensorFlow Hub, download model tersebut ke mesin lokal Anda. Jika Anda menggunakan TensorFlow, Anda akan mendapatkan file
saved_model.pbdan foldervariablesuntuk model tersebut. - Jika perlu, buat bucket Cloud Storage.
- Upload artefak model ke bucket.
PROJECT_ID: project ID Anda.DATASET_ID: ID set data yang akan berisi model.MODEL_NAME: nama model.MODEL_TYPE: gunakan salah satu nilai berikut:TENSORFLOWuntuk model TensorFlowONNXuntuk model PyTorch dalam format ONNX
BUCKET_PATH: jalur ke bucket Cloud Storage yang berisi model, dalam format[gs://bucket_name/[folder_name/]*].Buka halaman BigQuery.
Di panel kiri, klik Explorer:

Jika Anda tidak melihat panel kiri, klik Luaskan panel kiri untuk membuka panel.
Di panel Explorer, luaskan project Anda dan klik Set data.
Klik set data yang berisi model Anda.
Klik tab Model.
Di panel model yang terbuka, klik tab Schema.
Lihat bagian Label. Bagian ini mengidentifikasi kolom yang merupakan output oleh model.
Lihat bagian Features. Bagian ini mengidentifikasi kolom yang harus dimasukkan ke dalam model. Anda mereferensikannya dalam pernyataan
SELECTuntuk fungsiML.DECODE_IMAGE.- Fungsi
ML.CONVERT_COLOR_SPACEakan mengonversi gambar dengan ruang warnaRGBke ruang warna yang berbeda. - Fungsi
ML.CONVERT_IMAGE_TYPEakan mengonversi nilai piksel yang dihasilkan oleh fungsiML.DECODE_IMAGEdari angka floating point ke bilangan bulat dengan rentang dari[0, 255). - Fungsi
ML.RESIZE_IMAGEakan mengubah ukuran gambar. PROJECT_ID: project ID untuk project yang berisi tabel objek dan model.DATASET_ID: ID set data yang berisi tabel objek dan model.MODEL_NAME: nama model.IMAGE_DATA: data gambar, yang direpresentasikan oleh output fungsiML.DECODE_IMAGE, atau oleh kolom tabel yang berisi output data gambar olehML.DECODE_IMAGEatau fungsi pemrosesan gambar lainnya.MODEL_INPUT: nama kolom input untuk model. Anda dapat menemukan informasi ini dengan memeriksa model dan melihat nama kolom di Features.TABLE_NAME: nama tabel objek.- Pelajari cara menganalisis tabel objek menggunakan fungsi jarak jauh.
- Coba jalankan inferensi pada tabel objek menggunakan model vektor fitur.
- Coba jalankan inferensi pada tabel objek menggunakan model klasifikasi.
- Coba analisis tabel objek menggunakan fungsi jarak jauh.
- Coba menganotasi gambar dengan fungsi
ML.ANNOTATE_IMAGE.
Mengupload model ke Cloud Storage
Ikuti langkah-langkah berikut untuk mengupload model:
Memuat model ke BigQuery ML
Memuat model yang berfungsi dengan tabel objek gambar sama dengan memuat model yang berfungsi dengan data terstruktur. Ikuti langkah-langkah berikut untuk memuat model ke BigQuery ML:
CREATE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` OPTIONS( model_type = 'MODEL_TYPE', model_path = 'BUCKET_PATH');
Ganti kode berikut:
Contoh berikut menggunakan project default dan memuat model TensorFlow ke BigQuery ML sebagai my_vision_model, menggunakan file saved_model.pb dan folder variables dari gs://my_bucket/my_model_folder:
CREATE MODEL `my_dataset.my_vision_model` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://my_bucket/my_model_folder/*');
Memeriksa model
Anda dapat memeriksa model yang diupload untuk melihat kolom input dan output-nya. Anda perlu mereferensikan kolom ini saat menjalankan inferensi pada tabel objek.
Ikuti langkah-langkah berikut untuk memeriksa model:
Untuk pemeriksaan model TensorFlow yang lebih mendetail, misalnya untuk menentukan bentuk input model, instal TensorFlow dan menggunakan saved_model_cli show perintah.
Melakukan prapemrosesan gambar
Anda harus menggunakan fungsi ML.DECODE_IMAGE untuk mengonversi byte gambar menjadi representasi ARRAY multi-dimensi. Anda dapat menggunakan output ML.DECODE_IMAGE langsung dalam fungsi ML.PREDICT, atau menulis hasil dari ML.DECODE_IMAGE ke kolom tabel dan mereferensikan kolom tersebut saat memanggil ML.PREDICT.
Contoh berikut menulis output fungsi ML.DECODE_IMAGE ke tabel:
CREATE OR REPLACE TABLE mydataset.mytable AS ( SELECT ML.DECODE_IMAGE(data) AS decoded_image FROM mydataset.object_table );
Gunakan fungsi berikut untuk memproses gambar lebih lanjut agar kompatibel dengan model Anda:
Anda dapat menggunakan fungsi ini sebagai bagian dari fungsi ML.PREDICT, atau menjalankannya di kolom tabel yang berisi data gambar yang merupakan output dengan ML.DECODE_IMAGE.
Menjalankan inferensi
Setelah model yang sesuai dimuat, dan secara opsional melakukan pra-pemrosesan data gambar, Anda dapat menjalankan inferensi pada data gambar.
Untuk menjalankan inferensi:
SELECT * FROM ML.PREDICT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, (SELECT [other columns from the object table,] IMAGE_DATA AS MODEL_INPUT FROM PROJECT_ID.DATASET_ID.TABLE_NAME) );
Ganti kode berikut:
Contoh
Contoh 1
Contoh berikut menggunakan fungsi ML.DECODE_IMAGE langsung dalam fungsi ML.PREDICT. Metode ini menampilkan hasil inferensi untuk semua gambar dalam tabel objek, untuk model dengan kolom input input dan kolom output feature:
SELECT * FROM ML.PREDICT( MODEL `my_dataset.vision_model`, (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 480, 480, FALSE) AS input FROM `my_dataset.object_table`) );
Contoh 2
Contoh berikut menggunakan fungsi ML.DECODE_IMAGE langsung dalam fungsi ML.PREDICT, dan menggunakan fungsi ML.CONVERT_COLOR_SPACE dalam fungsi ML.PREDICT untuk mengonversi ruang warna gambar dari RBG hingga YIQ. Bagian ini juga menunjukkan cara menggunakan kolom tabel objek untuk memfilter objek yang disertakan dalam inferensi.
Metode ini menampilkan hasil inferensi untuk semua gambar JPG dalam tabel objek, untuk model dengan kolom input input dan kolom output feature:
SELECT * FROM ML.PREDICT( MODEL `my_dataset.vision_model`, (SELECT uri, ML.CONVERT_COLOR_SPACE(ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 224, 280, TRUE), 'YIQ') AS input FROM `my_dataset.object_table` WHERE content_type = 'image/jpeg') );
Contoh 3
Contoh berikut menggunakan hasil dari ML.DECODE_IMAGE yang telah ditulis ke kolom tabel, tetapi tidak diproses lebih lanjut. Fungsi ini menggunakan ML.RESIZE_IMAGE dan ML.CONVERT_IMAGE_TYPE dalam fungsi ML.PREDICT untuk memproses data gambar. Metode ini menampilkan hasil inferensi untuk semua gambar dalam tabel gambar yang di-dekode, untuk model dengan kolom input input dan kolom output feature.
Buat tabel gambar yang di-dekode:
CREATE OR REPLACE TABLE `my_dataset.decoded_images` AS (SELECT ML.DECODE_IMAGE(data) AS decoded_image FROM `my_dataset.object_table`);
Jalankan inferensi pada tabel gambar yang di-dekode:
SELECT * FROM ML.PREDICT( MODEL`my_dataset.vision_model`, (SELECT uri, ML.CONVERT_IMAGE_TYPE(ML.RESIZE_IMAGE(decoded_image, 480, 480, FALSE)) AS input FROM `my_dataset.decoded_images`) );
Contoh 4
Contoh berikut menggunakan hasil dari ML.DECODE_IMAGE yang telah ditulis ke kolom tabel dan diproses sebelumnya menggunakan ML.RESIZE_IMAGE. Metode ini menampilkan hasil inferensi untuk semua gambar dalam tabel gambar yang di-dekode, untuk model dengan kolom input input dan kolom output feature.
Buat tabel:
CREATE OR REPLACE TABLE `my_dataset.decoded_images` AS (SELECT ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data) 480, 480, FALSE) AS decoded_image FROM `my_dataset.object_table`);
Jalankan inferensi pada tabel gambar yang di-dekode:
SELECT * FROM ML.PREDICT( MODEL `my_dataset.vision_model`, (SELECT uri, decoded_image AS input FROM `my_dataset.decoded_images`) );
Contoh 5
Contoh berikut menggunakan fungsi ML.DECODE_IMAGE langsung dalam fungsi ML.PREDICT. Dalam contoh ini, model memiliki kolom output berupa embeddings dan dua kolom input: satu yang mengharapkan gambar, f_img, dan satu lagi yang mengharapkan string, f_txt. Input gambar berasal dari tabel objek dan input string berasal dari tabel BigQuery standar yang digabungkan dengan tabel objek menggunakan kolom uri.
SELECT * FROM ML.PREDICT( MODEL `my_dataset.mixed_model`, (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(my_dataset.my_object_table.data), 224, 224, FALSE) AS f_img, my_dataset.image_description.description AS f_txt FROM `my_dataset.object_table` JOIN `my_dataset.image_description` ON object_table.uri = image_description.uri) );