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 にプロジェクトへのアクセスを許可する
入力データをトレーニング用にフォーマットする
組み込みの画像分類アルゴリズムでは、入力データを tf.Examples
としてフォーマットし、TFRecord ファイルに保存する必要があります。tf.Example
データ構造と TFRecord ファイル形式はいずれも、TensorFlow を使用した効率的なデータ読み取りに対応するように設計されています。
TFRecord は、一連のバイナリ レコードを格納するシンプルな形式です。この場合、すべてのレコードに画像のバイナリ表現が含まれています。各画像は、そのクラスラベルと組み合わせて tf.Example
として表されます。多数の tf.Example
を 1 つの TFRecord ファイルに保存できます。また、複数の TFRecord ファイル間で大きなデータセットをシャーディングすることもできます。
詳細については、TFRecord と tf.Example
をご覧ください。
画像を TFRecord に変換する
TensorFlow には、画像を JPEG から TFRecord 形式に変換するために使用できるスクリプトが用意されています。
このスクリプトは次の場合に使用できます。
- 画像を Cloud Storage に格納する。
Cloud Storage 内の画像へのパスおよびそれぞれの対応するラベルを含む CSV ファイルが存在する。例:
gs://cloud-ml-data/img/flower_photos/daisy/754296579_30a9ae018c_n.jpg,daisy gs://cloud-ml-data/img/flower_photos/dandelion/18089878729_907ed2c7cd_m.jpg,dandelion
これらの CSV ファイルを Cloud Storage に格納する。
次の例は、スクリプトの実行方法を示しています。
スクリプトをダウンロードします。
curl https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/jpeg_to_tf_record.py > ./jpeg_to_tf_record.py
プロジェクト ID とバケット名の変数をまだ設定していない場合は設定します。
PROJECT_ID="YOUR_PROJECT_ID" BUCKET_NAME="YOUR_BUCKET_NAME"
対象のデータセットについて、考えられるすべてのラベルのリストを一時ファイルに作成します。
cat << EOF > /tmp/labels.txt daisy dandelion roses sunflowers tulips EOF
一般公開されている
cloud-ml-data
バケットおよび独自のラベルリストに含まれている花データを使用してスクリプトを実行します。python -m jpeg_to_tf_record.py \ --train_csv gs://cloud-ml-data/img/flower_photos/train_set.csv \ --validation_csv gs://cloud-ml-data/img/flower_photos/eval_set.csv \ --labels_file /tmp/labels.txt \ --project_id $PROJECT_ID \ --output_dir gs://$BUCKET_NAME/flowers_as_tf_record
Cloud Storage バケットの権限を確認する
データを保存するには、AI Platform Training ジョブの実行に使用している Google Cloud プロジェクトの Cloud Storage バケットを使用します。それ以外の場合は、データが保存されている Cloud Storage バケットへのアクセス権を AI Platform Training に付与します。
必須の入力形式
組み込みの画像分類アルゴリズムを使用してトレーニングするには、次のフィールドを含む tf.Example
として画像データを構造化する必要があります。
image/encoded
は、RAW 画像文字列です。image/class/label
は、対応する画像の単一の整数ラベルです。 インスタンスごとに複数のラベルを指定することはできません。データセットに使用される整数ラベルのセットは、
1
から始まる連続したシーケンスにする必要があります。たとえば、データセットに 5 つのクラスがある場合、各ラベルは範囲[1, 5]
内の整数でなければなりません。
例:
{
'image/encoded': '<encoded image data>',
'image/class/label': 2
}
最適な 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['image_bytes'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: Placeholder:0
inputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: key:0
The given SavedModel SignatureDef contains the following output(s):
outputs['classes'] tensor_info:
dtype: DT_INT64
shape: (-1)
name: ArgMax:0
outputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: Identity:0
outputs['probabilities'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 1000)
name: softmax_tensor:0
Method name is: tensorflow/serving/predict
入力:
image_bytes
: RAW(デコードされていない)画像バイト。tf.Example に格納されるimage/encoded
と同じです。key
: 予測入力の文字列値の識別子。この値は出力key
に渡されます。バッチ予測において予測出力を入力にマッピングするのに役立ちます。
出力:
classes
: 予測クラス(整数)ラベル。最も可能性が高いラベルです。key
: 出力キー。probabilities
: 各class
(0 からnum_classes
の範囲)のprobability
(0~1)
次に、予測の入力と出力の例を示します。
prediction_input: {
'image_bytes': 'some_raw_image_bytes',
'key': ['test_key'])
}
prediction_output: {
'probabilities': [[0.1, 0.3, 0.6]],
'classes': [2],
'key': ['test_key'],
}
構成例
gcloud
を使用してジョブを送信する場合は、マシンタイプとハイパーパラメータ調整仕様の 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-highmem-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
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-highmem-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
tpuTfVersion: 1.14
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
# The following are hyperparameter configs.
hyperparameters:
goal: MAXIMIZE
hyperparameterMetricTag: top_1_accuracy
maxTrials: 6
maxParallelTrials: 3
enableTrialEarlyStopping: True
params:
- parameterName: initial_learning_rate
type: DOUBLE
minValue: 0.001
maxValue: 0.2
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_classification:latest" # Variables for constructing descriptive names for JOB_ID and JOB_DIR DATASET_NAME="flowers" ALGORITHM="image_classification" 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 \ --master-image-uri=$IMAGE_URI \ -- \ --training_data_path=$TRAINING_DATA_PATH \ --validation_data_path=$VALIDATION_DATA_PATH \ --job-dir=$JOB_DIR \ --max_steps=30000 \ --train_batch_size=128 \ --num_classes=5 \ --num_eval_images=100 \ --initial_learning_rate=0.128 \ --warmup_steps=1000 \ --model_type='efficientnet-b4'
ジョブが正常に送信されたら、次の
gcloud
コマンドを使用してログを表示できます。gcloud ai-platform jobs describe $JOB_ID gcloud ai-platform jobs stream-logs $JOB_ID
次のステップ
- 組み込み画像分類のリファレンスで他のパラメータについて調べる。