机器之心报道
编辑:杜伟、陈萍
有人将一张方块图、圆形图的组合生成了抽象的人脸!还有人将帆布油画《阿尼埃尔的浴场》还原为直线。
绘画,尤其是草图可以说是传达概念、对象和故事的一种方式。计算机视觉和人机交互方面的草图研究历史悠久,可追溯到 1960 年代。近年来,由于深度学习技术的快速发展,草图应用越来越多,这些技术可以成功地处理草图识别、生成、基于草图的检索、语义分割、分组、解析和抽象等任务。
关于草图的研究也不时的被网友顶上热搜,近日新闻网站 reddit 上就有一篇帖子热度爆表,短短十几个小时热度就达到 800 ,原贴内容为:从形状到「脸」- 使用神经网络进行形状抽象的可微 2D 渲染。
它的效果是这样的:从动图展示效果来看,一开始输入为 4x4 不同形状的图像,最后生成了人脸轮廓(尽管生成的人脸轮廓有些抽象,但我们还是可以看出是人脸):
针对这一展示效果,网友纷纷表示惊艳,但可惜的是,原贴作者并没有给出更多的技术细节,但在评论区中,我们可以从原贴作者的回答中得出一些信息:
原贴作者即项目作者表示:「这是我用于神经渲染的 POC。该模型只是试图最小化输出与真值图像(在本例中为 celeb 数据集)之间的 L2 距离。动图中展示的是训练运行期间验证过程,遵循单一形状收敛。输入形状可以以任何形式开始,但 4x4 网格输入应该是最有趣的, 这一实现效果可扩展到很多应用。我正在考虑写一篇简短的文章,把自己的想法表达出来。」
上面的回复中,项目作者提到了自己并没有写技术文档,不过,也有网友分享了一篇今年 7 月的文章《 Differentiable Drawing and Sketching 》。项目作者表示:「这真的很酷!其实我一直在找类似的东西,但找不到,所以做了这个。」
具体而言:这篇文章是来自南安普敦大学的研究者提出了一种自底向上的可微松弛(relaxation)过程:即将点、线和曲线绘制到一个像素光栅(pixel raster)。这种松弛过程允许模型学习和优化端到端的可微程序和深度网络,此外,松弛过程还为网络提供了几个构建块,以控制如何对组合绘图过程建模。值得注意的是,该研究所提方法是自底向上的,这一特性允许绘图操作以能够模拟绘图的物理现实而不是被束缚的方式组成,例如,现代计算机图形学的方法。
- 论文地址:https://arxiv.org/pdf/2103.16194.pdf
- GitHub 地址:https://github.com/jonhare/DifferentiableSketching
论文展示了如何通过直接优化照片生成草图,以及在没有监督的情况下如何构建自动编码器将栅格化手写数字转换为矢量。
虽然论文与reddit项目作者的最终实现效果不同,论文是将图像抽象为点或线段的草图,项目则是将方块和圆形最终生成抽象人脸,但论文采用的方法对项目具有借鉴意义。因此,机器之心对论文《 Differentiable Drawing and Sketching 》中的技术细节进行了介绍。
技术解读:可微光栅化松弛
在这部分内容中,研究者讨论了如何将连续世界空间(continuous world space) W 中定义的点、线和曲线绘制或光栅化到图像空间
中。
他们的目标是提出一种形式化方法(formalisation),使得最终可以定义相对于世界空间参数(如点坐标或线段起点和终点的坐标)可微的光栅化函数。
一维光栅化
研究者首先考虑了对一维点 p ϵ W 进行光栅化的问题,其中 W = R。具体来讲,点 p 的光栅化过程可以由函数 f(n; p) 来定义,该函数为图像空间
中的每个像素计算一个值(通常为 [0 , 1])。这个图像空间的位置又由
给出。
先来看看简单的最近像素(closest-pixel)光栅化函数。如果假设第 0 个像素覆盖点 p 的世界空间中的域 [0, 1),第一个像素覆盖 [1, 2) ,如此类推。然后,最近邻光栅化将真值点 p 映射到一个图像,如下等式(1)所示:
这一过程如下图 2a 所示。2b 则是另一种光栅化方案,其中在两个最近的像素上进行插值。
假设当被光栅化的点位于中点(midpoint)时,像素具有最大值,则如下等式(2)所示:
实际上,这些可以扩展至 2D 的函数在很多计算机图形系统中得到隐式地使用,但很少以我们编写它们的形式出现。
接下来是可微松弛。理想情况下,研究者希望能够定义一个相对于点 p 可微的光栅化函数,这允许 p 优化。等式(1)给出的光栅化函数对于 p 是分段可微的,但梯度几乎在所有地方都为零,这是没有用的。等式 (2) 在最邻近 p 的两个像素中具有一定的梯度,但总体而言它的梯度也几乎处处为零。
因此,研究者想定义一个光栅化函数,它对所有(或至少大部分)可能的 n 值都具有梯度。这个函数几乎在任何地方都应该是连续的和可微的。抗锯齿光栅化方法对如何实现这一点给出了一些提示:该函数可以根据 n 和 p 之间的距离为每个 n 计算一个值。
N 维中的松弛光栅化
以往定义的所有一维光栅化函数都可以简单地扩展为「在二维或更多维度上对一个点进行光栅化」。
线段可以通过其起始坐标 s = [s_x, s_y] 和结束坐标 e = [e_x, e_y] 来定义。为了开发一组通用、潜在可微的光栅化函数,研究者需要考虑光栅的形式化,就像在一维情况下所做的那样:找到一个函数,该函数在给定线段 f (n; s, e) 的情况下,能够在图像中所有像素位置集合 n 上定义一个标量场。
光栅化线段需要考虑像素与线段的接近程度。研究者高效地计算了任意像素 n 到线段上最近点的平方欧几里德距离,如下所示:
在最近邻光栅化的情况下,有人会问「这条线段是否穿过谈论中的像素」。只有在以下这种情况下才填充:
为了以相对于参数可微的方式光栅化曲线(与参数化无关),研究者遵循了与线段相同的通用方法:计算每个坐标
与曲线之间的最小平方欧几里德距离 :
与线段的情况一样,接下来这一距离变换(distance transform)能够与「根据距离运行的光栅化函数」相结合:
扩展至多条线段
为了光栅化多条线段,研究者考虑论了将不同线段的光栅化组合成单个图像。具体而言,他们将光栅化不同线段 {s_1, e_1}, {s_2, e_2}, . . . , {s_i, e_i} 生成的图像表示为在相同图像空间
上定义的矩阵 I ^(1) , I^ (2) , . . . , I^ (n)。
在最简单的二进制光栅化情况下,研究者认为相应像素的逻辑或(logical-or)可能会产生所需的效果,即将单个光栅化中着色的任何像素作为最终输出中的着色,如下等式(9)所示:
研究者还将这种 composition 松弛为可微的,并允许像素值为非二进制(但限于 [0, 1]),如下等式(10)所示:
最终,研究者得到了点或线段构图所需要的全部组件。
图像优化示例
为了证明针对真实图像优化原语(primitives)方法的有效性,该研究提供了许多示例。例如图 4 和图 5 利用图 3a 中大小为 200 × 266 输入图像作为目标图像进行优化。
图 4 显示了使用模糊 MSE 损失优化 1000 个点和 1000 条线的结果,并展示了可以实现的整体效果。图 5 显示了使用一系列不同损失从同一起点优化 500 条线段的效果。
此外,该研究还将自动生成的草图与人类绘制的图像进行了比较。图 3b 是用笔(pen and ink)绘制的草图,用于生成图 4 和 5。很明显,草图广泛地捕捉了场景的整体结构和明暗区域。
转载请联系本公众号获得授权