pix2pix-zero

pix2pix-zero:零样本图像到图像转换

论文介绍 Zero-shot Image-to-Image Translation
关注微信公众号: DeepGoAI

项目地址:https://github.com/pix2pixzero/pix2pix-zero

论文地址:https://arxiv.org/abs/2302.03027

本文介绍了一种名为pix2pix-zero的图像到图像的翻译方法,它基于扩散模型,允许用户即时指定编辑方向(例如,将猫转换为狗),同时保持原始图像的结构。该方法自动发现文本嵌入空间中反映所需编辑的编辑方向,并采用跨注意力引导以在编辑过程中保留输入图像的一般内容结构。重要的是,这种方法不需要针对每种编辑类型和图像进行额外的训练,可以直接使用预训练的文本到图像的扩散模型。通过广泛的实验,证明了pix2pix-zero在真实和合成图像编辑方面超越了现有和同时期的工作。

上图展示了论文方法能让用户指定转换方向(例如,从猫变为狗)。该方法在处理真实图像(上两行)和合成图像(下两行)的翻译任务时,都能保留输入图像的结构。这种技术不需要为每个输入图像或每个任务进行手动文本提示或昂贵的微调。图中显示了不同的翻译示例,如从猫变成狗、从马变成斑马、从素描变为油画质感、给狗加上眼镜,以及将狗变成跳跃的狗。

上图展示了pix2pix-zero方法的概述,这是一个将图片从猫变成狗的图像到图像的翻译例子。首先,使用规范化的DDIM反转来得到一个反转的噪声映射,这是由BLIP图像字幕(caption)网络和CLIP文本嵌入模型自动生成的文本嵌入引导的。然后,使用原始文本嵌入去噪以获得交叉注意力图,作为输入图像结构的参考(顶部行)。接下来,使用编辑后的文本嵌入去噪,通过损失函数确保这些交叉注意力图与参考交叉注意力图相匹配(第二行)。这确保了编辑图像的结构与原始图像相比不会发生剧烈变化。没有交叉注意力引导的去噪示例显示在第三行,导致结构上的大偏差。此可视化强调了在编辑过程中保持图像原始结构的交叉注意力的重要性。

方法概述

文章提出了一种无需额外训练即可编辑真实图像的方法,核心技术包括:

  1. 规范化的DDIM反演和噪声规范化 :文章采用确定性DDIM逆过程进行真实图像反演,并在反演过程中使噪声图保持接近高斯分布,以提高可编辑性。

  2. 自动编辑方向发现 :为了能够利用文本语义进行编辑,作者首先提出一种在文本嵌入空间自动找到编辑方向的方法,具体通过计算包含原始词和编辑词的句子组的CLIP嵌入方向。

  3. 交叉注意力引导 :为了保持编辑后内容的结构,方法采用了交叉注意力引导,这涉及到在扩散过程中保持输入图像的交叉注意力图。

规范化的DDIM反演和噪声规范化
确定性反演

反演的意思就是说,我们想要编辑一张图像。如果想利用预训练的生成模型对其进行编辑,那么就需要先把图像嵌入到生成模型的隐空间。这个是目前比较流行的做法。

反演涉及到寻找噪声映射 x inv x_{\text{inv}} xinv(在生成模型中的编码表示),该噪声映射能够在采样时重建输入的潜在代码 x 0 x_0 x0(输入图像或对应的编码表示)。在DDPM中,这对应于固定的正向加噪声过程,然后通过反向过程去噪。然而,DDPM的正向和反向过程都是随机的,不会得到一致的重建。因此,作者采用如下所示的确定性DDIM反向过程:

x t + 1 = α ‾ t + 1 f θ ( x t , t , c ) + 1 − α ‾ t + 1 ϵ θ ( x t , t , c ) x_{t+1} = \sqrt{\overline{\alpha}{t+1}}f{\theta}(x_t, t, c) + \sqrt{1 - \overline{\alpha}{t+1}}\epsilon{\theta}(x_t, t, c) \quad xt+1=αt+1 fθ(xt,t,c)+1−αt+1 ϵθ(xt,t,c)

其中, x t x_t xt 是时间步 t t t 的噪声潜在代码, ϵ θ ( x t , t , c ) \epsilon_\theta(x_t, t, c) ϵθ(xt,t,c) 是基于UNet的去噪器,它在给定时间步和编码的文本特征 c c c 的条件下预测添加到 x t x_t xt 中的噪声, α ‾ t + 1 \overline{\alpha}{t+1} αt+1 是DDIM中定义的噪声缩放因子, f θ ( x t , t , c ) f\theta(x_t, t, c) fθ(xt,t,c) 预测最终去噪的潜在代码 x 0 x_0 x0。

f θ ( x t , t , c ) = x t − 1 − α ‾ t ϵ θ ( x t , t , c ) α ‾ t f_{\theta}(x_t, t, c) = \frac{x_t - \sqrt{1 - \overline{\alpha}t}\epsilon{\theta}(x_t, t, c)}{\sqrt{\overline{\alpha}_t}} \quad fθ(xt,t,c)=αt xt−1−αt ϵθ(xt,t,c)

通过DDIM过程逐渐向初始潜在代码 x 0 x_0 x0添加噪声,并在反转结束时,最后的噪声潜在代码 x T x_T xT被分配为 x i n v x_{inv} xinv.

噪声规范化

通过DDIM反演生成的反演噪声图通常不遵循不相关高斯白噪声的统计属性,导致可编辑性差。一个高斯白噪声图应该满足:(1) 任意两个随机位置之间没有相关性;(2) 每个空间位置的均值为零,方差为一,这在其自相关函数中反映为克罗内克函数。基于此,作者引导反演过程,使用由成对项 L pair L_{\text{pair}} Lpair 和在单个像素位置的KL散度项 L KL L_{\text{KL}} LKL 组成的自相关目标。

作者遵循文献[29]的方法,构建一个金字塔,其中初始噪声水平 η 0 ∈ R 64 × 64 × 4 \eta_0 \in \mathbb{R}^{64 \times 64 \times 4} η0∈R64×64×4 是预测的噪声图,每个后续噪声图通过2x2的领域平均池化(并乘以2以保持期望的方差)。作者在特征大小8x8处停止,创建4个噪声图,形成集合 { η 0 , η 1 , η 2 , η 3 } \{\eta_0, \eta_1, \eta_2, \eta_3\} {η0,η1,η2,η3}。

在金字塔级别 p p p 的成对正则化是可能的 δ \delta δ 偏移处自相关系数平方和,归一化过噪声图大小 S p S_p Sp。

L pair = ∑ p 1 S p 2 ∑ δ = 1 S p − 1 ∑ x , y , c η x , y , c p ( η x − δ , y , c p + η x , y − δ , c p ) , \mathcal{L}{\text{pair}} = \sum{p} \frac{1}{S_p^2} \sum_{\delta=1}^{S_p-1} \sum_{x,y,c} \eta^{p}{x,y,c} \left( \eta^{p}{x-\delta,y,c} + \eta^{p}_{x,y-\delta,c} \right), Lpair=p∑Sp21δ=1∑Sp−1x,y,c∑ηx,y,cp(ηx−δ,y,cp+ηx,y−δ,cp),

其中, η x y c p \eta_{xyc}^p ηxycp 在使用圆形索引和通道的空间位置中索引。

为了使反转噪声图更接近理想的高斯白噪声,作者引入了一个自相关目标函数,它由两部分组成:一个成对项 L pair L_{\text{pair}} Lpair 和一个在单个像素位置上的KL散度项 L KL L_{\text{KL}} LKL。这个自相关正则化的目的是确保在噪声图中的每一对随机位置之间没有相关性,并且每个空间位置的噪声值都有零均值和单位方差。这种方法有助于在编辑过程中保持图像质量,并确保编辑后的图像更加自然和真实。总目标函数如下:
L auto = L pair + λ L KL L_{\text{auto}} = L_{\text{pair}} + \lambda L_{\text{KL}} Lauto=Lpair+λLKL

在拿到确定性的噪声映射 x inv x_{\text{inv}} xinv之后,就可以考虑对其进行编辑了。接下来我们讨论如何利用零样本实现语义层面的编辑。

自动编辑方向发现

给定源文本和目标文本(例如猫和狗),作者使用 GPT-3 生成大量不同的句子。作者计算它们的 CLIP 嵌入并取均值差来获得编辑方向 $\Delta_{edit} $。

具体来说,作者自动计算从源到目标的对应文本嵌入方向向量\\Delta_{edit} 。他们为源 。他们为源 。他们为源s 和目标 和目标 和目标t生成了一大批多样化的句子,这些句子要么使用现成的句子生成器(如GPT-3)生成,要么使用围绕源和目标的预定义提示生成。然后,他们计算句子的CLIP嵌入的平均差异。通过向文本提示嵌入添加方向,可以生成编辑后的图像。

该方法计算编辑方向只需要大约5秒钟,并且只需预先计算一次。接下来,作者将编辑方向整合到图像到图像的翻译方法中。这种方法的优点是使用多个句子确定文本方向比使用单个单词更为稳健。

通过交叉注意力引导的编辑

近期的大规模扩散模型通过在去噪网络中增加交叉注意力层来引入条件化。作者使用基于潜在扩散模型(LDM)构建的开源稳定扩散模型(Stable Diffusion)。该模型使用CLIP文本编码器产生文本嵌入 c c c。为了根据文本条件生成图像,模型计算编码文本和去噪器中间特征之间的交叉注意力:

Attention ( Q , K , V ) = M ⋅ V \text{Attention}(Q, K, V) = M \cdot V Attention(Q,K,V)=M⋅V

其中,

M = Softmax ( Q K T d ) M = \text{Softmax}\left(\frac{QK^T}{\sqrt{d}}\right) M=Softmax(d QKT)

查询 Q = W Q ϕ ( x t ) Q = W^Q\phi(x_t) Q=WQϕ(xt),键 K = W K c K = W^Kc K=WKc,值 V = W V c V = W^Vc V=WVc是通过在去噪UNet的中间空间特征 ϕ ( x t ) \phi(x_t) ϕ(xt)和文本嵌入 c c c上应用学习到的投影 W Q , W K , W V W^Q, W^K, W^V WQ,WK,WV计算得出, d d d是投影键和查询的维度。

特别关注的是交叉注意力图 M M M,它与图像的结构有紧密的联系。交叉注意力图的每个条目 M i j M_{ij} Mij代表第 j j j个文本标记对第 i i i个空间位置的贡献。此外,交叉注意力图是特定于时间步的,对于每个时间步 t t t我们会得到不同的注意力图 M t M_t Mt。

为了应用一个编辑,朴素的方式是将预先计算的编辑方向 Δ c e d i t \Delta c_{edit} Δcedit 应用到 c c c 上,使用 c e d i t = c + Δ c e d i t c_{edit} = c + \Delta c_{edit} cedit=c+Δcedit 进行采样过程以生成 x e d i t x_{edit} xedit。这种方法能够根据编辑成功地改变图像,但无法保留输入图像的结构。如图3所示,采样过程中交叉注意力图的偏差导致图像结构的偏差。因此,作者提出了一种新的交叉注意力引导来鼓励交叉注意力图的一致性。

首先,重建图像,不应用编辑方向,只使用输入文本 c c c 来获取每个时间步骤 t t t 的参考交叉注意力图 M t r e f M_t^{ref} Mtref。这些交叉注意力图对应于我们希望保留的原始图像的结构 e e e。接下来,作者应用编辑方向,使用 c e d i t c_{edit} cedit 来生成交叉注意力图 M t e d i t M_t^{edit} Mtedit。然后作者采取梯度步骤与 x t x_t xt 匹配参考 M t r e f M_t^{ref} Mtref,减少下面的交叉注意力损失 L x a L_{xa} Lxa:

L x a = ∣ ∣ M t e d i t − M t r e f ∣ ∣ 2 2 L_{xa} = ||M_t^{edit} - M_t^{ref}||_2^2 \quad Lxa=∣∣Mtedit−Mtref∣∣22

这个损失鼓励 M t e d i t M_t^{edit} Mtedit 不偏离 M t r e f M_t^{ref} Mtref,在应用编辑的同时保留原始结构。

实验结果

这里进一步展示了更多的编辑。可以看到编辑结果还是非常逼真且自然的。

当然了这个算法也有缺陷。比如说非常复杂的图,可能还是没办法实现高质量编辑。另一问题是他对原始的结构姿态保持的不是很完美。原因是算法是在低尺度的特征图上进行编辑,所以对原来结构的保持并不完美。

总结

本文介绍了一种基于扩散的图像到图像的翻译方法,可以在不需要手动文本提示的情况下保持原始图像的内容。它自动发现反映所需编辑的文本嵌入空间中的编辑方向,并通过交叉注意力引导来保持编辑后的内容结构。此方法无需为每次编辑额外训练,可直接使用预训练的文本到图像扩散模型。实验表明,该方法在真实和合成图像编辑方面优于现有和同时期的工作。

其他更多细节请参阅论文原文

关注微信公众号: DeepGoAI
相关推荐
爱笑的眼睛111 天前
浅谈 前端验证码那些事
前端·程序人生
GPT01232 天前
大模型日报 2024-12-20
程序人生
十二测试录2 天前
Python基础——字符串
开发语言·经验分享·python·程序人生·职场发展
测试老哥2 天前
Python自动化测试图片比对算法
自动化测试·软件测试·python·测试工具·程序人生·职场和发展·测试用例
杰哥就是杰哥3 天前
坚持奋斗到底
程序人生
大鱼前端5 天前
React 19新特性探索:提升性能与开发者体验
程序人生
测试19985 天前
什么是自动化测试?
自动化测试·软件测试·python·测试工具·程序人生·职场和发展·测试用例
python_知世5 天前
基于LLaMA-Factory微调Llama3
人工智能·深度学习·程序人生·自然语言处理·大语言模型·llama·大模型微调
赵大仁6 天前
从零开始掌握Vue.js组件开发:详解原理与实践
前端·javascript·vue.js·经验分享·vscode·程序人生·前端框架