论文链接:
https://arxiv.org/pdf/2108.03798.pdf
代码:
https://github.com/wzmsltw/PaintTransformer
将一张照片通过算法模拟成某种绘画的质感,是计算机视觉以及图形学领域中的一个比较经典的任务。Siggraph 1998 上的一篇经典工作【1】,提出了一种基于图片梯度场来计算多尺度笔触参数的算法,我们去年下半年复现了这个算法,做了很多改进并进行了落地。但这个算法在效果上也存在很多的问题,比较突出的就是缺乏油画的质感,以及笔触比较杂乱,其核心问题在于其基于规则搜索笔触的方式很难获得好的笔触解。
在去年年底的时候,我们看到了网易伏羲实验室放出来的的油画渲染算法 Stylized Neural Painting[2],效果非常惊艳(见下面的gif)。比起暴力地生成大量笔触,这篇工作能够用相对较少量的笔触就勾勒出一幅惊艳的油画,同时,其逐笔绘画的过程也非常地吸引人。[2] 的核心算法思想是,固定渲染模块的网络参数,将笔触参数作为可优化的对象,通过优化的方式来寻找合适的笔画参数(包括颜色、坐标位置,旋转角度等)。这样的框架使得[2]具有很好的灵活性, 可以针对多种不同的笔触类型(比如油画、水彩、方块等)来生成绘画结果。但同时因为需要优化,其处理一张图片的速度较慢,需要好几分钟的时间,这使得其难以落地。
因此在读完[2] 后,我们很直接的一个想法就是,能否将笔触参数生成从一个优化任务改变成一个前馈预测问题,从而将生成笔触参数的时间大大降低到一秒内呢?
基于这样的想法,经过很多的探索和试错,我们设计了一套基于Transformer的笔触参数预测网络,其网络结构如下图所示:
Paint Transformer 的输入是一张画布图 和一张目标图 ,网络的任务是预测若干笔触参数,使得在 上绘制这些笔画后,能得到与 尽可能接近的图像结果。Paint Transformer 采用了与DETR 非常接近的网络结构,本质上,我们将笔画预测看作是一个旋转目标检测的任务。网络所预测的笔触参数包括笔画的中心点位置、长度、宽度以及旋转角(笔触的颜色也可以预测,不过后续我们发现直接在图像上采样颜色作为笔触颜色效果更佳),此外对于每个笔画还会预测一个二值的decision,用来判断是否要采用这个笔触(类似于DETR)。
在获得笔触参数后,区别于[2] 中所采用的神经网络可微渲染器,我们设计了一个可微的非网络渲染器。基于初始笔触图像以及笔触参数,我们采用仿射变换的方式获得变形后的笔触图像,并与画布进行融合。
算法的框架并不复杂,Paint Transformer 所遇到的主要难点还是缺乏合适的训练数据。因此,我们提出了一种基于仿真数据的训练框架,能够获得海量的数据用于训练。如下图所示,我们首先随机生成若干笔触参数并进行渲染得到画布图像 ,然后在 的基础上,再随机生成若干前景笔触,并渲染得到目标图像 ,Paint Transformer 的预测目标即是预测这部分前景笔触。训练时,我们同时在笔触参数层面以及图像层面添加了损失函数约束,具体的损失函数设计可见论文。
在inference阶段,参考[2]中的实现,我们也采用了金字塔式的多尺度渲染,即先预测并渲染最大尺度的笔触(将整张图看做是一个1*1 的patch),然后再逐渐缩小范围。从而实现笔触从粗到细的绘画过程。算法流程如下图所示。
在实际实现中,每个笔触实际上都需要对一张初始笔触图做仿射变换再和画布融合。对于较精细的尺度,由于笔触数量较多,所以会比较耗时。我们实现了并行渲染和串行渲染两种方式,其中并行渲染需要1s左右,速度快,显存消耗高;串行渲染则速度较慢,5s左右(魔改优化了不少),其优点主要是能生成绘画过程,并且因为额外添加了笔触排序的策略,效果更佳。感兴趣的同学可以用开源代码试玩一下两种渲染方式的差别。
三、实验结果
或者是把大师的油画重新画一遍。
扫码观看!
本周上新!
关于我“门”
▼