Paper: Wang W, Jiang Y, Xie K, et al. Zero-shot video editing using off-the-shelf image diffusion models[J]. arXiv preprint arXiv:2303.17599, 2023.
Introduction: Unreleased
Code: https://github.com/baaivision/vid2vid-zero
目录
- 一. 预备知识
- 1. diffusion 引导
- 2. Null-text Inversion
- 二. vid2vid-zero
- 三. 复现
一. 预备知识
1. diffusion 引导
分类器引导 (classifier-guided) 和无分类器引导 (classifier-free) 是 diffusion 在采样和生成时的两种不同方法,它们的区别主要在于引导生成过程中如何处理条件信息:
- 分类器引导 (classifier-guided diffusion) 1:扩散模型在生成过程中通过一个预训练的噪声分类器提供额外的引导信号,模型通过计算生成数据的分类概率梯度来指导生成的方向,从而增强条件生成的准确性。分类器引导扩散模型可以更精确地控制生成的样本,但生成速度较慢;
- 无分类器引导 (classifier-free diffusion) 2:无分类器引导扩散模型不依赖单独训练的分类器来提供条件引导,而是将条件信息直接引入到扩散模型的训练和采样过程中:无分类器引导在训练时会同时学习有条件和无条件的去噪扩散模型,在生成时通过调节有条件和无条件生成之间的平衡进行采样:
ϵ ~ θ ( z λ , c ) = w ϵ θ ( z λ , c ) + ( 1 − w ) ϵ θ ( z λ ) \tilde{\boldsymbol{\epsilon}}_\theta\left(\mathbf{z}_\lambda, \mathbf{c}\right)=w \boldsymbol{\epsilon}_\theta\left(\mathbf{z}_\lambda, \mathbf{c}\right)+(1-w) \boldsymbol{\epsilon}_\theta\left(\mathbf{z}_\lambda\right) ϵ~θ(zλ,c)=wϵθ(zλ,c)+(1−w)ϵθ(zλ)
无分类器引导可以通过调整引导系数 w w w 灵活地控制生成结果的条件强度,但引导控制需要合适的超参数调节,否则可能导致生成质量下降。Stable Diffusion 中引导系数默认为 7.5。
2. Null-text Inversion
Paper: Mokady R, Hertz A, Aberman K, et al. Null-text inversion for editing real images using guided diffusion models[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2023: 6038-6047.
Introduction: https://null-text-inversion.github.io/
Code: https://github.com/google/prompt-to-prompt
Null-text Inversion 3 是一种在 text-to-image 生成任务中使用的技术,用于优化和改进模型对输入文本的理解和生成能力。Null-text Inversion 的核心思想是在训练阶段引入空文本 (null text) 描述作为输入,通过在每一时间步训练这些 null text 使其尽可能接近真实的文本描述,这样模型可以学习在缺乏明确条件的情况下如何生成更具代表性和高质量的图像。
由于 DDIM Inversion 每一步都会产生误差,对于无条件 diffusion,累积误差可以忽略。但是对于 classifier-free diffusion,累积误差会不断增加,最终反演所得的噪声可能会偏离高斯分布,这样再经过 DDIM 采样最终生成的图像会严重偏离原图像 4:
因此,作者提出 Pivotal Inversion:将先使用引导系数
w
=
1
w = 1
w=1(即 diffusion 中仅使用有条件生成)反演原始图像,将反演过程中的噪声作为 pivotal,用来提供图像的原始信息。然后设定新的引导系数进行反演,优化每一个时间步的 null-text,使该步的隐变量尽可能接近 pivotal 中对应步的隐变量:
min
∥
z
t
−
1
∗
−
z
t
−
1
∥
2
2
, where
z
0
∗
=
z
0
,
z
ˉ
T
=
z
T
∗
\min \left\|z_{t-1}^*-z_{t-1}\right\|_2^2 \text { , where } z_0^*=z_0, \bar{z}_T=z_T^*
min
zt−1∗−zt−1
22 , where z0∗=z0,zˉT=zT∗
Pivotal Inversion 不再像 DDIM Inversion 所有时间步共用一个 null-text embedding,而是在每个时间步优化不同的 null-text embedding 以提高重建质量。Null-text embedding 优化完成后,再使用 Prompt-to-Prompt 方法对图像进行编辑,就能够在成功编辑的同时尽最大可能维护图像的原始结构。
二. vid2vid-zero
vid2vid-zero 是一种 zero-shot 视频编辑方法,能够在没有任何训练的情况下,利用注意力机制实现双向时间建模。vid2vid-zero 的核心是:
- 无文本反演模块:用于文本到视频的对齐;
- 跨帧建模模块:确保时间一致性;
- 空间正则化模块:保证与原视频的忠实度。
三. 复现
- 平台:AutoDL
- 显卡:RTX 4090 24G
- 镜像:PyTorch 2.0.0、Python 3.8(ubuntu20.04)、Cuda 11.8
- 源码:https://github.com/baaivision/vid2vid-zero
实验过程:
- 克隆仓库后,创建虚拟环境
vid2vid_zero
并按照 README 安装依赖; - 下载 stable diffusion v1-4 节点,修改配置文件中的
pretrained_model_path
值,并修改vid2vid_zero/p2p/null_text_w_ptp.py
和vid2vid_zero/p2p/p2p_stable.py
中的pretrained_model_path
; - 因为 vid2vid-zero 不支持分布式计算,所以需要指定一张 GPU 进行推理。遇到
NotImplementedError: Using RTX 4000 series doesn't support faster communication broadband via P2P or IB. Please set NCCL_P2P_DISABLE="1" and NCCL_IB_DISABLE="1" or use accelerate launch which will do this automatically.
报错,增加该字段即可:CUDA_VISIBLE_DEVICES=0 NCCL_P2P_DISABLE="1" NCCL_IB_DISABLE=1 accelerate launch test_vid2vid_zero.py --config configs/car-turn.yaml
- 随后即可开始训练:
Dhariwal P, Nichol A. Diffusion models beat gans on image synthesis[J]. Advances in neural information processing systems, 2021, 34: 8780-8794. ↩︎
Ho J, Salimans T. Classifier-free diffusion guidance[J]. arXiv preprint arXiv:2207.12598, 2022. ↩︎
Mokady R, Hertz A, Aberman K, et al. Null-text inversion for editing real images using guided diffusion models[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2023: 6038-6047. ↩︎
【AIGC第八篇】Null-text Inversion:基于Null Prompt Finetuning的图像编辑技术 ↩︎