chainer-gogh icon indicating copy to clipboard operation
chainer-gogh copied to clipboard

chainer-gogh

Implementation of "A neural algorithm of Artistic style" (http://arxiv.org/abs/1508.06576) in Chainer. The Japanese readme can be found here.

Accompanying article: https://research.preferred.jp/2015/09/chainer-gogh/

(VGG, lam=0.0075, after 5000 iterations)

Usage:

Install Chainer

pip install chainer

See https://github.com/pfnet/chainer for details.

Download the model(s)

There are multiple models to chose from:

  • NIN https://gist.github.com/mavenlin/d802a5849de39225bcc6

Simply specify: (-m nin)

  • VGG https://gist.github.com/ksimonyan/211839e770f7b538e2d8#file-readme-md

With VGG, it takes a long time to make good looking images. (-m vgg, -m vgg_chainer)

After downloading and using the vgg_chainer model for the first time, all subsequent uses will load the model very fast.(functionality available in chainer 1.19 and above).

  • GoogLeNet https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet

About the same as NIN, but there should be potential for good images. The optimum parameters are unknown. (-m googlenet)

  • illustration2vec http://illustration2vec.net/ (pre-trained model for tag prediction, version 2.0)

Lightweight compared to VGG, should be good for illustrations/anime drawings. Optimal parameters are unknown. (-m i2v)

Run on CPU

python chainer-gogh.py -m nin -i input.png -s style.png -o output_dir -g -1

Run on GPU

python chainer-gogh.py -m nin -i input.png -s style.png -o output_dir -g <GPU number>

Stylize an image with VGG

python chainer-gogh.py -m vgg_chainer -i input.png -s style.png -o output_dir -g 0 --width 256

How to specify the model

-m nin

It is possible to change from nin to vgg, vgg_chainer, googlenet or i2v. To do this, put the model file in the working directory, keeping the default file name.

Generate multiple images simultaneously

  • First, create a file called input.txt and list the input and output file names:
input0.png style0.png
input1.png style1.png
...

then, run chainer-gogh-multi.py:

python chainer-gogh-multi.py -i input.txt

The VGG model uses a lot of GPU memory, be careful!

About the parameters

  • --lr: learning rate. Increase this when the generation progress is slow.
  • --lam: increase to make the output image similar to the input, decrease to add more style.
  • alpha, beta: coefficients relating to the error propagated from each layer. They are hard coded for each model.

Advice

  • At the moment, using square images (e.g. 256x256) is best.