NVIDIA DIGITS 6のPretrained ModelでGANを試してみた(前編)

以下の記事でNVIDIA DIGITS 6のModel Storeからダウンロードしたceleb-a-gan, celeb-a-gan-encoderを使用して、GAN (Generative Adversarial Network)を試してみました。

NVIDIA DIGITS 6のModel Storeを試してみた
NVIDIA DIGITS 6のModel Storeを試してみました。Model Storeのターゲット・リンクを変更することで、U-Net, celeb-a-gan, celeb-a-gan-encoderモデルをダウンロードすることができました。
スポンサーリンク

CelebA

CelebFaces Attributes (CelebA) Datasetの詳細は、こちら(http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html)をご覧ください。

CelebA Datasetのダウンロード

CelebA(Google Drive)のImgフォルダのimg_align_celeba.zipとAnnoフォルダのlist_attr_celeba.txtをダウンロードします。

DIGITS6のDockerコンテナからアクセスできるディレクトリ(ここでは~/data/digits/CelebA)に、img_align_celeba.zipを展開し、list_attr_celeba.txtをコピーします。

DIGITS 6

以下の記事で作成したDIGITS 6のDockerコンテナを使用します。

NVIDIA DIGITS 6でFashion-MNISTを試してみた
Fashion-MNISTというデータセットが公開されていましたので、NVIDIA DockerとNVIDIA DIGITS 6の組み合わせで試してみました。

以下のコマンドでDIGITS 6のDockerコンテナを起動します。

$ docker start digits6

なお、DockerコンテナにGAN用のプラグインをインストールしていない場合は、以下の記事を参照して、インストールを行います。

NVIDIA DIGITS 6 RCをDockerで試してみた
Docker HubでNVIDIA DIGITS 6 RCのDockerイメージが公開されていましたので、NVIDIA Docker上で新バックエンドTensorFlowと新機能GANの組み合わせを試してみました。

Firefox等のブラウザを起動し、URLにlocalhost:5000を入力すると、DIGITS「Home」ページが表示されます。

CelebA Datasetの作成

DIGITS「Home」ページの「Datasets」タブを選択し、右側にある「New Dataset」下の「Images」ボタンをクリックし、プルダウンメニューから「GAN」を選択すると、「New GAN Dataset」 ページが表示されます。

このページでは、以下の図のように設定して、Datasetを作成します。


作成されたDataset(ここでは「CelebA64」)ページで、「Explore the db」をクリックすると、以下の図のようにデータベース内の画像を確認することができます。

CelebA GAN Modelの作成

DIGITS「Home」ページに戻って「Models」タブを選択し、右側にある「New Models」下の「Images」ボタンをクリックし、プルダウンメニューから「Other」を選択すると、「New Image Model」 ページが表示されます。

「New Image Model」ページでは、以下の図のように設定して、CelebA GAN Modelを作成します。

ここでは、DIGITS 6のModel Storeからダウンロードしたモデルを使用するため、Custom Networkの代わりにPretrained Networksの「celeb-a-gan」を選択しています(図の下側)。また、「Solver Options」の「Training epochs」を60から1、「Base Learning Rate」を5e-4から0に変更してあります(図の上側中央)。

CelebA GAN Encoder Modelの作成

CelebA GAN Encoderを作成するため、CelebA GAN Model(ここでは「CelebA64-GAN」)ページに移動し、「Clone Job」ボタンをクリックします。


こちらの「New Image Model」ページでは、以下の図のように、Pretrained Networksの「celeb-a-gan」を「celeb-a-gan-encoder」に変更して、CelebA GAN Encoder Modelを作成します。

attribute vectorsの作成

以下のコマンドを実行して、ホスト側でCelebA attribute作成の準備を行い、CelebA GAN Encoder Modelの作成終了後、最後のコマンドで、Dockerコンテナに横入りします。

$ cd ~/data/digits
$ mkdir CelebA64-attribute
$ cd CelebA64-attribute
$ wget https://raw.githubusercontent.com/NVIDIA/DIGITS/digits-6.0/examples/gan/gan_features.py
$ docker exec -it digits6 bash

Dockerコンテナに入ったら、以下のコマンドを実行して、attribute vectorsを作成します。

# cd /data/digits/CelebA64-attribute
# export DIGITS_JOBS_DIR=/jobs
# export GAN_ENCODER_JOB_ID=<CelebA GAN Encoder Job ID>
# python gan_features.py -j $DIGITS_JOBS_DIR $GAN_ENCODER_JOB_ID -g 0

上記の<CelebA GAN Encoder Job ID>ですが、下図のCelebA GAN Encoder(ここでは「CelebA64-GAN-Encoder」)ページのJob Directoryの/jobs/以降の名称(ここでは20171012-104218-cd7d)を設定します。


(以下の後編に続く)

NVIDIA DIGITS 6のPretrained ModelでGANを試してみた(後編)
NVIDIA DIGITS 6のModel Storeからダウンロードしたceleb-a-gan, celeb-a-gan-encoderを使用して、GAN (Generative Adversarial Network)を試してみました。