├── README.md ├── cuda_utils.cu ├── deepmatting_seg.lua ├── examples ├── final_results │ ├── best10_t_1000.png │ ├── best11_t_1000.png │ ├── best12_t_1000.png │ ├── best13_t_1000.png │ ├── best14_t_1000.png │ ├── best15_t_1000.png │ ├── best16_t_1000.png │ ├── best17_t_1000.png │ ├── best18_t_1000.png │ ├── best19_t_1000.png │ ├── best1_t_1000.png │ ├── best20_t_1000.png │ ├── best21_t_1000.png │ ├── best22_t_1000.png │ ├── best23_t_1000.png │ ├── best24_t_1000.png │ ├── best25_t_1000.png │ ├── best26_t_1000.png │ ├── best27_t_1000.png │ ├── best28_t_1000.png │ ├── best29_t_1000.png │ ├── best2_t_1000.png │ ├── best30_t_1000.png │ ├── best31_t_1000.png │ ├── best32_t_1000.png │ ├── best33_t_1000.png │ ├── best34_t_1000.png │ ├── best35_t_1000.png │ ├── best36_t_1000.png │ ├── best37_t_1000.png │ ├── best38_t_1000.png │ ├── best39_t_1000.png │ ├── best3_t_1000.png │ ├── best40_t_1000.png │ ├── best41_t_1000.png │ ├── best42_t_1000.png │ ├── best43_t_1000.png │ ├── best44_t_1000.png │ ├── best45_t_1000.png │ ├── best46_t_1000.png │ ├── best47_t_1000.png │ ├── best48_t_1000.png │ ├── best49_t_1000.png │ ├── best4_t_1000.png │ ├── best50_t_1000.png │ ├── best51_t_1000.png │ ├── best52_t_1000.png │ ├── best53_t_1000.png │ ├── best54_t_1000.png │ ├── best55_t_1000.png │ ├── best56_t_1000.png │ ├── best57_t_1000.png │ ├── best58_t_1000.png │ ├── best59_t_1000.png │ ├── best5_t_1000.png │ ├── best60_t_1000.png │ ├── best6_t_1000.png │ ├── best7_t_1000.png │ ├── best8_t_1000.png │ └── best9_t_1000.png ├── high_res │ ├── 1 │ │ ├── input.png │ │ ├── output.png │ │ └── style.png │ ├── 2 │ │ ├── input.jpg │ │ ├── output.png │ │ └── style.png │ ├── 3 │ │ ├── input.jpg │ │ ├── output.png │ │ └── style.png │ ├── 4 │ │ ├── input.png │ │ ├── output.png │ │ └── style.png │ └── 5 │ │ ├── input.jpg │ │ ├── output.png │ │ └── style.png ├── input │ ├── in1.png │ ├── in10.png │ ├── in11.png │ ├── in12.png │ ├── in13.png │ ├── in14.png │ ├── in15.png │ ├── in16.png │ ├── in17.png │ ├── in18.png │ ├── in19.png │ ├── in2.png │ ├── in20.png │ ├── in21.png │ ├── in22.png │ ├── in23.png │ ├── in24.png │ ├── in25.png │ ├── in26.png │ ├── in27.png │ ├── in28.png │ ├── in29.png │ ├── in3.png │ ├── in30.png │ ├── in31.png │ ├── in32.png │ ├── in33.png │ ├── in34.png │ ├── in35.png │ ├── in36.png │ ├── in37.png │ ├── in38.png │ ├── in39.png │ ├── in4.png │ ├── in40.png │ ├── in41.png │ ├── in42.png │ ├── in43.png │ ├── in44.png │ ├── in45.png │ ├── in46.png │ ├── in47.png │ ├── in48.png │ ├── in49.png │ ├── in5.png │ ├── in50.png │ ├── in51.png │ ├── in52.png │ ├── in53.png │ ├── in54.png │ ├── in55.png │ ├── in56.png │ ├── in57.png │ ├── in58.png │ ├── in59.png │ ├── in6.png │ ├── in60.png │ ├── in7.png │ ├── in8.png │ └── in9.png ├── refine_posterization │ ├── refine_1.png │ ├── refine_11.png │ ├── refine_13.png │ ├── refine_16.png │ ├── refine_2.png │ ├── refine_20.png │ ├── refine_3.png │ ├── refine_30.png │ ├── refine_39.png │ ├── refine_4.png │ ├── refine_47.png │ ├── refine_51.png │ ├── refine_57.png │ ├── refine_58.png │ ├── refine_7.png │ └── refine_9.png ├── segmentation │ ├── in1.png │ ├── in10.png │ ├── in11.png │ ├── in12.png │ ├── in13.png │ ├── in14.png │ ├── in15.png │ ├── in16.png │ ├── in17.png │ ├── in18.png │ ├── in19.png │ ├── in2.png │ ├── in20.png │ ├── in21.png │ ├── in22.png │ ├── in23.png │ ├── in24.png │ ├── in25.png │ ├── in26.png │ ├── in27.png │ ├── in28.png │ ├── in29.png │ ├── in3.png │ ├── in30.png │ ├── in31.png │ ├── in32.png │ ├── in33.png │ ├── in34.png │ ├── in35.png │ ├── in36.png │ ├── in37.png │ ├── in38.png │ ├── in39.png │ ├── in4.png │ ├── in40.png │ ├── in41.png │ ├── in42.png │ ├── in43.png │ ├── in44.png │ ├── in45.png │ ├── in46.png │ ├── in47.png │ ├── in48.png │ ├── in49.png │ ├── in5.png │ ├── in50.png │ ├── in51.png │ ├── in52.png │ ├── in53.png │ ├── in54.png │ ├── in55.png │ ├── in56.png │ ├── in57.png │ ├── in58.png │ ├── in59.png │ ├── in6.png │ ├── in60.png │ ├── in7.png │ ├── in8.png │ ├── in9.png │ ├── tar1.png │ ├── tar10.png │ ├── tar11.png │ ├── tar12.png │ ├── tar13.png │ ├── tar14.png │ ├── tar15.png │ ├── tar16.png │ ├── tar17.png │ ├── tar18.png │ ├── tar19.png │ ├── tar2.png │ ├── tar20.png │ ├── tar21.png │ ├── tar22.png │ ├── tar23.png │ ├── tar24.png │ ├── tar25.png │ ├── tar26.png │ ├── tar27.png │ ├── tar28.png │ ├── tar29.png │ ├── tar3.png │ ├── tar30.png │ ├── tar31.png │ ├── tar32.png │ ├── tar33.png │ ├── tar34.png │ ├── tar35.png │ ├── tar36.png │ ├── tar37.png │ ├── tar38.png │ ├── tar39.png │ ├── tar4.png │ ├── tar40.png │ ├── tar41.png │ ├── tar42.png │ ├── tar43.png │ ├── tar44.png │ ├── tar45.png │ ├── tar46.png │ ├── tar47.png │ ├── tar48.png │ ├── tar49.png │ ├── tar5.png │ ├── tar50.png │ ├── tar51.png │ ├── tar52.png │ ├── tar53.png │ ├── tar54.png │ ├── tar55.png │ ├── tar56.png │ ├── tar57.png │ ├── tar58.png │ ├── tar59.png │ ├── tar6.png │ ├── tar60.png │ ├── tar7.png │ ├── tar8.png │ └── tar9.png ├── style │ ├── tar1.png │ ├── tar10.png │ ├── tar11.png │ ├── tar12.png │ ├── tar13.png │ ├── tar14.png │ ├── tar15.png │ ├── tar16.png │ ├── tar17.png │ ├── tar18.png │ ├── tar19.png │ ├── tar2.png │ ├── tar20.png │ ├── tar21.png │ ├── tar22.png │ ├── tar23.png │ ├── tar24.png │ ├── tar25.png │ ├── tar26.png │ ├── tar27.png │ ├── tar28.png │ ├── tar29.png │ ├── tar3.png │ ├── tar30.png │ ├── tar31.png │ ├── tar32.png │ ├── tar33.png │ ├── tar34.png │ ├── tar35.png │ ├── tar36.png │ ├── tar37.png │ ├── tar38.png │ ├── tar39.png │ ├── tar4.png │ ├── tar40.png │ ├── tar41.png │ ├── tar42.png │ ├── tar43.png │ ├── tar44.png │ ├── tar45.png │ ├── tar46.png │ ├── tar47.png │ ├── tar48.png │ ├── tar49.png │ ├── tar5.png │ ├── tar50.png │ ├── tar51.png │ ├── tar52.png │ ├── tar53.png │ ├── tar54.png │ ├── tar55.png │ ├── tar56.png │ ├── tar57.png │ ├── tar58.png │ ├── tar59.png │ ├── tar6.png │ ├── tar60.png │ ├── tar7.png │ ├── tar8.png │ └── tar9.png └── tmp_results │ ├── out10_t_1000.png │ ├── out11_t_1000.png │ ├── out12_t_1000.png │ ├── out13_t_1000.png │ ├── out14_t_1000.png │ ├── out15_t_1000.png │ ├── out16_t_1000.png │ ├── out17_t_1000.png │ ├── out18_t_1000.png │ ├── out19_t_1000.png │ ├── out1_t_1000.png │ ├── out20_t_1000.png │ ├── out21_t_1000.png │ ├── out22_t_1000.png │ ├── out23_t_1000.png │ ├── out24_t_1000.png │ ├── out25_t_1000.png │ ├── out26_t_1000.png │ ├── out27_t_1000.png │ ├── out28_t_1000.png │ ├── out29_t_1000.png │ ├── out2_t_1000.png │ ├── out30_t_1000.png │ ├── out31_t_1000.png │ ├── out32_t_1000.png │ ├── out33_t_1000.png │ ├── out34_t_1000.png │ ├── out35_t_1000.png │ ├── out36_t_1000.png │ ├── out37_t_1000.png │ ├── out38_t_1000.png │ ├── out39_t_1000.png │ ├── out3_t_1000.png │ ├── out40_t_1000.png │ ├── out41_t_1000.png │ ├── out42_t_1000.png │ ├── out43_t_1000.png │ ├── out44_t_1000.png │ ├── out45_t_1000.png │ ├── out46_t_1000.png │ ├── out47_t_1000.png │ ├── out48_t_1000.png │ ├── out49_t_1000.png │ ├── out4_t_1000.png │ ├── out50_t_1000.png │ ├── out51_t_1000.png │ ├── out52_t_1000.png │ ├── out53_t_1000.png │ ├── out54_t_1000.png │ ├── out55_t_1000.png │ ├── out56_t_1000.png │ ├── out57_t_1000.png │ ├── out58_t_1000.png │ ├── out59_t_1000.png │ ├── out5_t_1000.png │ ├── out60_t_1000.png │ ├── out6_t_1000.png │ ├── out7_t_1000.png │ ├── out8_t_1000.png │ └── out9_t_1000.png ├── gen_all.py ├── gen_laplacian ├── gaimc │ ├── Contents.m │ ├── bfs.m │ ├── bipartite_matching.m │ ├── clustercoeffs.m │ ├── convert_sparse.m │ ├── corenums.m │ ├── csr_to_sparse.m │ ├── dfs.m │ ├── dijkstra.m │ ├── dirclustercoeffs.m │ ├── graph_draw.m │ ├── largest_component.m │ ├── load_gaimc_graph.m │ ├── mst_prim.m │ ├── scomponents.m │ └── sparse_to_csr.m ├── gen_laplacian.m ├── guided_filter │ ├── boxfilter.m │ ├── guidedfilter.m │ ├── guidedfilter_color.m │ └── readme.txt ├── matting │ ├── README │ ├── downSmpIm.m │ ├── getGMatByMask.m │ ├── getLaplacian1.m │ ├── getLinearCoeff.m │ ├── imIndexToVect.m │ ├── runMatting.m │ ├── solveAlpha.m │ ├── solveAlphaC2F.m │ ├── solveFB.m │ ├── upSampleAlphaUsingImg.m │ └── upSmpIm.m ├── refine_posterization.m └── reshape_img.m ├── libcuda_utils.so ├── makefile ├── models └── download_models.sh └── neuralstyle_seg.lua /README.md: -------------------------------------------------------------------------------- 1 | # deep-photo-styletransfer 2 | Code and data for paper "[Deep Photo Style Transfer](https://arxiv.org/abs/1703.07511)" 3 | 4 | ## Disclaimer 5 | **This software is published for academic and non-commercial use only.** 6 | 7 | ## Setup 8 | This code is based on torch. It has been tested on Ubuntu 14.04 LTS. 9 | 10 | Dependencies: 11 | * [Torch](https://github.com/torch/torch7) (with [matio-ffi](https://github.com/soumith/matio-ffi.torch) and [loadcaffe](https://github.com/szagoruyko/loadcaffe)) 12 | * [Matlab](https://www.mathworks.com/) or [Octave](https://www.gnu.org/software/octave/) 13 | 14 | CUDA backend: 15 | * [CUDA](https://developer.nvidia.com/cuda-downloads) 16 | * [cudnn](https://developer.nvidia.com/cudnn) 17 | 18 | Download VGG-19: 19 | ``` 20 | sh models/download_models.sh 21 | ``` 22 | 23 | Compile ``cuda_utils.cu`` (Adjust ``PREFIX`` and ``NVCC_PREFIX`` in ``makefile`` for your machine): 24 | ``` 25 | make clean && make 26 | ``` 27 | 28 | ## Usage 29 | ### Quick start 30 | To generate all results (in ``examples/``) using the provided scripts, simply run 31 | ``` 32 | run('gen_laplacian/gen_laplacian.m') 33 | ``` 34 | in Matlab or Octave and then 35 | ``` 36 | python gen_all.py 37 | ``` 38 | in Python. The final output will be in ``examples/final_results/``. 39 | 40 | ### Basic usage 41 | 1. Given input and style images with semantic segmentation masks, put them in ``examples/`` respectively. They will have the following filename form: ``examples/input/in.png``, ``examples/style/tar.png`` and ``examples/segmentation/in.png``, ``examples/segmentation/tar.png``; 42 | 2. 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.mat``; 43 | 44 | **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.** 45 | 46 | 3. Run the following script to generate segmented intermediate result: 47 | ``` 48 | th neuralstyle_seg.lua -content_image -style_image