Compile cuda_utils.cu (Adjust PREFIX and NVCC_PREFIX in makefile for your machine):
make clean && make
Usage
Quick start
To generate all results (in examples/) using the provided scripts, simply run
run('gen_laplacian/gen_laplacian.m')
in Matlab or Octave and then
python gen_all.py
in Python. The final output will be in examples/final_results/.
Basic usage
Given input and style images with semantic segmentation masks, put them in examples/ respectively. They will have the following filename form: examples/input/in<id>.png, examples/style/tar<id>.png and examples/segmentation/in<id>.png, examples/segmentation/tar<id>.png;
Compute the matting Laplacian matrix using gen_laplacian/gen_laplacian.m in Matlab. The output matrix will have the following filename form: gen_laplacian/Input_Laplacian_3x3_1e-7_CSR<id>.mat;
Note: Please make sure that the content image resolution is
consistent for Matting Laplacian computation in Matlab and style
transfer in Torch, otherwise the result won't be correct.
Run the following script to generate segmented intermediate result:
You can pass -backend cudnn and -cudnn_autotune to both Lua scripts (step 3.
and 4.) to potentially improve speed and memory usage. libcudnn.so must be in
your LD_LIBRARY_PATH. This requires cudnn.torch.
Image segmentation
Note: In the main paper we generate all comparison results using automatic scene segmentation algorithm modified from DilatedNet. Manual segmentation enables more diverse tasks hence we provide the masks in examples/segmentation/.
The mask colors we used (you could add more colors in ExtractMask function in two *.lua files):
Color variable
RGB Value
Hex Value
blue
0 0 255
0000ff
green
0 255 0
00ff00
black
0 0 0
000000
white
255 255 255
ffffff
red
255 0 0
ff0000
yellow
255 255 0
ffff00
grey
128 128 128
808080
lightblue
0 255 255
00ffff
purple
255 0 255
ff00ff
Here are some automatic and manual tools for creating a segmentation mask for a photo image: