【翻译】Universal Style Transfer via Feature Transforms

在这里插入图片描述
通过特征转换实现通用风格迁移

Abstract

通用风格转移的目的是将任意的视觉风格转移到内容图像上。现有的基于前馈的方法,虽然享有推理的效率,但主要受限于无法推广到未见过的风格或视觉质量受到影响。在本文中,我们提出了一种简单而有效的方法来解决这些限制,而不需要对任何预先定义的风格进行训练。我们的方法的关键成分是一对特征变换白化和着色,它们被嵌入到一个图像重建网络中白化和着色变换反映了内容图像的特征协方差与给定风格图像的直接匹配,这与神经风格转换中基于格拉姆矩阵的成本优化有类似的精神。我们通过生成高质量的风格化图像来证明我们算法的有效性,并与最近的一些方法进行比较。我们还分析了我们的方法,通过简单的特征着色使白化的特征和合成的纹理可视化。

1 Introduction

风格转换是一项重要的图像编辑任务,它能够创造出新的艺术作品。给定一对例子,即内容和风格图像,它的目的是合成一个保留了内容的某些概念但带有风格特征的图像。关键的挑战是如何提取风格的有效代表,然后在内容图像中与之匹配。Gatys等人的开创性工作[8,9]表明,由经过训练的深度神经网络提取的特征之间的相关性,即格拉姆矩阵或协方差矩阵(在[20]中被证明与格拉姆矩阵一样有效),具有捕捉视觉风格的显著能力。此后,通过迭代优化[9]或训练好的前馈网络[27, 16, 20, 2, 6],使基于格拉姆/协方差矩阵的损失函数最小化,为合成风格化图像做出了巨大努力。尽管最近进展迅速,但这些现有的工作往往在通用性、质量和效率之间进行权衡,这意味着基于优化的方法可以处理任意的风格,具有令人愉悦的视觉质量,但以高计算成本为代价,而前馈方法可以有效执行,但仅限于固定数量的风格或损害视觉质量。

到目前为止,普遍的风格转移问题仍然是一项艰巨的任务,因为开发同时实现泛化、质量和效率的神经网络具有挑战性。主要问题是如何正确有效地将提取的风格特征(特征关联)以风格无关的方式应用于内容图像

在这项工作中,我们提出了一种简单而有效的通用风格转换方法,该方法在视觉质量和执行效率稍有影响的情况下享有风格无关的泛化能力。转移任务被表述为图像重建过程在前馈过程中,内容特征在中间层被转化为风格特征的统计数据在每个中间层,我们的主要目标是对提取的内容特征进行转换,使其表现出与同一层的风格特征相同的统计特征我们发现对这些特征进行经典的信号白化和着色变换(WCTs)能够以几乎毫不费力的方式实现这一目标

在这项工作中,我们首先采用VGG-19网络[26]作为特征提取器(编码器),并训练一个对称的解码器,将VGG-19的特征反转为原始图像,这基本上是图像重建任务(图1(a))。一旦训练完成,编码器和解码器在所有实验中都是固定的。为了进行风格转换,我们对一层内容特征应用WCT,使其协方差矩阵与风格特征相匹配,如图1(b)所示。转换后的特征再被送入下游解码层以获得风格化图像。除了这个单级风格化,我们还进一步开发了一个多级风格化管道,如图1(c)所示,我们将WCT依次应用于多个特征层。多级算法生成的风格化图像具有更高的视觉质量,在计算成本更低的情况下,可以与之媲美甚至更好。我们还引入了一个控制参数,定义了风格转移的程度,这样用户就可以选择风格化和内容保存之间的平衡。我们算法的整个过程只需要学习图像重建解码器,不涉及风格图像。因此,当给定一个新的风格时,我们只需要提取其特征协方差矩阵,并通过WCT将其应用于内容特征。请注意,这种无需学习的方案从根本上不同于现有的前馈网络,后者需要用预先定义的风格进行学习,并对新风格进行微调。因此,我们的方法能够普遍地实现风格转移。

在这里插入图片描述
图1:通用风格传输管道。(a) 我们首先通过图像重建对五个解码器网络DecoderX (X=1,2,…,5)进行预训练,以转换不同级别的VGG特征。(b) 在VGG和DecoderX都固定的情况下,给定内容图像C和风格图像S,我们的方法通过白化和着色变换进行风格转换。© 我们将单级风格化扩展到多级风格化,以匹配各级风格的统计数据。通过匹配风格的高层次统计数据得到的结果被视为新的内容,以继续匹配风格的低层次信息。

这项工作的主要贡献总结如下:

  • 我们提出使用特征变换,即白化和着色(whitening and coloring),来直接将内容特征统计与深层特征空间中的风格图像的特征统计相匹配
  • 我们将特征变换与预先训练好的通用编码器-解码器网络结合起来,这样,转移过程就可以通过简单的前馈操作来实现。
  • 我们用高质量的视觉结果证明了我们的方法在通用风格转换中的有效性,同时也展示了它在通用纹理合成中的应用。

2 Related Work

现有的风格转移方法大多是基于例子的[13, 25, 24, 7, 21]。图像类比法[13]旨在确定一对图像之间的关系,然后将其应用于其他图像的风格化。由于它是基于寻找密集的对应关系,基于类比的方法[25, 24, 7, 21]往往要求一对图像描述的是同一类型的场景。因此,这些方法不能很好地扩展到任意风格图像的设置。

最近,Gatys等人[8, 9]提出了一种任意风格化的算法,该算法基于在迭代优化框架内匹配由训练过的网络分类器提取的深层特征之间的相关性(Gram矩阵)。此后,人们开发了许多方法来解决不同方面的问题,包括速度[27, 19, 16]、质量[28, 18, 32, 31]、用户控制[10]、多样性[29, 20]、语义理解[7, 1]和逼真性[23]。值得一提的是,[8, 9]的主要缺点之一是优化过程导致的低效率。在[27, 19, 16]中,效率的提高是通过将风格化表述为学习一个前馈图像变换网络来实现的。然而,由于网络设计缺乏通用性,这些方法受到每个样式训练一个网络的要求的限制。

最近,人们提出了一些方法来授权一个网络来转移多种风格,包括一个以二元选择单元为条件的模型[20],一个为每个新风格学习一组新过滤器的网络[2],以及一个为每种风格学习归一化参数的新型条件归一化层[6]。为了实现任意的风格转移,Chen等人[3]首先提出将内容特征与最接近的风格特征进行局部交换。同时,受[6]的启发,以下两项工作[30,11]转向学习从风格图像到风格参数的一般映射。一个最接近的相关工作[15]直接调整内容特征以匹配风格特征的平均值和方差。然而,学习到的模型对未见过的风格的概括能力仍然是有限的。

与现有的方法不同,我们的方法以前馈的方式有效地进行风格转移,同时在任意的风格上实现泛化和视觉质量。我们的方法与[15]密切相关,在该方法中,特定(较高)层的内容特征被风格特征的平均值和方差适应性地实例化。这个步骤可以被看作是对WCT操作的次优近似,从而导致在训练和未见过的风格上的结果都不太有效。此外,我们的编码器-解码器网络仅基于图像重建进行训练,而[15]需要学习这样一个模块,特别是用于风格化任务。我们对所提出的算法与现有的方法在风格转移和纹理合成任务上进行了广泛的评估,并提出了深入的分析。

3 建议的算法

我们将风格转移表述为一个与特征转换相结合的图像重建过程,即白化和着色重建部分负责将特征反转到RGB空间,而特征转换则是将内容图像的统计数据与风格图像相匹配

3.1 重构解码器

我们构建了一个用于一般图像重建的自动编码器网络。我们采用VGG-19[26]作为编码器,固定它并训练一个简单的解码器网络,用于将VGG特征反转到原始图像,如图1(a)所示。解码器被设计为与VGG-19网络对称(直到Relu_X_1层),最近的邻居上采样层用于放大特征图。为了评估在不同层提取的特征,我们在VGG-19的五个层,即Relu_X_1(X=1,2,3,4,5)选择特征图,并相应训练五个解码器。采用像素重建损失(即生成图片与输入图片的均方误差)[5]和特征损失(即生成图与输入图在VGG-19的特征空间中的特征的均方误差)[16, 5]来重建输入图像
在这里插入图片描述
其中Ii, Io是输入图像和重建输出,Φ是提取Relu_X_1特征的VGG编码器。此外,λ是平衡两种损失的权重。训练结束后,解码器是固定的(即不会被微调),并作为一个特征反转器使用。

3.2 白化和着色变换(WCT)

给定一对内容图像Ic和风格图像Is,我们首先在某一层(如Relu_4_1)提取它们的矢量VGG特征图fc∈<C×HcWc和fs∈<C×HsWs,其中Hc、Wc(Hs、Ws)是内容(风格)特征的高度和宽度,C是通道的数量。如果fc直接被送入解码器,解码器将重建原始图像Ic。我们接下来建议使用白化和着色变换来调整fc与fs的统计数据。WCT的目标是直接转换fc以匹配fs的协方差矩阵。它由两个步骤组成,即白化和着色变换。

白化变换。在白化之前,我们首先通过减去fc的平均矢量mc来居中。然后,我们对fc进行线性变换,如(2)所示,这样我们就得到了ˆfc,使特征图不相关(ˆfc ˆfc > = I),
在这里插入图片描述
其中Dc是一个对角矩阵,其特征值为协方差矩阵fc f>c∈<C×C,Ec是相应的特征向量的正交矩阵,满足fc f>c = EcDcE>c。(先计算出内容图c的协方差矩阵的对角矩阵D协方差矩阵的正交矩阵E,然后计算内容提取结果)

为了验证白化特征ˆfc所编码的内容,我们用之前为重建训练的解码器将其反转到RGB空间。图2显示了两个可视化的例子,这表明白化的特征仍然保持着图像内容的全局结构,但大大有助于去除与风格有关的其他信息。我们特别注意到,对于右边的Starry_night例子,整个原始图像的详细笔画模式已经消失。换句话说,白化步骤有助于从输入图像中剥离出风格,同时保留全局内容结构。这一操作的结果已经准备好与目标样式进行转换。

在这里插入图片描述
图2:反转白化的特征。我们以白化的VGG Relu_4_1特征为例进行反转。左图:原始图像,右图:反转后的结果(为了更好的视觉效果,像素强度被重新缩放)。白化后的特征仍然保持全局内容结构。

着色变换。我们首先通过减去fs的平均矢量ms使其居中,然后进行着色变换[14],这实质上是反白化步骤,对ˆfc进行线性变换,如(3),这样我们得到的ˆfcs在其特征图之间具有理想的相关性(ˆfcs ˆfcs > = fs f>s ),
在这里插入图片描述
其中Ds是一个对角矩阵,其特征值为协方差矩阵fs f>s∈<C×C ,Es是相应的特征向量的正交矩阵。最后,我们用风格的平均向量ms来重新定位ˆfcs,即ˆfcs = ˆfcs + ms。(计算风格图特征fs的协方差矩阵的对角矩阵Ds协方差矩阵的正交矩阵Es,参与计算进行还原,这样相当于在恢复原图时把风格图的风格融合到其中)

为了证明WCT的有效性,我们在图3中把它与一种常用的特征调整技术,即直方图匹配(HM)进行比较。通道直方图匹配[12]方法确定了一个映射函数,使得映射的fc与fs具有相同的累积直方图。在图3中,很明显,HM方法能很好地帮助转移风格图像的全局颜色,但不能捕捉到突出的视觉模式,例如,模式被打成碎片,局部结构被错误地呈现。相比之下,我们的WCT能更好地捕捉到反映风格图像的模式。这可以解释为,HM方法没有考虑特征通道之间的相关性,而这正是协方差矩阵的设计目的

在这里插入图片描述
图3:不同特征转换策略之间的比较。结果由我们的多级风格化框架获得,以匹配风格的所有级别的信息。

在WCT之后,我们可以将ˆfcs与(4)中的内容特征fc混合,然后再将其送入解码器,以便为用户提供对风格化效应强度的控制:
在这里插入图片描述
其中α作为用户的风格权重,用于控制转移效应。

3.3 多层次的从粗到细的风格化(Multi-level coarse-to-fine stylization)

基于图1(b)所示的单层风格化框架,我们使用不同层的VGG特征Relu_X_1(X=1,2,…,5),并在图4中显示了相应的风格化结果。它清楚地表明,较高层次的特征捕捉了更复杂的局部结构,而较低层次的特征则携带了更多的低层次信息(例如,颜色)。这可以用网络层次中感受野的大小和特征复杂性的增加来解释。因此,使用所有五层的特征来充分捕捉一种风格从低到高的特征是很有利的。

在这里插入图片描述
图4:使用不同的VGG特征的单级风格化。内容图像来自图2

图1(c)显示了我们的多层次风格化管道。我们首先在Relu_5_1的特征上应用WCT,得到一个粗略的风格化结果,并将其视为新的内容图像,进一步调整较低层的特征。图5中显示了一个中间结果的例子。我们显示的中间结果I5、I4、I1有明显的差异,这说明上层特征首先捕捉到风格的突出模式,下层特征进一步完善细节。如果我们从Relu_1_1开始,颠倒特征处理顺序(即从细层到粗层),在操作高层特征后,低层信息无法保留,如图5(d)所示。

在这里插入图片描述
图5:(a)-(c )图1(c )中我们从粗到细的多层次风格化框架的中间结果。风格和内容图像来自图4。I1是我们多级管道的最终输出。(d) 反转的细到粗的多级管道。

4 实验结果

4.1 解码器训练

对于多级风格化方法,我们在VGG-19 Relu_X_1(X=1,2,…,5)层分别训练五个重建解码器的特征。它是在MS-COCO数据集[22]上训练的,用于平衡(1)中两种损失的权重λ被设定为1。

4.2 风格迁移

为了证明所提出的算法的有效性,我们在表1中列出了与现有方法的差异,并在图6中展示了风格化的结果。我们调整其他方法的风格权重,以获得最佳风格化效果。基于优化的工作[9]可以处理任意的风格,但很可能会遇到意想不到的局部最小值问题(例如,图6(e)的第5和第6行)。尽管方法[27]极大地提高了风格化速度,但它以质量和通用性为代价换取效率,产生了与图像内容重叠的重复图案(图6(d))。

在这里插入图片描述
图6:不同风格转移方法的结果。内容图片来自图2-3。我们评估了各种风格,包括绘画、抽象风格和带有明显文字元素的风格。我们调整每种方法的风格权重以获得最佳的风格化效果。对于我们的结果,我们设定风格权重α=0.6。

在这里插入图片描述
表1: 我们的方法与其他方法之间的差异

与我们的泛化工作最接近的是最近的方法[3,15],但风格化结果的质量不太吸引人。3]的工作用基于补丁相似性的最相似的风格特征取代了内容特征,因此能力有限,即严格保留了内容,而风格却没有得到很好的反映,只转移了低层次的信息(如颜色),如图6(b)所示。在[15]中,内容特征被简单地调整为与风格特征具有相同的平均值和方差,这在捕捉风格的高层次表征方面并不有效。即使用一组训练风格学习,它也不能很好地概括未见过的风格。图6©中的结果表明,[15]中的方法不能有效地捕捉和合成突出的风格模式,特别是对于存在丰富的局部结构和非平滑区域的复杂风格。

图6(f)显示了我们方法的风格化结果。在不学习任何风格的情况下,我们的方法能够捕捉到风格图像中视觉上突出的模式(例如,第6行的砖墙)。此外,在我们的结果中,内容图像中的关键组件(如桥梁、眼睛、嘴巴)也被很好地风格化了,而其他方法只将模式转移到相对平滑的区域(如天空、脸)。这些模型和代码可在https://github.com/Yijunmaverick/UniversalStyleTransfer。

此外,我们通过计算风格化结果和给定的风格图像之间所有五级VGG特征的协方差矩阵差异(Ls)来定量评估不同的方法。我们从[22]中随机选择10张内容图像,从[17]中随机选择40张风格图像,计算所有风格的平均差异,并在表2(第一行)中显示结果。定量结果显示,我们生成的风格化结果的L值较低,即更接近于风格的统计数据。

用户研究。评价艺术风格的转移一直是社区中的一个公开问题。由于定性评估是非常主观的,我们进行了一项用户研究,以评估图6所示的5种方法。我们使用5张内容图片和30张风格图片,并根据每个方法的每个内容/风格对产生150个结果。我们为每个研究对象随机选择15张风格图像进行评估。我们在网页上以随机顺序并排显示5种比较方法的风格化图像。每个受试者都被要求对他/她最喜欢的每一种风格的结果进行投票。我们最终收集了80位受试者的反馈,共1200张投票,并在表2(第二行)中显示了每种方法所获得的投票比例。研究表明,我们的方法在更好的风格化结果方面得到了最多的投票。对于一般的图像合成问题,开发基于人类视觉感知的评价指标可能是一个有趣的方向。

效率。在表2(第三行)中,我们还将我们的方法与其他方法的效率进行了比较。Gatys等人[9]的方法由于循环优化而很慢,通常需要至少500次迭代才能产生好的结果。方法[27]和[15]是高效的,因为该方案是基于一个经过训练的网络的前馈传递。方法[3]是基于前馈的,但相对较慢,因为特征交换操作需要对成千上万的斑块进行。我们的方法也很有效,但比[27, 15]慢一点,因为我们在WCT中有一个特征值分解步骤。但要注意的是,这一步的计算成本不会随着图像的大小而增加,因为协方差矩阵的维度只取决于滤波器的数量(或通道),最多只有512(Relu_5_1)。目前,分解步骤是基于CPU实现的。我们未来的工作包括对所提算法进行更有效的GPU实现。

在这里插入图片描述
表2: 不同风格化方法在协方差矩阵差异(Ls)、用户偏好和运行时间方面的定量比较,在256×256尺寸的图像和12GB TITAN X上进行测试。

用户控制。给定一个内容/风格对,我们的方法不仅像一键转移一样简单,而且足够灵活,通过对风格化提供不同的控制,包括比例、重量和空间控制,来满足用户的不同要求。由于网络的接受域是固定的,不同比例的样式输入将导致不同的提取统计。因此,规模控制很容易通过调整风格图像的大小来实现。在图7的中间,我们展示了两个例子,砖块可以在小规模或大规模中转移。权重控制指的是控制风格化和内容保存之间的平衡。如图7右侧所示,我们的方法通过简单调整(4)中的风格权重α,在简单的前馈传递中享有这种灵活性。然而在[9]和[27]中,为了获得不同权重设置的视觉效果,需要进行新一轮耗时的优化或模型训练。此外,我们的混合在反转/重构前直接作用于深层特征空间,这与[9, 27]有本质的不同,后者的混合被表述为内容和风格损失的加权和,可能并不总是导致一个好的平衡点。

在这里插入图片描述
图7:控制规模和重量上的风格化。

当用户想用不同的风格转移到图像的不同部分来编辑图像时,空间控制也是非常需要的。图8显示了一个空间控制风格化的例子。另外还需要一组掩码M(图8(b))作为输入,以表明内容区域和样式之间的空间对应关系。通过用M fc替换(3)中的内容特征fc,其中M fc是一个简单的掩码输出操作,我们能够只对指定的区域进行风格化

在这里插入图片描述
图8:转移中的空间控制,使用户可以用不同的风格编辑内容

4.3 纹理合成

通过将内容图像设置为随机噪声图像(例如,高斯噪声),我们的风格化框架可以很容易地应用于纹理合成。另一种方法是直接将(3)中的ˆfc初始化为白噪声。这两种方法都能取得类似的结果。图9显示了几个合成纹理的例子。我们根据经验发现,多级流水线运行几次(例如3次),可以得到更多视觉上的效果。

在这里插入图片描述
图9:纹理的合成。在每个面板中,左边:原始纹理,右边:我们的合成结果。纹理图像主要来自可描述纹理数据集(DTD)[4]

我们的方法还能够合成两种纹理的插值结果。给定两个纹理实例s1和s2,我们首先对输入的噪声进行WCT,分别得到变换后的特征ˆfcs1和ˆfcs2。然后我们混合这两个特征 ˆfcs = β ˆfcs1 + (1 -β) ˆfcs2 并将合并的特征送入解码器以产生混合效应。请注意,我们的插值直接作用于深度特征空间。相比之下,[9]中的方法是通过在损失端匹配两种纹理的Gram矩阵的加权和来产生插值。图10显示,[9]的结果只是由两种纹理叠加而成,而我们的方法产生了新的纹理效果,如条纹形状的砖块。

在这里插入图片描述
图10:两个纹理实例之间的插值。左边:原始纹理,中间:我们的插值结果,右边:[9]的插值结果。β控制插值的权重。

纹理合成的一个重要方面是多样性。通过对不同的噪声图像进行采样,我们的方法可以为每种纹理产生不同的合成结果。虽然[27]可以在输入噪声的驱动下产生不同的结果,但学到的网络很可能被困在局部优化中。换句话说,噪声被边缘化了,因此无法驱动网络产生大的视觉变化。相比之下,我们的方法能更好地解释每个输入噪声,因为网络不太可能吸收输入噪声的变化,因为它从未接受过学习纹理的训练。我们在图11中比较了我们的模型和[27]的多样化输出。请注意,[27]的不同结果中都有共同的对角线布局,这导致了不满意的视觉体验。比较表明,我们的方法以一种更自然和灵活的方式实现了多样性。

在这里插入图片描述
图11:TNet[27]和我们的模型之间的不同合成结果的比较

5 结语

在这项工作中,我们提出了一种通用的风格转换算法,不需要对每个单独的风格进行学习。通过训练一个用于图像重建的自动编码器来展开图像生成过程,我们在前馈通道中整合了白化和着色变换,以匹配内容和风格的中间特征之间的统计分布和关联性。我们还提出了一个多级风格化管道,它将风格的所有级别的信息都考虑在内,以提高结果。此外,建议的方法被证明对纹理合成同样有效。实验结果表明,与最先进的方法相比,所提出的算法在推广到任意风格方面取得了良好的性能。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在神经网络的训练过程中,通常需要进行以下五个步骤:准备数据、定义模型、定义损失函数、定义优化器、开始训练。下面是一份使用PyTorch实现style transfer的代码,其中与这五个步骤相对应的代码部分已经用注释标出。 ```python import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision.models as models from PIL import Image # 准备数据 transform = transforms.Compose([ transforms.Resize(512), # 调整图像大小 transforms.ToTensor(), # 将图像转换为Tensor transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # 标准化图像 ]) # 定义模型 class VGG(nn.Module): def __init__(self): super(VGG, self).__init__() self.features = models.vgg19(pretrained=True).features[:35] # 选择VGG19模型的前35层作为特征提取器 def forward(self, x): return self.features(x) # 定义损失函数 class StyleLoss(nn.Module): def __init__(self, target_feature): super(StyleLoss, self).__init__() self.target = self.gram_matrix(target_feature).detach() def forward(self, input): G = self.gram_matrix(input) self.loss = nn.functional.mse_loss(G, self.target) return input def gram_matrix(self, input): a, b, c, d = input.size() features = input.view(a * b, c * d) G = torch.mm(features, features.t()) return G.div(a * b * c * d) # 定义优化器 def get_input_optimizer(input_img): optimizer = torch.optim.Adam([input_img.requires_grad_()]) return optimizer # 开始训练 def run_style_transfer(content_img, style_img, num_steps=300, style_weight=1000000, content_weight=1): device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 转换图像并将其放到设备上 content = transform(Image.open(content_img)).unsqueeze(0).to(device) style = transform(Image.open(style_img)).unsqueeze(0).to(device) input_img = content.clone().to(device).requires_grad_() # 定义模型和损失函数 model = VGG().to(device).eval() content_loss = nn.functional.mse_loss style_loss = StyleLoss(model(style).to(device)) # 定义优化器 optimizer = get_input_optimizer(input_img) # 迭代训练 for i in range(num_steps): input_img.data.clamp_(0, 1) optimizer.zero_grad() content_feature = model(content).detach() style_feature = model(input_img) content_loss = content_weight * content_loss(style_feature, content_feature) style_loss = 0 for ft, w in zip(style_feature, style_weight): style_loss += w * style_loss(ft, style_loss) loss = content_loss + style_loss loss.backward() optimizer.step() return input_img ``` 其中, - 准备数据:使用transforms定义了一组图像预处理方法,包括调整图像大小、将图像转换为Tensor、标准化图像。 - 定义模型:定义了一个VGG类,选择VGG19模型的前35层作为特征提取器。 - 定义损失函数:定义了一个StyleLoss类,用于计算风格损失。 - 定义优化器:定义了一个get_input_optimizer函数,用于获取一个Adam优化器。 - 开始训练:使用run_style_transfer函数开始训练,其中包括将图像转换到设备上、定义模型和损失函数、定义优化器、迭代训练过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玳宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值