Ubuntu 14.04にインストール(/アップグレード)したChainer 1.7.1で、chainer-goghを試してみました。
準備
Chainerのバージョンの確認
Chainer 1.5以降がインストールされていることを確認します。
$ pip list | grep chainer chainer (1.7.1)
Chainerは、1.4以前と1.5以降で互換性がなくなっているので、1.4以前のバージョンがインストールされている場合、下の記事等を参考にして、Chainerをアップグレードしておきます。
chainer-goghのダウンロード等
GitHub(https://github.com/mattya/chainer-gogh)からchainer-goghの最新版(Chainer 1.5対応)をダウンロードします。
今回は、zipファイルをダウンロードし、展開しました。
モデルのダウンロード
次に、モデルをダウンロードします。
chainer-goghは、NIN、VGG、GoogLeNet、illustration2vecの4種類のモデルに対応していますが、きれいな絵をかきたい場合、VGGモデル(正確には、VGG_ILSVRC_16_layers.caffemodel)以外の選択肢がない感じです。
一工夫
・VGG https://gist.github.com/ksimonyan/211839e770f7b538e2d8#file-readme-md
きれいな絵がかけるがとても重い。(-m vgg)
なので、一工夫します。
VGGモデルは、ファイルサイズが約550MBあり、私のPC環境では、モデルの読み込みに5分以上かかります。
一度、Caffeモデルを読み込んで、Chainerモデルとして保存します(Chainer 1.4.0で保存していたpklファイルは、1.7.1で読み込もうとすると、エラーが発生しました)。
$ python >>> from chainer.links.caffe import CaffeFunction >>> import cPickle as pickle >>> vgg = CaffeFunction('VGG_ILSVRC_16_layers.caffemodel') >>> pickle.dump(vgg, open('VGG_ILSVRC_16_layers.pkl', 'wb'))
ファイルサイズが約1.6GBのVGG_ILSVRC_16_layers.pklが生成されます。
次に、models.pyを修正し、caffemodelファイルの代わりにpklファイルを読み込むように修正します。
元のファイルの6行目の下に下記を追加します。
import pickle
元のファイルの26行目と28行目を下記のように変更します。
def __init__(self, fn="VGG_ILSVRC_16_layers.caffemodel", alpha=[0,0,1,1], beta=[1,1,1,1]): ↓ def __init__(self, fn="VGG_ILSVRC_16_layers.pkl", alpha=[0,0,1,1], beta=[1,1,1,1]):
self.model = caffe.CaffeFunction(fn) ↓ self.model = pickle.load(open(fn, 'rb'))
また、chainer-gogh.pyの111行目を下記のように修正しておくと、少しだけ幸せになれます。
for i in range(max_iter+1):
画風変換
ポメラニアン × ゴッホの『ひまわり』
コンテンツ画像(content.jpg)と、スタイル画像(style1.png)としてゴッホの『ひまわり』を用意します。
以下を実行し、画風を変換します。
$ python chainer-gogh.py -m vgg -i content.jpg -s style1.png -o output1 -g 0 -w 256
オプションの使い方は、-m
オプションでモデル、-i
オプションでコンテンツ画像、-s
オプションでスタイル画像、-o
オプションで出力ディレクトリを指定できます。また、モデルサイズが大きいVGGでも、VRAM 4GBであれば、処理・出力する画像サイズを指定する-w 256に対応できます。VRAMが少ない場合、-wオプションで画像サイズを小さくする必要があります。
-oオプションで指定したディレクトリ(output1)に、繰り返し50回毎に、画像が保存されます。私のPC環境(GTX 960)では、繰り返し5000回の処理が20分弱で終了し、以下の画像が生成されました。
なお、繰り返し200回毎の画像を1枚の画像に合成すると、以下のようになります。
3段目(繰り返し2000回から2800回)で、全体的な雰囲気が決まり、そこから先は、アハ!体験コンテンツのように、ゆっくり変化している感じです。
ポメラニアン × ゴッホの『自画像(1887年夏)』
スタイル画像をゴッホの『自画像(1887年夏)』に変更します。
以下を実行し、画風を変換します。
$ python chainer-gogh.py -m vgg -i content.jpg -s style2.png -o output2 -g 0 -w 256
スタイル画像の青いシャツの影響を受けて、「青っ鼻のトナカイ」ならぬ「青っ鼻のポメラニアン」の画像が生成されました。