對圖片物件資料表執行推論
本文說明如何使用 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. 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.
- 如果您已建立自己的模型,請在本機儲存。如果您使用 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」:  - 如果沒有看到左側窗格,請按一下「展開左側窗格」圖示 開啟窗格。 
- 在「Explorer」窗格中展開專案,然後按一下「Datasets」。 
- 按一下包含模型的資料集。 
- 按一下「模型」分頁標籤。 
- 在隨即開啟的模型窗格中,按一下「結構定義」分頁標籤。 
- 查看「標籤」部分。這會識別模型輸出的欄位。 
- 查看「功能」部分。這會識別必須輸入模型中的欄位。您可以在 - 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) );