Cloud TPU で Deeplab-v3 を実行する

このチュートリアルでは、Cloud TPU で Deeplab-v3 モデルをトレーニングする方法について説明します。

このモデルは、画像セマンティック セグメンテーション モデルです。画像セマンティック セグメンテーション モデルは、1 つの画像内の複数オブジェクトを識別し、ローカライズすることに重点を置いています。このタイプのモデルは、自律走行、地理空間画像処理、医用画像処理などの機械学習アプリケーションでよく使用されます。

このチュートリアルでは、PASCAL VOC 2012 データセットに対してトレーニング モデルを実行します。このデータセットの詳細については、The PASCAL Visual Object Classes Homepage をご覧ください。

始める前に

このチュートリアルを開始する前に、Google Cloud Platform プロジェクトが正しく設定されていることを確認してください。

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP プロジェクトを選択または作成します。

    [リソースの管理] ページに移動

  3. プロジェクトに対して課金が有効になっていることを確認します。

    課金を有効にする方法について

  4. このチュートリアルでは、Google Cloud Platform の課金対象となるコンポーネントを使用します。費用を見積もるには、Cloud TPU の料金ページを確認してください。不要な課金を回避できるよう、このチュートリアルを完了したら、作成したリソースを必ずクリーンアップしてください。

リソースを設定する

このセクションでは、チュートリアルで使用する Cloud Storage のストレージ、VM、Cloud TPU の各リソースを設定する方法を説明します。

Cloud Storage バケットを作成する

モデルのトレーニングに使用するデータとトレーニング結果を格納するには、Cloud Storage バケットが必要です。このチュートリアルで使用する ctpu up ツールは、Cloud TPU サービス アカウントのデフォルトの権限を設定します。権限の詳細な設定が必要な場合は、アクセスレベル権限をご覧ください。

作成するバケットは、使用する仮想マシン(VM)と Cloud TPU デバイスまたは Cloud TPU スライス(複数の TPU デバイス)が存在するリージョンと同じリージョン内に作成する必要があります。

  1. GCP Console の Cloud Storage ページに移動します。

    Cloud Storage ページに移動

  2. 次のオプションを指定して新しいバケットを作成します。

    • 任意の一意な名前
    • デフォルトのストレージ クラス: Regional
    • ロケーション: 単一の Cloud TPU デバイスを使用する場合は、表示されるデフォルト ロケーションを受け入れます。Cloud TPU Pod スライスを使用する場合、Cloud TPU Pod を利用できるリージョンを選択する必要があります。

ctpu ツールを使用する

このセクションでは、Cloud TPU プロビジョニング ツールctpu)を使用して Cloud TPU プロジェクトのリソースを作成、管理する方法を説明します。リソースは、同じ名前が付けられた仮想マシン(VM)と Cloud TPU リソースで構成されます。これらのリソースは、作成したバケットと同じリージョン / ゾーンに存在する必要があります。

また、VM リソースと TPU リソースの設定には、gcloud コマンドか Cloud Console を使用できます。Compute Engine VM と Cloud TPU の設定から管理までのすべての手順については、VM と TPU のリソース管理のページをご覧ください。

ctpu up を実行してリソースを作成する

  1. Cloud Shell ウィンドウを開きます。

    Cloud Shell を開く

  2. Cloud TPU デバイスまたは Pod スライスのいずれかを示すフラグを指定して ctpu up を実行します。フラグのオプションと説明については、CTPU リファレンスをご覧ください。

  3. Cloud TPU デバイスを設定します。

    $ ctpu up 

    構成に関する次のメッセージが表示されます。

    ctpu will use the following configuration:
    
    Name: [your TPU's name]
    Zone: [your project's zone]
    GCP Project: [your project's name]
    TensorFlow Version: 1.13
    VM:
     Machine Type: [your machine type]
     Disk Size: [your disk size]
     Preemptible: [true or false]
    Cloud TPU:
     Size: [your TPU size]
     Preemptible: [true or false]
    
    OK to create your Cloud TPU resources with the above configuration? [Yn]:
    

    y キーを押して、Cloud TPU リソースを作成します。

ctpu up コマンドにより、仮想マシン(VM)と Cloud TPU サービスが作成されます。

これ以降、接頭辞 (vm)$ は Compute Engine VM インスタンスでコマンドを実行する必要があることを意味します。

Compute Engine VM を確認する

ctpu up コマンドの実行が終了したら、シェル プロンプトが username@project から username@tpuname に変更されたことを確認します。変更されていれば、Compute Engine VM にログインしていることになります。

他のパッケージをインストールする

このモデルでは、次のパッケージを Compute Engine インスタンスにインストールする必要があります。

  • python-pil
  • python-numpy
  • jupyter
  • matplotlib
  • PrettyTable
(vm)$ sudo apt-get install python-pil python-numpy && \
pip install --user jupyter && \
pip install --user matplotlib && \
pip install --user PrettyTable

TensorFlow のモデルと tpu のリポジトリのクローンを作成する

次のコマンドを実行して、TensorFlow モデルのリポジトリのクローンを Compute Engine インスタンスに作成します。

(vm)$ git clone https://github.com/tensorflow/models.git && \
git clone https://github.com/tensorflow/tpu.git

tensorflow/models/research/ を PYTHONPATH に追加する

次に、tensorflow/models/research 内のモデルを PYTHONPATH 変数に追加します。

(vm)$ cd ~/models/research && \
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

PASCAL VOC 2012 データセットをダウンロードして変換する

このモデルは、トレーニングと評価に PASCAL VOC 2012 データセットを使用しています。次のスクリプトを実行してデータセットをダウンロードし、それを TensorFlow の TFRecord 形式に変換します。

(vm)$ cd ~/ && \
bash ~/models/research/deeplab/datasets/download_and_convert_voc2012.sh

トレーニング済みのチェックポイントをダウンロードする

このステップでは、修正済みの ResNet 101 トレーニング済みチェックポイントをダウンロードします。まず、チェックポイントをダウンロードします。

(vm)$ wget http://download.tensorflow.org/models/resnet_v1_101_2018_05_04.tar.gz

次に、tar ファイルの内容を抽出します。

(vm)$ tar -vxf resnet_v1_101_2018_05_04.tar.gz

Cloud Storage バケットにデータをアップロードする

この時点で、先ほど作成した Cloud Storage バケットにデータをアップロードできます。

(vm)$ gsutil cp -r ~/models/research/deeplab/datasets/pascal_voc_seg/tfrecords gs://YOUR-BUCKET-NAME &&
gsutil -m cp -r ~/resnet_v1_101 ${STORAGE_BUCKET}

モデルをトレーニングする

これでモデルをトレーニングする準備が整いました。以下、YOUR-BUCKET-NAME は Cloud Storage バケット名に置き換えてください。

(vm)$ python ~/tpu/models/experimental/deeplab/main.py \
--mode='train' \
--num_shards=8 \
--alsologtostderr=true \
--model_dir=gs://YOUR-BUCKET-NAME \
--dataset_dir=gs://YOUR-BUCKET-NAME/tfrecord \
--init_checkpoint=gs://YOUR-BUCKET-NAME/resnet_v1_101/model.ckpt \
--model_variant=resnet_v1_101_beta \
--image_pyramid=1. \
--aspp_with_separable_conv=false \
--multi_grid=1 \
--multi_grid=2 \
--multi_grid=4 \
--decoder_use_separable_conv=false \
--train_split='train'

モデルを評価する

トレーニングが完了すると、モデルを評価できます。次のように、--mode フラグを train から eval に変更します。

(vm)$ python ~/tpu/models/experimental/deeplab/main.py \
--mode='eval' \
--num_shards=8 \
--alsologtostderr=true \
--model_dir=gs://YOUR-BUCKET-NAME \
--dataset_dir=gs://YOUR-BUCKET-NAME/tfrecord \
--init_checkpoint=gs://YOUR-BUCKET-NAME/resnet_v1_101/model.ckpt \
--model_variant=resnet_v1_101_beta \
--image_pyramid=1. \
--aspp_with_separable_conv=false \
--multi_grid=1 \
--multi_grid=2 \
--multi_grid=4 \
--decoder_use_separable_conv=false \
--train_split='train'

クリーンアップ

このトピックで使用したリソースについて GCP アカウントに課金されないようにする手順は次のとおりです。

  1. Compute Engine VM との接続を解除します。

    (vm)$ exit
    

    プロンプトが user@projectname と表示され、Cloud Shell 内にいることが示されます。

  2. Cloud Shell で、Cloud TPU の設定時に使用した --zone フラグを指定して ctpu delete を実行し、Compute Engine VM と Cloud TPU を削除します。

    $ ctpu delete [optional: --zone]
    
  3. TPU の使用に対する不要な料金が発生しないように、ctpu status を実行して、インスタンスの割り当てがないことを確認します。削除には数分かかることがあります。次のようなレスポンスは、割り当てられたインスタンスがないことを示します。

    2018/04/28 16:16:23 WARNING: Setting zone to "us-central1-b"
    No instances currently exist.
            Compute Engine VM:     --
            Cloud TPU:             --
    
  4. 次に示す gsutil を実行します。YOUR-BUCKET-NAME の部分は、このチュートリアルで作成した Cloud Storage バケットの名前に置き換えてください。

    $ gsutil rm -r gs://YOUR-BUCKET-NAME
    

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...