本文为AI研习社编译的技术博客,原标题 Differentiable Image Parameterizations,作者为 SHIVAM BANSAL 。 翻译 | 王飞 陈泽斌 Monica 陈腊梅 校对 | 余杭 整理 | MY
受过训练以对图像进行分类的神经网络具有非凡的意义和惊人的生成图像的能力。诸如 DeepDream,风格迁移和特征可视化等技术利用这种能力作为探索神经网络内部工作的强大工具,并为基于神经艺术的小型艺术运动提供动力。
所有这些技术的工作方式大致相同。计算机视觉中使用的神经网络具有它们所看到的图像的丰富内部表示。我们可以使用此表示来描述我们希望图像具有的属性(例如样式),然后优化输入图像以具有这些属性。这种优化是可能的,因为网络在输入方面是可区分的:我们可以稍微调整图像以更好地适应所需的属性,然后在梯度下降中迭代地应用这种调整。
通常,我们将输入图像参数化为每个像素的 RGB 值,但这不是唯一的方法。只要从参数到图像的映射是可区分的,我们仍然可以使用梯度下降来优化可选的参数化方式。
1:只要图像参数化是可区分的,那我们就可以对其进行反向传播。
可区分的图像参数化不禁让我们想问:我们可以反向传播什么样的图像生成过程?答案很多,甚至有一些可以产生各种有趣的效果,包括 3D 神经艺术,具有透明度的图像以及对齐插值。之前使用特定异常图像参数化的工作已经显示出令人兴奋的结果,我们认为缩小并整体观察这个区域表明,其中还存在着更多的潜力尚待挖掘。
尽管实际优化后目标函数保持不变,但改变优化问题的参数化可能会显著改变结果,这似乎令人惊讶。以下是参数化的选择可能产生重大影响的四个原因:
在本文的其余部分,我们给出了具体的例子,这些方法都很有用,都能产生令人惊讶和有趣的视觉效果。
特征可视化最常用于可视化单个神经元,但它也可用于可视化神经元的组合,以研究它们如何相互作用。目的不是优化图像以激活单个神经元,而是优化它来激活多个神经元。
当我们想要真正理解两个神经元之间的相互作用时,我们可以更进一步,创建多个可视化,逐渐将目标从优化一个神经元转移到对其他神经元激活的加权。这在某些方面类似于像 GAN 这样的生成模型的潜在空间中的插值。
尽管如此,还是存在一个小挑战:特征可视化是随机的。即使你针对完全相同的目标进行优化,每次都会以不同的方式呈现出可视化结果。通常,这不是问题,但它确实减损了插值可视化。如果我们不加思索地进行处理,所得到的可视化将是不对齐的:诸如眼睛的视觉位置出现在每个图像中的不同位置。这种缺乏对齐可能会因为目标略有不同而难以看出差异,因为它们被布局中更大的差异所淹没。
如果我们将插值帧看作动画,我们可以看到独立优化的问题:
2
我们如何实现这种对齐插值,其中视觉位置不在帧之间移动?可以尝试许多可能的方法。例如,可以明确地惩罚相邻帧之间的差异。我们的最终结果和我们的 colab notbook 将此技术与共享参数化结合使用。其中一个是使用共享参数化:每个帧被参数化为其自己的唯一参数化和单个共享参数化的组合。
3
通过在框架之间部分共享参数化,我们尽可能使生成的可视化自然对齐。直观上感觉,共享参数化为视觉标志的位移提供了公共参考,而独特的参数化基于其插值权重给予每个帧其自身的视觉吸引力。此参数化不会更改目标,但它会扩大可视化对齐的吸引力盆地。
这是一个初始的例子,说明了可区分参数化通常是如何成为可视化神经网络的有用的附加工具的。
神经风格迁移一直以来都有一个未解之谜:尽管它已经取得显著的成功,但几乎所有的风格迁移都是依赖于 VGG 架构完成的。这并不是因为没有人对基于其他体系结构的风格转移感兴趣,而是因为不断的尝试过后发现效果都很差。在 Medium、 Reddit 和 Twitter 上都可以找到用不同架构进行实验的例子。
如今已经提出了几个假设来解释为什么在 VGG 架构上工作会比在其他模型上效果好得多。一种解释是由于 VGG 架构有比较大的规模去获取其他模型丢失的信息,这些信息即使说对分类没什么帮助,但是它确实能够使得该模型更好的完成风格迁移。另一种解释是其他模型相比于 VGG 模型更具有攻击性,这也导致其失去空间信息。我们认为可能还有另外一个因素:大多数现代视觉模型在梯度上都有棋盘状伪影,这可能使程式化图像在进行优化时变得更加困难。
在之前的工作中,我们发现解相关的参数化可以明显提高优化效果,同时这种方法也可以改善风格迁移。在这里请允许我们使用一个没有产生视觉吸引力的风格迁移模型:
4:移动最终优化图像下的滑块,将像素空间中的优化效果与非相关空间中进行比较。这两张图像是在同一个目标下创建的,它们的区别仅在于参数化的不同。
让我们更全面地去思考这个改变。风格迁移涉及三种图像:内容图像、风格图像以及我们优化后的图像。这三种图像都要放入卷积神经网络中,风格迁移物体与其他的不同之处是在于激活卷积运算的的方式不同。我们唯一的改变是如何将优化后的图像参数化。相对于用像素级别的参数化(这种方法易受邻近像素点的影响),我们采用缩放的傅里叶变换进行参数化。
5: 在去相关领域中的图像使得风格迁移对模型的选择更加稳定。
内容目标旨在让神经元与内容图像在同样的位置上做出标记。风格目标致力于创建类似于风格图像中的神经元激活模式(不考虑位置关系)。这与二维傅里叶变换相反。
我们精确的实行方法可在附录中查看。注意该方法也使用了迁移稳定性,这种稳定性并不适用于所有的风格迁移。
至今为止,我们已经研究了使用像素或傅里叶方法进行参数化,这些参数化程度与我们通常对图像的认知比较接近。在该节中我们探讨了通过使用不同的参数化将额外约束添加到优化过程的可能性。更确切的说,我们将图像当成神经网络一样进行参数化,特别是复合模式生成网络。
复合模式生成网络是将(x,y)位置映射到图像颜色中的神经网络。
将复合模式生成网络应用到位置网络中,可以做出任意分辨率的图像。CPPN 网络的参数-权重与偏差决定产生什么样的图像。根据 CPPN 所选择的架构,所得到的图像中的像素与邻近像素共享颜色在一定程度上受限制。
随机参数可以产生审美直观上感兴趣的图像,但是我们可以通过学习 CPPN 上的参数生产更多有趣的图像,通常这是由进化所完成的。这里,我们研究了反向传播某些目标函数的可能性,例如特征可视化目标。这是很容易就可以做到的,因为 CPPN 网络跟卷积神经网络一样是可微的,并且目标函数同样也可以通过 CPPN 传播从而更新其参数。也就是说,CPPNs 是一种可微化的图像参数化--一种在任何神经艺术或可视化任务中参数化图像的通用工具
6 : CPPNs 是一个可微的图像参数化,我们可以通过反向传播传递图像将其应用于神经网络艺术或可视化任务,通过 CPPNs 得到其参数。
使用 CPPNs 作为图像参数化能够为神经网络艺术增添一种有趣的艺术品质,让我们朦胧的联想到光绘。(注意,这里光绘的隐喻是比较模糊的:例如光的合成是一个加法过程,而 CPPNs 可以在层与层之间由负的权重连接。更理论层面说,它们可以被视为约束你图像合成复杂度的因素。当用于优化特征可视化目标时,它们生成了不同的图像。)光绘是一种通过棱镜和镜子控制彩色光束从而产生图像的艺术媒介。这种技术典型的应用就是 Stephen Knapp 的作品。
7:CPPN 作为一种可微的图像参数化用于不同层之间的特征可视化。
所生成的图片的视觉质量受到所选择的 CPPN 的架构的影响,不仅是网络的形状(即层和滤波器的数目起到了作用),而且还跟所选择的激活函数与归一化有关。例如,较深的网络比较浅的网络产生更多细微的成分。我们鼓励读者通过改变 CPPN 的架构来生成不同的图像,如果想尝试的话可以通过修改附录中的代码就能轻易地完成。
CPPN 所产生的模式演变就是艺术的产物。为了保持光绘的寓意,优化过程应该考虑光束方向和形状迭代的调整。例如,因为迭代变化相比于像素参数化更有全局影响。在优化开始时,只有主要模式是可见的,通过迭代调整权重,我们想象的光束就会以更完整的细节出现在相应的位置上。
8:训练期间 CPPNS 的输出。在移动设备上你可以通过盘旋或者轻拍的方式来控制每一个视频。
通过这些隐喻,我们可以创造一种能够从上述图片中的任意一张变换成不同图片的新类型动画。直观地说,我们通过 移除光影雕塑上的光束来创造新的图像。事实上,这个结果是通过内插两种不同模式的 CPPN 权重表达式来实现的。然后在给定内插 CPPN 表示法的情况下生成图像从而得到多个中间框架。和之前一样,参数的变化具有全局性,并创造视觉上令人满意的中间框架。
9:在两个已知点中间插入 CPPN 权重
在本小节中,我们提出了一种超标准图像表示的参数化。针对给定目标函数优化的图像,神经网络(在这种情况下为 CPPN)可用于参数化。更确切地说,我们将特征可视化目标函数与 CPPN 参数化相结合,来创造具有独特视觉风格的无限分辨率图像。
本篇文章中使用的神经网络被训练用来接收 2D RGB 图像作为输入。是否可以用类似的网络来合成超出这种模式的工件呢?事实证明利用可微分参数化定义一系列图像而不是单一图像,然后在每一个优化步骤从系列中取一个或者若干图片作为样本可以实现。这非常重要,因为我们接下来探索优化的许多对象,在进入网络时比图片有着更多的层级和自由度。
具体来说,让我们考虑一下半透明图像的情况。除了 RGB 通道,这些图像还有一个 alpha 通道来对每个像素的不透明度进行编码(在 [0,1]范围内)。为了将这些图像反馈送到 RGB 图像训练的神经网络中,我们需要以某种方式折叠 alpha 通道。实现这一目标的其中一个方法,是使用标准 alpha 混合公式将 RGBA 图像 II 叠加到背景图片 BGBG 顶部。
其中 I_aIa 是图像 II 的 alpha 通道。
如果我们使用静态背景 BGBG,例如黑色,那么透明度则仅仅表示该背景直接有助于优化目标的像素位置。事实上,这相当于优化一个 RGB 图像并且使其在颜色与背景匹配的区域变得透明!直观地说,我们希望透明区域与“这个区域的内容可能是任何东西”相对应。在这种直觉的基础上,我们在每一个优化步骤中使用了不同的随机背景。(我们尝试了从真实图像采样和使用不同类型的噪音。只要它们足够随机,不同的分布就不会对优化结果产生有意义的影响。因此,为了简单起见,我们使用了平滑的 2D 高斯噪声)
10:将 alpha 通道添加到图像参数化允许它代表透明度。在优化的每个步骤中,透明区域与随机背景混合。
默认情况下,优化半透明图像会使图像完全不透明,所以网络总是可以获得最佳输入。为了避免这种情况,我们需要通过鼓励一些透明的目标来改变我们的目标。我们发现用以下方法替换原始目标是有效:
这个新目标会自动平衡原始目标 objold 降低其透明度。如果图片变得非常透明,它会聚焦于原始目标。如果它变得太不透明,它将暂时停止关注原始目标并专注于降低平均不透明度。
11:应用于不同层和单元的半透明图像优化示例。
事实证明,半透明图像的生成在特征可视化方面很有用处。特征可视化旨在通过创建最大化激活他们的图像来了解视觉模型中的神经元在寻找什么。不幸的是,这些可视化无法区分图像的哪个区域强烈影响了神经元的激活,哪些区域仅轻微影响神经元激活。当优化整个通道的激活时不会发生这种情况,因为在那种情况下,每个像素有多个趋近居中的神经元,全部输入的图像充满了这个神经元强烈关注的副本。
理想情况下,我们希望有一种可视化方法,使其在重要程度上可区分 - 一种表示图像的一部分无关紧要的自然方式是使其透明。因此,如果我们利用 alpha 通道优化一个图像并且鼓励整个图像变得透明,则根据特征可视化目标不重要的图像区域应该变透明。
12
在上一章节中,我们可以通过使用 RGB 图像的神经网络来创造半透明的 RGBA 图像。我们可以进一步推动这一点,创建其他类型的对象甚至进一步从 RGB 输入中删除吗?在本节中,我们将探索为特征可视化目标优化 3D 对象。我们使用 3D 渲染进程将它们转换为可以传入网络的 2D RGB 图像,并通过渲染过程反向传播以优化 3D 对象的纹理。
我们的技术类似于 Athalye 等人的方法。用来创建真实世界的对抗性示例,因为我们依赖目标函数的反向传播来对 3D 模型视图进行随机采样。和现有的生成艺术纹理的方法不同,因为我们在反向传播的过程中不修改对象的几何形状。通过从顶点位置解开纹理的生成,我们可以为复杂的对象创建非常细致的纹理。
在描述我们的方法之前,我们首先需要了解 3D 对象在屏幕上存储和呈现的方式。对象的几何形状通常被保存为一组内部互联的三角形,称为三角形网格,或简称为网格。为了渲染逼真的模型,在网格上绘制纹理。纹理保存为通过使用所谓的 UV 映射应用于模型的图像。网格中的每个顶点 ci 与纹理图像中的(ui,vi)坐标相关联。然后通过用图像中由其顶点的(u,v)坐标界定的区域对每个三角形着色来渲染模型,即在屏幕上绘制。
创建 3D 对象纹理的一种简单且天真的方式是以正常形式优化图像,然后把它作为纹理绘制到对象上。然而,这种方法形成的纹理没有考虑底层的 UV 映射,所以会在渲染对象中创建各种可视化工件。首先,接缝在渲染的纹理上是可见的,因为优化并不知道底层的 UV 映射,所以不会沿着纹理的分割块一致地优化纹理。其次,所生成的图案随机地定向在对象的不同部分上(例如,参见垂直和摆动图案),因为它们在底层 UV 映射中不一致的定向。最终生成的图案不一致的缩放,因为 UV 映射不会在纹理中的三角形区域和它们的映射三角形之间强制执行一致的比例。
13:著名的斯坦福兔子 3D 模型。
你可以通过旋转和缩放与模型进行交互。此外,你还可以将对象展开为其二维纹理样式。此样式展示了用于在纹理图像中存储纹理的 UV 贴图。请注意基于渲染的优化纹理如何划分为多个补丁,以便对对象进行完整且不失真的覆盖。
我们采取不同的方法。不是直接优化纹理,而是通过 3D 对象的渲染来优化纹理,就像用户最终会看到的那样。下图显示了拟议管道的概述:
14:我们通过渲染过程反向传播来优化纹理。这是可能的,因为我们知道渲染图像中的像素如何与纹理中的像素相对应。
我们使用傅立叶参数化随机初始化纹理来启动该过程。在每次训练迭代中,随机摄像机位置进行采样,其朝向指向对象的边界框的中心,并且将纹理化对象渲染为图像。然后,我们将所需目标函数的梯度,即神经网络中感兴趣的特征,反向传播到渲染图像。
但是,渲染图像的更新并不对应于我们意图优化的纹理的更新。因此需要进一步将更改操作传播到对象的纹理上。我们知道屏幕上的每个像素在纹理中的坐标,通过应用反向 UV 映射可以轻松实现传播。通过修改纹理,在以下优化迭代期间,渲染图像将包含之前迭代中应用的更改记录。
15:通过优化特征可视化目标函数来生成纹理。纹理中的接缝几乎不可见,图案定向准确。
生成的纹理始终沿着切割边进行优化,从而消除接缝并为渲染对象强制执行统一的定向。此外,由于对象的几何形状摆脱了功能优化限制,纹理的分辨率可以是任意高的。在下一节中,我们将了解如何再次利用此框架来实现将艺术样式转移到对象的纹理上。
现在我们已经建立的一个框架可用来实现 UV-mapped 纹理图的高效反向传递,同样我们也可以用它来进行 3D 物体的纹理风格迁移。与 2D 情况类似,我们主要是为了将用户提供图片的纹理风格迁移到其他物体上,下图概述了迁移的过程。
16:内容目标主要是为了让神经元在 3D 模型的随机视图上和原始纹理的同样位置激活。
在每一次优化中,3D 模型都会从一个随机角度用原始纹理和学习纹理进行渲染。
风格目标旨在创建类似于风格图像的神经元激活模式而不考虑位置。
通过渲染过程的反向传播,我们可以优化纹理。
该算法的工作方式与上一节中介绍的算法类似。从随机初始化的纹理开始,在每次迭代中,我们采样一个面向对象边界框中心的随机视图,我们渲染它的两个图像:一个具有原始纹理风格的内容图像,另一个具有我们当前优化的纹理风格的学习图像。
在渲染内容图像和学习图像之后,我们针对由 Gatys 等人引入的风格迁移目标函数进行优化。然后我们将参数化的图片映射回 UV-mapped 纹理图,如上一节中介绍的那样。然后迭代该过程,直到在目标纹理中获得所需的内容和风格的目标纹理。
17:在 3D 模型上进行风格迁移时应注意,内容纹理中的可视物体(如眼睛)会在生成的纹理中正确显示。
由于每个视图都是独立优化的,因此优化会被强制在每次迭代时尝试添加所有风格元素。例如,如果我们使用梵高的「星夜」图作为风格图像,那么每个视图中都会被添加星星。我们发现通过引入先前视图风格的「记忆」,可以获得更令人满意的结果,例如上面展示的。为此,我们在新采样的视图上使用来表示风格特征的 Gram 矩阵的移动平均值与之前保持一致性。在每次优化迭代中,我们计算相对于那些平均矩阵的风格损失,而不是针对该特定视图计算的风格损失。(我们在前向计算中使用 TensorFlow 的 tf.stop_gradient 方法的移动平均值去代替现在 Gram 矩阵,反向传播中仍然使用 Gram 矩阵产生对应的梯度。另一种方法,例如所使用的方法,需要在每个步骤中采样场景的多个视图,从而增加内存需求。相比之下,我们的替换技巧可在单个消费级 GPU 上对高分辨率 (>10M 像素) 图像进行风格迁移。)
产生的纹理结合了所需样式的元素,同时保留了原始纹理的特征。以梵高的《星夜》作为风格图像为例,由此产生的纹理包含了梵高作品中那种轻快有力的笔触,而且产生的毛皮还有一个温暖的橙色底色而不是风格图像的主要冷色调,因为它保留了原始的纹理。更有趣的是,当不同的风格被迁移时,兔子的眼睛是被保存的状态也是不同的。例如,当从梵高的画作中获得风格时,兔子眼睛就会像星星一样的螺旋,而如果使用康定斯基的作品,眼睛就会变成抽象的图案,但仍然与原来的眼睛相似。
18:3D 打印《The large one parades on red bottom》(Fernand Leger, 1953)的风格被 Greg Turk 和 Marc Levoy 迁移到《Stanford Bunny》。
该方法生成的纹理模型可方便地应用于流行的 3D 建模软件或游戏引擎中。为了证明这一点,我们使用全彩色的砂岩材料将其中一个设计作为真实世界的物理制品打印出来。
对于创造性的艺术家或研究者来说,有很大的空间来对参数化图像进行优化。这不仅可产生显著不同的图像结果,而且也打开了动画和 3D 物体的创造大门。本文只是抛砖引玉,未来的发展将会更加广阔。例如,我们还可以扩展 3D 物体纹理的优化方法用来优化材料或反射,甚至可以沿着 Kato 等的方向,优化网格顶点位置。
本文主要讨论可微图像参数化,因为它们很容易优化,并且涵盖了广泛的可能应用场景。当然 使用增强学习或进化策略,也可能优化不可微的图像参数,或者是部分可微的。使用不可微参数化可以为图像或场景生成提供更多的令人兴奋的可能性。
原文链接:https://distill.pub/2018/differentiable-parameterizations/