机器之心报道
编辑:杜伟、陈萍
有人将一张方块图、圆形图的组合生成了抽象的人脸!还有人将帆布油画《阿尼埃尔的浴场》还原为直线。
绘画,尤其是草图可以说是传达概念、对象和故事的一种方式。计算机视觉和人机交互方面的草图研究历史悠久,可追溯到 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。很明显,草图广泛地捕捉了场景的整体结构和明暗区域。
最后推荐一下我们的星球,想玩服务器编程的可以加入我们,我们一年会带大家玩7个项目,大家可以修改我们的代码来扩展它的功能,比如监控股票的可以改成监控基金的,或者是多个金融数据产品,然后根据一些均线策略来提醒你的交易策略等等。
目前星球的价格是一年88元(算下来一个月6块多),还有12元的优惠券限时领取。有兴趣的加入我们的,速来。
推荐阅读:
入门: 最全的零基础学Python的问题 | 零基础学了8个月的Python | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 | 从万众期待到口碑扑街!唐探3令人失望 | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏 | 九宫格 | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!| 再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|
年度爆款文案
1).卧槽!Pdf转Word用Python轻松搞定!
2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃
3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密
4).80行代码!用Python做一个哆来A梦分身
5).你必须掌握的20个python代码,短小精悍,用处无穷
6).30个Python奇淫技巧集
7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货
8).再见Python!我要学Go了!2500字深度分析!
9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片
点阅读原文,看200个Python案例!