【论文速览 - Diffusion系列】文本引导的图生图
Introduction
诸如Stable-Diffusion/Imagen可以完成文生图的工作,但直接用这些模型进行图生图是很困难的。以下几篇论文分别给出了各自的图生图的方法,依照出现在arXiv上的时间顺序给出。
首先SDEdit主要是提出了一种图生图的方法,但其本身不具备文本引导的能力。接下来五篇,按照“需要掩码/直接编辑图像”和“需要微调模型/不需要微调模型”可以做一个简单的分类:
掩码 | 微调 | |
---|---|---|
GLIDE | ✔️ | ✔️ |
DreamBooth | ✖️ | ✔️(直接在输入图像上微调) |
DiffEdit | ✔️(自动生成) | ✖️ |
InstructPix2Pix | ✖️ | ✔️ |
Null-text Inversion | ✖️ | ✖️ |
SDEdit
arXiv: SDEdit: Guided Image Synthesis and Editing with Stochastic Differential Equations
Contributions
- 引入新的图像合成和编辑方法Stochastic Differential Editing(SDEdit),通过随机微分方程(SDE)逆向求解生成图像
- 可以自然地在真实性(realism)和正确性(faithfulness)之间实现平衡
VE-SDE
- VE-SDE的采样过程(Reverse SED):
- 其中 \(\nabla _{\mathbf{x}}\log p_t\left( \mathbf{x} \right)\) 可用得分函数 \(\boldsymbol{s}_{\boldsymbol{\theta }}\left( \mathbf{x}\left( t \right) ,t \right)\) 来逼近,训练 \(\boldsymbol{s}_{\boldsymbol{\theta }}\left( \mathbf{x}\left( t \right) ,t \right)\) 拟合 \(\nabla _{\mathbf{x}}\log p_t\left( \mathbf{x} \right)\)
- 目标函数为:\[\begin{equation}L_t=\mathbb{E}_{\mathbf{x}\left( 0 \right) \sim p_{\text{data}},\mathbf{z}\sim \mathcal{N}\left( 0,\mathbf{I} \right)}\left[ \lVert \sigma _t\boldsymbol{s}_{\boldsymbol{\theta }}\left( \mathbf{x}\left( t \right) ,t \right) -\mathbf{z} \rVert _{2}^{2} \right]\end{equation} \]
- 随后用Euler-Maruyama方法近似SDE的解:\[\begin{equation}\mathbf{x}\left( t \right) =\mathbf{x}\left( t+\Delta t \right) +\left( \sigma ^2\left( t \right) -\sigma ^2\left( t+\Delta t \right) \right) \boldsymbol{s}_{\boldsymbol{\theta }}\left( \mathbf{x}\left( t \right) ,t \right) +\sqrt{\sigma ^2\left( t \right) -\sigma ^2\left( t+\Delta t \right)}\mathbf{z,\ \ z}\sim \mathcal{N}\left( 0,\mathbf{I} \right)\end{equation} \]
- 选择一个特定的离散化小量 \(\Delta t\),从 \(\mathbf{x}\left( 1 \right) \sim \mathcal{N}\left( 0,\sigma ^2\left( 1 \right) \mathbf{I} \right)\) 以及上面的近似解不断迭代生成 \(\mathbf{x}\left( 0 \right)\)
Guided Image Synthesis and Editing with SDEdit
- 任务:两个desiderata——真实性Realism(通过Kernel Inception Score,KID评估),正确性Faithfulness(通过L2 distance评估)
- SDEdit“劫持”(hijack)了生成过程:
- 先加噪(Preturb with SDE)——添加适量的噪声以平滑不良的伪影和畸变(例如笔画像素处的不自然细节),同时仍保留输入用户指南的整体结构
- 再去噪(Reverse SDE)
- SDEdit指出需要选择恰当的时间 \(t_0\) 采样,作为起点进行Reverse SDE,而非固定从 \(t=1\) 开始:\[\begin{equation}\begin{aligned}\mathbf{x}^{\left( g \right)}\left( t_0 \right) \sim &\mathcal{N}\left( \mathbf{x}^{\left( g \right)};\sigma ^2\left( t_0 \right) \mathbf{I} \right)\\\mathbf{x}\left( t \right) =\mathbf{x}\left( t+\Delta t \right) +&\left( \sigma ^2\left( t \right) -\sigma ^2\left( t+\Delta t \right) \right) \boldsymbol{s}_{\boldsymbol{\theta }}\left( \mathbf{x}\left( t \right) ,t \right) +\sqrt{\sigma ^2\left( t \right) -\sigma ^2\left( t+\Delta t \right)}\mathbf{z,\ \ z}\sim \mathcal{N}\left( 0,\mathbf{I} \right)\end{aligned} \end{equation} \]
- 经验显示 \(t_0\in \left[ 0.3,\ 0.6 \right]\) 效果较好。当然也可以根据具体任务微调,可以由用户选择“更真实”还是“更正确”,再用二分搜索确定 \(t_0\)
Experiments
- SDEdit本身并没有文本引导的功能,它支持的是简笔画(Given stroke input)或在图像上用简笔画做修改(Stroke-based image editing)
- 论文将SDEdit与当时SoTA的图像编辑方法进行了比较。SDEdit大大提高了对guide信息的忠诚性,同时生成的图片也更满足真实性。
GLIDE
arXiv: GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models
Contributions
- 更大的模型(Diffusion Beat GANs中的ADM)
- 比较CLIP Guidance和Classifier-Free Guidance两种模型
- 迭代式地生成复杂Prompt对应的图像
Guided diffusion
-
目标函数:
\[\begin{equation}L_{\text{simple}}:=E_{t\sim \left[ 1,T \right] ,x_0\sim q\left( x_0 \right) ,\epsilon \sim \mathcal{N}\left( 0,\mathbf{I} \right)}\left[ ||\epsilon -\epsilon _{\theta}\left( x_t,t \right) ||^2 \right]\end{equation} \] -
GLIDE对比了Classifier-free Guidance和CLIP Guidance两种引导训练策略
-
Classifier Guidance的引导策略为:
\[\begin{equation}\hat{\mu}_{\theta}\left( x_t|y \right) =\mu _{\theta}\left( x_t|y \right) +s\cdot \Sigma _{\theta}\left( x_t|y \right) \nabla _{x_t}\log p_{\phi}\left( y|x_t \right) \end{equation} \] -
Classifier-free Guidance的优点在于不需要单独训练一个分类器,可以让模型学习利用自己的知识,而非依赖分类模型。只需要将类别标签 \(y\) 替换为空标签,标签预测概率的梯度替换为空标签与文本标签之间条件分布的差值:
\[\begin{equation}\hat{\epsilon}_{\theta}\left( x_t|y \right) =\epsilon _{\theta}\left( x_t|\emptyset \right) +s\cdot \left( \epsilon _{\theta}\left( x_t|y \right) -\epsilon _{\theta}\left( x_t|\emptyset \right) \right)\end{equation} \] -
CLIP Guidance的不同之处在于将标签预测概率的梯度替换成了用图像编码器 \(f(x_t)\) 和文本编码器 \(g(c)\) 点积计算的相似度梯度:
\[\begin{equation}\hat{\mu}_{\theta}\left( x_t|c \right) =\mu _{\theta}\left( x_t|c \right) +s\cdot \Sigma _{\theta}\left( x_t|c \right) \nabla _{x_t}\left( f\left( x_t \right) \cdot g\left( c \right) \right) \end{equation} \] -
实验中说明Classifier-free的引导策略更优
Text-Conditional Diffusion Models
- GLIDE使用了OpenAI之前发表的一篇论文Diffusion Models Beat GANs on Image Synthesis中提出的ADM架构
- Diffusion Beat GANs中把Diffusion模型做的更大,使用U-Net的前半段下采样,加入了Attn Pooling的结构来充当分类器,训练数据在DDPM加噪结果的基础上加入了一些增广策略
- 在ADM架构上增加了文本条件信息,具体而言是将文本信息编码成 \(K\) 个tokens的序列传给Transformer,Transformer输出作为ADM的class embedding与时序embedding融合,而Transformer最后一层的 \(K\) 个token embeddings还通过concatenate到K、V向量中的方式引入到了各个注意力层
- 除了生成图像的Diffusion以外,GLIDE还包括一个用于SR的Diffusion Model,将分辨率提高至 \(256\times 256\)
Fine-tuning for classifier-free guidance
- GLIDE在训练好后,将 \(20\%\) 的text token序列换成空序列
- 这样既保留了生成基于文本条件的图像的能力,也可以无条件地生成图像
Image Inpainting
- GLIDE专门针对图像修补任务进行了微调,按照论文的说法GLIDE应该是第一个这么做的(之前的都是直接用的生成模型)
- 具体而言,GLIDE随机擦除图像中的某个区域,通过四个额外的输入通道将部分擦除的图像传入,作为图像条件参与训练
- 对于上采样模型(即第二个Diffusion Model),只提供低分辨率图像全部区域和高分辨率图像的未遮挡区域——不提供高分辨率图像被遮挡的区域,以免模型生成时对其产生依赖
- 在GLIDE之前的模型并不擅长对复杂的文本提示生成相应的图像,而GLIDE可以迭代式地完成这种工作(iteratively improve model samples)
Results
- 从Precision/Recall和IS/FID两张图判断,Classifier-free的效果更好。虽然CLIP score/FID一图中,CLIP guidance的得分更高,但从人类角度评判,Classifier-free的效果比CLIP好
- FID(Fréchet Inception Distance)是一种通过比较生成图像与真实图像在Inception网络中的激活值分布来计算的指标,通常用于比较生成图像与真实图像的相似度,越小表示生成图像与真实图像越相似
- Inception Score是由Salimans等人于2016年提出的,首先使用Inception网络计算每个生成的图像的预测类别的概率分布,然后计算这些概率分布的KL散度的指数均值,最终得到一个评估分数,用于评估生成图像的多样性和质量
- GLIDE与DALL-E相比模型更小(3.5 Billion vs. 12 Billion parameters),训练数据集大小类似,而整体表现相当
- 第一行:不进行任何重排序(reranking)或模糊化(blurring)。
- 第二行:CLIP重排序
- 第三行:CLIP重排序和模糊化
- 附录中论文对GLIDE(filtered)的性能进行了测试,我们这里关注图像编辑的部分:GLIDE本身对图像修补任务的表现非常出色,但对数据集进行过滤后训练的GLIDE (filtered)有时会忽略文本提示。这可能是因为过滤后的数据集直接缺失了某一大类型的数据,比如论文提到他们过滤掉了包含人物的训练图像,以降低模型在许多以人为中心的问题用例中的生成能力
DreamBooth
arXiv: DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation
Contributions
- 将生成对象与唯一的文本标识符绑定
- 只要3~5张图像用于微调,而不会发生语言漂移或过拟合的现象
Personalization of Text-to-Image Models
- 将输入图像标记为:“a [identifier] [class noun]”
- [class noun]是图像中主题的大类,例如dog,由用户提供或来自分类器
- [identifier]是专门为图像中生成对象分配的唯一标识符,例如[V],为相对稀有的标识符
- 在词汇表中查找稀有标识符序列 \(f\left( \hat{V} \right)\) ,其中 \(f\) 是将字符序列映射到标记的tokenizer, \(\hat{V}\) 是从 \(f\left( \hat{V} \right)\) 解码的文本
- 找到 \(f\left( \hat{V} \right)\) 后反解出 \(\hat{V}\) 得到稀有标识符的字符序列
- 有些模型的文本条件使用CLIP,而DreamBooth使用的则是预训练的T5-XXL语言模型,其获取稀有标识符的具体过程为:
- 学习分词器 \(f\)
- 用 \(f\) 对提示 \(\mathbf{P}\) 进行分词,得到定长向量 \(f(\mathbf{P})\)
- 产生一个嵌入 \(\mathbf{c}_{\text{pr}}:=\Gamma \left( f\left( \mathbf{P} \right) \right) \) 作为文本条件
Class-specific Prior Preservation Loss
-
DreamBooth微调使用的图像只有3~5张,且这些图像中 [identifier] 和 [class noun] 总是绑定地出现,如果直接做微调会导致语言漂移和过拟合的问题:
- 微调整个模型,这包括了依赖文本嵌入的层,会造成语言漂移的现象,即逐渐忘记如何生成与目标生成对象相同类别的对象,以及忘记如何生成正确的反射、光影等效果
- 输入图像集过小导致会导致过拟合,减少输出的多样性。例如输入图像只有一种姿势,那么输出图像也可能只有这一种姿势
-
论文设计了一个Prior Preservation Loss(PPL),来对抗上述问题。这个loss利用类的先验知识,鼓励扩散模型不断生成与所给图像主题相同类别的不同实例,本质上就是用模型自己生成的样本来监督模型样本,以便在小样本微调时保留先验
-
加入了PPL后的损失函数为:
\[\begin{equation}\begin{aligned}\mathbb{E}_{\mathbf{x,c,\epsilon ,\epsilon }^{'},t}\big{[}w_t&\lVert \mathbf{\hat{x}}_{\mathbf{\theta }}\left( \alpha _t\mathbf{x}+\sigma _t\mathbf{\epsilon ,c} \right) -\mathbf{x} \rVert _{2}^{2}+\\ &\lambda w_{t^{'}}\lVert \mathbf{\hat{x}}_{\mathbf{\theta }}\left( \alpha _{t^{'}}\mathbf{x}_{\text{pr}}+\sigma _{t^{'}}\mathbf{\epsilon }^{'},\mathbf{c}_{\text{pr}} \right) -\mathbf{x}_{\text{pr}} \rVert _{2}^{2}\big{]}\end{aligned}\end{equation} \]- \(\mathbf{x}_{pr}=\mathbf{\hat{x}}\left( \mathbf{z}_{t_1},\mathbf{c}_{pr} \right)\) 是冻结的预训练模型生成的数据,其中 \(\mathbf{z}_{t_1}\sim \mathcal{N}\left( 0,\mathbf{I} \right)\) 为随机采样的噪声,\(\mathbf{c}_{\text{pr}}\:=\Gamma \left( f\left(\text{a}\ \left[ class\ noun \right] \text{"} \right) \right)\) 是条件向量
Inference
- DreamBooth包括三个模型:
- Text-to-Image Model输出64×64的图像
- 两个文本条件的超分辨模型分别将图像从64×64超分辨至256×256,从256×256超分辨至1024×1024
- 超分辨模型会虚构一些高频细节,可能是因为不熟悉生成对象的细节与纹理,需要进行微调
- 降低64×64→256×256模型的噪声水平是很有必要的,可以减少高分辨率下的模糊
- 对于一些情况下,微调256×256→1024×1024有助于生成更高水平粒度的细节
Evaluation Metrics
- DreamBooth通过CLIP-I和DINO来评价生成图像与输入所给主题的一致性(Subject fidelity),通过CLIP-T来评价生成图像与文本提示的一致性(Prompt fidelity)
- CLIP-I是生成图像和所给图像CLIP嵌入之间的平均余弦相似度。论文指出它并不能很好地区分高度相似的文本描述的不同主题(例如,两个不同的黄色时钟)
- 论文提出了DINO指标,它是生成图像和所给图像ViT-S/16 DINO嵌入之间的平均余弦相似度。这是论文评价生成图像的首选指标,因为与监督网络相比,DINO不会忽略同一类别生成对象之间的差异。相反,自监督训练鼓励区分不同生成对象的独特特征
- CLIP-T则是文本提示和生成图像CLIP嵌入之间的平均余弦相似度
Comparisons
- 因为微调只需要3~5张图像,DreamBooth可以在Imagen和Stable Diffusion上迁移
- DreamBooth(Imagen)更接近实际图像的subject fidelity上限,这可能是因为Imagen具有更大的表达能力和更高的输出质量
- 与Textual Inversion(Stable Diffusion)相比,DreamBooth(Stable Diffusion)在subject fidelity和prompt fidelity两个方面都有压倒性的优势
Ablation Studies
- 首先论文研究了Prior Preservation Loss的作用:
- 先验保留度量PRES计算了来自先验类别的生成图像和输入特定主题的真实图像之间的平均DINO嵌入:该度量越高,生成图像与输入特定对象的相似性就越高,表示先验崩溃。实验发现,PPL显著抵消了语言漂移的现象,同时实现了更高的多样性(如,姿势),而代价仅仅是稍微降低了一点subject fidelity
- 此外论文还做了类先验消融实验:
- 使用正确的类名:能够忠实地适应主题,利用类先验,在各种情境下生成我们的主题
- 使用错误的类名(例如“罐头”用于背包):会遇到主题和类先验之间的争议
- 不使用类名:模型无法利用类先验,难以学习主题并收敛,并可能生成错误的样本
Applications
- 重新语境化(Recontextualization)
- 文本引导视角合成(Text-guided View Synthesis)
- 艺术演绎(Art Renditions)
- 属性修改(Property Modification)
参见https://dreambooth.github.io/
Limitations
- 由于先验知识不足,DreamBooth可能会做错误的上下文合成(如空间站上或月球上的包)
- 如果文字提示对应的先验大多具有不同的外观,那么生成图像的语境与外观会发生纠缠,改变外观的样式
- 提示与所给图像的场景相似,DreamBooth依旧逃不掉过拟合的问题
- 对于一些较为罕见的主题,DreamBooth无法支持过多的变体,例如姿态等变化不够多样,不能很好地适应新的语境
- 不同生成对象的fidelity不同,有些生成对象的保真性不好
DiffEdit
arXiv: DiffEdit: Diffusion-based semantic image editing with mask guidance
Contributions
- 自动生成掩码
- 将输入图像编码进潜在空间来初始化生成过程
- 无需微调
Semantic Image Editing with DiffEdit
-
步骤1:为输入图像添加噪声并去噪
- 一次使用查询文本,一次使用参考文本(reference text)(或直接无条件:empty reference text),如图中的提示文本“斑马”和参考文本“马”
- 针对不同文本进行条件估计的噪声在图像动物所在位置区域不同,因为它们会根据不同的条件解码出不同的颜色和纹理。另一方面,对于背景,噪声估计变化很小。因此,噪声估计之间的差异可以用来推断出一个掩码,标识哪些图像部分需要更改以匹配查询
- 具体而言是重复这个差分过程 \(10\) 次,求出它们的平均值并将其二值化
-
步骤2:对输入图像进行DDIM编码
- 用DDIM编码函数 \(E_r\) 将输入图像 \(x_0\) 编码到位于时间步长 \(r\) 处的latent space中
- 时间步长 \(r\) 亦即编码率 \(r\),决定了编辑的强度:\(r\) 越大,允许越强的编辑,能更好地匹配文本查询,但代价是与输入图像更多的偏离
- 这一步条件文本为空,即使用无条件模型
-
步骤3:在文本查询条件下执行DDIM解码
-
使用掩码指导条件扩散过程
-
在掩码之外,编辑后的图像理论上应该与输入图像相同。DiffEdit通过将掩码外的像素值替换为通过DDIM编码推断的latents \(\mathbf{x}_t\) 来引导扩散模型,这将自然地通过解码将 \(\mathbf{x}_t\) 映射回原始像素 \(\mathbf{x}_0\) ,而不像通常所做的那样使用 \(\mathbf{x}_0\) 的带噪声版本
-
掩码引导的DDIM更新可以写成 $\mathbf{\tilde{y}}_t = M\mathbf{y}_t + (1-M)\mathbf{x}_t $,其中 \(\mathbf{y}_t\) 从 \(\mathbf{y}_{t-dt}\) 计算得到,使用的公式即DDIM的更新公式:
-
Theoretical Analysis
- 定理:
- 其中 \(\tau = \sqrt{1/\alpha_r - 1}\) 随着编码率 \(r\) 的增大而增大: \(\tau(r=0) = 0,\,\lim_{r \rightarrow 1} \tau = + \infty\)
- 第一个上限与SDEdit相关,第二个上限与DiffEdit相关。在一定的编码率下,它比第一个上限更紧
Experiments on ImageNet
- 论文在ImageNet,COCO和Imagen生成图像上都做了实验,以ImageNet里的结果为例
- LPIPS感知距离用于衡量与输入图像的距离,CSFID是一种类别条件的FID度量标准,用于衡量图像的逼真程度和与转换提示的一致性。对于这两种度量标准,较低的值表示编辑效果更好
- 更强的编辑可以改善(降低)CSFID得分,因为编辑后的图像更符合文本查询,但结果图像往往会偏离输入图像,导致LPIPS距离变差(增加)
- DiffEdit取得了最好的权衡(为了公平起见,DiffEdit没有传入参考文本,即置为空)
- 论文在ImageNet上做了消融实验:
- 分别使用DDIM编码和掩码都可以改善性能。此外将它们结合起来效果更好,显示了它们的互补性:掩码有利于更好地保留背景,而DDIM编码有利于保留掩码内输入的外观
- 比较了不同的掩码阈值(二值化的阈值):默认值 \(0.5\) 表现最好,较低的阈值( \(0.25\) )会生成更大的掩码(更多的图像修改),较高的阈值( \(0.75\) )会导致过于严格的掩码:即使在较大的编码比率下,CSFID得分也停滞在40左右(无法很好地转换)
- 论文特地提了一嘴GLIDE,同样的编码率下,DiffEdit和GLIDE的LPIPS差不多,而DiffEdit的CSFID则更低:DiffEdit的更新公式为 $\mathbf{\tilde{y}}_t = M\mathbf{y}_t + (1-M)\mathbf{x}_t $ (有点Momentum的感觉),而GLIDE则是将 \(\mathbf{y}_t\) 与一个掩码修正后的 \(\hat{\mathbf{y}}_t\) 去做插值
Experiments about mask
- 论文测试了是否添加参考文本对掩码生成的影响:参考文本允许忽略在查询和参考文本中都描述的图像部分(例如水果),因为这些部分的噪声是相同的
- 当然也有定性的比较,比较DiffEdit自动掩码后使用SDEdit与DiffEdit编码生成图像的表现
InstructPix2Pix
arXiv: InstructPix2Pix: Learning to Follow Image Editing Instructions
Contributions
- 整合GPT-3和Stable Diffusion来生成数据集
- 解决了编辑指令不直接、不确定的问题
Generating Instructions and Paired Captions
- 首先收集了700条图像描述样本,然后手动编写了编辑指令和输出图像描述,构成700组训练数据三元组(human-written dataset of editing triplets),包含:输入的图像描述(Input LAION caption),编辑指令(Edit instruction)和输出的图像描述(Edited caption)
- 微调后的GPT-3接收Input LAION caption,可以自行生成Edit instruction和Edited caption
Generating Paired Images from Paired Captions
- Input LAION caption和由GPT-3生成的Edited caption组成一对说明文字(a pair of captions)
- 使用Stable Diffusion将这两个文本提示(a pair of captions)转换成一对相应的图像(a pair of images)
- 单纯使用SD生成的图像,无法保证图像内容的一致性:即使Prompt非常相近,两张图像也可能相差很远,无法构成paired的需求
- InstructPix2Pix使用Prompt-to-Prompt方法来完成操作:Prompt-to-Prompt使用交叉注意力权重,能保证原prompt和编辑后的prompt生成图像的一致性。
Prompt-to-Prompt:
- 图像嵌入和文本嵌入通过交叉注意力层混合起来,为每个文本token生成空间注意力图(spatial attention map)
\(DM(z_t,\mathcal{P},t,s)\) 是扩散过程在 \(t\) 时间步的单个步骤,输出包括噪声图像 \(z_{t-1}\) 和注意力图 \(M_{t}\)
\(DM(z_t,\mathcal{P},t,s)\{M\gets \widehat{M}\}\) 表示保留文本prompt的词嵌入 \(V\) (交叉注意力中的Tokens Values),而用 \(\widehat{M}\) 替代 \(M\)
\(\widehat{M}^*\) 为编辑后的提示 \(P^*\) 生成的注意力图
\(Edit(M_t, M_t^*, t)\) 是一个通用编辑函数,具体分为三种情形:
单词替换(Word Swap):
\[\begin{equation}Edit(M_{t}, M_{t}^*, t) := \begin{cases} M_{t}^* &\quad\text{if} \; t < \tau\\ M_{t} &\quad\text{otherwise.} \\ \end{cases}\end{equation}\]单词增添(Adding a New Phrase):
\[\begin{equation}\left(Edit\left(M_{t}, M_{t}^*, t\right)\right)_{i,j}:= \begin{cases} (M_{t}^*)_{i,j} &\quad\text{if} \; A(j) = None\\ (M_{t})_{i,A(j)} &\quad\text{otherwise.} \\ \end{cases}\end{equation}\]注意力重加权(Attention Re–weighting):
\[\begin{equation}\left(Edit\left(M_{t}, M_{t}^*, t\right)\right)_{i,j}:= \begin{cases} c \cdot (M_{t})_{i,j} &\quad\text{if }j=j^*\\ (M_{t})_{i,j} &\quad\text{otherwise.} \\ \end{cases}\end{equation}\]
Training a conditional diffusion model
-
基于Stable Diffusion模型,本质是隐空间扩散模型(Latent Diffusion)。Latent Diffusion通过在带有编码器 \(E\) 和解码器 \(D\) 的VAE的隐空间中运行来提高扩散模型的效率和质量。对于一个图像 \(x\) ,扩散过程将噪声添加到编码的隐层向量 \(z=\mathcal{E}(x)\) 中,产生一个噪声隐变量 \(z_t\) ,其中噪声等级随时间步数 \(t\in T\) 而增加
-
训练一个网络 \(\epsilon _{\theta}\) ,它可以预测在给定的图像条件 \(c_I\) 和文本指令条件 \(c_T\) 下添加到噪声隐变量 \(z_t\) 中的噪声信息
-
训练的目标函数:
\[\begin{equation} L=\mathbb{E}_{\mathcal{E}\left( x \right) ,\mathcal{E}\left( c_I \right) ,c_T,\epsilon \sim \mathcal{N}\left( 0,1 \right) ,t}\left[ \lVert \epsilon -\epsilon _{\theta}\left( z_t,t,\mathcal{E}\left( c_I \right) ,c_T \right) \rVert _{2}^{2} \right]\end{equation} \] -
使用预训练的Stable Diffusion对模型进行初始化,为了赋予其图像编辑的能力,InstructPix2Pix在模型的第一个卷积层中增加额外的条件输入通道
-
InstructPix2Pix使用的是Classifier-free Guidance的策略。Classifier-free Guidance的隐式分类器 \(p_\theta(c|z_t)\) 会将更高的可能性分配给条件 \(c\) ,需要同时训练有条件和无条件去噪的两个扩散模型,并在推理时结合两个分数进行估计
-
这里的条件包括 \(c_I\) 和 \(c_T\),通过设计评分网络,要使InstructPix2Pix能够针对两个或任一条件输入进行有条件或无条件的去噪:
\[\begin{equation}\begin{aligned} \tilde{e}_{\theta}\left( z_t,c_I,c_T \right) =&\:e_{\theta}\left( z_t,\varnothing ,\varnothing \right)\\ &+s_I\cdot \left( e_{\theta}\left( z_t,c_I,\varnothing \right) -e_{\theta}\left( z_t,\varnothing ,\varnothing \right) \right)\\ &+s_T\cdot \left( e_{\theta}\left( z_t,c_I,c_T \right) -e_{\theta}\left( z_t,c_I,\varnothing \right) \right)\\ \end{aligned}\end{equation}\] -
两个指导尺度 \(s_I\) 和 \(s_T\) 分别调整生成的样本对输入图像于编辑指令的遵循程度
Baseline comparisons
- 与SDEdit和Text2Live定性比较
- SDEdit在内容大致不变,改变风格的情况下效果还不错,但会丢失图像主体的一部分身份信息
- Text2Live能够产生真实度比较高的结果,但它基于生成颜色和透明度层进行图像编辑的算法限制了它能够处理的编辑类型
- 与InstructPix2Pix不同的是,SDEdit和Text2Live都需要更加完整的文本描述
- 与SDEdit定量比较
- 在取得同样的文本一致性的条件下,InstructPix2Pix更加忠于原图
- 横轴:生成图像与指令文本的定向CLIP嵌入相似度(刻画生成图像与文本的一致性)
- 纵轴:生成图像与输入图像之间的CLIP嵌入余弦相似度(刻画生成与输入图像间的一致性)
Ablations
- 减小数据集的大小:图像编辑能力下降,只能进行细微的或风格上的调整
- 删除CLIP过滤:生成图像与输入图像的整体一致性降低
- LAION数据集非常嘈杂,包含许多毫无意义或不相关的描述文本,需要利用CLIP对其进行过滤
- 增加 \(s_T\) :对图像做更强的编辑,更符合文本指示
- 增加 \(s_I\) :更倾向于保留输入图像的空间结构,更加忠于原图
Discussion
- 在计数和空间推理相关的问题上表现不是很好
- 使用了GPT-3和Stable Diffusion,因此也继承了这些预训练大模型的偏见
Null-text Inversion
arXiv: Null-text Inversion for Editing Real Images using Guided Diffusion Models
Null-text Inversion for Editing Real Images using Guided Diffusion Models
Contributions
- 使用DDIM反演作为优化的锚点
- 只优化空文本嵌入
- 将Prompt-to-Prompt用在了真实图像中
Background and Preliminaries
-
DDIM采样:
\[\begin{equation}z_{t-1} = \sqrt{\dfrac{\alpha_{t-1}}{\alpha_t}}z_t + \left(\sqrt{\dfrac{1}{\alpha_{t-1}}-1}-\sqrt{\dfrac{1}{\alpha_t}-1}\right)\cdot \varepsilon_\theta(z_t,t,\mathcal{C})\end{equation} \] -
Classifier-free Guidance:
\[\begin{equation}\tilde{\varepsilon}_\theta(z_t,t,\mathcal{C},\varnothing) = w \cdot \varepsilon_\theta(z_t,t,\mathcal{C}) + (1-w) \ \cdot \varepsilon_\theta(z_t,t,\varnothing)\end{equation} \]Stable Diffusion中的默认值是 \(w=7.5\)
-
ODE在步骤较少的情况下可以反转,即 \(z_0 \rightarrow z_T\) 而不是 \(z_T \rightarrow z_0\) ,其中 \(z_0\) 是所给真实图像的编码 \(z_0=E(x_0)\) :
\[\begin{equation}z_{t+1} = \sqrt{\dfrac{\alpha_{t+1}}{\alpha_t}}z_t + \left(\sqrt{\dfrac{1}{\alpha_{t+1}}-1}-\sqrt{\dfrac{1}{\alpha_t}-1}\right)\cdot \varepsilon_\theta(z_t,t,\mathcal{C})\end{equation} \]
Pivotal Inversion
-
DDIM每一步都会引入噪声,Classifier-free guidance中的 \(w>1\) 放大了这一累积误差
-
取 \(w=1\) 的DDIM反演作为轨迹中心(pivot trajectory),在此轨迹周围使用标准引导尺度 \(w>1\) 进行优化 —— 在保持有意义的编辑能力的同时,最大程度地增加与原始图像的相似性
-
按照扩散过程的顺序 \(t=T\rightarrow t=1\) 对每一个时间步 \(t\) 进行单独优化,目标是尽可能接近初始轨迹 \(z^*_T,\ldots,z^*_0\) :
\[\begin{equation}\min \lVert{z^*_{t-1}-z_{t-1}}\rVert^2\end{equation} \] -
对于 \(t<T\) ,优化应当从前一个时间步 (\(t+1\)) 优化结束的时刻开始,否则优化的轨迹在推理时就不再适用
-
因此,在第 \(t\) 步优化后,计算当前的噪声潜码 \(\bar{z}_{t}\) ,然后在下一步的优化中使用,以确保优化的新轨迹在 \(z_0\) 附近结束
Null-text optimization
- 实验发现,为每个时间步 \(t\) 分别优化null embedding \(\varnothing_t\) 可以显著提高图像重建的质量(250个时间步的更新就可以取得比较好的效果,在A100上的用时约 \(1\) 分钟)
- 具体算法:
-
对于每个时间步 \(t\) :
\[\begin{equation}\displaystyle\min_{\varnothing_t} \lVert{z^*_{t-1}-z_{t-1}(\bar{z_t}, \varnothing_t, \mathcal{C})}\rVert^2\end{equation} \] -
优化结束后更新 \(\bar{z}_{t-1}\) :
\[\begin{equation}\bar{z}_{t-1} = z_{t-1}(\bar{z_t}, \varnothing_t, \mathcal{C})\end{equation} \] -
最终,我们可以通过噪声 \(\bar{z_T} = z^*_T\) 以及经过优化的无条件嵌入 \(\{\varnothing_t\}_{t=1}^{T}\) 来编辑真实图像(这个 \(\{\varnothing_t\}_{t=1}^{T}\) 会存成一个list,每一个时间步的都不一样)
Results
- 与众多其他的算法作对比,例如Text2LIVE对结构化的编辑做的不是很好,SDEdit不太能还原出原图(左);Masked-based的算法不能很好地保留掩码内的细节,比如说篮子的大小(右)