AI Platform Training での組み込みアルゴリズムを使用したトレーニングでは、データセットを送信し、トレーニング コードを一切作成せずに、モデルをトレーニングできます。このページでは、組み込みの画像オブジェクト検出アルゴリズムの仕組みと使用方法について説明します。
概要
組み込みの画像オブジェクト検出アルゴリズムは、トレーニングと検証のデータセットを使用してモデルを継続的にトレーニングし、トレーニング ジョブの過程で生成された最も正確な SavedModel を出力します。ハイパーパラメータ調整を使用してモデルの精度を最適化することもできます。エクスポートされた SavedModel は、ローカルでの予測に直接使用することも、本番環境サービス用に AI Platform Prediction にデプロイすることもできます。
制限事項
組み込みの画像検出アルゴリズムでは、単一 CPU、GPU、TPU によるトレーニングがサポートされています。結果として生成される SavedModel は、CPU および GPU での処理と互換性があります。
組み込みの画像オブジェクト検出アルゴリズムを使用したトレーニングでは、次の機能はサポートされていません。
- 分散トレーニング。AI Platform Training で TensorFlow 分散トレーニング ジョブを実行するには、トレーニング アプリケーションを作成する必要があります。
- マルチ GPU トレーニング。組み込みアルゴリズムによって使用される GPU は一度に 1 つだけです。1 台のマシンで複数の GPU を使用したトレーニングを行うには、トレーニング アプリケーションを作成する必要があります。マシンタイプの詳細については、こちらをご覧ください。
サポートされているマシンタイプ
次の AI Platform Training スケール階層とマシンタイプがサポートされています。
BASIC
スケール階層BASIC_TPU
スケール階層- AI Platform Training でサポートされている Compute Engine マシンタイプの
CUSTOM
スケール階層 - 次のいずれかの以前のマシンタイプを持つ
CUSTOM
スケール階層:standard
large_model
complex_model_s
complex_model_m
complex_model_l
standard_gpu
standard_p100
standard_v100
large_model_v100
complex_model_m_gpu
complex_model_l_gpu
complex_model_m_p100
complex_model_m_v100
complex_model_l_v100
TPU_V2
(8 コア)
Cloud TPU にプロジェクトへのアクセスを許可する
Google Cloud プロジェクトに関連付けられた Cloud TPU サービス アカウント名を承認する手順は次のとおりです。
projects.getConfig
を呼び出して、Cloud TPU サービス アカウント名を取得します。例:PROJECT_ID=PROJECT_ID curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://ml.googleapis.com/v1/projects/$PROJECT_ID:getConfig
API から返された
serviceAccountProject
とtpuServiceAccount
フィールドの値を保存します。Cloud TPU サービス アカウントを初期化します。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" -d '{}' \ https://serviceusage.googleapis.com/v1beta1/projects/<serviceAccountProject>/services/tpu.googleapis.com:generateServiceIdentity
Cloud ML サービス エージェントのロールを使用して、Cloud TPU サービス アカウントをプロジェクト内のメンバーとして追加します。Google Cloud Console または gcloud
コマンドを使用して、次の手順を行います。
Console
- Google Cloud Console にログインし、TPU を使用しているプロジェクトを選択します。
- [IAM と管理] > [IAM] を選択します。
- [追加] ボタンをクリックして、プロジェクトにメンバーを追加します。
- [メンバー] テキスト ボックスに TPU サービス アカウントを入力します。
- [ロール] プルダウン リストをクリックします。
- Cloud ML サービス エージェントのロールを有効にします([サービス エージェント] > [Cloud ML サービス エージェント])。
gcloud
プロジェクト ID と Cloud TPU サービス アカウントが格納されている環境変数を設定します。
PROJECT_ID=PROJECT_ID SVC_ACCOUNT=your-tpu-sa-123@your-tpu-sa.google.com.iam.gserviceaccount.com
Cloud TPU サービス アカウントに
ml.serviceAgent
ロールを付与します。gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent
サービス アカウントへのロールの付与については、IAM のドキュメントをご覧ください。
入力データをトレーニング用にフォーマットする
組み込みの画像オブジェクト検出アルゴリズムでは、入力データを tf.Examples
としてフォーマットし、TFRecord ファイルに保存する必要があります。tf.Example
データ構造と TFRecord ファイル形式はいずれも、TensorFlow を使用した効率的なデータ読み取りに対応するように設計されています。
TFRecord は、一連のバイナリ レコードを格納するシンプルな形式です。この場合、すべてのレコードに画像のバイナリ表現が含まれています。各画像は、そのクラスラベルと組み合わせて tf.Example
として表されます。多数の tf.Example
を 1 つの TFRecord ファイルに保存できます。また、複数の TFRecord ファイル間で大きなデータセットをシャーディングすることもできます。
詳細については、TFRecord と tf.Example
をご覧ください。
画像を TFRecord に変換する
画像を予測の取得に必要な形式に変換するには、TensorFlow Model Garden のガイドにあるオブジェクト検出用の入力の準備をご覧ください。
Cloud Storage バケットの権限を確認する
データを保存するには、AI Platform Training ジョブの実行に使用している Google Cloud プロジェクトの Cloud Storage バケットを使用します。それ以外の場合は、データが保存されている Cloud Storage バケットへのアクセス権を AI Platform Training に付与します。
必須の入力形式
組み込みの画像オブジェクト検出アルゴリズムを使用してトレーニングするには、次のフィールドを含む tf.Example
として画像データを構造化する必要があります。
image/encoded
は、文字列としてエンコードされた RAW 画像です。image/object/class/label
は、対応する画像の整数ラベルのリストです(ボックスごとに 1 つのラベル)。データセットに使用される整数ラベルのセットは、
1
から始まる連続したシーケンスにする必要があります。たとえば、データセットに 5 つのクラスがある場合、各ラベルは範囲[1, 5]
内の整数でなければなりません。image/object/bbox/xmin
は、対応する画像の正規化された左側の x 座標のリストです(ボックスごとに 1 つの座標)。各座標は[0, 1]
の範囲内にする必要があります。image/object/bbox/xmax
は、対応する画像の正規化された右側の x 座標のリストです(ボックスごとに 1 つの座標)。各座標は[0, 1]
の範囲内にする必要があります。image/object/bbox/ymin
は、対応する画像の正規化された上側の y 座標のリストです(ボックスごとに 1 つの座標)。各座標は[0, 1]
の範囲内にする必要があります。image/object/bbox/ymax
は、対応する画像の正規化された下側の y 座標のリストです(ボックスごとに 1 つの座標)。各座標は[0, 1]
の範囲内にする必要があります。
次の例は、2 つの境界ボックスを含む画像の tf.Example
の構造を示しています。最初のボックスのラベルは 1
、左上隅は正規化された座標 (0.1, 0.4)
、右下隅は正規化された座標 (0.5, 0.8)
です。2 つ目のボックスのラベルは 2
で、左上隅は正規化された座標 (0.3, 0.5)
、右下隅は正規化された座標 (0.4, 0.7)
です。
{
'image/encoded': '<encoded image data>',
'image/object/class/label': [1, 2],
'image/object/bbox/xmin': [0.1, 0.3],
'image/object/bbox/xmax': [0.5, 0.4],
'image/object/bbox/ymin': [0.4, 0.5],
'image/object/bbox/ymax': [0.8, 0.7]
}
この tf.Example
形式は、TFRecord オブジェクト検出スクリプトで使用されるものと同じです。
最適な SavedModel を出力として取得する
トレーニング ジョブが完了したら、そのジョブの送信時に jobDir
として指定した Cloud Storage バケットに TensorFlow SavedModel が書き込まれます。SavedModel は jobDir/model
に書き込まれます。たとえば、ジョブを gs://your-bucket-name/your-job-dir
に送信した場合、SavedModel は gs://your-bucket-name/your-job-dir/model
に書き込まれます。
ハイパーパラメータ調整を有効にしている場合は、トレーニング プロセスの中で最も精度が高かった TensorFlow SavedModel が返されます。たとえば、2,500 トレーニング ステップで構成されるトレーニング ジョブを送信し、2,000 ステップにおける精度が最も高かった場合、その特定の時点で保存された TensorFlow SavedModel が返されます。
AI Platform Training の各トライアルでは、最も精度が高い TensorFlow SavedModel が Cloud Storage バケット内の個別のディレクトリに書き込まれます。例: gs://your-bucket-name/your-job-dir/model/trial_{trial_id}
。
出力される SavedModel のシグネチャは次のようになります。
signature_def['serving_default']:
The given SavedModel SignatureDef contains the following input(s):
inputs['encoded_image'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: encoded_image_string_tensor:0
inputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: key:0
The given SavedModel SignatureDef contains the following output(s):
outputs['detection_boxes'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100, 4)
name: detection_boxes:0
outputs['detection_classes'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100)
name: detection_classes:0
outputs['detection_scores'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100)
name: detection_scores:0
outputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: Identity:0
outputs['num_detections'] tensor_info:
dtype: DT_FLOAT
shape: (-1)
name: num_detections:0
Method name is: tensorflow/serving/predict
入力:
encoded_image
: RAW(デコードされていない)画像バイト。tf.Example に格納されるimage/encoded
と同じです。key
: 予測入力の文字列値の識別子。この値は出力key
に渡されます。バッチ予測において予測出力を入力にマッピングするのに役立ちます。
出力:
num_detections
: 検出された境界ボックスの数。detection_boxes
: 検出境界ボックスの相対([0,1
] の値)座標([ymin, xmin, ymax, xmax
])のリスト。detection_classes
:detection_boxes
における各検出ボックスの予測クラス(整数)ラベルのリスト。detection_scores
:detection_boxes
における各検出ボックスのscores
のリスト。key
: 出力キー。
予測出力の例を次に示します。
{u'detection_classes': [1.0, 3.0, 3.0, ...],
u'key': u'test_key',
u'num_detections': 100.0,
u'detection_scores': [0.24401935935020447, 0.19375669956207275, 0.18359294533729553, ...]]}
構成例
gcloud
を使用してジョブを送信する場合は、マシンタイプとハイパーパラメータ調整仕様の config.yaml
ファイルを作成する必要があります。Google Cloud Console を使用する場合は、このファイルを作成する必要はありません。トレーニング ジョブの送信方法をご覧ください。
次のサンプル config.yaml
ファイルは、トレーニング ジョブ用の TPU リソースを割り当てる方法を示しています。
cat << EOF > config.yaml
trainingInput:
scaleTier: CUSTOM
masterType: n1-standard-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: NVIDIA_TESLA_P100
count: 1
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
tpuTfVersion: 1.14
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
EOF
次に、config.yaml
ファイルを使用して、トレーニング ジョブを送信します。
ハイパーパラメータ調整構成
ハイパーパラメータ調整を使用するには、ハイパーパラメータ調整構成をマシン構成と同じ config.yaml
ファイルに含めます。
各ハイパーパラメータの簡単な説明については、Google Cloud Console 内で確認できます。より包括的な説明については、組み込みの画像オブジェクト検出アルゴリズムのリファレンスをご覧ください。
次のサンプル config.yaml
ファイルは、トレーニング ジョブ用の TPU リソースを割り当てる方法を示しています。また、ハイパーパラメータ調整構成が含まれています。
cat << EOF > config.yaml
trainingInput:
# Use a cluster with many workers and a few parameter servers.
scaleTier: CUSTOM
masterType: n1-standard-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: NVIDIA_TESLA_P100
count: 1
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
# The following are hyperparameter configs.
hyperparameters:
goal: MAXIMIZE
hyperparameterMetricTag: "AP"
maxTrials: 6
maxParallelTrials: 3
enableTrialEarlyStopping: True
params:
- parameterName: initial_learning_rate
type: DOUBLE
minValue: 0.001
maxValue: 0.1
scaleType: UNIT_LOG_SCALE
EOF
画像オブジェクト検出トレーニング ジョブを送信する
このセクションでは、組み込みの画像オブジェクト検出アルゴリズムを使用したトレーニング ジョブを送信する方法について説明します。
Console
アルゴリズムを選択する
Google Cloud Console で AI Platform Training の [ジョブ] ページに移動します。
[新規トレーニング ジョブ] ボタンをクリックします。下に表示されたオプションから、[組み込みアルゴリズムによるトレーニング] をクリックします。
[新しいトレーニング ジョブの作成] ページで、[画像オブジェクト検出] を選択し、[次へ] をクリックします。
トレーニング データと検証データを選択する
[トレーニング データ] のプルダウン ボックスで、1 つのファイルを使用するか、複数のファイルを使用するかを指定します。
- 1 つのファイルを使用する場合は、[GCS バケットに格納されている単一ファイルを使用する] を選択したままにします。
- 複数のファイルを使用する場合は、[1 つの Cloud Storage ディレクトリに保存されている複数のファイルを使用する] を選択します。
[ディレクトリ パス] で [参照] をクリックします。右パネルで、トレーニング データをアップロードしたバケットの名前をクリックし、ファイルに移動します。
複数のファイルを選択する場合は、[ワイルドカードの名前] にワイルドカード文字を入力します。パスが正しいことを確認できるように、下に [Complete GCS path] が表示されます。
[検証データ] のプルダウン ボックスで、1 つのファイルを使用するか、複数のファイルを使用するかを指定します。
- 1 つのファイルを使用する場合は、[GCS バケットに格納されている単一ファイルを使用する] を選択したままにします。
- 複数のファイルを使用する場合は、[1 つの Cloud Storage ディレクトリに保存されている複数のファイルを使用する] を選択します。
[ディレクトリ パス] で [参照] をクリックします。右パネルで、トレーニング データをアップロードしたバケットの名前をクリックし、ファイルに移動します。
複数のファイルを選択する場合は、[ワイルドカードの名前] にワイルドカード文字を入力します。パスが正しいことを確認できるように、下に [Complete GCS path] が表示されます。
[出力ディレクトリ] に、AI Platform Training によってトレーニング ジョブからの出力が保存される Cloud Storage バケットへのパスを入力します。Cloud Storage バケットのパスを直接入力するか、[参照] ボタンをクリックしてパスを選択します。
ストレージを整理するため、このトレーニング ジョブ用の新しいディレクトリを Cloud Storage バケットに作成します。これは [参照] ペインで行うことができます。
[次へ] をクリックします。
アルゴリズム引数を設定する
アルゴリズム固有の各引数には、ハイパーパラメータ調整なしのトレーニング ジョブのデフォルト値が表示されます。アルゴリズム引数でハイパーパラメータ調整を有効にする場合は、最小値と最大値を指定する必要があります。
すべてのアルゴリズム引数の詳細については、Google Cloud Console 内のリンクをたどって、組み込みの画像オブジェクト検出のリファレンスをご覧ください。
ジョブを送信する
[ジョブの設定] タブで次の操作を行います。
- [ジョブ ID] に一意のジョブ ID を入力します。
- [リージョン] に使用可能なリージョン(「us-central1」など)を入力します。
- マシンタイプを選択するには、[スケール階層] で [CUSTOM] を選択します。カスタム クラスタ仕様を指定するためのセクションが表示されます。
- [マスタータイプ] で使用可能なマシンタイプを選択します。
- TPU を使用する場合は、[ワーカータイプ] を [cloud_tpu] に設定します。[ワーカー数] はデフォルトで 1 に設定されます。
[完了] をクリックしてトレーニング ジョブを送信します。
gcloud
ジョブの環境変数を設定します。
PROJECT_ID="YOUR_PROJECT_ID" BUCKET_NAME="YOUR_BUCKET_NAME" # Specify the same region where your data is stored REGION="YOUR_REGION" gcloud config set project $PROJECT_ID gcloud config set compute/region $REGION # Set Cloud Storage paths to your training and validation data # Include a wildcard if you select multiple files. TRAINING_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/train-*.tfrecord" VALIDATION_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/eval-*.tfrecord" # Specify the Docker container for your built-in algorithm selection IMAGE_URI="gcr.io/cloud-ml-algos/image_object_detection:latest" # Variables for constructing descriptive names for JOB_ID and JOB_DIR DATASET_NAME="coco" ALGORITHM="object_detection" MODEL_NAME="${DATASET_NAME}_${ALGORITHM}" DATE="$(date '+%Y%m%d_%H%M%S')" # Specify an ID for this job JOB_ID="${MODEL_NAME}_${DATE}" # Specify the directory where you want your training outputs to be stored JOB_DIR="gs://${BUCKET_NAME}/algorithm_training/${JOB_ID}"
ジョブを送信します。
gcloud ai-platform jobs submit training $JOB_ID \ --region=$REGION \ --config=config.yaml \ --job-dir=$JOB_DIR \ -- \ --training_data_path=$TRAINING_DATA_PATH \ --validation_data_path=$VALIDATION_DATA_PATH \ --train_batch_size=64 \ --num_eval_images=500 \ --train_steps_per_eval=2000 \ --max_steps=22500 \ --num_classes=90 \ --warmup_steps=500 \ --initial_learning_rate=0.08 \ --fpn_type="nasfpn" \ --aug_scale_min=0.8 \ --aug_scale_max=1.2
ジョブが正常に送信されたら、次の
gcloud
コマンドを使用してログを表示できます。gcloud ai-platform jobs describe $JOB_ID gcloud ai-platform jobs stream-logs $JOB_ID
次のステップ
- TFRecord オブジェクト検出スクリプトで独自のデータセットを使用する方法を学習する。
- 組み込みの画像オブジェクト検出のリファレンスを参照して、さまざまなパラメータについて学習する。