DiffSketcher: 基于潜在扩散模型的文本引导矢量草图合成
本仓库包含了我们NeurIPS 2023论文的官方实现:DiffSketcher:基于潜在扩散模型的文本引导矢量草图合成,该方法可以根据文本提示生成高质量的矢量草图。
DiffSketcher渲染过程:
提示词:全彩金刚鹦鹉,超级详细,写实,极其美丽 | 提示词:非常详细的杰作画作,尤达宝宝拿着光剑 | 提示词:晴天帆船在海上航行 |
:new: 更新
- [2024年1月] 🔥 我们发布了SVGDreamer。SVGDreamer是一种新颖的文本引导矢量图形合成方法。该方法同时考虑了矢量图形的编辑和合成质量。
- [2023年12月] 🔥 我们发布了PyTorch-SVGRender。Pytorch-SVGRender是用于图像矢量化的最先进可微渲染方法的首选库。
- [2023年11月] 我们感谢@camenduru实现了DiffSketcher-colab。
- [2023年10月] 我们发布了DiffSketcher代码。
- [2023年10月] 我们发布了VectorFusion代码。
:wrench: 安装
逐步安装
创建新的conda环境:
conda create --name diffsketcher python=3.10
conda activate diffsketcher
安装pytorch和以下库:
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.6 -c pytorch -c nvidia
pip install omegaconf BeautifulSoup4
pip install opencv-python scikit-image matplotlib visdom wandb
pip install triton numba
pip install numpy scipy timm scikit-fmm einops
pip install accelerate transformers safetensors datasets
安装CLIP:
pip install ftfy regex tqdm
pip install git+https://github.com/openai/CLIP.git
安装diffusers:
pip install diffusers==0.20.2
安装xformers(需要python=3.10
):
conda install xformers -c xformers
安装diffvg:
git clone https://github.com/BachiLi/diffvg.git
cd diffvg
git submodule update --init --recursive
conda install -y -c anaconda cmake
conda install -y -c conda-forge ffmpeg
pip install svgwrite svgpathtools cssutils torch-tools
python setup.py install
Docker使用
docker run --name diffsketcher --gpus all -it --ipc=host ximingxing/svgrender:v1 /bin/bash
🔥 快速开始
案例:悉尼歌剧院
预览:
注意力图 | 控制点初始化 | 笔画初始化 | 100步 | 500步 |
---|---|---|---|---|
从抽象到具体:
16条路径 | 36条路径 | 48条路径 | 96条路径 | 128条路径 |
---|---|---|---|---|
脚本:
python run_painterly_render.py \
-c diffsketcher.yaml \
-eval_step 10 -save_step 10 \
-update "token_ind=4 num_paths=96 num_iter=800" \
-pt "悉尼歌剧院的照片" \
-respath ./workdir/sydney_opera_house \
-d 8019 \
--download
-c
即--config
:配置文件,保存在DiffSketcher/config/
中。-eval_step
:用于评估方法的步长(调用过于频繁会导致耗时更长)。-save_step
:用于保存结果的步长(调用过于频繁会导致耗时更长)。-update
:用于编辑配置文件的超参数的工具,这样就不需要创建新的yaml文件。-pt
即--prompt
:文本提示。-respath
即--results_path
:保存结果的文件夹。-d
即--seed
:随机种子。--download
:首次运行时自动从huggingface下载模型。
关键:
-update "token_ind=4"
表示用于初始化笔画的交叉注意力图的索引。-update "num_paths=96"
表示笔画的数量。
可选:
-npt
,即--negative_prompt
:负面文本提示。-mv
,即--make_video
:制作渲染过程的视频(这将耗费更长时间)。-frame_freq
,即--video_frame_freq
:保存图像的步数间隔。-framerate
,即--video_frame_rate
:控制输出视频的播放速度。- 注意: 如果
xdog_intersec=True
,请下载 U2Net模型并放置在checkpoint/
目录中 - 在
-update
中添加enable_xformers=True
以启用xformers加速。 - 在
-update
中添加gradient_checkpoint=True
以使用梯度检查点来降低显存占用。
案例:水墨画风格的悉尼歌剧院
预览:
笔画初始化 | 100步 | 200步 | 990步 |
脚本:
python run_painterly_render.py \
-c diffsketcher-width.yaml \
-eval_step 10 -save_step 10 \
-update "token_ind=4 num_paths=48 num_iter=800" \
-pt "悉尼歌剧院的照片" \
-respath ./workdir/sydney_opera_house_ink \
-d 8019 \
--download
油画
预览:
笔画初始化 | 100步 | 570步 |
脚本:
python run_painterly_render.py \
-c diffsketcher-color.yaml \
-eval_step 10 -save_step 10 \
-update "token_ind=5 num_paths=1000 num_iter=1000 guidance_scale=7.5" \
-pt "拉丁女性经历精神觉醒的肖像,闭着眼睛,微笑,发光的灯光,梵高风格的油画" \
-npt "文字,签名,标题,标题,水印,丑陋,重复,病态,残缺,画面外,多余的手指,变异的手,画工拙劣的手,画工拙劣的脸,突变,变形,模糊,解剖学错误,比例不当,多余的肢体,克隆的脸,毁容,画面外,丑陋,多余的肢体,比例严重失调,畸形的肢体,缺少手臂,缺少腿,多余的手臂,多余的腿,变异的手,融合的手指,手指过多,脖子过长" \
-respath ./workdir/latin_woman_portrait -d 58548
预览:
笔画初始化 | 100步 | 570步 |
脚本:
python run_painterly_render.py \
-c diffsketcher-color.yaml \
-eval_step 10 -save_step 10 \
-update "token_ind=5 num_paths=1000 num_iter=1000 guidance_scale=7.5" \
-pt "一幅戴着皇冠的女性肖像画,艺术站首页,动态人像风格,背景色彩丰富,油画风格,油画,禁忌之美" \
-npt "双头,双面,裁剪图像,画面外,草稿,变形手,扭曲手指,重影,畸形手,多头,多余肢体,丑陋,手绘粗糙,缺少肢体,毁容,截断,丑陋,颗粒感,低分辨率,变形,模糊,解剖结构错误,毁容,脸部绘制粗糙,突变,变异,漂浮的肢体,断开的肢体,令人反感,绘制粗糙,残缺,损坏,多余的手指,重复的物品,病态,比例失调,缺少手臂,变异的手,残缺的手,复制的脸,畸形,模糊的雾霾" \
-respath ./workdir/woman_with_crown -d 178351
预览:
笔画初始化 | 100步 | 420步 |
脚本:
python run_painterly_render.py \
-c diffsketcher-color.yaml \
-eval_step 10 -save_step 10 \
-update "token_ind=5 num_paths=1000 num_iter=1000 guidance_scale=7.5" \
-pt "一幅戴着皇冠的女性肖像画,艺术站首页,动态人像风格,背景色彩丰富,油画风格,油画,禁忌之美" \
-npt "双头,双面,裁剪图像,画面外,草稿,变形手,扭曲手指,重影,畸形手,多头,多余肢体,丑陋,手绘粗糙,缺少肢体,毁容,截断,丑陋,颗粒感,低分辨率,变形,模糊,解剖结构错误,毁容,脸部绘制粗糙,突变,变异,漂浮的肢体,断开的肢体,令人反感,绘制粗糙,残缺,损坏,多余的手指,重复的物品,病态,比例失调,缺少手臂,变异的手,残缺的手,复制的脸,畸形,模糊的雾霾" \
-respath ./workdir/woman_with_crown -d 178351
多彩结果
预览:
笔画初始化 | 100步 | 340步 |
脚本:
python run_painterly_render.py \
-c diffsketcher-color.yaml \
-eval_step 10 -save_step 10 \
-update "token_ind=5 num_paths=1000 num_iter=800 guidance_scale=7" \
-pt "一座美丽的雪中城堡,令人惊叹的杰作,树木,阳光射线,列昂尼德·阿夫列莫夫风格" \
-npt "手绘粗糙,脚绘粗糙,脸部绘制粗糙,画面外,多余肢体,毁容,变形,身体画面外,解剖结构错误,水印,签名,裁剪,对比度低,曝光不足,曝光过度,劣质艺术,新手水平,业余水平,扭曲的脸" \
-respath ./workdir/castle -d 370880
预览:
笔画初始化 | 100步 | 850步 |
脚本:
python run_painterly_render.py \
-c diffsketcher-color.yaml \
-eval_step 10 -save_step 10 \
-update "token_ind=5 num_paths=1000 num_iter=800 guidance_scale=7" \
-pt "一座美丽的雪中城堡,令人惊叹的杰作,树木,阳光射线,列昂尼德·阿夫列莫夫风格" \
-npt "手绘粗糙,脚绘粗糙,脸部绘制粗糙,画面外,多余肢体,毁容,变形,身体画面外,解剖结构错误,水印,签名,裁剪,对比度低,曝光不足,曝光过度,劣质艺术,新手水平,业余水平,扭曲的脸" \
-respath ./workdir/castle -d 478376
DiffSketcher + 风格迁移
预览:
生成样本 | 风格图像 | 结果 |
脚本:
python run_painterly_render.py \
-tk style-diffsketcher -c diffsketcher-style.yaml \
-eval_step 10 -save_step 10 \
-update "token_ind=4 num_paths=2000 style_warmup=0 style_strength=1 softmax_temp=0.4 sds.grad_scale=0 lr_scheduler=True num_iter=2000" \
-pt "法国大革命,高度细节,8K,华丽,精致,电影感,去雾,大气,梵高风格的油画" \
-style ./img/starry.jpg \
-respath ./workdir/style_transfer \
-d 876809
-style
:风格图片的路径。style_warmup
:在style_warmup
步骤后添加风格损失。style_strength
:风格应该有多强。100(最大)非常强,0(最小)则没有风格。
更多草图结果
查看Examples.md获取更多案例。
待办事项
- 添加网页UI演示。
- 添加对彩色结果和油画的支持。
:books: 致谢
本项目基于以下仓库构建:
我们衷心感谢这些作者的出色工作。
:paperclip: 引用
如果您在研究中使用了这份代码,请引用以下论文:
@inproceedings{xing2023diffsketcher,
title={DiffSketcher: Text Guided Vector Sketch Synthesis through Latent Diffusion Models},
author={XiMing Xing and Chuang Wang and Haitao Zhou and Jing Zhang and Qian Yu and Dong Xu},
booktitle={Thirty-seventh Conference on Neural Information Processing Systems},
year={2023},
url={https://openreview.net/forum?id=CY1xatvEQj}
}
:copyright: 许可证
本作品采用MIT许可证授权。