首页 炼丹房 帖子详情
深度学习简化素描 So Easy
收藏
快速回复
炼丹房 问答新手上路 2237 0
深度学习简化素描 So Easy
收藏
快速回复
炼丹房 问答新手上路 2237 0

素描是表达艺术思想重要的第一步,并迭代地进行设计优化。它使得艺术家们迅速地把他们的思想呈现在纸上。优先考虑尽快地将概念和想法表达出来,而非精美的细节,因而得到是粗略的草图。从最开始的草图,根据反馈迭代地进行细化直到产生最后的作品。迭代求精的过程使得艺术家们不断地清除他们的草稿成为简化版的图画,因此也意味着额外的工作量。正如人们所料的那样,手动的临摹草图以产生一幅干净的图画的过程是非常的沉闷耗时的。

那么,如果存在一种方法可以从草图中得到干净的草图,那岂不是更好?立刻,无论使用什么样的画笔。很奇妙,是不是?在这篇文章里,我将讨论一个深度学习技术,使用全卷积网络从粗糙的草图中生成干净的草图。

好,并不是说之前没有这样的软件来做完成这样的工作,确实有,但问题是,它们通常用来做矢量图像(vector images)而不是光栅图像(raster images)。让我们从什么是矢量和光栅图像开始吧!

 


矢量图像和光栅图像?

光栅图像,也称位图,由颜色的单个像素组成。每个颜色像素组成了整幅图像。

光栅图像可以与点绘画相比,它们由一系列单独的彩色点组成。点绘画中的每个画图点可以代表光栅图像中的单个像素。当被看成一个单独的点时,它只是一种颜色;但当被看成一个整体时,有颜色的点构成了一幅生动而细致的画。光栅图像中的像素的作用类似,它提供了丰富的细节和逐像素的编辑。

光栅图形由根据显示图像而排列的彩色像素组成,与它不同的是,矢量图像由路径组成,每一个路径具有一个数学公式(向量),来告诉位置形成方式,以及如何填充该位置的颜色。

由于数学公式决定了如何渲染图像,无论大小,矢量图像能够保持其外观。因而它们可以被无限地缩放。

模型结构

这个模型最好的部分在于,它与光栅图像一起,将多个粗略的草图线条转化成一个干净的线条。

这个结构的另外一个优点是,任何维度的图像都可以作为网络的输入,并且得到与输入图像相同尺寸的输出。网络结构十分简单,第一部分作为编码器,在空间上压缩图像,第二部分,处理并提取图像中的基本线条,第三和最后一部分作为解码器,将小的或者更简单的特征转换成与输入同样分辨率的灰度图。所有的这些全部用卷积来完成。

向上或者向下卷积结构跟一个简单的滤波器组很相似。然而,重要的是要认识到,当分辨率低的情况下,通道数量会更大。例如,当尺寸变成 1/8 时,则需要 1024 个。这保证得到干净线条的信息由低分辨率的部分执行;训练网络来选择编码-解码结构需要携带哪些信息。

填充被用于补偿卷积核的大小,并确保在步长为 1 时,输出的尺寸和输入尺寸一致。池化层被增加步长的卷积层代替,以此来降低由前一层得到的分辨率。

损失函数

使用加权的均方准则作为模型的损失。

Y 是模型的实际输出,Y*是目标输出,M 是损失图,使用逐像素的矩阵乘法运算来计算损失。现在,通过对作者论文中使用的各种损失图进行测试,他们发现下面给出的一个性能最好。为了避免模型关注较粗的线而放弃较细的线,损失图减少了较粗线的损失。

我们通过查看每个像素真实(目标)标签的直方图来构造损失图。H(i,u,v) 是像素 I(u,v) 的局部归一化的位值。直方图通过中心距离的所有 d_h 个像素值的 b_h 位来构造。

由于用于训练的图像数目相当的少,因而使用各种数据增加技巧来扩充数据集。传统的变换方法,例如旋转,以及使用 Adobe Photoshop 来改变色调,删除图像,并添加噪声来产生更多的样本等。

这是一个最先进的模型,甚至优于 Prortrace 和 Adobe Live Trace。

 

参考

Torch 代码:https://github.com/bobbens/sketch_simplification

文章:http://hi.cs.waseda.ac.jp/~esimo/publications/SimoSerraSIGGRAPH2016.pdf

注:我会实现 pytorch 版本的代码,因为很难得到文章中的数据集。同时,作者提供了预训他们代码的预训练模型。


原文链接:https://medium.com/coinmonks/simplifying-rough-sketches-using-deep-learning-c404459622b9

0
收藏
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户