Blended Diffusion for Text-driven Editing of Natural Images

  1. 1 研究背景、动机、主要贡献
    1. 1.1 研究背景
    2. 1.2 存在问题(动机)
      1. 1.2.1 现有方案
      2. 1.2.2 现有方案缺点
    3. 1.3 主要贡献
  2. 2 论文提出的新方法
    1. 2.1 Local CLIP-guided diffusion
    2. 2.2 Text-driven blended diffusion
      1. 2.2.1 Background preserving blending
      2. 2.2.2 Extending augmentations
      3. 2.2.3 Result ranking
  3. 3 论文实验评估方法与效果
  4. 4 论文优缺点、局限性、借鉴性

1 研究背景、动机、主要贡献

1.1 研究背景

文本生成图像的进展使得通过自然语言生成和编辑图像变得可行。特别是,基于 GAN 的方法在文本驱动的图像生成上取得了显著效果。

1.2 存在问题(动机)

1.2.1 现有方案

基于 GAN 的方法

1.2.2 现有方案缺点

  • 无法在真实图像上无缝应用,通常只能生成图像或应用于限定的图像域。
  • 背景常常被误改动,且无法实现局部编辑。
  • 为了操纵真实图像,需先将图像映射到GAN的潜在空间。

1.3 主要贡献

  • 提出了首个适用于真实图像的基于区域的编辑方法,利用自然语言指引实现对任意真实场景的局部编辑。
  • 在编辑区域外保持背景的完整性。
  • 引入简单的增强技术,显著减少对抗性生成问题,并支持基于梯度的扩散引导。

2 论文提出的新方法

给定一个输入图像 、一个文本提示 和一个二进制掩码 (用于标记图像中需要编辑的区域),目标是生成一个修改后的图像 ,满足以下条件:

  • 掩码区域的内容 符合文本描述
  • 非掩码区域的内容尽量接近原图,即
  • 编辑区域和背景区域之间的过渡应尽量无缝。

2.1 Local CLIP-guided diffusion

使用 CLIP 模型引导的局部扩散方法来实现图像编辑。目标是使掩码区域的图像内容符合文本提示的描述,同时尽可能保持未掩码区域的原始背景。

CLIP 引导扩散

  • 预训练的 CLIP 模型可以引导扩散过程,使图像朝向目标文本提示生成。然而,CLIP 模型只在没有噪声的图像上训练过,而对带噪图像的重新训练是不切实际的。因此,首先要从每个带噪潜变量 中估算出干净图像

  • 定义 CLIP 损失 为目标文本提示的 text_embed 和算出的干净图像的 image_embeds 之间的余弦距离,且通过仅计算掩码区域的梯度来实现局部引导。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def clip_loss(self, x_in, text_embed):
clip_loss = torch.tensor(0)

if self.mask is not None:
masked_input = x_in * self.mask
else:
masked_input = x_in
augmented_input = self.image_augmentations(masked_input).add(1).div(2)
clip_in = self.clip_normalize(augmented_input)
image_embeds = self.clip_model.encode_image(clip_in).float()
dists = d_clip_loss(image_embeds, text_embed)

# We want to sum over the averages
for i in range(self.args.batch_size):
# We want to average at the "augmentations level"
clip_loss = clip_loss + dists[i :: self.args.batch_size].mean()

return clip_loss

背景保持损失

  • 虽然 仅在掩码区域内计算,但它对整个图像产生影响。为了保持掩码外区域的背景,引入了背景保持损失 ,使得在掩码外的区域朝向输入图像。

  • MSE 是像素差的 L2 范数,LPIPS 是感知图像块相似性度量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if self.args.background_preservation_loss:
if self.mask is not None:
masked_background = x_in * (1 - self.mask)
else:
masked_background = x_in

if self.args.lpips_sim_lambda:
loss = (
loss
+ self.lpips_model(masked_background, self.init_image).sum()
* self.args.lpips_sim_lambda
)
if self.args.l2_sim_lambda:
loss = (
loss
+ mse_loss(masked_background, self.init_image) * self.args.l2_sim_lambda
)

综合引导损失

  • 通过加权和来定义总引导损失。

在实验中,两个引导项之间存在权衡关系。例如,当权重 设置为 1000 时,结果背景只能大致保持,而前景仍受到限制。

2.2 Text-driven blended diffusion

2.2.1 Background preserving blending

直接将生成的背景替换为从输入图像中获取的原始背景 ,会导致生成结果不连贯。

two images can be blended smoothly by separately blending each level of their Laplacian pyramids 的工作的启发,本文在扩散过程中以不同的噪声级别进行混合。

  • 从一个包含噪声的潜变量 开始,执行一次 CLIP 引导的扩散步骤,生成一个新的潜变量 ,即符合文本描述的前景。
  • 从输入图像中生成背景的噪声版本 ,保持其背景结构。
  • 使用掩码 m 将前景和背景混合。

2.2.2 Extending augmentations

在图像优化中,微小的像素改动可能会导致显著的误分类。这种现象被称为对抗性示例。例如,通过对图像添加基于错误类别的微小梯度噪声,模型可能会错误分类图像,而这种改动对人类而言通常不可见

同样,CLIP引导的扩散过程中的像素变化,也可能只是在局部降低了CLIP损失,而并未在图像语义层面上实现预期的修改效果

为了应对这一问题,Bau等人提出了一种非梯度优化方法,基于进化策略(evolution strategy)进行处理,避免了对抗性噪声的影响。

作者提出了一种新的方法,即扩展增强: - 每次扩散步骤后,不直接计算图像的CLIP损失梯度,而是对图像进行多个增强(如投影变换),得到一组不同的图像副本。 - 分别对这些增强后的副本计算CLIP损失,并求出每个增强后的图像梯度,再将这些梯度平均,作为最终梯度。

CLIP的引导变得更加鲁棒,因为对抗性噪声必须在所有增强图像中都保持一致,才有可能欺骗CLIP,这使得单纯的像素优化变得更加困难,从而更有可能引导模型朝着符合语义的方向进行变化。

2.2.3 Result ranking

生成多个预测、对它们进行排名并选择得分较高。

3 论文实验评估方法与效果

大多还是对图片的定性比较。或使用用户评分。

4 论文优缺点、局限性、借鉴性

优点:

  • 将原图减噪,与 CLIP 引导分别进行,又结合起来的思路。
  • 扩展增强的思路。将图像扩展增强后再算 CLIP 损失。引导模型朝着符合语义的方向进行变化

局限与未来工作:

  • 推理时间
  • 本文的排序方法仅考虑编辑区域,而忽略了图像的整体上下文,可能导致包含部分目标的次优结果仍获得高分。
  • 模型基于CLIP,而CLIP容易受到文字攻击,例如,手写文字的照片可能欺骗模型。

原文链接:Blended Diffusion for Text-driven Editing of Natural Images