記事一覧

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

pix2pixを試してみる


今回はpix2pixを試してみました。
公式論文はこちら


pix2pixとは

pix2pixとは2016年11月に発表された「Image-to-Image Translation with Conditional Adversarial Networks」という論文で提案されたアルゴリズムです。
さらにpix2pixではConditional Ganを使用しており、ある画像を何かしらの加工を施した画像へと変換し出力します。


サンプル画像はこちら。(公式論文から引用)

examples.jpg


訓練の流れは下図。(公式論文から引用)

pix2pix_image.png


地図から航空写真を生成する訓練の流れです。
GがGenerator、DがDiscriminatorになります。

GeneratorはDiscriminatorを騙せるような偽の画像を生成しようとし、Discriminatorは「変換前画像と実際の変換後画像のペア」なのか、それとも「変換前画像とGeneratorが生成した画像のペア」なのかを判断します。
GがDを騙せるような偽の画像を生成する → Dが与えられたペアを判断、学習する → Gがさらに騙せるような画像を生成する → Dが与えられたペアを判断、さらに学習する → Gが・・・...を繰り返すようです。

Unconditional GANと違うところは、GeneratorとDiscriminatorの両方が、変換後の画像だけでなく変換前の入力画像もペアとして観察し、「ある1枚の画像が本物か偽物か」を見分けるのではなく、「2枚の画像のペアが本物のペアか偽物のペアか」を判断します。



実行環境

OS:Ubuntu14.04
GPU:GTX1080
その他:Torch7, Python2.7.6, CUDA8.0, cuDNN5.1など

ついに我が家にもGTX1080が・・・!!
今までCPUで学習させるという無謀行為をしていたのでかなり時間のかかる処理もありましたが、これで世界が変わりました。



Torch本体とTorchパッケージのインストール

Torch本体とpix2pixに必要なTorchのパッケージ、 nngraph と display をインストールします。

Torchの公式ページ通りにインストールしていきます。

ここまででTorchのインストールは完了。
次に nngraph と display をインストールします。

以上でTorchの準備は完了です。



pix2pixの準備

ここからは公式の手順を参考に作業を進めていきます。

まずはpix2pixの本体をcloneします。

次に学習させるデータセットをダウンロードします。
今回は facades をダウンロードし学習させてみます。

facadesの画像例
facades_1

画像データセットをダウンロードします。

これで学習準備が整いました。



学習させる

ダウンロードしてきたデータセットを学習させてみます。
まずは facadesデータセットを学習させます。
今回設定は全て初期状態としました。

基本的な設定として下記のようなものがあります。

DATA_ROOT=./path/to/data/
保存したデータセットを指定

name=expt_name
学習済みモデルと学習途中での画像を出力するフォルダを指定

which_direction=AtoB or BtoA
画像の変換方向を指定
今から学習させる下記の画像で例えると、左の画像がAで右の画像がBになります。
facades_1
左の画像から右の画像に変換させたい場合は「AtoB」に、右の画像から左の画像に変換させたい場合は「BtoA」とします。

batchSize=任意の数値
バッチサイズを指定
初期値は1で論文では4を推奨しています。

gpu=0 or 1 と cuDNN=0 or 1
GPUを使用するか指定
GPUを使用せずCPUのみで学習させる場合は、gpu=0 cuDNN=0 とします。

基本的な設定のみを書きましたが、まだまだ設定できる項目はあるので気になる方は train.lua を覗いてみてください。

学習を開始すると設定が読み込まれ学習が開始されます。

設定が読み込まれ・・・
a.png

学習が開始される。
Screenshot from 2017-01-04 13:44:35

学習はGTX1080で2時間程度で終了しました。



結果

学習済みのモデルをテストします。
細かい設定は学習時と同じです。
結果画像はresultsフォルダに出力されます。

テスト結果はこちら。

Screenshot from 2017-01-04 18:57:57
Screenshot from 2017-01-06 07:19:05



全体的に茶色っぽい建物ができました。
色はともかく形はそれなりに整っている印象。



おまけ

航空写真→マップも学習させてみたのでその結果です。

Screenshot from 2017-01-04 19:55:21
Screenshot from 2017-01-06 07:17:35
Screenshot from 2017-01-06 07:27:05


すごい完成度。
ただ森内の道の読み取りまでは難しかったみたい?



おわりに

Labels to Facade に関しては数百枚、Aerial to Map に関しては1000枚ちょっとのデータセットでここまでのクオリティをだせるのだから驚きです。
今回はお試しで2種類の画像変換を学習させてみましたが、pix2pixの6種類のサンプル画像を見てもわかるように、どんな画像変換でもそれなりの再現率でかなり柔軟性があることがわかります。
この柔軟性を活かして論文のサンプルには無いちょっと変わった画像変換を試してみても面白いかもしれません。

数百枚から数千枚のデータセットではなく、ImageNet等の大規模な画像データセットを白黒→カラー画像で学習させて、まだカラー映像が普及していない時代の白黒写真や動画を学習済みモデルに通したらどうなるのかも試してみたいものです。


スポンサーサイト

コメント

コメントの投稿

非公開コメント

プロフィール

むらりん

Author:むらりん
学部3年
ピカチュウLOVE

「将来絶対ハゲるよねw」とよく言われます。

累計閲覧者数

最新の人工知能関連のツイート

メールフォーム

名前:
メール:
件名:
本文:

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。