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 on-demand 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 MODEL
untuk 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.float32
dengan nilai dalam[0, 1)
, atau memiliki jenis datatf.uint8
dengan nilai dalam[0, 255)
. - Memiliki bentuk
[batch_size, weight, height, 3]
, dengan:batch_size
harus berupa-1
,None
, atau1
.width
danheight
harus lebih besar dari 0.
- Memiliki jenis data
Model harus dilatih dengan gambar di salah satu ruang warna berikut:
RGB
HSV
YIQ
YUV
GRAYSCALE
Anda dapat menggunakan fungsi
ML.CONVERT_COLOR_SPACE
untuk 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.create
danstorage.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 objekbigquery.models.getData
pada 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API BigQuery and BigQuery Connection API.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API BigQuery and BigQuery Connection API.
Mengupload model ke Cloud Storage
Ikuti langkah-langkah berikut untuk mengupload model:
- 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.pb
dan foldervariables
untuk model tersebut. - Jika perlu, buat bucket Cloud Storage.
- Upload artefak model ke bucket.
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:
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:TENSORFLOW
untuk model TensorFlowONNX
untuk model PyTorch dalam format ONNX
BUCKET_PATH
: jalur ke bucket Cloud Storage yang berisi model, dalam format[gs://bucket_name/[folder_name/]*]
.
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:
Buka halaman BigQuery.
Di panel Explorer, luaskan project Anda, luaskan set data yang berisi model, lalu luaskan node Models.
Klik 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
SELECT
untuk fungsiML.DECODE_IMAGE
.
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:
- Fungsi
ML.CONVERT_COLOR_SPACE
akan mengonversi gambar dengan ruang warnaRGB
ke ruang warna yang berbeda. - Fungsi
ML.CONVERT_IMAGE_TYPE
akan mengonversi nilai piksel yang dihasilkan oleh fungsiML.DECODE_IMAGE
dari angka floating point ke bilangan bulat dengan rentang dari[0, 255)
. - Fungsi
ML.RESIZE_IMAGE
akan mengubah ukuran gambar.
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:
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_IMAGE
atau 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.
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) );
Langkah berikutnya
- 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
.