針對圖片物件資料表執行推論
本文說明如何使用 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 模型。
模型必須符合
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.
-
Make sure 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.
-
Make sure 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
(適用於採用 ONNX 格式的 PyTorch 模型)
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');
請依指示取代下列項目:
以下範例會使用預設專案,並使用 gs://my_bucket/my_model_folder
中的 saved_model.pb
檔案和 variables
資料夾,將 TensorFlow 模型以 my_vision_model
的形式載入至 BigQuery ML:
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.DECODE_IMAGE
的結果,這些結果已寫入資料表資料欄,並使用 ML.RESIZE_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) );