当前位置: 首页 > news >正文

《StyleDiffusion:通过扩散模型实现可控的解耦风格迁移》学习笔记

paper:2308.07863

目录

摘要

1、介绍

2、相关工作

2.1 神经风格迁移(NST)

2.2 解耦表示学习(DRL)

2.3 扩散模型(Diffusion Models)

3、方法

3.1 风格移除模块

3.2 风格转移模块

3.3 损失函数

4、实验

4.1 实现细节

4.2 对比实验

4.2.1 质性比较

4.2.2 定量比较

4.2.3 用户研究

4.2.4 效率

4.3 消融研究

4.3.1 C-S解耦的控制

4.3.2 基于扩散的风格迁移优势

4.3.3 损失分析

4.3.4 与 Gram 损失的比较


摘要

内容和风格(C-S)解耦是风格迁移中的一个基本问题和关键挑战。现有的方法基于显式定义(例如Gram矩阵)或隐式学习(例如GANs),这些方法既不具备可解释性,也不容易控制,导致了纠缠的表示和不尽如人意的结果。在本文中,我们提出了一种新的C-S解耦框架,用于风格迁移,且无需使用之前的假设。关键的洞察是显式地提取内容信息,并隐式地学习互补的风格信息,从而实现可解释和可控的C-S解耦与风格迁移。我们引入了一种基于CLIP的简洁且有效的风格解耦损失,并结合风格重建先验,在CLIP图像空间中进行C-S解耦。通过进一步利用扩散模型强大的风格去除和生成能力,我们的框架在结果上优于现有的最先进方法,并且具备灵活的C-S解耦和权衡控制能力。我们的工作为风格迁移中的C-S解耦提供了新的见解,并展示了扩散模型在学习良好解耦的C-S特征方面的潜力。

1、介绍

给定一张参考风格图像(例如,文森特·梵高的《星空》),风格迁移旨在将其艺术风格(如色彩和笔触)转移到任意内容目标上。为了实现这一目标,首先必须正确地将风格与内容分离,然后将风格迁移到另一个内容上。这提出了两个基本挑战:

(1)“如何解耦内容和风格(C-S)”,

(2)“如何将风格迁移到另一个内容上”。

为了应对这些挑战,许多有价值的研究已经取得了进展。Gatys等人提出了《艺术风格的神经算法》,通过显式定义从预训练卷积神经网络(CNN)中提取的高层特征(如VGG网络)为内容,将特征相关性(即Gram矩阵)定义为风格,从而实现了风格迁移。该方法取得了视觉上令人惊叹的结果,并启发了大量的后继研究。尽管取得了成功,但在深入分析风格迁移的本质后,我们发现这些方法存在三个问题:

(1)内容和风格没有完全解耦。理论上,内容和风格表示是交织在一起的。例如,匹配图像的内容表示可能也匹配其Gram矩阵,反之亦然;

(2)CNN学习到的内容是一个“黑盒”,难以解释,这使得风格与内容的定义(如[19]中提出的定义)不可解释且难以控制;

(3)风格迁移过程被建模为内容损失和风格损失的独立优化,导致缺乏对内容与风格之间关系的深刻理解。这些问题通常导致风格迁移结果不平衡且产生不和谐的伪影。

另一方面,解耦表示学习(如[27])提供了其他想法来隐式地解耦内容和风格,无论是监督学习(如[47, 37])还是无监督学习(如[9, 98])。对于风格迁移,Kotovenko等人[45]利用固定点三重损失和解耦损失来强制基于GAN的框架无监督地学习内容与风格的独立表示。同样,TPFR[79]通过度量学习和两阶段的对等正则化在潜在空间中学习解耦内容和风格,在零样本设置下也能生成高质量的图像。尽管这些方法成功地通过相应的损失函数“鼓励”了某些属性,但它们仍然存在三个主要问题:

(1)没有监督的情况下,解耦的模型似乎无法得到真正的识别(如[57, 70]所示),这意味着无监督学习[45, 79]可能无法实现真正的内容与风格解耦;

(2)这些方法都基于GAN,因此通常受到GAN预定义领域的限制,例如特定艺术家的风格领域[75];

(3)隐式学习的内容与风格表示仍然是黑盒,难以解释和控制[57]。

面对上述挑战,本文提出了一种新的内容与风格解耦框架,用于风格迁移,且不使用传统的假设,例如Gram矩阵[19]或GAN[45]。我们的关键洞察源于图像风格的定义比内容更复杂。例如,我们可以通过图像的结构、语义或形状轻松识别其内容,但定义风格却是不可解的。因此,我们通过显式地提取内容信息并隐式地学习其互补的风格信息,绕过了这个难题。由于我们严格将风格定义为内容的补充,内容和风格能够完全解耦,解耦控制转变为对内容提取的控制,从而实现了可控性和可解释性。

然而,实现可信且可控的内容提取也是一项不小的挑战,因为从内容图像和风格图像提取的内容应当共享相同的内容领域,而且提取的内容细节应当易于控制。为此,我们引入了最近开发的扩散模型,并提出了基于扩散的风格去除模块,能够平滑地去除内容图像和风格图像中的风格信息,从而提取出领域对齐的内容信息。此外,鉴于扩散模型强大的生成能力,我们还引入了基于扩散的风格迁移模块,更好地学习风格图像的解耦风格信息,并将其迁移到内容图像上。风格解耦和迁移通过一个简单而有效的基于CLIP的风格解耦损失来促使,该损失函数使得内容图像内容到风格化结果的映射,与风格图像内容到风格化结果的映射在CLIP图像空间中对齐。通过与风格重建先验的协调,它实现了更加广泛和忠实的风格迁移。我们进行了全面的对比实验和消融研究,以证明我们框架的有效性和优越性。在良好解耦的内容与风格下,我们实现了非常有前景的风格化效果,细致的风格细节、良好的内容保留,并且对内容与风格之间的关系有了更深的理解。

我们的贡献主要有三点:

  1. 提出了一个新的内容与风格解耦框架,通过更可解释和可控的方式解耦内容与风格,并实现了高质量的风格化结果。
  2. 将扩散模型引入到我们的框架中,并展示了它们在可控风格去除和学习良好解耦内容与风格特征方面的有效性和优越性。
  3. 引入了一个新的基于CLIP的风格解耦损失,并与风格重建先验相协调,用于在CLIP图像空间中解耦内容与风格。

2、相关工作

2.1 神经风格迁移(NST)

Gatys等人的开创性工作[19]开启了神经风格迁移(NST)[34]的时代。从那时起,这一任务经历了巨大的进展,包括效率[35, 52, 90]、质量[23, 89, 55, 10, 7, 1, 46, 83, 56, 6, 92, 32, 99, 12, 96, 84]、通用性[5, 30, 53, 65, 13, 33, 29, 85, 95, 59, 93]和多样性[80, 86, 88]。尽管取得了这些成功,但这些方法的本质大多依赖于显式定义的内容-风格(C-S)表示,例如Gram矩阵[19],这些方法存在一些局限性,正如第1节所讨论的。我们在这项工作中提出了新的解耦C-S表示,这些表示通过扩散模型显式提取或隐式学习,从而实现更有效的风格迁移和更高质量的结果。

2.2 解耦表示学习(DRL)

解耦表示学习(DRL)[27]的任务是建模数据变化的因素[51]。早期的工作使用标注数据通过监督方式分解表示[37]。最近,更多的无监督方法被广泛探索[42],尤其是在风格和内容解耦的任务中[98, 31, 51, 40, 91, 45, 66, 70, 8, 48]。然而,由于依赖于GANs[21],它们的C-S解耦通常受到GAN预定义领域的限制(例如,Van Gogh的风格领域)。此外,若没有足够的数据,解耦通常无法有效实现。与此不同的是,我们的框架通过从单一风格图像中学习解耦的风格,并且仅通过提供少量(大约50张)内容图像进行训练,便可轻松实现解耦。

2.3 扩散模型(Diffusion Models)

扩散模型[77],如去噪扩散概率模型(DDPMs)[28, 63],最近在图像生成[78, 14, 17]、图像操作[62, 2, 41]和文本条件合成[64, 74, 69, 71, 24, 4, 54]等任务中表现出了巨大的成功。这些工作展示了扩散模型在生成质量上优于其他生成模型,如变分自编码器(VAEs)[81]、自回归模型[16]、流模型[44]和GANs[39]。受这些工作的启发,我们在框架中引入了基于扩散模型的风格移除模块和风格转移模块。这些模块能够平滑地去除图像中的风格信息,并更好地学习风格的恢复,从而实现更高质量的风格迁移结果。据我们所知,我们的工作是首个将扩散模型引入神经风格迁移领域的研究。

3、方法

给定一张风格图像 I_s ​ 和一张任意内容图像  I_c ,我们希望首先解耦它们的内容和风格,然后将 I_s​ 的风格转移到 I_c 的内容上。我们的关键思想是显式地提取内容信息,然后隐式地学习互补的风格信息。由于我们的框架是基于扩散模型的 [28, 78],我们称其为 StyleDiffusion

图1展示了我们的StyleDiffusion概述,它包含三个关键组件:

  1. 基于扩散的风格移除模块,
  2. 基于扩散的风格转移模块,
  3. 基于CLIP的风格解耦损失,与风格重建先验协调。

3.1 风格移除模块

风格移除模块的目标是去除内容和风格图像的风格信息,显式地提取领域对齐的内容信息。可以根据用户定义的内容使用任何合理的内容提取操作。例如,用户可能希望使用结构轮廓作为内容,因此可以提取轮廓 [36, 94]。然而,如第1节所讨论的,一个挑战是可控性,因为内容-风格解耦的控制已经转化为内容提取的控制。为此,我们引入了基于扩散的风格移除模块,以实现既合理又可控的内容提取。

给定输入图像,例如风格图像 I_s ,由于颜色是风格的一个重要部分 [50],我们的风格移除模块首先通过常用的ITU-R 601-2亮度变换 [20] 去除颜色,得到的灰度图像记为 I_s' 。然后,我们利用一个预训练的扩散模型 [14]\epsilon_\theta去除 I_s' ​ 中的风格细节,如笔触和纹理,提取出内容I^c_s 。

这一方法的核心思想是,预训练的扩散模型可以帮助消除输入图像的领域特征,并将它们对齐到预训练领域 [11, 41]。我们假设具有不同风格的图像属于不同领域,但它们的内容应该共享相同领域。因此,我们可以在一个代理领域(例如,摄影领域)上预训练扩散模型,然后使用该领域构建图像的内容。预训练后,扩散模型可以通过正向过程将输入图像从不同领域转换为潜在空间 x,然后通过反向过程将其逆转为摄影领域。通过这种方式,风格特征可以理想地被去除,留下图像的内容。

为了在更少的采样步骤中获得结果并确保输入图像的内容结构得以保留,我们采用确定性DDIM [78] 采样作为反向过程,并使用其反转的ODE近似 [41] 作为正向过程:

x_{t-1} = \sqrt{\bar{\alpha}_{t-1}} f_\theta(x_t,t) + \sqrt{1 - \bar{\alpha}_{t-1}} \epsilon_\theta(x_t,t)

x_{t+1} = \sqrt{\bar{\alpha}_{t+1}} f_\theta(x_t,t) + \sqrt{1 - \bar{\alpha}_{t+1}} \epsilon_\theta(x_t,t)

正向和反向扩散过程使我们能够通过调整返回步骤 T_{remov} 来轻松控制风格移除的强度。随着 T_{remov}​ 的增加,更多的风格特征将被去除,而主要的内容结构将被保留。需要注意的是,对于摄影类内容图像,扩散过程是可选的,因为它们已经位于预训练领域中,几乎没有需要去除的风格,除了颜色。

3.2 风格转移模块

风格转移模块旨在学习风格图像的解耦风格信息,并将其转移到内容图像上。像自编码器(AE) [30] 这样的常见生成模型可以用于此目的。然而,受扩散模型 [14, 41] 最近取得的巨大成功的启发,我们引入了基于扩散的风格转移模块,这可以更好地学习我们框架中的解耦风格信息,并实现更高质量和更灵活的风格化。

给定内容图像 I_c ​,记 I_c^c 为通过风格移除模块提取的 I_c 的内容。我们首先使用预训练的扩散模型 \epsilon_\theta 将其转换为潜在空间 x 。然后,在基于CLIP的风格解耦损失和风格重建先验的引导下,扩散模型的反向过程被微调(\epsilon_\theta​ → \hat{\epsilon}_\theta ​)以生成参考风格图像 I_s 的风格化结果 I_{cs} 。一旦微调完成,任何内容图像都可以被操控为具有风格图像 I_s 解耦风格的风格化结果。

为了使训练更加容易和稳定,我们在微调过程中采用了确定性DDIM正向和反向过程。然而,在推理时,亦可以直接使用随机DDPM [28] 正向过程,以帮助获得多样化的结果。

3.3 损失函数

为了使风格迁移模块学习并迁移解耦后的风格信息,需要解决两个关键问题:

(1)“如何规范化学习到的风格信息是解耦的?”

(2)“如何恰当地将风格信息迁移到其他内容?”

为了解决这些问题,我们引入了一种新的基于CLIP的风格解耦损失,并与风格重建先验相结合,用于训练网络。

基于CLIP的风格解耦损失。 假设 I_c^c  和 I_s^c ​ 分别是内容图像 I_c 和风格图像 I_s 通过风格去除模块(第4.1节)提取出的内容。我们的目标是学习风格图像 I_s 中与其内容 I_s^c ​ 互补的风格信息。因此,一种直观的方式是通过直接相减来获取解耦后的风格信息:

D_s^{px} = I_s - I_s^c

然而,简单的像素差异无法包含有意义的语义信息,因此无法产生合理的结果。为了解决这个问题,我们可以在一个潜在的语义空间中公式化风格解耦:

D_s = E(I_s) - E(I_s^c)

其中,E  是一个经过良好预训练的投影器。具体而言,由于I_s ​ 和 I_s^c 具有相似的内容,但风格不同,投影器 E  必须能够区分它们的风格特征。换句话说,正如我们所定义的,风格不同的图像属于不同的域,而投影器 E 应该能够区分 I_s​ 和I_s^c 的域。幸运的是,受最近视觉-语言模型 CLIP [68] 的启发,CLIP 能够封装不仅仅是摄影领域的知识,还包括艺术领域的知识 [18, 69, 49],我们可以直接利用它的图像编码器作为我们的投影器E 。这个开放领域的 CLIP 空间为度量内容和其风格化结果之间的“风格距离”提供了一个很好的度量空间。因此,这个“风格距离”可以解释为解耦后的风格信息。需要注意的是,这里的风格隐式地定义为内容的补充,这与 Gram 矩阵 [19] 明确的风格定义不同,后者与内容无关。

在获得了解耦后的风格信息 D_s ​ 后,接下来需要解决的是如何将其恰当地迁移到其他内容上。一种可能的解决方案是直接优化 L1 损失:

D_{cs} = E(I_{cs}) - E(I_c^c)

L^{L1}_{SD} = \|D_{cs} - D_s\|

其中,I_{cs} 是风格化结果,D_{cs} 是 I_{cs}  的解耦风格信息。然而,如图2(a)所示,最小化 L1 损失并不能保证风格化结果 I_{cs}​ 位于风格图像 I_s 的风格域内。

这是因为 L1 损失仅最小化绝对像素差异(即曼哈顿距离),因此可能产生符合曼哈顿距离但偏离目标风格域的风格化图像。此外,它还可能导致崩溃问题,其中不同内容的风格化输出在潜在空间中满足相同的曼哈顿距离。

为了解决这些问题,我们可以进一步约束解耦后的方向,如下所示:

L^{\text{dir}}_{SD} = 1 - \frac{D_{cs} \cdot D_s}{\|D_{cs}\| \|D_s\|}

这个方向损失将内容图像的内容到其风格化结果(即风格化结果)之间的转移方向与风格图像内容到其风格化结果(即风格图像本身)之间的转移方向对齐,如图2(b)所示。

与此损失协作,L1 损失L_{SD}^{L1}可以实现内容域中的内容与风格域中的风格化结果之间的精确一对一映射,如图2(c)所示。

最终,我们的风格解耦损失定义为 L1 损失L_{SD}^{L1}和方向损失 L^{\text{dir}}_{SD}的复合:

L_{SD} = \lambda_{L1} L^{l1}_{SD} + \lambda_{\text{dir}} L^{\text{dir}}_ {SD}

其中,\lambda_{L1} 和 \lambda_{\text{dir}} 是实验中设置为10和1的超参数。由于我们的风格信息是由内容与其风格化结果之间的差异引发的,因此我们可以通过学习深入理解 C-S 之间的关系。结果,风格可以自然和谐地转移到内容上,产生更好的风格化图像。

风格重建先验。 

为了充分利用风格图像提供的先验信息并进一步提升风格化效果,我们在风格迁移模块的微调过程中整合了风格重建先验。直观地,给定风格图像 I_s 的内容 I_s^c ,风格迁移模块应该尽可能地将其恢复到原始风格图像。因此,我们可以定义风格重建损失如下:

L_{\text{SR}} = \| I_{ss} - I_s \|

其中,I_{ss}  是给定 I_s^c 作为内容的风格化结果。我们在优化风格解耦损失 L_{SD} ​ 之前单独优化风格重建损失。详细的微调过程可以参考补充材料。风格重建先验帮助我们的模型更充分地恢复风格信息,也为优化 L_{SD}  提供了良好的初始化,从而帮助后者充分发挥其能力,产生更高质量的结果。

4、实验

4.1 实现细节

我们使用在ImageNet [73] 上预训练的ADM扩散模型[14],并采用快速采样策略[41]。具体来说,我们不再按照传统方法进行完整的扩散过程直到最后一个时间步T(例如,1000步),而是通过执行最大T{·} < T(称为返回步长),即对风格去除设置Tremov = 601,对风格转移设置Ttrans = 301,从而加速扩散过程。此外,正如[41]所建议的,我们通过减少离散化步骤来进一步加速前向和反向过程,即风格去除过程的(Sfor, Srev) = (40, 40),风格转移过程的(Sfor, Srev) = (40, 6)。在微调或推理时,我们可以调整Tremov或Ttrans来灵活控制风格去除和C-S解耦的程度。

为了微调模型以适应目标风格图像,我们从ImageNet随机抽取50张图像作为内容图像。我们使用Adam优化器[43],初始学习率为4e-6,并每个epoch按1.2倍线性增长。所有模型经过5个epoch的微调。

4.2 对比实验

我们将我们的StyleDiffusion与十种最先进的(SOTA)方法进行比较[19, 95, 12, 1, 56, 6, 13, 79, 35, 55]。为了公平比较,所有这些方法都像我们一样,针对目标风格图像进行了微调或训练。

4.2.1 质性比较

如图3所示,由于C-S表示的交织,Gatys[19]和EFDM[95]常常生成失真内容(例如,第1-3行)和混乱的纹理(例如,第4-8行)。StyTr2 [12]和ArtFlow [1]通过采用更先进的网络[82, 44]改善了结果,但它们仍可能产生带有光晕边界(例如,第2-3行)或脏污的伪影(例如,第4-6行)。AdaAttN[56]通过执行逐点注意力归一化来更好地保持内容结构,但在某些情况下,风格化效果会退化(例如,第1、2、4和5行)。IECAST[6]利用对比学习和外部学习进行风格转移,因此在单个风格图像上进行微调时会导致效果退化。MAST[13]使用多适应网络来解耦C-S。然而,由于它仍然依赖于[19]的C-S表示,结果通常表现为混乱的纹理和明显的伪影。TPFR[79]是一个基于GAN的框架,旨在在潜在空间中学习解耦C-S。正如结果所示,它不能正确恢复风格细节,且经常生成偏离目标风格的风格化图像,这表明它可能没有真正学习到解耦的C-S表示[57]。与我们的算法相似,Johnson[35]和LapStyle[55]也为每种风格训练了单独的模型。然而,由于[19]的C-S损失之间的权衡,它们可能会产生风格化较弱的结果或引入不自然的模式(例如,第1-6行)。

相比之下,我们的StyleDiffusion完全基于扩散模型解耦C-S。因此,它能够生成具有充分风格细节(例如,第1-4行)和良好保留内容(例如,第5-8行)的高质量结果。与之前的方法产生的内容和风格混合的结果不同,我们的方法能够更好地考虑它们之间的关系,使得风格化效果更加自然和和谐,尤其是对于像立体主义(例如,第2行)和油画(例如,第1、3、4和5行)这样的挑战性风格。

4.2.2 定量比较

我们还通过定量指标来更好地评估我们的方法,如表1所示。我们收集了32张内容图像和12张风格图像,合成了384张风格化结果,并计算了平均结构相似度指数(SSIM)[1],以评估内容相似性。为了评估风格相似性,我们计算了CLIP图像相似度得分[68]和风格损失[19, 30],用于比较风格图像和对应风格化结果之间的差异。如表1所示,我们的方法在SSIM和CLIP得分上均获得了最高分,而风格损失则相对较高。原因在于这些方法是直接优化风格损失。然而,我们的方法在风格损失上的表现仍然可与基于GAN的TPFR[79]相媲美。此外,值得注意的是,我们的方法还可以通过加入风格损失来提升这方面的表现。

4.2.3 用户研究

由于风格转移具有高度的主观性,且CLIP得分和风格损失偏向于训练目标,我们还进行了一项用户研究,以评估风格相似性和整体风格化质量。我们随机选择了50对C-S样本给每个用户。给定每对C-S样本,我们展示了我们的方法和随机选取的SOTA方法生成的风格化结果,用户需要选择(1)哪个结果更好地转移了风格图案,以及(2)哪个结果的整体风格化效果更好。我们从20个用户那里收集了1000个投票,并展示了现有方法与我们的方法在表1中的偏好选择比例。较低的数字表明我们的结果比竞争方法更受欢迎。正如结果所示,我们的方法在风格一致性和整体质量上优于其他方法。

4.2.4 效率

如表1底部两行所示,我们的方法在训练时间上要求较少,因为它只需要在少量(约50张)内容图像上进行微调。在测试时,我们的方法比基于优化的方法Gatys[19]要快,但由于使用了扩散模型,其速度仍慢于其他前馈方法。

4.3 消融研究

4.3.1 C-S解耦的控制

我们的StyleDiffusion的一个显著优点是,可以通过调整风格去除模块的内容提取来灵活控制C-S解耦。图4展示了通过调整风格去除模块的返回步长Tremov,如何实现连续的控制。正如上排所示,随着Tremov的增加,更多的风格特征被去除,主要的内容结构被保留。相应地,当更多风格被去除时,如下排所示,它将被适当地转移到风格化结果中,例如扭曲的笔触和星形图案。这验证了我们的方法能够成功地以可控的方式解耦风格和内容,并将风格正确地转移到其他内容中。此外,灵活的C-S解耦也使我们的StyleDiffusion在其他任务中具有多样性,例如照片真实风格转移(见附录)。

4.3.2 基于扩散的风格迁移优势

尽管我们的风格迁移模块不限于扩散模型,使用扩散模型却提供了三大优势:

(1) 灵活的 C-S 权衡控制。如图5所示,通过调整扩散模型的返回步长 T_{\text{trans}} ,我们可以在训练阶段(上排)和测试阶段(下排)灵活地控制 C-S 权衡。随着 T_{\text{trans}}​ 的增大,更多的样式特征被迁移,但内容结构可能会受到破坏(例如最后一列)。当选择合适的 T_{\text{trans}} = 301 时,可以得到很好的平衡。有趣的是,如下排的最后两列所示,尽管模型是在 T_{\text{trans}} = 301 上训练的,但我们可以通过在测试阶段使用更大的 T_{\text{trans}}(例如 401)来外推样式(不过当 T_{\text{trans}} 过大时,如 601,结果会退化)。这为用户提供了非常灵活的方式,根据个人偏好调整结果。然而,其他模型(如广泛使用的 AEs)无法轻松实现这一点,因为我们的框架不涉及任何特征转换或 C-S 损失权衡。

(2) 更高质量的风格化。由于扩散模型强大的生成能力,它可以实现比其他模型更高质量的风格化。为了比较,我们使用预训练的 VGG-AE [30, 49] 作为风格迁移模块,并为每个风格微调其解码器网络。如图6(b)列所示,尽管结果仍然可接受,但可能会产生畸变的内容和劣质的纹理,明显不如扩散模型在图6(a)列生成的结果。这也通过底部的定量评分得到了验证。证明了扩散模型能够更好地学习解耦的内容和样式特征,有助于生成更好的风格迁移结果。

(3) 多样化风格迁移。在推理过程中,我们可以直接采用随机DDPM [28] 前向过程来获得多样化的结果。这些多样化的结果可以给用户提供无尽的选择,帮助获得更满意的结果。然而,像AEs这样的其他模型在我们的框架中无法轻松实现这一点。

4.3.3 损失分析

为了验证用于微调 StyleDiffusion 的各个损失项的有效性,我们展示了图7(a-d)中的消融实验结果。

(1) 使用L_1 ​ 损失 L^{L1}_{SD} ​ 成功地迁移了立体派风格(如上排的方块图案),但颜色偏离了风格图像,尤其是在下排。 L_1 损失容易产生偏离风格领域的不合理结果。

(2) 添加方向损失 L^{\text{dir}}_{SD}  帮助将结果拉得更接近风格领域。上排中的纹理得到了增强,颜色在上排和下排中更加合理。

(3) 通过进一步与样式重建先验L_{\text{SR}} ​ 协调,风格化效果显著提升,其中样式信息得到了更充分的恢复。可能是因为它为 L^{L1}_{SD} 和 L^{\text{dir}}_{SD} ​ 的优化提供了一个良好的初始化,从而帮助它们发挥最大的作用。如图7(d)所验证的,单独使用样式重建无法学习有意义的样式图案,除了基本的颜色外。所有上述分析也得到了底部定量评分的支持。

4.3.4 与 Gram 损失的比较

为了进一步验证我们提出的损失的优越性,我们用广泛使用的 Gram 损失 [19, 30] 替换了它们,如图7(e-f)所示。可以观察到,Gram 损失严重破坏了内容结构,例如上排的斑马头部和下排的放大区域。这是因为它没有解耦 C-S,只是匹配了全局统计信息,而没有考虑 C-S 之间的关系。相比之下,我们的损失关注于学习解耦的样式信息,而这正是通过内容与其风格化结果之间的差异来实现的。因此,它们可以更好地理解 C-S 之间的关系,从而获得更加满意的结果,细节风格更好,内容得到了更好的保留,如图7(c)和底部定量评分所验证的那样。此外,我们还在 AE 基线 [30, 49] 上进行了 Gram 损失的比较,以消除扩散模型的影响。如图8(a-b)所示,我们的损失比 Gram 损失能获得更满意的结果,这与图7中的结果一致。而如图8(c)所示,它们也可以与 Gram 损失结合,以提高在风格损失度量上的表现。然而,这可能会影响我们框架中 C-S 的完全解耦,偏离我们的目标,并降低内容保留度(见图8(c)中的 SSIM 分数)。因此,我们的框架默认不采用 Gram 损失。

相关文章:

《StyleDiffusion:通过扩散模型实现可控的解耦风格迁移》学习笔记

paper&#xff1a;2308.07863 目录 摘要 1、介绍 2、相关工作 2.1 神经风格迁移&#xff08;NST&#xff09; 2.2 解耦表示学习&#xff08;DRL&#xff09; 2.3 扩散模型&#xff08;Diffusion Models&#xff09; 3、方法 3.1 风格移除模块 3.2 风格转移模块 3.3 …...

Django 创建表时 “__str__ ”方法的使用

在 Django 模型中&#xff0c;__str__ 方法是一个 Python 特殊方法&#xff08;也称为“魔术方法”&#xff09;&#xff0c;用于定义对象的字符串表示形式。它的作用是控制当对象被转换为字符串时&#xff0c;应该返回什么样的内容。 示例&#xff1a; 我在初学ModelForm时尝…...

图像处理之CSC

CSC 是 Color Space Conversion&#xff08;色彩空间转换&#xff09;的缩写&#xff0c;它涉及图像处理中的亮度、饱和度、对比度和色度等参数的调整。这些参数是图像处理中的核心概念&#xff0c;通常用于描述和操作图像的颜色信息。 以下是亮度、饱和度、对比度和色度与 CS…...

C语言数组之二维数组

C语言 主要内容 数组 二维数组 数组 二维数组 定义 二维数组本质上是一个行列式的组合&#xff0c;也就是说二维数组由行和列两部分组成&#xff0c;属于多维数组。二维数组数据是通过行列进行解读。二维数组可被视为一个特殊的一维数组&#xff0c;相当于二维数组又是一…...

PyTorch 源码学习:阅读经验 代码结构

分享自己在学习 PyTorch 源码时阅读过的资料。本文重点关注阅读 PyTorch 源码的经验和 PyTorch 的代码结构。因为 PyTorch 不同版本的源码实现有所不同&#xff0c;所以笔者在整理资料时尽可能按版本号升序&#xff0c;版本号见标题前[]。最新版本的源码实现还请查看 PyTorch 仓…...

vite+vue3开发低版本浏览器不支持es6语法的问题排坑笔记

重要提示&#xff1a;请首先完整阅读完文章内容后再操作&#xff0c;以免不必要的时间浪费&#xff01;切记&#xff01;&#xff01;&#xff01;在使用vitevue3开发unapp项目时&#xff0c;发现低版本浏览器不兼容es6的语法&#xff0c;如“?.” “??” 等&#xff0c;为了…...

C语言中printf()函数,格式输出符

在 C 语言中&#xff0c;printf() 函数的格式输出符&#xff08;格式说明符&#xff09;用于控制输出的格式和数据类型。以下是常见的格式说明符及其用法&#xff1a; 基本格式符 打印各种类型的值 格式输出符数据类型说明%dint输出有符号十进制整数%uunsigned int输出无符号…...

AI 编程工具—Cursor 进阶篇 数据分析

AI 编程工具—Cursor 进阶篇 数据分析 上一节课我们使用Cursor 生成了北京房产的销售数据,这一节我们使用Cursor对这些数据进行分析,也是我们尝试使用Cursor 去帮我们做数据分析,从而进一步发挥Cursor的能力,来帮助我们完成更多的事情 案例一 房产销售数据分析 @北京202…...

青少年编程与数学 02-009 Django 5 Web 编程 20课题、测试

青少年编程与数学 02-009 Django 5 Web 编程 20课题、测试 一、软件测试二、自动化测试三、单元测试四、Django 单元测试&#xff08;一&#xff09;、创建测试用例&#xff08;二&#xff09;、运行测试&#xff08;三&#xff09;、常用测试功能 课题摘要: 本文全面介绍了软件…...

zookeeper watch

目录 回顾回调&观察者模式&发布订阅模式Zookeeper 客户端/ 服务端 watchgetChildren 为例最后归纳 回顾回调&观察者模式&发布订阅模式 回调的思想 类A的a()方法调用类B的b()方法类B的b()方法执行完毕主动调用类A的callback()方法 回调分为同步回调和异步回调…...

vue3.x 的shallowReactive 与 shallowRef 详细解读

在 Vue 3.x 中&#xff0c;shallowReactive 和 shallowRef 是两个用于创建浅层响应式数据的 API。它们与 reactive 和 ref 类似&#xff0c;但在处理嵌套对象时的行为有所不同。以下是它们的详细解读和示例。 1. shallowReactive 作用 shallowReactive 创建一个浅层响应式对…...

鸿蒙NEXT开发-界面渲染(条件和循环)

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 目录 1. 渲染-条件渲染 1.1 基本介绍 1.2 使…...

python电影数据分析及可视化系统建设

博主介绍&#xff1a;✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

在本地校验密码或弱口令 (windows)

# 0x00 背景 需求是验证服务器的弱口令&#xff0c;如果通过网络侧校验可能会造成账户锁定风险。在本地校验不会有锁定风险或频率限制。 # 0x01 实践 ## 1 使用 net use 命令 可以通过命令行使用 net use 命令来验证本地账户的密码。打开命令提示符&#xff08;CMD&#xff0…...

pytest测试专题 - 1.3 测试用例发现规则

<< 返回目录 1 pytest测试专题 - 1.3 测试用例发现规则 执行pytest命令时&#xff0c;可以不输入参数&#xff0c;或者只输入文件名或者目录名&#xff0c;pytest会自己扫描测试用例。那pytest基于什么规则找到用例呢&#xff1f; 文件名&#xff1a;满足文件名称为tes…...

零基础学习人工智能

零基础学习人工智能是一个既充满挑战又极具潜力的过程。以下是一份详细的学习指南&#xff0c;旨在帮助零基础的学习者有效地踏入人工智能领域。 一、理解基本概念 在学习人工智能之前&#xff0c;首先要对其基本概念有一个清晰的认识。人工智能&#xff08;AI&#xff09;是…...

LeetCode热题100- 缺失的第一个正数【JavaScript讲解】

题目&#xff1a; 解题一&#xff1a; 如果不考虑时间复杂度和空间复杂度的话&#xff0c;我们最先想到的办法是先将该数组进行排序和去重&#xff0c;将最初的res结果值设置为1&#xff1b;将然后进行遍历&#xff0c;如果第一项不为1&#xff0c;则返回1&#xff0c;否则根…...

JAVA泛型介绍与举例

Java中&#xff0c;泛型用于编译阶段限制集合中元素的类型&#xff0c;或者限制类中某个属性的类型&#xff0c;编译过程中发生类型擦除&#xff0c;最终还是Object类型。 1. 集合中的泛型 集合默认可以存储任何类型的元素&#xff0c;即Object类型&#xff0c;当使用一个集合…...

【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析③】

ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase03 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月15日 关键词&#xff1a;UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-003测试用例 用例ID测试场景验证要点参考条款预期…...

Vivado生成edif网表及其使用

介绍如何在Vivado中将模块设为顶层&#xff0c;并生成相应的网表文件&#xff08;Verilog文件和edif文件&#xff09;&#xff0c;该过程适用于需要将一个模块作为顶层设计进行综合&#xff0c;并生成用于其他工程中的网表文件的情况。 例如要将fpga_top模块制作成网表给其它工…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...