可微分矢量图形光栅化用于编辑和学习

image.png
图1. 我们引入了一种通过反向传播将光栅和矢量域联系起来的矢量图形可微分光栅化器。可微分光栅化实现了许多新颖的矢量图形应用。(a)在几何约束下,通过局部优化图像空间度量(如不透明度)来实现交互式编辑。(b)通过拟合随机贝塞尔曲线到目标图像来实现一种新的绘画渲染技术。(c)改进了最先进的图像矢量化结果。(d)使用可能非可微的光栅图像处理算子(如图像重定目标中的缝合雕刻[Avidan和Shamir 2007])来编辑矢量图形。(e)训练一个变分自编码器[Kingma和Welling 2014]来生成矢量MNIST数字[LeCun等人1998],并在后处理中添加风格化描边。图片由维基百科用户Daderot和Eric Guinther以及freesvg.org用户OpenClipart提供。
我们引入了一种可微分光栅化器,它将矢量图形和光栅图像域联系起来,使强大的基于光栅的损失函数、优化过程和机器学习技术能够编辑和生成矢量内容。我们观察到,在像素预滤波后,矢量图形光栅化是可微分的。我们的可微分光栅化器提供了两种预滤波选项:一种分析预滤波技术和一种多重采样抗锯齿技术。分析变体速度更快,但可能会出现混淆等人工制品。多重采样变体仍然高效,可以渲染高质量的图像,同时为每个像素相对于曲线参数计算无偏梯度。
我们展示了我们的光栅化器实现了新的应用程序,包括由图像度量指导的矢量图形编辑器、通过最小化深度感知损失函数拟合矢量基元到图像的绘画渲染算法、利用缝合雕刻等著名图像处理方法的新型矢量图形编辑算法,以及在VAE或GAN训练目标下的仅光栅监督下生成矢量内容的深度生成模型。

1.引言

矢量图形使用数学基元(如2D点和曲线)以与分辨率无关的方式紧凑地定义图像。它们在打印、动画、网页设计和用户界面中无处不在。然而,当前编辑或创建矢量图形的方法可以说落后于为光栅图像设计的那些方法。例如,自动生成矢量图形通常需要专门的算法来跟踪图像边缘和拟合曲线[Hertzmann 1998;Selinger 2003],而矢量编辑通常需要专门为特定几何基元定制的求解器[Sun等人2007;Yang等人2015;Zhao等人2018]。
相比之下,图像处理和机器学习已经创建了强大的通用工具,如卷积神经网络来操作光栅图像。这些方法可以提取和转换图像风格[Gatys等人2016]、学习将图像从一个域映射到另一个域[Isola等人2017],或者通过从大型图像集合中学习来合成新的图像[Goodfellow等人2014;Kingma和Welling 2014]。
有人可能会考虑一个工作流程,其中矢量图形首先被光栅化[Batra等人2015;Ganacim等人2014;Kilgard和Bolz 2012],然后由光栅域算法进行后处理。不幸的是,这是一个单向过程,丢弃了矢量图形中隐含的结构,回到矢量域的唯一方法是重新跟踪光栅结果,这会产生一个结构完全不同的图形。这意味着无法真正以这种方式将基于光栅的算法应用于矢量图形。
我们寻求创建一个可微分的光栅化器,以桥接光栅和矢量域,以便基于光栅的算法和损失函数可以用于修改或合成矢量内容。光栅化不可微分的常见先入之见导致了可微分光栅化的神经网络近似的发展[Huang等人2019;Nakano 2019;Zheng等人2019]。不幸的是,这些方法通常仅限于几种基元,训练成本高,超出训练数据集的泛化能力较差。
基于最近的可微分3D渲染工作[Li等人2018],我们表明这样的近似是没有必要的;当适当考虑像素预滤波(抗锯齿)时,光栅化图像相对于曲线和其他矢量参数是可微分的。基于这一观察,我们构建了一个可微分的光栅化器,它能够生成一般矢量内容的正确、高质量的光栅化(正向传播),并能够自动计算相对于输入矢量参数的梯度(反向传播)。
抗锯齿这个关键问题需要特殊处理,因为自动微分抗锯齿算法不会产生正确的或高效的梯度代码。我们开发了两种不同的抗锯齿实现,每种都能够进行可微分光栅化。第一种方法使用蒙特卡洛采样(例如[Ganacim等人2014;Kilgard和Bolz 2012])来计算高质量的参考解,该解收敛到正确的光栅图像。它具有合理的性能,但需要非一致性内存访问,并且是随机的。第二种公式稍快且确定性,但有时可能不太准确或出现混淆等人工制品[Kilgard和Bolz 2012]。它使用基于最近曲线的符号距离的近似分析预滤波(例如[Nehab和Hoppe 2008])。
在蒙特卡洛变体中,我们将像素的颜色表示为对象区域上的积分之和,并应用雷诺兹输运定理[Reynolds等人1903]——莱布尼兹积分规则的高维推广——通过采样边界来微分对象边界参数。我们适当考虑了由点采样引入的不连续性,例如在渲染阶梯边缘时,这是自动微分技术无法处理的。虽然以前的可微分蒙特卡洛渲染方法(例如[Li等人2018])专注于三角形网格,但我们的方法适用于任意曲线和笔画,包括贝塞尔曲线和椭圆。
在分析预滤波变体中,我们可以使用自动微分来计算梯度。然而,对于三次贝塞尔曲线,我们必须特别小心,因为点和三次曲线之间的距离没有封闭形式的解,我们需要微分一个迭代多项式根求解器。我们使用隐函数定理对迭代求解器的微分进行高效处理。
两种抗锯齿策略都是并行。我们提供了我们的CUDA实现,以及一个PyTorch接口,使我们的可微分光栅化器能够在更大的可微分程序中使用。
可微分光栅化使跨矢量和光栅域的基于梯度的优化成为可能。有了这个,我们将广泛的新颖矢量图形问题转化为统一的优化框架:通过直接更新矢量图形参数或优化生成矢量图形的神经网络来最小化光栅输出的渲染损失(图1)。我们开发了一个新的交互式矢量图形编辑系统,可以同时优化几何和光栅度量,通过微调结果更好地匹配目标图像来改进现有的图像矢量化方法,将光栅图像处理滤波器(如缝合雕刻[Avidan和Shamir 2007])应用于矢量图形,并训练仅使用光栅图像监督的矢量图形生成模型——包括变分自编码器和生成对抗网络。
我们的工作重点是使光栅化过程相对于矢量形状的连续参数(顶点位置、颜色、笔画宽度等)可微分。对矢量图形拓扑的离散更改很重要,但超出了本文的范围。
总结起来,我们做出了以下贡献:
• 我们确定了矢量图形(包括多项式和有理多项式曲线、透明度、遮挡、常数和梯度填充以及笔画)的通用可微分光栅化算法的关键标准。
• 我们展示了传统的光栅化算法在此新设置中不直接可微分。我们提出了一种使用多重采样的可微分抗锯齿算法。我们通过显式地对形状边界进行采样,并使用雷诺兹输运定理推导曲线的梯度,解决了不连续性。
• 我们通过分析预滤波展示了一种替代的近似确定性解决方案,该方案稍快但以出现混淆等人工制品为代价。
• 我们将广泛的矢量图形编辑和学习任务统一并公式化为基于梯度的优化问题,其中通过其光栅化的损失使矢量图形与目标图像匹配(图1)。我们展示了光栅化器可以在复杂和实际的优化和学习任务中使用,包括矢量图形编辑、图像矢量化和学习合成矢量图形。 我们开放源代码。

2.相关工作

2.1 矢量图形的创建和编辑

我们简要回顾了以前创建和编辑矢量图形的工作。由于缺乏通用的可微分光栅化器,以前的技术往往要么关注矢量图形的几何形状,要么将光栅图像转换为方便的几何表示。存在一些将矢量图形拟合到光栅图像的专用方法,但它们不处理一般的矢量图形,其中包括遮挡和透明度。
图像矢量化方法。大多数从光栅图像生成矢量图形的方法首先将图像分割为区域,并将贝塞尔曲线[Lecot和Levy 2006;Selinger 2003;Xia等人2009]、扩散曲线[Orzan等人2008;Xie等人2014]和梯度网格[Sun等人2007]拟合到区域边界。这些技术提供了图像矢量化的良好初始猜测。我们将展示,使用我们的可微分光栅化器(第6.3节),通过优化生成的矢量图形的连续参数来最小化光栅空间渲染损失,可以改进结果。
基于微分光栅化的方法存在用于扩散曲线[Zhao等人2018]、梯度网格[Sun等人2007]和封闭贝塞尔曲线[Yang等人2015]。与这些方法相比,我们显著扩展了可以通过光栅化器微分的矢量图形的范围,包括遮挡、透明度、有理多项式和笔画。
矢量图形编辑。对矢量图形用户界面的研究可以追溯到Sketch Pad[Sutherland 1964],它允许用户在编辑矢量图形时施加几何约束。Briar[Gleicher 1992]和Lillicon[Bernstein和Li 2015]探索了类似的想法,但扩展了编辑器以解决不同的约束和编辑。我们的交互式编辑器(第6.2节)建立在此工作之上,并允许用户在几何形状之外对渲染施加约束,增加了编辑器的表达能力。
使用神经网络生成矢量图形。已经提出了深度学习模型用于矢量图形。Ha和Eck[2018]和Lopes等人[2019]使用草图数据库训练生成循环模型。Azadi等人[2018]和Yue等人[2019]根据一些示例样式生成新字体。
深度学习也被用于解决图像矢量化问题。Ellis等人[2018]结合了程序合成和循环神经网络,以推断出一个生成目标草图图像的图形程序。Ganin等人[2018]相反,在使用绘图模拟器的自然图像上训练了一个无模型的强化学习代理,结合了对抗损失。
神经网络的光栅化近似。一些最近的工作使用神经网络来平滑地近似光栅化操作[Huang等人2019;Nakano 2019;Zheng等人2019]。这些神经近似通常假设特定的矢量图形配置(例如,单个恒定颜色二次笔画)和固定的分辨率。由于认为光栅化是非可微分的,因此需要这些技术。我们将展示,通过仔细推导,它可以是可微分的,并且不再需要近似。
可微分光栅化使我们能够使用一般渲染损失,并将图像梯度传播到此类模型的矢量表示,与以前工作中使用的特定于任务的位置基损失或无模型的强化学习方法相比。例如,这使我们能够直接在光栅图像上训练生成矢量图形的变分自编码器和生成对抗网络(第6.3节)。
image.png
图2.使用卷积的像素预滤波使不连续函数平滑。我们使用1D中的盒子函数来说明这一点。为了使用抗锯齿光栅化这个不连续的盒子函数,我们将盒子与位于像素中心的核进行卷积。移动盒子会导致滤波核下的区域发生连续变化,从而导致抗锯齿信号发生连续变化。

2.2 矢量图形光栅化

以前的工作研究了光栅化封闭曲线和笔画的高效算法和数据结构。其中大部分工作集中在抗锯齿(例如[Duff 1989;Fabris和Forrest 1997;Manson和Schaefer 2013])。最近的工作探索了矢量图形光栅化的高效并行化图形硬件(例如[Batra等人2015;Kilgard和Bolz 2012;Kokojima等人2006;Li等人2016;Loop和Blinn 2005])。
Nehab和Hoppe[2008]和Ganacim等人[2014]提出了数据结构,可以高效地计算给定图像上任意点处的阴影颜色。我们的边界采样过程(第5节)需要相同的随机访问模式,因此可以从这些数据结构中受益。

2.3 可微分渲染

最近,可微分3D渲染在计算机图形学和视觉研究中引起了关注(例如[de La Gorce等人2011;Kato等人2018;Liu等人2018,2019;Loper和Black 2014])。我们的梯度推导灵感来自于Li等人[2018]的工作,但它使用雷诺兹输运定理[Reynolds等人1903]扩展了它,以简化推导并推广到曲线和笔画。
雷诺兹的输运定理也被证明对Li的论文[2019]和Zhang等人[2019]最近的工作有用,该工作对体积渲染进行了微分。我们将推导重点放在2D矢量图形上,这大大简化了理论。

3.概述

我们希望通过微分矢量光栅化过程并启用基于梯度的优化来弥合矢量和光栅图形之间的差距。
使这成为可能的关键见解是,虽然矢量形状——用指示函数表示——不是直接可微分的,但应用抗锯齿可以平滑不连续性。这使得抗锯齿光栅化图像相对于矢量形状参数是可微分的(图2)。
在通过光栅化进行微分时需要特别小心,因为不同的抗锯齿策略需要不同的梯度实现。根据我们选择的抗锯齿技术,我们通过积分形状边界来考虑不连续性,或者通过分析地积分被积函数来评估形状参数的梯度,这需要做出简化假设。
image.png
我们的可微分光栅化器对于直接优化矢量图形和训练生成矢量图形的神经网络都是有用的。它支持多项式和有理曲线、描边、透明度、遮挡和渐变填充(图3)。
在下面,首先,我们介绍一个适用于可微分光栅化的矢量图形渲染模型。然后我们讨论如何对这个模型进行微分。最后,我们展示了我们的可微分光栅化器所启用的几个应用。

4.渲染模型和设计选择

我们的目标是拥有一个准确、高质量的解决方案,涵盖尽可能多的常见矢量图形表示,同时完全可微分。微分和优化为渲染模型带来了独特的挑战:
• 我们表明,预滤波或抗锯齿可以使光栅化可微分。然而,在对抗锯齿算法进行微分时需要小心。
• 我们应该避免基于将曲线转换为折线或将填充曲线转换为多边形或三角形网格的方法,因为这样的转换不是可微分的——曲线参数的微小变化可能导致生成的折线或网格的拓扑变化。
• 我们需要特别小心避免引入对渲染模型的近似,因为在迭代优化期间,所有中间形状都需要被准确地渲染。
我们首先描述我们支持的矢量图形基元。然后我们讨论如何光栅化矢量图形,并引入像素预滤波的数学模型,这对于微分至关重要。在第5节中,我们介绍并分析了两种解决像素预滤波问题的可微分光栅化算法。

4.1 矢量基元

我们的基元基于SVG(可缩放矢量图形)标准。我们支持SVG路径(具有线性、二次或三次段)、椭圆、圆和矩形,但任何具有参数形式的曲线都与我们的方法兼容。曲线可以是开放的或封闭的(图3)。
每条曲线都可以有填充颜色和/或描边颜色(填充颜色对开放曲线没有效果)。我们的实现假设描边使用圆帽,但添加新的帽样式是简单的。颜色可以是纯色、线性渐变或径向渐变,并包含RGB和alpha通道。

4.2 矢量图形光栅化

为了理解矢量图形的微分,我们首先简要回顾光栅化通常是如何实现的[Nehab和Hoppe 2008],以及可微分光栅化如何要求某些正向渲染模型。光栅图像是对矢量图形场景f(x,y;Θ)的空间进行2D网格采样,其中Θ包含曲线参数。我们首先定义场景函数f,然后我们将描述如何使用f为每个像素计算颜色。
给定一个2D位置(x,y)∈R²,我们首先找到所有与该位置重叠的填充曲线和描边。然后,我们根据用户指定的顺序对它们进行排序,并使用alpha混合[Porter和Duff 1984]计算颜色。
为了找到与2D位置重叠的曲线,对于每个填充曲线,我们通过在(x,y)右侧绘制一条射线并计算交点数来计算位置处的卷绕数。我们根据填充规则确定点是否在曲线内部:奇偶填充规则将所有具有奇数卷绕数的点定义为内部,非零填充规则包括所有具有非零卷绕数的点。对于每个描边,我们计算点和曲线上最接近的点之间的距离。如果它小于描边宽度的一半,则该点在曲线描边内部。
使用卷绕数计算与多项式曲线的交点,其中多项式的次数为N,归结为求解次数为N的多项式的根。另一方面,计算点和多项式曲线之间的最近距离需要求解次数为2N-1的多项式p(t)的根,因为它等价于求解arg mint(p(t)-q)²,其中q=(x,y)。
对于三次曲线描边,这是实践中常见的情况,我们需要求解一个5次多项式,它没有封闭形式的解。大多数光栅化器通过使用de Casteljau算法[Batra等人2015;Kilgard和Bolz 2012]通过分割曲线来近似三次曲线使用二次曲线,或者将描边边界转换为填充曲线[Ganacim等人2014;Kilgard 2020;Nehab 2020]来解决这个问题。一些方法通过将描边转换为隐式函数来近似距离[Loop和Blinn 2005;Nehab和Hoppe 2008]。
image.png
这些方法都不适合可微分光栅化。自适应曲线细分不是可微分的,因为三次曲线参数的微小变化可能导致细分过程生成更多或更少的二次段(图4)。
类似地,三次曲线描边的平行曲线是一个10次多项式[Farouki和Neff 1990],需要更多的细分。
image.png
距离近似也不是首选,因为它们只在曲线附近准确。在优化过程中,我们可能会生成具有大描边宽度的曲线,这会破坏这些近似(图5)。
相反,我们直接使用二分法和牛顿-拉夫逊方法[Press等人2007]来求解多项式。迭代求解器的初始猜测是通过隔离多项式[Sederberg和Chang 1994]获得的——一个5次多项式方程的实根可以通过一个线性方程和一个3次多项式的根来隔离。附录A详细介绍了实现。高效地微分迭代求解器并不是一件简单的事情。我们在第5.2节中讨论微分。
类似地,点和椭圆之间的距离也需要迭代求解根,其中Eberly[2011]详细讨论了一个鲁棒的解决方案。我们的实现目前不支持椭圆描边,但我们处理三次曲线描边的方式可以用于椭圆描边。

4.3 像素预滤波和抗锯齿

由于内部-外部测试,场景函数f相对于曲线参数不可微分。然而,我们将展示常见的抗锯齿技术可以使像素颜色可微分。
f由于不连续性而不具有频带限制,因此光栅化,即对f的2D采样,容易出现混叠。为了避免混叠,我们可以使用具有支撑A的卷积核k对场景f进行预滤波,使其具有频带限制:
I(x,y)=∫Ak(u,v)f(x-u,y-v;Θ)dudv。(1)
然后,我们可以在像素位置对I(x,y)进行采样,以计算无混叠图像。
对于可微分光栅化,我们感兴趣的是∂I/∂Θ。重要的是,滤波支撑上的积分意味着我们只关心像素的平均颜色,而不是中心的点评估。曲线的移动导致平均颜色的连续变化,使得I(x,y)可微分(图2)。
尽管像素积分是可微分的,但评估积分的导数需要额外的小心。在下一节中,我们提出了两种计算像素积分I及其导数∂I/∂Θ的策略。然后我们讨论两种方法的优点和缺点。

5.可微分光栅化

像素积分(方程1)通常没有封闭形式的解。受以前方法的启发,我们提出了两种解决像素积分的方法。第一种策略使用蒙特卡洛积分来计算积分。它生成高质量的参考解,并具有合理的性能。第二种策略通过假设场景函数f为简化的配置,使得积分具有分析解来近似积分。它的优点是确定性且稍快,但代价是近似解,这有时在光栅图像上表现为人工制品。

5.1 蒙特卡洛采样

为了评估像素积分及其导数,我们的第一个方法是使用蒙特卡洛采样对像素积分进行离散化:
I(x,y)=∫Ak(u,v)f(x-u,y-v;Θ)dudv≈1/NΣNik(ui,vi)f(x-ui,y-vi;Θ)。(2)
其中样本ui,vi可以是均匀网格上的点、独立样本、分层样本或蓝噪声样本[Banterle等人2012;Cook 1986;Dippé和Wold 1985]。
不幸的是,由于几何不连续性,f相对于大多数场景参数不可微分,因此我们不能交换积分和微分算子,将∂I/∂Θ表示为可以类似地离散化的积分。
为了解决这个问题,我们从3D可微分渲染技术[Li等人2018]中获得灵感,通过将微分算子从积分中移出并离散化重构的积分来重构积分。虽然以前的3D可微分渲染方法专注于三角形网格和3D辐射传输方程[Li等人2018;Zhang等人2019],但我们为2D矢量图形提出了一个更简单的推导,适用于具有曲线边界的情况。
我们的目标是为了参数Θ来计算I的梯度:
∂I(x,y)/∂Θ = ∂/∂Θ ∫A k(u,v)f(x-u,y-v;Θ)dudv
= ∂/∂Θ ∫A д(u,v)dudv。(3)
其中,我们使用д(u,v)来表示场景函数f和核k的乘积,以简化表示。不失一般性,我们假设核k是连续的。
image.png
我们将区域A划分为多个子区域Ai,使得д的所有不连续点都在积分边界上(图6a):
∂/∂Θ ∫ д(u,v)dudv = Σi ∂/∂Θ ∫Ai(Θ) д(u,v)dudv。(4)
这种划分仅用于数学推导,我们不会显式地裁剪曲线来划分空间。
为了简化问题,让我们考虑1D中单个积分的情况。当边界依赖于参数Θ时,我们可以重写积分:
∂/∂Θ ∫b(Θ) 0 д(u)du = ∫b(Θ) 0 ∂д(u)/∂Θ du + д(b(Θ)) ∂b(Θ)/∂Θ。(5)
这个方程通常被称为莱布尼兹积分法则。第一个积分负责颜色和透明度的微分,而第二个术语负责边界的变化。我们可以使用蒙特卡洛采样来估计导数积分,并添加第二个修正项来考虑边界变化。
同样的想法可以扩展到使用雷诺兹输运定理[Reynolds等人1903]的2D情况,其定义恰好是以下方程:
∂/∂Θ ∫Ai(Θ) д(u,v)dudv = ∫Ai(Θ) ∂/∂Θ д(u,v)dudv + ∮∂Ai(Θ) ∂p(t)/∂Θ · n(t) д(p(t))dt。(6)
其中∂Ai是区域Ai的边界,n(t)是边界的外法向量,p(t)是一个表示边界上的点的2D向量(例如,对于填充形状的二次段,p(t) = (1-t)²p0 + 2(1-t)tp1 + t²p2,n(t)是切线p’(t)的法向量的归一化2D向量)。我们将读者引向Flanders的文章[1973]以获取雷诺兹定理的简洁证明。
与1D情况相比,边界修正项现在变成了积分域边界∂Ai上的1D曲线。
它衡量了边界相对于微分参数Θ的膨胀速度。图6b说明了这种直觉。
我们的方法可以正确处理多个基元之间的复杂遮挡,因为对于我们考虑的矢量图形基元(第4.1节),所有不连续点都发生在基元边界上。雷诺兹输运定理通过在它们上积分来处理边界变化。
为了估计所有形状的方程6,我们分别为两个积分应用两个蒙特卡洛估计器。估计第一个积分类似于标准矢量图形渲染,但我们不输出颜色,而是将梯度累积到相应的颜色参数中。为了估计第二个边界积分,我们为每个像素分配N个样本(我们通常设置N = 4)。我们首先随机选择一个曲线和一个曲线上的点。如果曲线是描边的一部分,我们会随机将点偏移法线的一侧到描边宽度的一半,或者我们会随机选择描边的一个端盖。请注意,边界上的每个点p(t)都与两个子区域Ai相关联。我们在所采样点的两侧计算场景函数f,并将梯度传播到相应的参数Θ:
Σi ∮∂Ai(Θ) (∇Θp · n) f(x,y;Θ) dxdy ≈ 1/N Σj (∇Θpj · nj) (f(pj + εnj) - f(pj - εnj)) P(pj|c)P©。(7)
其中ε是一个很小的数(我们对所有渲染使用10-4像素),P(pj|c)P©是选择曲线c和曲线或描边边界上的点pj的概率密度。我们使用参数形式在曲线上进行采样。对于曲线p(t),概率密度可以通过变换的逆雅可比矩阵计算(P(pj|c) = (∂p(t)/∂t)⁻¹)。
蒙特卡洛估计可以正确处理遮挡。如果我们在被遮挡的曲线上采样一个点,该点将落在一个连续的区域上。因此,当ε趋近于0时,f(pj + εnj) - f(pj - εnj) = 0,这是由于连续性的定义,所以样本的贡献为0。
image.png
图7.我们的可微分分析预滤波方法基于以前的近似径向滤波使用曲线边界的(符号)距离d的方法(例如[Gupta和Sproull 1981;Nehab和Hoppe 2008;Turkowski 1982])。我们通过在由像素中心和曲线边界上最接近的点形成的线上进行1D积分来近似2D积分。(a)对于填充基元,我们通过在基元内部的线段上进行分析积分来近似滤波核k。(b)对于描边,我们通过取长度为描边宽度w的线段来近似。

5.2 分析预滤波

我们对光栅化进行微分的第二种替代方法是通过简化矢量图形配置来近似像素积分。我们采用了一种常见的方法,该方法利用了符号距离场。我们将展示,通过符号距离场进行高效微分需要额外的注意。
我们感兴趣的是那些可以近似一般矢量图形而无需将原始曲线转换为另一种形式的方法。我们的方法基于那些通过像素中心和曲线边界上最接近的点之间的符号距离来近似2D抗锯齿积分的方法[Fabris和Forrest 1997;Gupta和Sproull 1981;Loop和Blinn 2005;Nehab和Hoppe 2008;Turkowski 1982]。只要我们能够计算点和曲线之间的距离,这些方法就可以轻松应用于一般矢量图形。
分析近似。我们通过沿由像素中心和曲线边界上最接近的点形成的线上分析地积分一个径向对称的滤波核k®来近似抗锯齿积分,该核具有支持1(对于|r|≥1,k® = 0)。这个分析近似K(d)将表示形状在像素滤波内的覆盖率。我们还希望我们的分析覆盖率近似K(d)满足归一化约束:K(1) = 0,K(-1) = 1。因此,我们定义K(d) = C0 + C1 ∫1 d k®dr,其中常数C0和C1可以通过解决归一化约束来解决。
对于填充曲线,我们近似(x,y)处的颜色为K(di(x,y)) fi(x,y) = αi(di(x,y)) fi(x,y)。(8)
对于描边,我们近似颜色为(K(di(x,y) + w) - K(di(x,y) - w)) fi(x,y) = αi(di(x,y),w) fi(x,y)。(9)
其中di(x,y)是像素中心和曲线i之间的最接近的符号距离(负di表示(x,y)在封闭曲线内部),w是描边的半宽度,fi是一个表示分配给曲线i的颜色(常量、线性或径向渐变)的可微函数,在(x,y)处进行评估。然后,我们按照用户指定的顺序循环遍历所有曲线进行alpha混合。每个形状的alpha,即不透明度,乘以αi以近似形状之间的遮挡。按照Nehab和Hoppe的建议,我们使用抛物线核k® = 4/3(1 - r²)和K® = 1/2 + 1/4(r³ - 3r)。
微分。预滤波贡献(方程8和9)以及alpha混合使得光栅化相对于曲线参数可微分(注意对符号距离d的依赖性,它又依赖于曲线参数)。然而,计算三次曲线的符号距离d需要求解一个5次多项式方程(第4.2节)。使用标准反向模式自动微分[Griewank和Walther 2008]对迭代根求解器进行微分需要记住所有中间步骤,这效率低下。相反,我们应用了隐函数定理[Rio Branco de Oliveira 2012]。对于一个n次多项式p(t; c) = 0,其中t ∈ R是一个变量,系数c ∈ Rn,我们想知道改变系数c如何改变根t,即∂t/∂c。隐函数定理给了我们:∂t/∂c = -(∂p(t,c)/∂t)⁻¹ ∂p(t,c)/∂c。(10)
因此,我们只需要根t来计算导数,其中根可以通过迭代求解器找到。这是自动微分文献中已知的技术,已经应用于双级优化[Bell和Burke 2008]。一旦我们有了导数∂t/∂c,就可以使用链式法则对预滤波贡献进行微分:∂ˆk/∂c = ∂ˆk/∂d ∂d/∂t ∂t/∂c。
备注。一些工作注意到了像素积分和曲线边界之间的关系,使用了格林定理[Catmull 1978;Duff 1989;Manson和Schaefer 2013],并通过在曲线边界上积分来推导分析解。这仍然是一个近似,原因有几个。多项式曲线描边的边界不一定是封闭的多项式曲线(三次曲线的平行曲线是一个10次多项式,但由于描边端点的端盖,它不是一个多项式)。使用具有多个停止点的线性渐变、径向渐变或甚至纹理进行着色会使得分析解复杂化。最后,所有这些方法都需要裁剪多项式或有理多项式曲线,这会使它们的实现和微分变得复杂。

5.3 讨论

在这里,我们从定性的角度比较两种抗锯齿策略。总体而言,蒙特卡洛采样产生更高质量的图像,因为它不对场景配置做出假设。当存在平行边时,分析预滤波方法容易出现众所周知的混淆伪影(图8)。现代运行在GPU上的矢量图形光栅化引擎主要依赖于多重采样[Batra等人2015;Ganacim等人2014;Kilgard和Bolz 2012]来避免混淆伪影。我们在附录B中进一步讨论了平行边的可微分性。
image.png
图8. 分析预滤波渲染提供了一种使渲染过程可微分的方法,但会产生不希望的人工制品。第一行显示了基元之间共享边缘的场景。第二行显示了每个像素颜色相对于整个场景向右移动的导数。分析预滤波方法通常需要对场景做出许多假设(在这里,我们实现了基于分析卷积和半平面的Nehab和Hoppe的方法[2008])。这导致了众所周知的混淆人工制品。相比之下,我们的蒙特卡洛采样生成了令人愉悦的结果。矢量图形取自Ganacim等人[2014]和Kilgard和Bolz[2012]使用的基准。

另一方面,我们的边界采样(第5.1节)会产生非一致的内存访问,因为评估位置是随机决定的。这有几个后果:首先,这使得梯度计算是随机的,并且可能对优化的收敛率产生影响。其次,我们需要能够以随机访问的方式查询场景函数f[Nehab和Hoppe 2008],这需要对曲线几何进行高效的数据结构进行排序。第三,非一致的内存访问模式使得现代GPU上的天真实现效率较低,因为存在warp发散。我们当前的实现根据Z-order对评估位置进行排序,以创建一致的访问,然而对于大图像,排序的成本是不可忽略的。最后,边界采样使像素颜色的选择性评估变得复杂:考虑一个像素级的损失函数,我们可以通过随机选择要评估的像素位置来随机地评估损失函数和梯度,这显著加快了梯度下降过程[Azinović等人2019]。不幸的是,边界采样使选择性评估变得困难:我们需要对边界和所选像素的滤波支持区域的交集进行采样。
image.png
图9. 我们比较了蒙特卡洛采样、我们的蒙特卡洛边界采样和我们的分析预滤波方法的梯度的有限差分。该图展示了使用Ganacim等人[2014]的基准图像计算得到的所有基元向右移动时像素颜色的导数,这些图像包含数千个到数万个具有复杂遮挡的线段。我们的边界采样与有限差分参考结果非常接近,而分析预滤波梯度在很大程度上是相同的,但由于不同的图像公式模型而略有不同。对于波士顿场景(c),分析预滤波由于场景中的平行边而产生了混淆伪影。我们使用每个像素16个样本来计算蒙特卡洛采样,并使用每个像素1个样本来计算分析预滤波。通常在进行基于梯度的优化时,我们使用每个像素4个样本进行蒙特卡洛采样。请放大图像以详细比较。
在实践中,我们更喜欢蒙特卡洛公式,因为它不太可能产生人工制品,并且更接近现代GPU光栅化器的行为。除非另有说明,否则对于我们的大多数应用,我们选择了蒙特卡洛采样策略。当我们希望在梯度计算中实现确定性,或者希望模仿现有非可微光栅化器的行为(特别是WebKit浏览器引擎2)时,可以使用分析预滤波方法。分析预滤波还提供了在不渲染整个图像的情况下随机访问评估样本的能力。

6.应用和评估

我们用C++/CUDA实现了我们的光栅化器,并提供了PyTorch接口[Paszke等人2019]。我们使用具有曲线段的轴对齐边界框的边界体积层次结构来加速卷绕数和距离查询。对于边界采样,我们在评估每个样本的贡献之前根据Z-order对样本进行排序,以减少线程发散。边界体积层次结构在CPU上使用单个线程构建。我们根据框中心的2D莫顿码对基元的边界体积进行排序[Lauterbach等人2009]。对于路径内段的边界体积,我们根据框中心的y轴进行排序。
我们在表1中展示了我们方法的时间分析。通常,对于具有适度复杂性的矢量图形(如图9中的老虎场景),我们实现了交互式性能。正如我们将在第6.2节中展示的那样,我们可以在交互式矢量图形编辑器中使用我们的光栅化器。分析预滤波方法比蒙特卡洛采样稍快,因为它只需要每个像素一个样本。
我们相信性能优化[Levien 2020]和整合更先进的加速数据结构,如快捷树[Ganacim等人2014],可以显著提高渲染速度,但目前的性能已经足以满足非平凡的应用。

6.1 评估

梯度比较。我们在各种矢量图形场景上比较了我们两种方法和中心有限差分生成的梯度,这些场景包含从数千个段到数万个段。结果如图9和补充材料所示。边界采样可以处理复杂矢量图形中发生的复杂遮挡,并产生接近有限差分的结果。另一方面,除了图8中混淆人工制品的情况外,分析预滤波梯度与边界采样和有限差分的行为相似。虽然边界采样通常需要每个像素多个样本来减少方差,但分析预滤波方法可以使用每个像素一个样本产生稳定的输出。
表1. 我们使用一组标准基准[Ganacim等人2014;Kilgard和Bolz 2012]来测量我们的可微分光栅化器实现的性能。我们将正向传播所花费的时间表示为fwd,它包括从PyTorch复制曲线数据、构建加速结构以及渲染图像的预处理时间。我们将用于计算梯度的反向传播所花费的时间表示为rev。预处理时间通常可以忽略不计,除了轮廓,它大约需要0.15秒。蒙特卡洛采样由于需要每个像素多次采样而稍微昂贵一些。分析预滤波稍微快一些,但每个样本更昂贵,因为需要精确的符号距离计算。
image.png
image.png
图10. 我们使用图9中的老虎场景研究了蒙特卡洛采样的方差。与通常的蒙特卡洛积分一样,随着样本数量的增加,我们图像的方差呈线性下降。我们通常使用每个像素2 x 2个样本(spp),这对于各种任务都表现得很好,从优化复杂的矢量图形到训练神经网络。
当要微分的变量数量超过五个时,我们的方法比有限差分高效得多。有限差分的计算时间随着变量数量的线性增长,而我们的方法保持不变。
我们在图10中分析了蒙特卡洛采样的方差。与典型的蒙特卡洛估计器一样,随着样本数量的增加,方差线性下降。我们通常使用2 x 2个样本每个像素,它在广泛的任务中表现良好,从优化数千个曲线到训练神经网络,我们将在下面进行演示。
我们将蒙特卡洛可微分矢量图形光栅化器应用于各种任务。除非另有说明,我们使用Adam算法[Kingma和Ba 2015]进行优化。学习率针对每个应用进行了调整,我们发现对于颜色和点有不同的学习率至关重要,因为它们的范围不同。所有图像、SVG和优化视频都包含在补充材料中。

6.2 基于优化的矢量编辑

总体而言,当前的矢量图形编辑工具主要基于直接操作几何控制点,或者对它们应用局部或全局仿射变换。基于各种几何算法的更复杂的编辑工具存在[Bernstein和Li 2015;Chugh等人2016;Sutherland 1964],但这些工具与用于光栅表示的典型编辑操作(如画笔和滤镜)之间存在巨大的鸿沟。目前,没有通用的方法来弥合这一差距,并在矢量域中非破坏性地解释这些光栅操作。
image.png
图11. 使用图像损失进行基于画笔的编辑示例。(a)展示了通过局部优化不透明度来雕刻音符的结果(下图),同时保持了线段的平行性(上图)。(b)展示了通过优化文本块中的字符(上图)来局部增加不透明度的结果(下图),以根据像素模板增加不透明度,同时通过优化文本的“粗细”来保持字符的形状。我们建议阅读本文档的读者放大以更清楚地看到差异。
我们的方法为实现这一目标开辟了一条途径。通过可微分光栅化,我们可以将这些编辑操作定义为图像空间损失,然后反向传播它们以优化矢量图形表示的参数。这种编辑方式是非破坏性的,因为它保留了原始图形的完整结构,这在语义上是有意义的,并且对于其他类型的编辑操作也很方便。虽然这种优化只找到局部最优解,并且不能操作离散参数,如形状的拓扑结构,但在实践中这是可取的行为,因为编辑结果是输入的轻微修改,而不是全新的图形。
交互式基于画笔的编辑。我们可以直接对画笔下的像素颜色施加损失,这对应于在光栅图像上进行绘画。优化几何以满足此损失会导致形状以促进矢量形状的雕刻方式变形,如图11所示。我们发现增加或减少像素不透明度的操作是有用的。也可以使用更复杂的像素统计信息,例如施加像素拉普拉斯损失以形成平滑/锐化算子。从光栅表示反向传播的损失可以轻松地与矢量图形中常见的几何损失[Bernstein和Li 2015]结合使用,以强制保留可取的几何属性,如节点平滑或线平行。这些简单的绘画操作足够快,可以进行交互式编辑。我们使用随机梯度下降(不使用动量)作为优化器,因为我们发现Adam引入的动量会损害交互式编辑体验。
image.png
图12. 我们展示了矢量缝合雕刻的结果。初始图形显示在重定目标结果和参考的简单缩放图形旁边。图片由freesvg.org用户OpenClipArt和vecteezy.com用户Vectorbox Studio和Graphics RF提供。
矢量缝合雕刻。许多更先进的图像滤镜和编辑算法也可以使用这种优化策略转移到矢量域。为了说明这一点,我们实现了一个矢量重定目标算子,该算子使用光栅域中的缝合雕刻算法[Avidan和Shamir 2007]来改变矢量图形的纵横比。原始的缝合雕刻算法在保持结构或重要内容的同时各向异性地缩放图像。在每个步骤中,直到达到所需的纵横比,它都会删除最小化某些成本函数(例如图像梯度)的“缝合”。
我们的想法是使用标准的光栅缝合雕刻算法,但要重新塑造矢量图形。我们采用现有的矢量图形,使用我们的可微分光栅化器将其渲染为光栅图像,在光栅图像上应用缝合雕刻算法的一步,并使用L2损失和10个梯度下降步骤优化矢量图形以匹配修改后的光栅图像。图12说明了结果。在理论上,任何进行合理小步的迭代光栅图像处理算法都可以使用相同的方案。

6.3 矢量图形生成

使用优化和可微分技术进行光栅图像生成是一个成熟的研究领域。由于我们的光栅化器,我们现在也可以在矢量域中实现这一点。实现这一点的最直接方法是迭代优化一些初始的矢量形状以匹配目标图像。

image.png
图13. 我们的渲染器使我们能够通过将随机初始化的曲线拟合到目标图像来开发一种新的绘画渲染算法,优化控制点位置、笔画宽度、颜色和不透明度。第一列展示了曲线的初始化。第二列展示了最小化渲染和目标之间的L2距离的结果。第三列展示了最小化基于深度学习的感知损失[Zhang等人2018]的结果。第四列展示了目标图像。我们发现感知损失优化通常会产生更抽象、风格化更强的图像,而L2损失通常会产生更逼真的图像。前两行使用每个笔画1到3个三次贝塞尔曲线的随机笔画进行初始化。第三行使用每个形状3到5个段的随机封闭贝塞尔曲线进行初始化。图片由维基百科用户Daderot和David Corby以及USC-SIPI图像数据库提供。
绘画渲染。例如,我们可以通过随机分布的基元初始化图形,并优化以L2意义匹配目标,如图13所示。这实现了类似于绘画渲染算法[Hertzmann 1998, 2003]通过使用启发式方法或最近使用强化学习[Ganin等人2018;Nakano 2019]的结果。
更有趣的是,我们可以使用基于深度特征的感知损失[Zhang等人2018]来达到相同的目的,因为我们的可微分光栅化器可以将损失反向传播到图形元素。在实践中,我们发现L2损失生成了更逼真的图形,而通过感知损失创建的图形则更加风格化和抽象。其他可微分的感知度量也可以使用[Artusi等人2019;Wang等人2004]。对于所有图像,我们使用相同的学习率(控制点为1,笔画宽度为0.1,颜色为0.01)并运行500次迭代。
image.png
图14. 我们的光栅化器可以用来改进图像矢量化的结果。给定一个输入的光栅图像和Adobe Image Trace输出的相应矢量,我们优化所有矢量参数,包括颜色和控制点,以最小化L2损失。这显著提高了保真度,无论是从数值上还是从视觉上。偶数行展示了渲染和目标之间的绝对差异以及均方误差(MSE)。我们的结果更好地表示了渐进的颜色变化,例如在peppers中的左边的细长辣椒、右边的白色反射以及flower中的左下角的叶子。图片由维基百科用户Eric Guinther和USC-SIPI图像数据库提供。
图像矢量化。存在大量的图像跟踪算法,这些算法使用矢量图形来近似光栅图像。通常,这些算法会尝试将曲线匹配到在图片中检测到的边缘上以发现形状,然后在后处理中为它们上色。虽然这些算法在经验上产生了很好的结果,但由于必须对数据的性质做出各种简化假设,它们甚至不是局部最优的。我们可以通过使用这样的跟踪图像作为我们优化的初始化来轻松展示并修复这一点。
表2. 我们在5张图像的数据集上改进了Adobe Image Trace的图像矢量化结果。每张图像在各种错误度量方面都取得了显著的改进。平均而言,我们在均方误差上实现了2.5倍的减少,在峰值信噪比上实现了4dB的提高。我们在这个任务上尝试了我们的蒙特卡洛方法(§5.1)和分析预滤波方法(§5.2)。分析预滤波方法的错误略低,很可能是由于没有噪声,这导致梯度下降更快收敛。
image.png
通过取Adobe Illustrator中实现的跟踪算法的结果,然后优化它以最佳匹配目标图像在L2意义上,我们实现了约2.5倍的均方误差减少和4dB的峰值信噪比改进,如图14和表2所示。我们的改进是通过微调跟踪的控制点位置和填充颜色实现的,而没有引入额外的复杂性到表示中。对于所有图像,我们使用相同的学习率(控制点为2,颜色为0.02)并运行250次迭代。
image.png
图15. 我们训练了一个变分自编码器,将MNIST数字a编码为矢量输出。这使我们能够采样新的与分辨率无关的数字b。放大论文的数字版本,可以发现我们矢量输出的锐度更高。
深度生成建模。我们的光栅化器可以用作神经网络中的一个可微分算子——即与其他可微分组件一起出现在它之前或之后。这使我们能够将现有的光栅图像生成模型适应为输出矢量表示的对应模型。出于演示目的,我们选择了两种模型。
第一种是一个变分自编码器(VAE)[Kingma和Welling 2014],我们训练它来生成矢量MNIST数字[LeCun等人1998]。编码器是一个卷积网络。它处理灰度光栅数字,并将它们编码到一个20维的潜在向量中。解码器将一个潜在代码(在训练后可以从一个20维的正态分布中采样)转换为一对两段贝塞尔路径的位置、笔画宽度和不透明度参数。然后使用我们的方法光栅化这些路径以产生一个可以直接与光栅输入进行比较的输出图像。我们使用真实图像和光栅化输出之间的L2损失以及一个Kullback-Leibler散度来训练这个网络,这个散度鼓励潜在向量服从正态分布。图15显示了随机选择的矢量输出样本和真实MNIST参考图像。图1e展示了矢量输出如何使分辨率无关的渲染成为可能,甚至可以对数字进行事后风格化。
image.png
图16. 我们的光栅化器也可以在生成对抗网络框架中使用,以从光栅图像数据集中训练生成矢量的模型。在这里,我们展示了在MNIST数据集a和QuickDraw数据集的“猫”子集b上训练的模型的随机样本。我们还展示了在每个模型的潜在空间中对样本对进行插值的结果c和d。
我们的第二种模型展示了可微分光栅化器在众所周知具有挑战性的生成对抗训练上下文[Goodfellow等人2014]中同样表现良好。为此示例,我们训练了一个类似的解码器架构来最小化Wasserstein GAN与梯度惩罚目标[Gulrajani等人2017]。在这个例子中,判别器是一个卷积网络,它要么将训练数据集中的图像作为输入,要么将使用我们算法光栅化的生成矢量图形作为输入,并尝试将图像分类为真实或伪造。在图16中,我们展示了使用这些模型在两个数据集上训练生成的一些光栅化矢量图形——MNIST和来自QuickDraw的更复杂的猫素描[Ha和Eck 2018]。我们还展示了在GAN的潜在空间中随机潜在向量的插值示例。每个模型的训练大约需要12小时。有关架构和训练的更多细节,请参阅附录C。
由于我们的可微分光栅化,我们可以仅使用基于图像的监督来训练生成模型,而不需要像以前的方法[Ha和Eck 2018;Lopes等人2019]那样要求对曲线本身进行任何监督。我们也不需要训练一个用于近似光栅化过程的神经网络,这通常固定并限制输出分辨率,并且只对一种类型的矢量基元有效[Huang等人2019;Nakano 2019;Zheng等人2019]。

7.限制和未来工作

优化拓扑结构。我们的方法与其他基于梯度的优化方法共享相同的限制。我们的渲染器只给出连续参数(如控制点位置、颜色值和变换参数)的梯度。它不能为离散决策(如添加或删除形状或路径段、重新排列渲染顺序或更改形状类型)创建梯度。因此,上面提出的应用仅限于固定的拓扑结构,这些拓扑结构要么是启发式确定的,要么是通过保留输入的拓扑结构来确定的。有可能使用循环或强化学习模型来处理离散决策[Ha和Eck 2018;Lopes等人2019;Zhu等人2018],同时从能够计算连续参数梯度中获益。
image.png
图17. 在彩色渲染中,形状梯度仅沿边界传播(c,d),因此在非边界像素中会丢失梯度信息(f)。
梯度稀疏性。在雷诺兹的公式中,从图像空间到形状参数的梯度反向传播取决于形状边界。在实践中,这意味着非边界像素的信息会丢失(图17)。在某些情况下,这可能会导致局部最小值,导致退化几何或甚至导致不可恢复的配置,其中形状没有在画布上呈现(例如,由于整个形状已经移动到画布外而没有可用的梯度信号)。这可以通过使用较大的像素滤波或依赖于分析预滤波公式来减轻形状参数的影响。然而,使用较大的像素滤波进行渲染更昂贵,而预滤波并不能解决所有这些局部最小值。
更多矢量图形基元。我们当前的实现不支持一些高级基元,如扩散曲线[Orzan等人2008]和梯度网格[Sun等人2007]。在原始形式下,扩散曲线需要微分泊松方程求解器。然而,扩散曲线的射线追踪公式[Bowers等人2011]相对简单地集成。微分梯度网格渲染需要微分它们的三角网格细分。梯度网格在补丁自身折叠时也包含不连续性[Adobe Inc. 2006]。

8.结论

我们提出了一种用于矢量图形的可微分光栅化器,能够将矢量数据转换为光栅表示,同时促进两个域之间的反向传播。它促进了基于光栅准则的直接优化矢量数据,并使矢量图形组件能够无缝集成到严重依赖于图像空间卷积的深度学习模型中。我们希望这项新技术将开启学习和优化视觉数据的新方式。

附件

A. 点和三次贝塞尔曲线之间的最近距离

给定一个三次曲线p(t) = (1-t)³p0 + 3(1-t)²tp1 + 3(1-t)t²p2 + t³p3和一个点q ∈ R²,我们想计算它们之间的最近距离。我们将平方距离写为(p(t*) - q)²,其中t是曲线p上最接近q的点:
t
= arg min(p(t) - q)²。(11)
image.png
图18.两个基元的光栅化,它们的边缘恰好重合,a相对于顶点位置不可微分。假设我们想相对于青色三角形的水平平移参数进行微分。当它向右移动b时,它会减少蓝色三角形的覆盖范围,使颜色变亮。当青色三角形向左移动c时,它会揭示更多的白色背景,使颜色变暗。因此,前向和后向差分产生不同的结果(e和f),使函数不可微分。我们的方法输出由一侧极限定义的导数,其中青色三角形遮挡了蓝色三角形d。
为了求解t*,我们对平方距离关于t的导数取值并设为零:
2(p(t) - q) · p’(t) = ρ(t) = 0。(12)
这是一个5次多项式(p是3次多项式,p’是2次多项式),没有封闭形式的解。为了求解5次多项式的所有实根,我们使用标准的混合牛顿-拉夫逊二分法[Press等人2007]。这需要我们确定所有实根的区间。为了实现这一点,我们使用了隔离多项式技术[Sederberg和Chang 1994]。
给定一个多项式ρ(t)(在我们的情况下是一个5次多项式)及其导数ρ’(t),它们的长除法得到两个较低阶的多项式a(t)和b(t):
a(t) = ρ(t) - b(t)ρ’(t)。(13)
事实证明,a和b的实根隔离了ρ的根。为了看到这一点,考虑ρ的两个相邻实根r0和r1(如果ρ只有一个或没有实根,我们知道t被[0,1]所限制)。我们可以证明在[r0, r1]中必须有一个a或b的根。由于ρ(r0) = ρ(r1) = 0,我们知道a(r0)a(r1) = b(r0)b(r1)ρ’(r0)ρ’(r1)。由于r0和r1是ρ的根,ρ’(r0)ρ’(r1) ≤ 0。因此,要么a(r0)a(r1) ≤ 0,要么b(r0)b(r1) ≤ 0。请参阅Sederberg和Chang的论文,了解多个根的情况。
我们可以通过对方程12进行重排来构造一个5次多项式ρ(t) = t⁵ m + Bt⁴ + Ct³ + Dt² + Et + F。通过将ρ和ρ’进行长除法,我们得到:
a(t) = (2C/5 - 4B/25)t³ + (3D/5 - 3BC/25)t² + (4E/5 - 2BD/25)t + F - BE/25
b(t) = t⁵ m + B/25。
(14)
由于a是一个三次多项式,b是一个线性多项式,我们可以在(0,1)之间求解a和b的所有实根。这形成了最多5个区间,然后我们可以使用混合牛顿-拉夫逊二分法在这些区间内找到ρ的所有根。

B. 平行边和光栅化的非可微性

在平行边的退化情况下,光栅化在技术上不是可微分的(图18)。在这种情况下,积分相对于顶点的运动是不连续的:将顶部基元向一个方向移动会揭示背景,而将其向另一个方向移动会遮挡另一个基元,因此极限的两侧不相等。由于我们在评估场景函数f时只计算最顶层的贡献,所以我们的方法输出不涉及背景的导数,忽略了背景的影响。
在存在平行边的情况下,我们的多重采样抗锯齿仍然会输出极限的一侧,我们认为这是在这种情况下的正确行为。我们的分析预滤波将产生混淆伪影(图8)。

C. 网络架构和训练细节

我们MNIST VAE(§6.3)的编码器网络将输入图像映射到潜在向量。编码器是一个具有泄漏ReLU激活函数(负斜率为0.2)的卷积层序列。我们使用了3个具有3 x 3滤波器的卷积层,并逐渐增加特征通道:64、128和256。在GAN设置中,潜在向量是从多变量正态分布中采样的。
在VAE实验中,我们的解码器是一个具有SELU激活函数[Klambauer等人2017]的全连接网络。它消耗一个潜在向量并输出N个三次贝塞尔段的参数:位置、笔画宽度和不透明度。我们使用双曲正切作为最后一个激活函数来获取[-1, 1]之间的位置,并使用sigmoid函数获取[0, 1]之间的笔画宽度和不透明度。解码器使用3个全连接层,所有层都有1024个隐藏单元。
在QuickDraw和MNIST GAN实验中,生成器也是一个SELU、全连接网络。它使用了5个全连接层,分别具有32、64、128、256、256个隐藏单元。
判别器的结构类似于VAE的编码器,有两个修改:它在卷积层之间使用了谱归一化[Miyato等人2018],并输出一个标量而不是一个潜在向量。它有8个具有3 x 3滤波器和64、128、128、256、256、512、512、512、512通道的卷积层,以及一个全连接网络作为最终的真实/伪造分类输出。
所有卷积层(除了前两个)都使用了谱归一化。
我们使用Adam优化器[Kingma和Ba 2015],学习率设置为0.0001,β1 = 0.5,β2 = 0.9。在GAN实验中,我们计划学习率以因子0.9999指数衰减。梯度惩罚设置为10,我们将梯度修剪为大于1范数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《第一行代码》第二版学习笔记(10)——基于位置的服务

文章目录 一、使用百度定位二、获取经纬度使用百度地图移动到我的位置并让“我”显示在地图上 Android Studio中没有signingReport文件,解决参考文档 一、使用百度定位 下载百度LBS开放平台的SDK 在项目的app.gradle文件下添加依赖:implementation fil…

fb设备驱动框架分析

一、字符设备注册过程: 归根到底,fb设备也是一个字符设备,所以逃不开常规的字符设备驱动框架: Linux内核中编写字符设备驱动通常遵循以下步骤: ①、定义主设备号: 在Linux中,每个字符设备都…

2024洗地机选购指南 | 怎么选洗地机不会被坑?

家里的地板总是需要打扫,但工作忙碌的我们往往没有足够的时间来打理。洗地机不仅能够帮助我们节省宝贵的时间,还能让我们的家变得一尘不染。今天,笔者将为大家讲讲挑选洗地机的技巧,告诉大家怎么挑选洗地机不会被坑,顺…

ECO 视频分类模型

ECO分类模型 ECO 分类模型,可以对视频进行分类,视频是静止画面的集合,并短时间内进行播放,在人眼中形成了视频,通过 FPS 单位进行计算,指的是每秒显示多少张图片。如果直接把图片组合一张大图,…

开源直播电商系统(仿抖音电商模式)

当下,传统的图文电商模式正在走向没落,以“抖音”为首的直播电商模式备受用户追捧,它具有直观与互动的特点,拥有传统电商所不具备的优势。而且,当前正是直播电商的红利期,很多主播和品牌商都通过直播电商业…

numpy中高维数组变为向量与numpy中增加和删除维度实现方法

在NumPy中,将高维数组变为向量通常指的是将多维数组(如二维或更高维度的数组)转换为一维数组(向量)。这一过程可以通过多种方法实现,具体如下: 使用numpy.reshape()函数:这个函数可…

人工智能|推荐系统——工业界的推荐系统之冷启动

UGC的物品冷启有哪些 ⼩红书上⽤户新发布的笔记。 B站上⽤户新上传的视频。 今⽇头条上作者新发布的⽂章。 为什么要特殊对待新笔记? 新笔记缺少与⽤户的交互,导致推荐的难度⼤、效果差。 扶持新发布、低曝光的笔记,可以增强作者发布意愿…

超越传统游戏:生成式人工智能对游戏的变革性影响

人工智能(AI)在游戏中的应用 游戏产业是一个充满活力、不断发展的领域,人工智能(AI)的融入对其产生了重大影响。这一技术进步彻底改变了游戏的开发、玩法和体验方式。本文分析的重点是传统人工智能和生成式人工智能在游…

PyTorch 图像篇

计算机视觉技术是一门包括计算机科学与工程、神经生理学、物理学、信号处理、认知科学、应用数学与统计等多学科的综合性科学技术, 是人工智能的一个重要分支, 目前在智能安防、自动驾驶汽车、医疗保健、生成制造等领域具有重要的应用价值。 计算机视觉…

Linux -- 日志

一 日志的重要性 在之前的编程经历中,如果我们的程序运行出现了问题,都是通过 标准输出 或 标准错误 将 错误信息 直接输出到屏幕上,以此来排除程序中的错误。 这在我们以往所写的程序中使用没啥问题,但如果出错的是一个不断在运行…

burp靶场xss漏洞(初级篇)

靶场地址 http://portswigger.net/web-security/all-labs#cross-site-scripting 第一关&#xff1a;反射型 1.发现搜索框直接注入payload <script>alert(111)</script> ​ 2.出现弹窗即说明攻击成功 ​ 第二关&#xff1a;存储型 1.需要在评论里插入payload …

完整版解答!2024年数维杯数学建模挑战赛B题

B题 生物质和煤共热解问题的研究 技术文档第一问1.1问题一分析1.2数据预处理1.3问题一Spearman相关性分析 数据代码资料获取 技术文档 第一问 1.1问题一分析 对于问题一&#xff0c;题目要求分析出正己烷不溶物对焦油产率、水产率、焦渣产率这三个指标是否有显著影响&#x…

2024年湖北省专升本C语言程序设计大题真题解析

2024年湖北省的专升本考试已于4月30日举行&#xff0c;考试中&#xff0c;出现了许多不同的考试题目&#xff0c;我在网上找到一所高校专升本的大题&#xff08;好像是湖北师范的&#xff0c;后续会有湖北理工的大题真题解析&#xff0c;敬请期待&#xff09;&#xff0c;那么我…

C#中字典Dictionary与自定义类型CustomType之间的转换

C#中字典Dictionary与自定义类型CustomType之间的转换 思路&#xff1a; 可以使用反射System.Reflection来获取类的具体属性&#xff0c; 属性名称就映射字典的键Key。 新建控制台程序DictionaryCustomClassConversionDemo 第一步、新建关键转换类ConversionUtil。 类Con…

基于STM32F401RET6智能锁项目(使用库函数点灯、按键)

点灯硬件原理图 1、首先&#xff0c;我们查看一下原理图&#xff0c;找到相对应的GPIO口 LED_R低电平导通&#xff0c;LED4亮&#xff0c;所以LED_R的GPIO口需要配置一个低电平才能亮&#xff1b; LED_G低电平导通&#xff0c;LED3亮&#xff0c;所以LED_R的GPIO口需要配置一…

举办《Llama3关键技术深度解析与构建Responsible AI、算法及开发落地实战》线上高级研修讲座

举办《Llama3关键技术深度解析与构建Responsible AI、算法及开发落地实战》线上高级研修讲座

AI 资料汇总专栏

包含AI资料、大模型资料、AI最新行业发展 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是一门研究如何使计算机能够具备智能行为的科学与技术。它致力于开发出能够像人类一样思考、学习、理解和决策的计算机系统。自20世纪50年代以来&#xff…

C++ 内联函数

一 宏定义带来的问题 最后ret的值是0。问题出在编译器在遇到宏时只是进行简单的宏替换。 宏的好处是没有类似于普通函数调用时的系统开销&#xff0c;并且宏定义的参数可以适宜大多数类型的数据。 宏定义也有缺点&#xff1a; 有时会产生不可预料的副作用。 二 用inline定义…

开源框架平台:功能优势多,助力数字化转型!

伴随着科技越来越发达&#xff0c;低代码技术平台、开源框架平台逐渐在各中小型企业里获得重视和青睐&#xff0c;成为助力企业实现流程化办公&#xff0c;进入数字化转型的的有力武器。在众多服务商中&#xff0c;谁拥有市场竞争力&#xff0c;谁在服务和产品方面更具核心价值…

Vue 插槽

Vue插槽是一种特殊的语法&#xff0c;用于在组件中定义可复用的模板部分。它允许开发者在组件的标记中声明一个或多个插槽&#xff0c;然后在使用该组件时&#xff0c;可以根据自己的需求将内容插入到这些插槽中。 Vue插槽分为默认插槽和具名插槽两种。 目录 默认插槽 语法…