新しくなったchainer-fast-neuralstyleで高速に画風変換してみた

chainer

Real-Time Style TransferのChainerによる実装「chainer-fast-neuralstyle(7月19日版)」で、画像の高速スタイル変換を試してみました。

なお、Real-Time Style Transferの詳細は、以下の論文をご覧ください。

Justin Johnson, Alexandre Alahi, Li Fei-Fei, “Perceptual Losses for Real-Time Style Transfer and Super-Resolution

この論文のJustin Johnsonさんは、以下の記事で使用したneural-styleの作者でもあります。

Torchのneural-styleで画風を変換してみた
NVIDIAのMachine LearningリポジトリでUbuntu 14.04にインストールしたTorch(torch7-nv)で、画風を変換するneural-styleを試してみました。
スポンサーリンク

chainer-fast-neuralstyleによる高速画風変換

準備

Chainerは、Ubuntu 14.04にインストールしたChainer 1.7.1を使用します。

ここでは、あらかじめ作成しておいたgithubディレクトリに移動し、GitHubのchainer-fast-neuralstyle(https://github.com/yusuketomoto/chainer-fast-neuralstyle)をcloneします。

$ cd ~/github
$ git clone https://github.com/yusuketomoto/chainer-fast-neuralstyle

GitHubのREADME.mdでは、前提条件(Prerequisite)となるモデルのダウンロードやトレーニング(Train)の後、スタイル変換した画像を生成(Generate)する流れになっています。

しかし、作者のYusuke Tomotoさんがmodelsディレクトリに用意している2つのトレーニング済みのモデルを利用すれば、トレーニングなしにスタイル変換画像の生成(Generate)が可能です。

さっそく、スタイル変換を行ってみます。

chainer-fast-neuralstyleディレクトリに移動します。

$ cd chainer-fast-neuralstyle

以下のコマンドを実行し、画風を変換します。

$ python generate.py <path/to/content_image> -m <path/to/model> -o <path/to/output_image>

オプションの使い方は、オプションなしでコンテンツ画像、-mオプションでモデル、-oオプションで出力画像を指定します。

最初に、example:と同じように、ピエト・モンドリアンの『コンポジション』?でトレーニングされたcomposition.modelでスタイル変換を行ってみます。

$ python generate.py sample_images/tubingen.jpg -m models/composition.model -o comp.jpg
19.3238899708 sec

画像サイズ1024×768のスタイル変換が、CPUモードでも20秒以下で処理できています。

次に、GPUオプション(-g 0)を付けて、GPUモードでスタイル変換を行ってみます。

$ python generate.py sample_images/tubingen.jpg -m models/composition.model -o comp.jpg -g 0
10.5243930817 sec

GPUモードなのに、そんなに早くない。なぜ?

再度、スタイル変換を行ってみます。

$ python generate.py sample_images/tubingen.jpg -m models/composition.model -o comp.jpg -g 0
1.01939201355 sec

GPUモードの2回目以降は、上記のように約1秒でスタイル変換を行えるようになりました。

トレーニング済みのモデルとしては、composition.modelのほかに、点描法のジョルジュ・スーラの『サーカスの客寄せ』(『グランド・ジャット島の日曜日の午後』と思っていましたが、違いました)でトレーニングされたseurat.modelが用意されています。

ポメラニアン × コンポジション・モデル

これまでの画風変換の記事で用いたのと同じコンテンツ画像(content.jpg)をchainer-fast-neuralstyleディレクトリにコピーします。

content

content.jpg

以下のコマンドを実行し、スタイル変換を行います。

$ python generate.py content.jpg -m models/composition.model -o comp.jpg -g 0
0.734720945358 sec

私のPC環境(GTX 960)では、1秒以下で、以下の画像(サイズ:512×512)が生成されました。

comp

comp.jpg

ポメラニアン × スーラ・モデル

同様に、以下のコマンドを実行し、スタイル変換を行います。

$ python generate.py content.jpg -m models/seurat.model -o seur.jpg -g 0
0.729653120041 sec
seur

seur.jpg

まとめ

7月19日に更新されたchainer-fast-neuralstyleとそのトレーニング済みのモデルを用いて、画像のスタイル変換を試してみたところ、画像サイズ1024×768のスタイル変換が、高速(CPUモードは20秒以下、GPUモードは約1秒)に行えました。