af48db06cd2dd16141e7b0eb23c88b5361d966cc
The existing code adds the fourth channel to the background image directly inside 'forward'. However, this breaks back propagation because Torch's autograd framework records the shapes of all inputs to the 'forward' function and expects shapes passed to 'backward' to match. By adding a channel to the background image inside 'forward' and passing this to 'backward', there is an extra channel that autograd does not expect, and it crashes. The resolution is to instead raise an exception with a useful error message for the end user that they need to add a channel of all ones to the background image.
diffvg
Differentiable Rasterizer for Vector Graphics https://people.csail.mit.edu/tzumao/diffvg
diffvg is a differentiable rasterizer for 2D vector graphics. See the webpage for more info.
Install
git submodule update --init --recursive
conda install -y pytorch torchvision -c pytorch
conda install -y numpy
conda install -y scikit-image
conda install -y -c anaconda cmake
conda install -y -c conda-forge ffmpeg
pip install svgwrite
pip install svgpathtools
pip install cssutils
pip install numba
pip install torch-tools
pip install visdom
python setup.py install
Install using poetry
prerequisite
install python 3.7, poetry and ffmpeg
# install poetry (mac, linux)
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
# install ffmpeg
(macos)
brew install ffmpeg
(linux)
sudo apt install ffmpeg
or use conda
conda install -y -c conda-forge ffmpeg
Install python packages
# install all python dependencies
poetry install
# install pydiffvg
poetry run python setup.py install
Now to run the apps, just add poetry run
before each of the commands below, e.g.
poetry run python single_circle.py
Building in debug mode
python setup.py build --debug install
Run
cd apps
Optimizing a single circle to a target.
python single_circle.py
Finite difference comparison.
finite_difference_comp.py [-h] [--size_scale SIZE_SCALE]
[--clamping_factor CLAMPING_FACTOR]
[--use_prefiltering USE_PREFILTERING]
svg_file
e.g.,
python finite_difference_comp.py imgs/tiger.svg
Interactive editor
python svg_brush.py
Painterly rendering
painterly_rendering.py [-h] [--num_paths NUM_PATHS]
[--max_width MAX_WIDTH] [--use_lpips_loss]
[--num_iter NUM_ITER] [--use_blob]
target
e.g.,
python painterly_rendering.py imgs/fallingwater.jpg --num_paths 2048 --max_width 4.0 --use_lpips_loss
Image vectorization
python refine_svg.py [-h] [--use_lpips_loss] [--num_iter NUM_ITER] svg target
e.g.,
python refine_svg.py imgs/flower.svg imgs/flower.jpg
Seam carving
python seam_carving.py [-h] [--svg SVG] [--optim_steps OPTIM_STEPS]
e.g.,
python seam_carving.py imgs/hokusai.svg
Vector variational autoencoder & vector GAN:
For the GAN models, see apps/generative_models/train_gan.py
. Generate samples from a pretrained using apps/generative_models/eval_gan.py
.
For the VAE models, see apps/generative_models/mnist_vae.py
.
If you use diffvg in your academic work, please cite
@article{Li:2020:DVG,
title = {Differentiable Vector Graphics Rasterization for Editing and Learning},
author = {Li, Tzu-Mao and Luk\'{a}\v{c}, Michal and Gharbi Micha\"{e}l and Jonathan Ragan-Kelley},
journal = {ACM Trans. Graph. (Proc. SIGGRAPH Asia)},
volume = {39},
number = {6},
pages = {193:1--193:15},
year = {2020}
}
Description
Languages
Python
52.4%
C++
28.4%
Makefile
11.9%
C
4.8%
CMake
2.5%