チュートリアル: 分類モデルを使用してオブジェクト テーブルで推論を実行する
このチュートリアルでは、一般公開データセットからの画像に基づいてオブジェクト テーブルを作成し、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.
データセットの作成
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.