對圖片物件資料表執行推論
本文說明如何使用 BigQuery ML,對圖片物件資料表執行推論作業。
您可以將物件資料表做為 ML.PREDICT
函式的輸入內容,對圖片資料執行推論。
如要執行這項操作,請先選擇適當的模型,然後上傳至 Cloud Storage,並執行 CREATE MODEL
陳述式,將模型匯入 BigQuery。您可以自行建立模型,也可以從 TensorFlow Hub 下載模型。
限制
- 使用物件資料表時,只有透過預留容量採用容量計費模式,才能使用 BigQuery ML 匯入的模型;系統不支援以量計價模式。
- 與物件表格相關聯的圖片檔案必須符合下列規定:
- 大小不得超過 20 MB。
- 格式為 JPEG、PNG 或 BMP。
- 與物件資料表相關聯的圖片檔案總大小不得超過 1 TB。
模型必須是下列其中一項:
- 採用 SavedModel 格式的 TensorFlow 或 TensorFlow Lite 模型。
- ONNX 格式的 PyTorch 模型。
模型必須符合用於匯入 TensorFlow 模型的
CREATE MODEL
陳述式中說明的輸入規定和限制。模型的序列化大小不得超過 450 MB。
模型的還原序列化 (記憶體內) 大小必須小於 1000 MB。
模型輸入張量必須符合下列條件:
- 資料類型為
tf.float32
,且值位於[0, 1)
中;或資料類型為tf.uint8
,且值位於[0, 255)
中。 - 請使用
[batch_size, weight, height, 3]
格式,其中:batch_size
必須為-1
、None
或1
。width
和height
必須大於 0。
- 資料類型為
模型必須使用下列其中一個色彩空間的圖片進行訓練:
RGB
HSV
YIQ
YUV
GRAYSCALE
您可以使用
ML.CONVERT_COLOR_SPACE
函式,將輸入圖片轉換為模型訓練時使用的色彩空間。
範例模型
TensorFlow Hub 上的下列模型可與 BigQuery ML 和圖片物件資料表搭配使用:
- ResNet 50。如要試用這個模型,請參閱「教學課程:使用分類模型對物件資料表執行推論」。
- MobileNet V3。 如要試用這個模型,請參閱「教學課程:使用特徵向量模型對物件資料表執行推論」。
所需權限
- 如要將模型上傳至 Cloud Storage,您需要
storage.objects.create
和storage.objects.get
權限。 如要將模型載入 BigQuery ML,您需要下列權限:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
如要執行推論,您需要下列權限:
bigquery.tables.getData
物件資料表- 模型上的
bigquery.models.getData
bigquery.jobs.create
事前準備
- 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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
- 如果您已建立自己的模型,請在本機儲存。如果您使用 TensorFlow Hub 的模型,請將模型下載到本機。如果您使用 TensorFlow,這應該會為模型提供
saved_model.pb
檔案和variables
資料夾。 - 如有必要,請建立 Cloud Storage 值區。
- 上傳模型構件至值區。
PROJECT_ID
:您的專案 ID。DATASET_ID
:要包含模型的資料集 ID。MODEL_NAME
:模型名稱。MODEL_TYPE
:請使用下列其中一個值:TENSORFLOW
,適用於 TensorFlow 模型- 採用 ONNX 格式的 PyTorch 模型
ONNX
BUCKET_PATH
:包含模型的 Cloud Storage 值區路徑,格式為[gs://bucket_name/[folder_name/]*]
。前往「BigQuery」頁面
在「Explorer」窗格中,展開專案、包含模型的資料集,然後展開「Models」節點。
按一下模型。
在隨即開啟的模型窗格中,按一下「結構定義」分頁標籤。
查看「標籤」部分。這會識別模型輸出的欄位。
查看「功能」部分。這會指出必須輸入模型中的欄位。您可以在
ML.DECODE_IMAGE
函式的SELECT
陳述式中參照這些值。ML.CONVERT_COLOR_SPACE
函式會將RGB
色域的圖片轉換為其他色域。ML.CONVERT_IMAGE_TYPE
函式會將ML.DECODE_IMAGE
函式輸出的像素值從浮點數轉換為整數,範圍為[0, 255)
。ML.RESIZE_IMAGE
函式可調整圖片大小。PROJECT_ID
:包含模型和物件表格的專案 ID。DATASET_ID
:包含模型和物件資料表的資料集 ID。MODEL_NAME
:模型名稱。IMAGE_DATA
:圖片資料,可由ML.DECODE_IMAGE
函式的輸出內容代表,或由含有ML.DECODE_IMAGE
或其他圖片處理函式輸出圖片資料的資料表資料欄代表。MODEL_INPUT
:模型的輸入欄位名稱。如要查看這項資訊,請檢查模型,並查看「特徵」部分中的欄位名稱。TABLE_NAME
:物件表格的名稱。- 瞭解如何使用遠端函式分析物件資料表。
- 請嘗試使用特徵向量模型對物件資料表執行推論。
- 請嘗試使用分類模型對物件資料表執行推論作業。
- 請嘗試使用遠端函式分析物件資料表。
- 請嘗試使用
ML.ANNOTATE_IMAGE
函式為圖片加上註解。
將模型上傳至 Cloud Storage
如要上傳模型,請按照下列步驟操作:
將模型載入 BigQuery ML
載入可處理圖片物件表格的模型,與載入可處理結構化資料的模型相同。如要將模型載入 BigQuery ML,請按照下列步驟操作:
CREATE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` OPTIONS( model_type = 'MODEL_TYPE', model_path = 'BUCKET_PATH');
取代下列項目:
下列範例使用預設專案,並將 TensorFlow 模型載入至 BigQuery ML 做為 my_vision_model
,使用來自 gs://my_bucket/my_model_folder
的 saved_model.pb
檔案和 variables
資料夾:
CREATE MODEL `my_dataset.my_vision_model` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://my_bucket/my_model_folder/*');
檢查模型
您可以檢查上傳的模型,瞭解模型的輸入和輸出欄位。在物件資料表上執行推論時,您需要參照這些欄位。
如要檢查模型,請按照下列步驟操作:
如要更詳細地檢查 TensorFlow 模型 (例如判斷模型輸入的形狀),請安裝 TensorFlow 並使用 saved_model_cli show
指令。
預先處理圖片
您必須使用 ML.DECODE_IMAGE
函式,將圖片位元組轉換為多維度 ARRAY
表示法。您可以直接在 ML.PREDICT
函式中使用 ML.DECODE_IMAGE
輸出內容,也可以將 ML.DECODE_IMAGE
的結果寫入資料表資料欄,並在呼叫 ML.PREDICT
時參照該資料欄。
以下範例會將 ML.DECODE_IMAGE
函式的輸出內容寫入資料表:
CREATE OR REPLACE TABLE mydataset.mytable AS ( SELECT ML.DECODE_IMAGE(data) AS decoded_image FROM mydataset.object_table );
使用下列函式進一步處理圖片,讓圖片與模型搭配運作:
您可以將這些函式做為 ML.PREDICT
函式的一部分,也可以對含有 ML.DECODE_IMAGE
輸出圖片資料的資料表資料欄執行這些函式。
執行推論
載入適當的模型後,您可以選擇預先處理圖片資料,然後對圖片資料執行推論。
如要執行推論作業,請按照下列步驟操作:
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) );
取代下列項目:
範例
範例 1
以下範例直接在 ML.PREDICT
函式中使用 ML.DECODE_IMAGE
函式。針對輸入欄位為 input
且輸出欄位為 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`) );
示例 2
下列範例直接在 ML.PREDICT
函式中使用 ML.DECODE_IMAGE
函式,並在 ML.PREDICT
函式中使用 ML.CONVERT_COLOR_SPACE
函式,將圖片色彩空間從 RBG
轉換為 YIQ
。此外,本文也說明如何使用物件表格欄位,篩選推論中包含的物件。針對輸入欄位為 input
且輸出欄位為 feature
的模型,這會傳回物件表格中所有 JPG 圖片的推論結果:
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') );
範例 3
下列範例使用 ML.DECODE_IMAGE
的結果,這些結果已寫入資料表欄,但未經過進一步處理。這項功能會使用 ML.PREDICT
函式中的 ML.RESIZE_IMAGE
和 ML.CONVERT_IMAGE_TYPE
處理圖片資料。針對輸入欄位為 input
且輸出欄位為 feature
的模型,傳回解碼圖片表格中所有圖片的推論結果。
建立解碼圖片資料表:
CREATE OR REPLACE TABLE `my_dataset.decoded_images` AS (SELECT ML.DECODE_IMAGE(data) AS decoded_image FROM `my_dataset.object_table`);
對解碼圖片資料表執行推論:
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`) );
示例 4
下列範例使用已寫入資料表欄,並使用 ML.RESIZE_IMAGE
預先處理的 ML.DECODE_IMAGE
結果。針對輸入欄位為 input
且輸出欄位為 feature
的模型,傳回解碼圖片表格中所有圖片的推論結果。
建立資料表:
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`);
對解碼圖片資料表執行推論:
SELECT * FROM ML.PREDICT( MODEL `my_dataset.vision_model`, (SELECT uri, decoded_image AS input FROM `my_dataset.decoded_images`) );
範例 5
以下範例直接在 ML.PREDICT
函式中使用 ML.DECODE_IMAGE
函式。在本例中,模型有一個輸出欄位 embeddings
,以及兩個輸入欄位:一個預期是圖片 (f_img
),另一個預期是字串 (f_txt
)。圖片輸入內容來自物件資料表,字串輸入內容則來自標準 BigQuery 資料表,並使用 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) );