Skip to content

DmitryUlyanov/online-neural-doodle

Repository files navigation

Feed-forward neural doodle

This repository merges fast-neural-doodle and and Texture Networks. Read the blog post for the details on the doodle algorithm and the paper to learn more about texture networks.

You can find an online demo at likemo.net.

Prerequisites

A good guide on installation can be found here.

You also need to download VGG-19 recognition network.

cd data/pretrained && bash download_models.sh && cd ../..

Generate doodles for training

Use diamond square algorithm to produce a random doodle and store it in hdf5 database.

  python generate.py --n_jobs 30 --n_colors 4 --style_image data/starry/style.png --style_mask data/starry/style_mask.png --out_hdf5 data/starry/gen_doodles.hdf5

Learn a network

Here is an example for starry_night used in the demo.

CUDA_VISIBLE_DEVICES=0 th feedforward_neural_doodle.lua -model_name skip_noise_4 -masks_hdf5 data/starry/gen_doodles.hdf5 -batch_size 4 -num_mask_noise_times 0 -num_noise_channels 0 -learning_rate 1e-1 -half false

All the parameters are explained in the code.

Stylize the doodle

After the net is trained you can process any doodle with

python apply.py --colors data/starry/gen_doodles.hdf5colors.npy --target_mask data/starry/style_mask.png --model data/out/starry_night.t7

A pretrained starry_night net is there in pretrained folder. You can try it with

python apply.py --colors pretrained/gen_doodles.hdf5colors.npy --target_mask data/starry/style_mask.png --model pretrained/starry_night.t7

Hardware

  • The code was tested with 12GB NVIDIA Tesla K40m GPU and Ubuntu 14.04.

Credits

The code is based on Justin Johnson's code for artistic style.

Uses buckinha/DiamondSquare as is.

Work is supported by Yandex and Skoltech.

Citation

If you use this code for your research please cite this repository.

@misc{Ulyanov2016onlinedoodle,
  author = {Ulyanov, Dmitry},
  title = {Online Neural Doodle},
  year = {2016},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/DmitryUlyanov/online-neural-doodle}},
}