pix2pix-zero

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

论文介绍 Zero-shot Image-to-Image Translation

关注微信公众号: DeepGoAI

项目地址:github.com/pix2pixzero...

论文地址:arxiv.org/abs/2302.03...

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

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

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

方法概述

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

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

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

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

规范化的DDIM反演和噪声规范化

确定性反演

反演的意思就是说,我们想要编辑一张图像。如果想利用预训练的生成模型对其进行编辑,那么就需要先把图像嵌入到生成模型的隐空间。这个是目前比较流行的做法。 反演涉及到寻找噪声映射 <math xmlns="http://www.w3.org/1998/Math/MathML"> x inv x_{\text{inv}} </math>xinv(在生成模型中的编码表示),该噪声映射能够在采样时重建输入的潜在代码 <math xmlns="http://www.w3.org/1998/Math/MathML"> x 0 x_0 </math>x0(输入图像或对应的编码表示)。在DDPM中,这对应于固定的正向加噪声过程,然后通过反向过程去噪。然而,DDPM的正向和反向过程都是随机的,不会得到一致的重建。因此,作者采用如下所示的确定性DDIM反向过程:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> 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 </math>xt+1=αt+1 fθ(xt,t,c)+1−αt+1 ϵθ(xt,t,c)

其中, <math xmlns="http://www.w3.org/1998/Math/MathML"> x t x_t </math>xt 是时间步 <math xmlns="http://www.w3.org/1998/Math/MathML"> t t </math>t 的噪声潜在代码, <math xmlns="http://www.w3.org/1998/Math/MathML"> ϵ θ ( x t , t , c ) \epsilon_\theta(x_t, t, c) </math>ϵθ(xt,t,c) 是基于UNet的去噪器,它在给定时间步和编码的文本特征 <math xmlns="http://www.w3.org/1998/Math/MathML"> c c </math>c 的条件下预测添加到 <math xmlns="http://www.w3.org/1998/Math/MathML"> x t x_t </math>xt 中的噪声, <math xmlns="http://www.w3.org/1998/Math/MathML"> α ‾ t + 1 \overline{\alpha}{t+1} </math>αt+1 是DDIM中定义的噪声缩放因子, <math xmlns="http://www.w3.org/1998/Math/MathML"> f θ ( x t , t , c ) f\theta(x_t, t, c) </math>fθ(xt,t,c) 预测最终去噪的潜在代码 <math xmlns="http://www.w3.org/1998/Math/MathML"> x 0 x_0 </math>x0。
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> 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 </math>fθ(xt,t,c)=αt xt−1−αt ϵθ(xt,t,c)

通过DDIM过程逐渐向初始潜在代码 <math xmlns="http://www.w3.org/1998/Math/MathML"> x 0 x_0 </math>x0添加噪声,并在反转结束时,最后的噪声潜在代码 <math xmlns="http://www.w3.org/1998/Math/MathML"> x T x_T </math>xT被分配为 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i n v x_{inv} </math>xinv.

噪声规范化

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

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

在金字塔级别 <math xmlns="http://www.w3.org/1998/Math/MathML"> p p </math>p 的成对正则化是可能的 <math xmlns="http://www.w3.org/1998/Math/MathML"> δ \delta </math>δ 偏移处自相关系数平方和,归一化过噪声图大小 <math xmlns="http://www.w3.org/1998/Math/MathML"> S p S_p </math>Sp。
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> 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), </math>Lpair=p∑Sp21δ=1∑Sp−1x,y,c∑ηx,y,cp(ηx−δ,y,cp+ηx,y−δ,cp),

其中, <math xmlns="http://www.w3.org/1998/Math/MathML"> η x y c p \eta_{xyc}^p </math>ηxycp 在使用圆形索引和通道的空间位置中索引。

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

在拿到确定性的噪声映射 <math xmlns="http://www.w3.org/1998/Math/MathML"> x inv x_{\text{inv}} </math>xinv之后,就可以考虑对其进行编辑了。接下来我们讨论如何利用零样本实现语义层面的编辑。

自动编辑方向发现

给定源文本和目标文本(例如猫和狗),作者使用 GPT-3 生成大量不同的句子。作者计算它们的 CLIP 嵌入并取均值差来获得编辑方向 <math xmlns="http://www.w3.org/1998/Math/MathML"> Δ e d i t \Delta_{edit} </math>Δedit。

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

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

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

近期的大规模扩散模型通过在去噪网络中增加交叉注意力层来引入条件化。作者使用基于潜在扩散模型(LDM)构建的开源稳定扩散模型(Stable Diffusion)。该模型使用CLIP文本编码器产生文本嵌入 <math xmlns="http://www.w3.org/1998/Math/MathML"> c c </math>c。为了根据文本条件生成图像,模型计算编码文本和去噪器中间特征之间的交叉注意力:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> Attention ( Q , K , V ) = M ⋅ V \text{Attention}(Q, K, V) = M \cdot V </math>Attention(Q,K,V)=M⋅V

其中,
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> M = Softmax ( Q K T d ) M = \text{Softmax}\left(\frac{QK^T}{\sqrt{d}}\right) </math>M=Softmax(d QKT)

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

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

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

首先,重建图像,不应用编辑方向,只使用输入文本 <math xmlns="http://www.w3.org/1998/Math/MathML"> c c </math>c 来获取每个时间步骤 <math xmlns="http://www.w3.org/1998/Math/MathML"> t t </math>t 的参考交叉注意力图 <math xmlns="http://www.w3.org/1998/Math/MathML"> M t r e f M_t^{ref} </math>Mtref。这些交叉注意力图对应于我们希望保留的原始图像的结构 <math xmlns="http://www.w3.org/1998/Math/MathML"> e e </math>e。接下来,作者应用编辑方向,使用 <math xmlns="http://www.w3.org/1998/Math/MathML"> c e d i t c_{edit} </math>cedit 来生成交叉注意力图 <math xmlns="http://www.w3.org/1998/Math/MathML"> M t e d i t M_t^{edit} </math>Mtedit。然后作者采取梯度步骤与 <math xmlns="http://www.w3.org/1998/Math/MathML"> x t x_t </math>xt 匹配参考 <math xmlns="http://www.w3.org/1998/Math/MathML"> M t r e f M_t^{ref} </math>Mtref,减少下面的交叉注意力损失 <math xmlns="http://www.w3.org/1998/Math/MathML"> L x a L_{xa} </math>Lxa:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> 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 </math>Lxa=∣∣Mtedit−Mtref∣∣22

这个损失鼓励 <math xmlns="http://www.w3.org/1998/Math/MathML"> M t e d i t M_t^{edit} </math>Mtedit 不偏离 <math xmlns="http://www.w3.org/1998/Math/MathML"> M t r e f M_t^{ref} </math>Mtref,在应用编辑的同时保留原始结构。

实验结果

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

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

总结

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

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

关注微信公众号: DeepGoAI

相关推荐
聪小陈15 小时前
圣诞节:记一次掘友让我感动的时刻
前端·程序员
百万蹄蹄向前冲20 小时前
2024不一样的VUE3期末考查
前端·javascript·程序员
陈哥聊测试2 天前
软件格局在变,谁能扛起国产替代的大旗?
安全·程序员·产品
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭2 天前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
少年姜太公3 天前
从零开始详解js中的this(下)
前端·javascript·程序员
凌虚3 天前
Kubernetes APF(API 优先级和公平调度)简介
后端·程序员·kubernetes
小华同学ai3 天前
ShowDoc:Star12.3k,福利项目,个人小团队的在线文档“简单、易用、轻量化”还专门针对API文档、技术文档做了优化
前端·程序员·github
小青鱼5 天前
AI编程-Cursor从入门到精通系列之常用概念及解释(二)
人工智能·程序员
捡田螺的小男孩6 天前
参数校验的十个建议!收藏好,别再给测试机会提bug~
java·后端·程序员
哔哩哔哩技术6 天前
B站装机系统实践:从初创到规模化的演进
前端·程序员