Versatile-Diffusion - 多功能扩散:文本、图像和变化都在一个扩散模型中,2022 年

Created at: 2022-11-03 07:09:39
Language: Python
License: MIT

多功能扩散

拥抱脸空间 框架:PyTorch 授权协议: MIT

此存储库托管以下各项的官方实现:

Xingqian Xu, Atlas Wang, Eric Zhang, Kai Wang, and Humphrey Shi多功能扩散:文本、图像和变体都在一个扩散模型中Paper arXiv链接.

新闻

  • [2022.11.23]:扩散器==0.8.0🚀现已发布多功能扩散!
  • [2022.11.21]:现在支持 ,将 GPU 内存和模型大小都减少了一半。
    inference.py
    --fp16
  • [2022.11.19]:我们添加了一个简化的评估脚本,支持所有提到的应用程序。
    inference.py
  • [2022.11.16]: 我们的演示已在拥抱脸上🤗启动并运行!
  • [2022.11.14]:我们的部分评估代码和模型发布!
  • [2022.11.12]: 回购启动

介绍

我们构建了通用扩散(VD),这是第一个统一的多流多模态扩散框架,作为迈向通用生成AI的一步。多功能扩散可以原生支持图像到文本、图像变体、文本到图像和文本变体,并且可以进一步扩展到其他应用,例如语义式解缠、图像-文本双引导生成、潜在图像到文本到图像编辑等。未来的版本将支持更多模式,如语音、音乐、视频和 3D。

网络和框架

通用扩散的单个流包含一个VAE、一个扩散器和一个上下文编码器,因此在一种数据类型(例如图像)和一种上下文类型(例如文本)下处理一项任务(例如,文本到图像)。多功能扩散的多流结构如下图所示:

根据Versatile Diffusion,我们进一步提出了一个通用的多流多模态框架,其中包含包含三层(即全局层,数据和上下文层)的VAE,上下文编码器和扩散器。为了在此框架中涉及新的多模式任务,我们提出了以下要求:

  • 核心扩散器的设计应包含共享的全局层、可交换数据和上下文层,这些层将根据数据和上下文类型相应地激活。
  • VAE的选择应将数据平滑地映射到高度可解释的潜在空间。
  • 上下文编码器的选择应共同最小化所有受支持内容类型的跨模式统计距离。

性能

数据

我们使用Laion2B-en和自定义数据过滤器作为我们的主要数据集。由于Laion2B非常大,典型的训练小于一个时期,我们通常不需要下载完整的数据集进行训练。VD也是如此。

Laion2B 的代码目录:

├── data
│   └── laion2b
│       └── data
│           └── 00000.tar
│           └── 00000.parquet
│           └── 00000_stats.jsom_
│           └── 00001.tar
│           └── ...

这些压缩数据是使用 img2dataset API 官方 github 链接生成的。

设置

conda create -n versatile-diffusion python=3.8
conda activate versatile-diffusion
conda install pytorch==1.12.1 torchvision=0.13.1 -c pytorch
pip install -r requirement.txt

预训练模型

有用的预训练模型可以从HuggingFace链接下载。预训练文件夹应包含以下文件:

├── pretrained
│   └── kl-f8.pth
│   └── optimus-vae.pth
│   └── vd-four-flow-v1-0.pth (originally named vd-official.pth)
│   └── vd-four-flow-v1-0-fp16.pth

-fp16 命名的模型是具有 float16 参数并相应地用于评估的模型。与 float32 型号相比,float16 型号的尺寸只有其一半。

--fp16

请参阅此文档下载 VD-DC 和基准模型。

评估

下面是单行 shell 命令,用于评估具有多个 GPU 的 VD 四流模型。

python main.py --config vd_official_eval --gpu 0 1 2 3 4 5 6 7 --eval 99999

有关相应的评估配置,请参见。配置中有有用的信息。你可以轻松自定义它并运行自己的批量评估。

./configs/experiment/vd_official_eval.yaml

对于上述命令,你还需要:

  • 在其中创建并移动所有下载的预训练模型。
    ./pretrained
  • 创建用于评估多功能扩散
    ./log/vd_nodataset/99999_eval

此外,我们还提供了一个简单的评估脚本,支持本文中提到的所有应用程序。示例如下:

inference.py

python inference.py --gpu 0 --app text-to-image --prompt "a dream of a village in china, by Caspar David Friedrich, matte painting trending on artstation HQ" --seed 0 --save log/text-to-image.png
python inference.py --gpu 0 --app image-variation --image assets/space.jpg --seed 8 --save log/image-variation.png --coloradj simple
python inference.py --gpu 0 --app image-to-text --image assets/space.jpg --seed 8
python inference.py --gpu 0 --app text-variation --prompt "a pink car" --seed 8
python inference.py --gpu 0 --app disentanglement --image assets/vermeer.jpg --seed 8 --save log/disentanglement.png --coloradj simple --dislevel -2
python inference.py --gpu 0 --app dual-guided --image assets/benz.jpg --prompt "cyberpunk 2077" --seed 22 --save log/dual-guided.png --coloradj none --dgmixing 0.7
python inference.py --gpu 0 --app i2t2i --image assets/ghibli.jpg --nprompt "white house" --pprompt "tall castle" --seed 20 --save log/i2t2i.png --coloradj simple

你还可以通过向每个命令添加标签来使用 float16 进行推理。它使用半大小的预训练模型将运行速度加倍。你还需要将转换器更新到 4.24.0。下面是一个使用 float16 的示例命令:

--fp16
vd-***-fp16.pth

python inference.py --gpu 0 --app image-variation --image assets/space.jpg --seed 8 --save log/image-variation.png --coloradj simple --fp16

有关基线实验和VD-DC实验,请参阅此文档

训练

即将推出

画廊

文本到图像

图像变化

具有语义焦点的图像变化

双导向

引文

@article{xu2022versatile,
	title        = {Versatile Diffusion: Text, Images and Variations All in One Diffusion Model},
	author       = {Xingqian Xu, Zhangyang Wang, Eric Zhang, Kai Wang, Humphrey Shi},
	year         = 2022,
	url          = {https://arxiv.org/abs/2211.08332},
	eprint       = {2211.08332},
	archiveprefix = {arXiv},
	primaryclass = {cs.CV}
}

确认

部分代码重新组织/重新实现来自以下存储库的代码:LDM官方Github,它也面向DDPM官方Github