moxt

Just another Blog site

deepdreamしてみたい

      2015/07/11

http://amagitakayosi.hatenablog.com/entry/2015/07/03/143913

「だれか試して」と書いてあったので便乗。

deepdreamって何

こういうやつ。

元画像

0100

実際に作ってみたい(CPU)

Caffeが実行できる環境があれば公開されてるスクリプトを実行するだけでOK。
スクリプトを見てる感じGPUによる恩恵はなさそうだけど、どうなんでしょうね。

https://github.com/google/deepdream/blob/master/dream.ipynb

↑公開されてるソースはIPython形式。
DockerでIPythonサーバを作ってもいいが面倒。
なので普通なPythonでやりたい。

下記のようなスクリプトファイルを用意しておく。
基本コピペでIPython上で画像表示するような処理は不要なので消した。

それから、夢見させる画像も必要なので適当に用意しておく。
最後にスクリプトファイルと画像をDockerコンテナ内から参照するような感じにしたいので、2つのファイルと適当なフォルダに置いておく。

ローカル側で必要なファイルを用意したら、コンテナを作って実行してみる。
こんな感じだろうか。

メモリが足りなくてプロセスがKILLされることがあるのでoptionで適当な量のメモリを確保しておくと吉。

スクリプトや画像が入ってるフォルダにframesっていうフォルダができてて、中に画像が生成されていれば成功。
1枚生成するのに2分くらいかかるのでヤバい。

実際に作ってみたい(GPU)

GPU環境でやるのもまあまあ簡単なのでやってみた。

Docker MachineでGPUなCaffe環境を作る

Caffe+Docker入りのAMIを事前に用意しておく

雑多な下準備

インスタンスができたら下準備する(ここも自動化すべきだが。。)。

スクリプトや画像をEC2に転送

CPUのときと同じようにdeepdreamのスクリプトと夢見させる画像を用意しておく。

GPUを使うためにはdeepdreamなスクリプトに下記を追記する必要がある。

これだけでOK。

で、これらをdocker-machine scpでEC2インスタンス側に転送する。

こんな感じで。

CUDAを使うための謎まじない。。

CUDAを使うための謎コマンドを実行する。
docker-machine sshでEC2インスタンスに入って下記のコマンドを実行する。
ついでに先ほど転送した画像とかちゃんとあるか確認しておくとよい。

コンテナを立ててスクリプトを実行する

下準備が終わったらコンテナを立ててゆく。

deepdreamなマシンをアクティブにして、runする。
先ほど転送しておいたスクリプトなどを参照できるようにvオプションでマウントする。
それから、GPUデバイスを有効にするためのオプションを付加する。
一連の流れは下記の通り。

あとは必要なモデルを落としてきてスクリプトを実行するだけ。

CPUだと1枚の画像生成に2分くらいかかってたのが、GPUだと5秒くらいで生成された。。
GPUやべー(=^・^=)

生成されたデータをローカルに転送する

EC2上にあるデータを手元に転送する。
docker-machine scpでやる。

しばらく待つと変な画像がたくさん得られる。

ついでにgif化してみる

公開されてるスクリプトだと、特徴を強制的にフィードバック上書きしつつ拡大っぽい処理をやってる一連が100枚生成される。
gifにしてくれと言わんばかりな感じなのでやってみる。
実際twitterの#deepdreamみてるとgif化してるのポツポツみるし。

ImageMagickを使ってやってみる。
超簡単。

 - ディープラーニング

  • このエントリーをはてなブックマークに追加
  • follow us in feedly