画像オブジェクト テーブルで推論を実行する
このドキュメントでは、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 モデル
モデルは、サポートされている入力で説明されている入力要件と制限を満たしている必要があります。
シリアル化されたモデルのサイズは 450 MB 未満にする必要があります。
モデルのシリアル化解除された(メモリ内の)サイズは、1,000 MB 未満である必要があります。
モデルの入力テンソルは、次の条件を満たす必要があります。
[0, 1)
の値のtf.float32
のデータ型がある、または[0, 255)
の値のtf.uint8
のデータ型がある。- 形状は
[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.
モデルを Cloud Storage にアップロードする
モデルをアップロードする手順は次のとおりです。
- 独自のモデルを作成した場合は、そのモデルをローカルに保存します。TensorFlow Hub のモデルを使用している場合は、ローカルマシンにモデルをダウンロードします。TensorFlow を使用している場合、
saved_model.pb
ファイルとモデル用のvariables
フォルダが提供されます。 - 必要に応じて、Cloud Storage バケットを作成します。
- モデル アーティファクトをバケットにアップロードします。
モデルを BigQuery ML に読み込む
画像オブジェクト テーブルを操作するモデルの読み込みは、構造化データを操作するモデルの読み込みと同じです。モデルを BigQuery ML に読み込む手順は次のとおりです。
CREATE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` OPTIONS( model_type = 'MODEL_TYPE', model_path = 'BUCKET_PATH');
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。DATASET_ID
: モデルを格納するデータセットの ID。MODEL_NAME
: モデルの名前。MODEL_TYPE
: 次の値のいずれかを使用します。TENSORFLOW
(TensorFlow モデルの場合)ONNX
(ONNX 形式の PyTorch モデルの場合)
BUCKET_PATH
: モデルを含む Cloud Storage バケットへのパス([gs://bucket_name/[folder_name/]*]
形式)。
次の例では、デフォルトのプロジェクトを使用し、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/*');
モデルを検査する
アップロードされたモデルを検査すると、モデルの入力フィールドと出力フィールドが何かを確認できます。これらのフィールドは、オブジェクト テーブルに対して推論を実行するときに参照する必要があります。
モデルを検査する手順は次のとおりです。
[BigQuery] ページに移動します。
[エクスプローラ] ペインでプロジェクトを開き、モデルを含むデータセットを開いて、[モデル] ノードを開きます。
モデルをクリックします。
表示されたモデルペインで、[スキーマ] タブをクリックします。
[ラベル] セクションを確認します。これは、モデルによって出力されるフィールドを示します。
[特徴] セクションを確認します。これは、モデルに入力する必要があるフィールドを示します。これらは、
ML.DECODE_IMAGE
関数のSELECT
ステートメントで参照します。
モデル入力の形状を判断するなど、TensorFlow モデルを詳しく検査する場合は、TensorFlow をインストールして、saved_model_cli show
コマンドを使用します。
画像を前処理する
画像のバイトを多次元の ARRAY
表現に変換するには、ML.DECODE_IMAGE
関数を使用する必要があります。ML.DECODE_IMAGE
出力を ML.PREDICT
関数で直接使用できます。または、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.CONVERT_COLOR_SPACE
関数は、RGB
色空間の画像を別の色空間に変換します。ML.CONVERT_IMAGE_TYPE
関数は、ML.DECODE_IMAGE
関数によって出力されたピクセル値を、浮動小数点数から[0, 255)
の範囲の整数に変換します。ML.RESIZE_IMAGE
関数は、画像のサイズを変更します。
これらは 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) );
次のように置き換えます。
PROJECT_ID
: モデルとオブジェクト テーブルを含むプロジェクトのプロジェクト ID。DATASET_ID
: モデルとオブジェクト テーブルを含むデータセットの ID。MODEL_NAME
: モデルの名前。IMAGE_DATA
:ML.DECODE_IMAGE
関数の出力と、ML.DECODE_IMAGE
またはその他の画像処理関数によって出力される画像データを含むテーブル列のいずれかによって表される画像データ。MODEL_INPUT
: モデルの入力フィールドの名前。この情報を確認するには、モデルの検査を行い、[特徴] セクションでフィールド名を確認します。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
という出力フィールドと、2 つの入力フィールド(1 つは画像 f_img
を格納し、もう 1 つは文字列 f_txt
を格納します)があります。画像入力はオブジェクト テーブルから取得し、文字列入力は、uri
列を使用してオブジェクト テーブルと結合された標準 BigQuery テーブルから取得します。
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) );
次のステップ
- リモート関数を使用してオブジェクト テーブルを分析する方法を学習する。
- 特徴ベクトルモデルを使用してオブジェクト テーブルで推論を実行する。
- 分類モデルを使用してオブジェクト テーブルで推論を実行する。
- リモート関数を使用してオブジェクト テーブルの分析をする。
ML.ANNOTATE_IMAGE
関数を使用して画像にアノテーションを付ける。