TensoFlowでCycleGanを実装する
はじめに
Ganの派生であるCycleGanの論文を読んだので、実際に動かしてみました。
論文はこちら
[1703.10593] Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
GitHubはこちら
①https://github.com/junyanz/CycleGAN
②https://github.com/xhujoy/CycleGAN-tensorflow
①は論文の著者であるJun-Yan Zhuさんが公開しているプログラムで、②はTensorflow用のプログラムです。
①はLuaで実装されており、私はTensoflowで実行したかったため②を使用しました。
サンプル実行
コマンドプロンプトを起動して、ダウンロードしてきたフォルダまで移動させます。
cd 移動先のフォルダ
で移動します。
移動先のフォルダをコマンドプロンプト上にドラッグアンドドロップすると、フォルダの場所を自動で記述してくれます。
画像セットのダウンロード
まずは学習に必要な訓練画像と、テスト画像のセットをダウンロードします。
bash ./download_dataset.sh horse2zebra
と打つと、馬とシマウマの画像セットをダウンロードすることができます。
ダウンロードできる画像セットは以下のようになっています。
- apple2orange (リンゴとミカン)
- summer2winter_yosemite (ヨセミテ国立公園の夏と冬)
- horse2zebra (馬とシマウマ)
- monet2photo (モネの絵と写真)
- cezanne2photo (セザンヌの絵と写真)
- ukiyoe2photo (浮世絵と写真)
- vangogh2photo (ゴッホの絵と写真)
- maps (空撮画像と地図)
- cityscapes (道の画像とセグメンテーションを行った画像)
- facades (建物の壁とセグメンテーションを行った画像)
- iphone2dslr_flower (iphoneで撮影した花の画像と一眼レフカメラで奥をぼかした画像)
- ae_photos (テスト用:風景の画像セット)
最後のae_photosはテスト画像のセットのようで、主に外国の風景の画像が入っていました。
もし、コマンドでのダウンロードに失敗した場合は、直接ダウンロード先のサイトに飛び、そこからzipファイルをダウンロードするという方法もあります。
download_dataset.shを適当なテキストエディタで開くと、コード内にダウンロード先のURLが記載されています。
そのURLにアクセスするとzipフォルダが並んでいるので、クリックして必要なものをダウンロードします。
ダウンロードしてきたフォルダを見ると、画像はそれぞれtrainA、trainB、testA、testBというフォルダに分類されています。
CycleGanでは
A→Bへ変換(画像生成)するGenerator&その生成画像を見極めるDiscriminator
B→Aへ変換(画像生成)するGenerator'&その生成画像を見極めるDiscriminator'というように相互に学習させるため、集合Aと集合Bの訓練画像・テスト画像を用意する必要があります。
自分でデータセットを用意する場合も、trainA、trainB、testA、testBという構成で作成すれば良いようです。
学習させる
では、リンゴとミカンの画像セットで学習を行ってみます。
ここから先はhttps://github.com/xhujoy/CycleGAN-tensorflowでダウンロードしたプログラムの実行コマンドになります。他のプログラムをダウンロードした場合はそれぞれREADME.mdで確認してください。
学習はコマンドプロンプトで以下のようにして実行します。
CUDA_VISIBLE_DEVICES=0 python main.py --dataset_dir=apple2orange
CUDA_VISIBLE_DEVICES=0 の部分はGPUの設定なので、詳しくはCUDAで調べてみてください。
GPUを搭載していない場合はCUDA_VISIBLE_DEVICES=0 の部分は記述しなくてよいです。
テスト
学習後のモデルを用いてテストを行います。
CUDA_VISIBLE_DEVICES=0 python main.py --dataset_dir=apple2orange --phase=test --which_direction=AtoB
この際、学習したモデルはcheckpointsに保存されます。
これでテストができました。
結果
リンゴとミカンの訓練画像で1時間学習しました。
おおう・・・
やはり1時間ではなかなか難しいですね。
少なくとも10時間は学習させる必要があると思います。
終わり
CycleGanを実装してサンプルを動かしてみました。
今後、自分で集めた画像を用いて学習を行ってみたいと思います。