Vagrantでニューラル・ネットワークの画像合成環境を構築

neural-style 女性とプール

上の写真のように、ニューラル・ネットワークで2つの画像を合成する環境をVagrant上に構築します。WEBサービスのOstagramと同じ機能です。

2つの素材から実用に耐える素材を作り出す力があるので、すでに実用域の技術になってきている気がします。人の輪郭が波で自然に縁取られているのを見ると、単純に合成しているわけではないのが分かります。

最終的に動かしたいプログラムはgitに公開されているneural-styleです。もしNVIDIAのGPUがあれば、CUDA(クーダ)というライブラリを導入することで高速化できるようですが、私の環境はMac mini Late 2012なので地獄のCPU演算で。

 

Ubuntuのインストール

最初にVagrantにUbuntuをインストールします。MacでVagrantを構築するのが初めてならこちらを。 neural-styleの動作には、事前にTorch7というニューラル・ネットワークのライブラリをインストールする必要がありますが、Torch7はUbuntu12以上推奨のようなので、Ubuntu14.04をVagrantに入れます。

Vagrantにbox add

osx:$ vagrant box add https://atlas.hashicorp.com/rafacas/ubuntu1404-plain
osx:$ vagrant box list
osx:$ vagrant init rafacas/ubuntu1404-plain

一応Vagrantのコマンド

vagrant box remove
boxの削除
vagrant destroy
インスタンス削除
vagrant reload
インスタンス再読み込み

 

つぎはVagrantfileを編集します。

osx:$ vim Vagrantfile

最終的に画像ファイルを入力するので、先に共有フォルダの設定をしておくのと、標準メモリの512Mではneural-styleが落ちたので4096Mにアップしておきます。neural-styleの作者さんによるとGPU使用時の消費メモリーは3.5GBくらいとのことです。ちなみに8192Mでも試しましたが計算時間に変化はありませんでした。

Vagrantfile

# config.vm.synced_folder "../data", "/vagrant_data"
config.vm.synced_folder ".", "/vagrant_data"

# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
config.vm.provider "virtualbox" do |vb|
#   # Display the VirtualBox GUI when booting the machine
#   vb.gui = true
#
#   # Customize the amount of memory on the VM:
vb.memory = "4096"
end

あとはsshでログインします。

osx:$ vagrant up
osx:$ vagrant ssh

無事にUbuntuにログインできたらアップデート情報を更新。プログラムをダウンロードするために必要なgitをインストールしておきます。

vagrant@ubuntu1404:~$ sudo apt-get update
vagrant@ubuntu1404:~$ sudo apt-get install git

ここまででUbuntuの環境が整いました。

 

Torch7のインストール

次にTorch7をインストールします。ログインユーザーのホームディレクトリで、インストールコマンドを叩けばよいのですが、Ubuntu14.04では、bash install-deps;の実行中にadd-apt-repositoryがないという理由で失敗しました。なので先にadd-apt-repositoryが入っているパッケージを入れておきます。

add-apt-repositoryが入っているパッケージであるsoftware-properties-commonを先に入れておく

vagrant@ubuntu1404:~$ sudo apt-get install software-properties-common

以上でTorch7をインストールできます。

vagrant@ubuntu1404:~$ git clone https://github.com/torch/distro.git ~/torch --recursive
vagrant@ubuntu1404:~$ cd ~/torch;
vagrant@ubuntu1404:~$ bash install-deps;
vagrant@ubuntu1404:~$ ./install.sh

Torch7のコマンドであるthをパスに通すために環境変数再読み込み。

vagrant@ubuntu1404:~$ source ~/.bashrc

thが動くか確認。thから抜けるにはexitをタイプ。

vagrant@ubuntu1404:~$ th

このTorch7ことthで動くスクリプトが、最終的に動かすneural-styleとなります。

Torch | Scientific computing for LuaJIT.のスクリーンショットTorch | Scientific computing for LuaJIT.

 

loadcaffeのインストール

loadcaffeはCaffeの学習済みモデルをTorchで使えるようにするプログラムです。

vagrant@ubuntu1404:~$ sudo apt-get install libprotobuf-dev protobuf-compiler
vagrant@ubuntu1404:~$ luarocks install loadcaffe

GitHub - szagoruyko/loadcaffe: Load Caffe networks in Torch7のスクリーンショットGitHub - szagoruyko/loadcaffe: Load Caffe networks in Torch7

これで準備は整いました。いよいよneural-styleのインストール。

 

neural-styleインストール

Torch7と同じようにコマンドラインのgitでダウンロードします。

GitHub - jcjohnson/neural-style: Torch implementation of neural style algorithmのスクリーンショットGitHub - jcjohnson/neural-style: Torch implementation of neural style algorithm

vagrant@ubuntu1404:~$ cd ~/
vagrant@ubuntu1404:~$ git clone https://github.com/jcjohnson/neural-style
vagrant@ubuntu1404:~$ cd neural-style
vagrant@ubuntu1404:~$ sh models/download_models.sh

 

画像ファイルを2つ指定して演算開始します。素材は写真ACさんから良さそうなのをピックアップしました。

写真素材なら「写真AC」無料(フリー)ダウンロードOKのスクリーンショット写真素材なら「写真AC」無料(フリー)ダウンロードOK

画像は共有フォルダからホームディレクトリにコピーした後、neural-styleフォルダ内にてスクリプトを実行します。GPUを使わないので-gpu -1を指定します。

vagrant@ubuntu1404:~$ cp /vagrant_data/*.jpg ~/
vagrant@ubuntu1404:~$ th neural_style.lua -style_image ~/style_paper.jpg -content_image ~/content.jpg -gpu -1

 

実行結果

実行時間は512×512サイズで4時間ほどかかります。Mac mini Late 2012上の仮想環境。さらにCPUパワーだとこれくらいの速度になってしまうようですが、早いGPUでは1分ほどで完成するようです。本格運用するならGPUは必須ですね。

neural-style 女性とプール

neural-style 女性と新聞

みーをモネ風に。いい感じです。

neural-style ネコとモネ

 

参考

全体を通してitogのhack日記さんの記事を参考にさせて頂きました。

2016-03-16 - Hacking My Way ~ itogのhack日記のスクリーンショット2016-03-16 - Hacking My Way ~ itogのhack日記