チュートリアル: 分類モデルを使用してオブジェクト テーブルで推論を実行する
このチュートリアルでは、一般公開データセットからの画像に基づいてオブジェクト テーブルを作成し、ResNet 50 モデルを使用してそのオブジェクト テーブルで推論を行う方法を説明します。
ResNet 50 モデル
ResNet 50 モデルは、画像ファイルを解析し、ある画像が対応するクラスに属する可能性を表す一連のベクトル(ロジット)を出力します。詳細については、モデルの TensorFlow Hub ページの Usage セクションをご覧ください。
ResNet 50 モデルの入力は、形状 [-1, 224, 224, 3]
の DType
float32
のテンソルを取ります。出力は、形状 [-1, 1024]
の tf.float32
のテンソルの配列です。
必要な権限
- データセットを作成するには、
bigquery.datasets.create
権限が必要です。 接続リソースを作成するには、次の権限が必要です。
bigquery.connections.create
bigquery.connections.get
接続のサービス アカウントに権限を付与するには、次の権限が必要です。
resourcemanager.projects.setIamPolicy
オブジェクト テーブルを作成するには、次の権限が必要です。
bigquery.tables.create
bigquery.tables.update
bigquery.connections.delegate
バケットを作成するには、
storage.buckets.create
権限が必要です。モデルを 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
- オブジェクト テーブルに対する
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
- BigQuery: You incur storage costs for the object table you create in BigQuery.
- BigQuery ML: You incur costs for the model you create and the inference you perform in BigQuery ML.
- Cloud Storage: You incur costs for the objects you store in Cloud Storage.
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
BigQuery ストレージの料金について詳しくは、BigQuery のドキュメントのストレージの料金をご覧ください。
BigQuery ML の料金について詳しくは、BigQuery ドキュメントの BigQuery ML の料金をご覧ください。
Cloud Storage の料金設定の詳細については、クラウドの料金設定のページをご覧ください。
始める前に
- 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.
予約を作成する
オブジェクト テーブルでインポートされたモデルを使用するには、BigQuery の Enterprise エディションまたは Enterprise Plus エディションを使用する予約を作成し、QUERY
ジョブタイプを使用する予約の割り当てを作成する必要があります。
データセットの作成
resnet_inference_test
という名前のデータセットを作成します。
SQL
BigQuery ページに移動します。
[エディタ] ペインで、次の SQL ステートメントを実行します。
CREATE SCHEMA `PROJECT_ID.resnet_inference_test`;
PROJECT_ID
は、実際のプロジェクト ID に置き換えます。
bq
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
bq mk
コマンドを実行してデータセットを作成します。bq mk --dataset --location=us PROJECT_ID:resnet_inference_test
PROJECT_ID
は、実際のプロジェクト ID に置き換えます。
接続を作成する
lake-connection
という名前の接続を作成します。
コンソール
BigQuery ページに移動します。
[
追加]、[外部データソース] の順にクリックします。[接続タイプ] リストで、[BigLake とリモート関数(クラウド リソース)] を選択します。
[接続 ID] フィールドに「
lake-connection
」と入力します。[接続を作成] をクリックします。
[接続情報] ペインで、[サービス アカウント ID] フィールドの値をコピーし、任意の場所に保存します。接続のサービス アカウントに権限を付与するには、この情報が必要です。
bq
Cloud Shell で
bq mk
コマンドを実行して、接続を作成します。bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \ lake-connection
bq show
コマンドを実行して、接続に関する情報を取得します。bq show --connection us.lake-connection
properties
列からserviceAccountId
プロパティの値をコピーし、任意の場所に保存します。接続のサービス アカウントに権限を付与するには、この情報が必要です。
Cloud Storage バケットを作成する
モデルファイルを格納する Cloud Storage バケットを作成します。
接続のサービス アカウントに権限を付与する
コンソール
[IAM と管理] ページに移動
[アクセス権を付与] をクリックします。
[プリンシパルを追加します] ダイアログが開きます。
[新しいプリンシパル] フィールドに、前の手順でコピーしたサービス アカウント ID を入力します。
[ロールを選択] フィールドで、[Cloud Storage] を選択し、続いて [Storage オブジェクト閲覧者] を選択します。
[保存] をクリックします。
gcloud
Cloud Shell で gcloud storage buckets add-iam-policy-binding
コマンドを実行します。
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:MEMBER \ --role=roles/storage.objectViewer
MEMBER
は、先ほどコピーしたサービス アカウント ID に置き換えます。BUCKET_NAME
は、作成したバケットの名前に置き換えます。
詳細については、バケットレベルのポリシーにプリンシパルを追加するをご覧ください。
オブジェクト テーブルを作成する
一般公開されている gs://cloud-samples-data/vision
バケット内の画像ファイルに基づいて、vision_images
という名前のオブジェクト テーブルを作成します。
SQL
BigQuery ページに移動します。
[エディタ] ペインで、次の SQL ステートメントを実行します。
CREATE EXTERNAL TABLE resnet_inference_test.vision_images WITH CONNECTION `us.lake-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://cloud-samples-data/vision/*.jpg'] );
bq
Cloud Shell で bq mk
コマンドを実行して、接続を作成します。
bq mk --table \
--external_table_definition='gs://cloud-samples-data/vision/*.jpg@us.lake-connection' \
--object_metadata=SIMPLE \
resnet_inference_test.vision_images
モデルを Cloud Storage にアップロードする
モデルファイルを取得して、Cloud Storage で使用できるようにします。
- ResNet 50 モデルをローカルマシンにダウンロードします。これにより、モデル用の
saved_model.pb
ファイルとvariables
フォルダが提供されます。 - 先ほど作成したバケットに、
saved_model.pb
ファイルとvariables
フォルダをアップロードします。
モデルを BigQuery ML に読み込む
BigQuery ページに移動します。
[エディタ] ペインで、次の SQL ステートメントを実行します。
CREATE MODEL `resnet_inference_test.resnet` OPTIONS( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/*');
BUCKET_NAME
は、作成したバケットの名前に置き換えます。
モデルを検査する
アップロードされたモデルを調べて、モデルの入力フィールドと出力フィールドを確認します
BigQuery ページに移動します。
[エクスプローラ] ペインでプロジェクトを開き、
resnet_inference_test
データセットを開き、[モデル] ノードを開きます。resnet
モデルをクリックします。表示されたモデルペインで、[スキーマ] タブをクリックします。
[ラベル] セクションを確認します。これは、モデルによって出力されるフィールドを示します。この場合、フィールド名の値は
activation_49
です。[特徴] セクションを確認します。これは、モデルに入力する必要があるフィールドを示します。
ML.DECODE_IMAGE
関数のSELECT
ステートメントでこれらを参照します。この場合、フィールド名の値はinput_1
です。
推論を実行する
resnet
モデルを使用して、vision_images
オブジェクト テーブルで推論を実行します。
BigQuery ページに移動します。
[エディタ] ペインで、次の SQL ステートメントを実行します。
SELECT * FROM ML.PREDICT( MODEL `resnet_inference_test.resnet`, (SELECT uri, ML.RESIZE_IMAGE(ML.DECODE_IMAGE(data), 224, 224, FALSE) AS input_1 FROM resnet_inference_test.vision_images) );
結果は次のようになります。
------------------------------------------------------------------------------------------------------------------------------------- | activation_49 | uri | input_1 | —------------------------------------------------------------------------------------------------------------------------------------ | 1.0254175464297077e-07 | gs://cloud-samples-data/vision/automl_classification/flowers/daisy/21652746_cc379e0eea_m.jpg | 0.0 | —------------------------------------------------------------------------------------------------------------------------------------ | 2.1671139620593749e-06 | | 0.0 | —-------------------------- ----------- | 8.346052027263795e-08 | | 0.0 | —-------------------------- ----------- | 1.159310958342985e-08 | | 0.0 | —------------------------------------------------------------------------------------------------------------------------------------
クリーンアップ
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.