给手绘图着色(添加颜色或色彩):CVPR2020论文点评
给手绘图着色(添加颜色或色彩):CVPR2020论文点评
Learning to Shade Hand-drawn Sketches

论文链接:https://arxiv.org/pdf/2002.11812.pdf
摘要
本文提出了一种全自动的方法来产生详细和准确的艺术阴影对线素描和照明方向。本文还提供了一个新的数据集,其中包含1000个用灯光方向标记的线条和阴影对示例。值得注意的是,生成的阴影可以快速传达草图场景的底层三维结构。因此,本文的方法产生的阴影可以直接使用或作为艺术家的一个极好的起点。本文证明了本文提出的深度学习网络采用手绘草图,在潜在空间建立三维模型,并渲染产生的阴影。生成的阴影尊重手绘线和底层三维空间,并包含复杂和准确的细节,如自阴影效果。此外,生成的阴影包含艺术效果,如边缘照明或从背光出现的光晕,这是可以通过传统的三维渲染方法实现的。
1. Introduction
本文的工作使用深度学习方法来学习一个非线性函数,该函数“理解”二维草图所隐含的三维空间关系,并呈现二元阴影(图1top)。本文的神经网络的原始输出是二值阴影,艺术家可以根据线条图在单独的图层上修改二值阴影。不需要额外的后处理,本文中的图像是原始网络输出和输入线性部分的简单组合。如果需要软阴影,艺术家可以使用本文网络的第二方输出(图2 S2)。本文的网络也会从不断变化的照明方向产生一致的阴影(第4.3节),即使本文是从一组稀疏的照明方向训练。
本文工作的主要贡献:
•本文创建了一个新的数据集,其中包含1160个手绘线条图和标记有照明方向的阴影。
•本文提议建立一个网络,该网络“理解”线条图所隐含的结构和三维空间关系,并产生高度详细和准确的阴影。
•端到端应用程序,可根据给定的二维线条图和指定的照明方向,从任意照明方向生成二进制或软阴影。

2. Related Work
Non-photo realistic rendering in Computer Graphics
计算机图形学中cel动画的风格化阴影[23,3]以前的工作集中在cel动画中的阴影渲染和对阴影应用艺术外观。这些论文强调阴影在人对cel动画的感知中起着重要的作用。
Image translation and colorization
近年来,对图像翻译中生成性对抗网络的研究[6,21]产生了令人印象深刻的合成图像,这些图像被认为是与原作相同的。Pix2pix[13]在其生成器网络中部署了U-net[25]体系结构,并演示了在图像转换应用中,当包含跳过连接时,U-net的性能得到了提高。CycleGAN[41]介绍了一种在没有成对示例的情况下学习从输入图像到样式化输出图像的映射的方法。对真实灰度图像着色的研究[2,39,12,40]证明了用GANs和U-net[25]结构对图像着色的可行性。
Deep learning in line drawings
研究者认为线条画包括线条艺术色彩化[36,15,38,5,4]、素描简化[28,26]、智能墨水机[27]、线条提取[17]、线条样式化[18]和从素描计算普通地图[29,20]。
Relighting
深度学习也被应用于现实场景的重新照明。Xu等人 [35]提出了一种在给定来自五个不同方向光源的图像的情况下,从任意方向光重新照明的方法。Sun等人 [30]提出了一种在给定单一输入(如选择)的情况下重新照亮人像的方法。训练数据集由多摄像机设备捕获。这部研究与本文的不同之处在于,他们侧重于重新塑造富有特色的现实主义形象,而本文则侧重于手绘草图的艺术阴影。
Line drawings to normal maps
Sketch2normal[29]和deep normal[20]使用深度学习从线条图计算法线贴图。他们的训练数据集是用真实感渲染从三维模型中渲染出来的。Sketch2带有一些注释的四条腿动物在线图的正常训练。DeepNormal使用对象的遮罩作为输入线图形。他们解决了一个不同的,可以说更难的问题。但是,计算出的法线贴图可用于渲染阴影,本文将此方法与第4节中的直接阴影计算进行比较。
3. Learning Where to Draw Shadows
3.1. Data Preparation and Data Augmentation
本文观察到,艺术家倾向于从一组相对较小的特定照明方向中进行选择,特别是在漫画和日本动画中。为此,本文在图1中定义了由2×2立方体形成的26个照明方向。本文发现,用户可以直观地从围绕2D对象顺时针的八个照明方向和指定光源的三个深度(前、平面内和后)中的一个方向进行选择。
3.2. Network Architecture
本文的发电机包含以下模块:剩余块[7][8]、薄膜块[22]和挤压和激励(SE)块[10]。本文的生成器的总体架构遵循具有跳过连接的U-net架构[25,13]。本文的鉴别器使用残差块。详细信息如图2所示。

本文还提取了两个监控端输出,s1和s2,以便于反向传播。本文的渲染网络的早期阶段生成连续的、柔和的阴影图像。在最终阶段,网络将这些图像转换为二值阴影。侧边输出s1和s2中的软阴影质量如图2所示。本文再次注意到,本文的输出不需要任何后期处理来生成二值阴影;本文中的图像是将本文的生成器的输出与输入草图合成的直接结果。
本文的鉴别器的基本模块包括降尺度残差块和残差块。由于不同阴影的许多局部特征彼此相似,本文部署了自我注意层,使本文的鉴别器对远处的特征敏感。在图2中,最后一个鉴别器由全局平均池化、0.3概率的退出和256个滤波器的完全连接层组成。因为产生阴影比辨别假阴影和真阴影更困难,所以一个简单的辨别器就是充分和简单的训练。
3.3. Loss Function

4. Experiments and Evaluation

如图3、4、6、5、7所示,本文的工作表现良好。例如,在两个人和多人的线条图(图3第二行)上,本文的工作能够阴影每个字符,但是,DeepNormal和Sketch2Normal将多个人视为一个对象。值得注意的是,本文的工作在生成非常详细的阴影方面非常出色,例如在女孩的头发和裙子上。
就草图的复杂性,尽管本文的训练数据集有中等程度的细节,但是本文的网络在复杂的草图上表现良好,如图3所示。本文也可以在不需要遮罩的情况下,在物体边界之外表现出色。此外,当光源改变深度时,本文的工作会产生更精确的细节。如图4所示,DeepNormal[20]中的阴影几乎覆盖了整个图像,因此看起来好像光线在物体后面。但是,在这些图像中,光源与对象位于同一平面上,从而产生侧照明。
在图6中,本文通过与3D测试模型的比较,解释了当光线位于物体平面时,DeepNormal[20]表现不佳的原因。特别是,使用本文的技术,兔子头上和腿上的阴影更接近地面的真实情况,并显示自我阴影。
如图4所示,由于256×256块的多重平均值,DeepNormal的法线贴图具有低方差(请参阅DeepNormal的第3.4节)。这种低方差导致前照灯看起来像侧照灯,侧照灯看起来像后照灯。Sketch2Normal生成的一些图像有一些伪影,因为预测的法线贴图有一些空白区域。因为它是在简单草图上训练的,草图2通常是在复杂草图上训练的。
最后,本文注意到,本文的方法产生艺术边缘高光从背光。请参阅图3和更多比较图中的普通地图的补充材料。与在本文的数据集上训练的Pix2pix和U-net相比,本文的架构在质量上也表现良好(图7)。一般来说,U-net在精确的软阴影中生成,这与本文的二元阴影目标相去甚远。Pix2pix在对象边界之外生成阴影,并忽略草图中的几何信息。在本文早期的研究中,本文使用了带有跳跃连接的残差块自动编码器,它产生了软阴影。为了达到二值阴影的目的,本文增加了一个鉴别器,并采用了一个更深层次的渲染网络。如果艺术家想要柔和的阴影,可以使用侧面输出s2。




虽然本文网络的最终输出是二进制阴影,但是如果一个艺术家想要软阴影,可以使用侧面输出s2,如图2所示。本文的工作是对先前草图自动着色工作的补充[36,15,38,5,4]。图8展示了本文的阴影可以与这些着色方法相结合。虽然大多数先前的彩色化工作结合了阴影和阴影效果,但将这些效果分离为独立的图像层以进行进一步的艺术编辑将是有趣的。
用户接受了一个简短的培训,展示了来自本文的数据集的15个地面真实阴影草图,并强调了前照灯和侧照灯之间的差异。本文还要求用户将自己的绘画体验分为“专业”、“一般”、“初学者”或“0体验”。本文在网上分发了调查结果,共收到60份。有绘画经验者40人,其中专业画家13人,一般水平11人,初学者16人。结果见表1。本文的方法表现良好,几乎与艺术家创造的地面真实阴影相匹配。本文进行了单因素方差分析来分析利克特得分。结果证明,本文的结果在数量上与groundtruth相似(p=0.24),优于其他方法(p<0.05)。
本文进行了7项消融研究,如图10和9所示。为了定量比较,本文计算了Frchet起始距离(FID)[9]每4000次迭代本文的工作和消融研究使用整个数据集。图9显示本文的工作具有最低和最稳定的FID。这说明本文提出的每一个特征都是必要的,而全变分正则化是至关重要的。图10定性地表明,如果没有本文提出的元素,网络性能就会下降:边界会变得模糊,并且会出现阴影。在所有消融研究中,“无自我注意”的影响最小,如图10(b)和图9中的FID所示。设置总变化正则化器的系数大于5倍或移除正则化器对整体性能的影响最大,并破坏阴影的平滑度。相应的FID也强调了全变正则化的重要性。在图10中,所有图像使用相同的照明方向“810”。一般情况下,当去除自关注层时,网络的细节表现不佳,阴影块内有微小的伪影;如果没有坐标通道或胶片块,输出会有不真实的阴影边界和物体边界外的阴影;如果没有SE块,会有暗影“粉刺”,整体外观看起来凌乱;如果没有两个深监督输出(λ1=.9,λ2=λ3=0,λ4=.4),输出会有网格状的点伪影,精度较低;如果网络中电视正则化器的权重增加5倍或缺少电视正则化器,则网络收敛速度过快陷入局部极小值。

5. Future Works
在不同大小的输入图像上,网络性能是不不变的。大部分320×320输入具有最好的性能,因为本文的网络是在320×320大小的输入上训练的。480×480的输入图像也有很好的性能。尽管本文在用户研究中几乎与地面真实相匹配,但是本文生成的阴影并没有地面真实那么详细,特别是在硬表面物体上。另外,如果输入线图的本地部分,则网络无法产生正确的阴影。作为未来的工作,本文将开发一个网络,可以输出各种图像大小,以满足高分辨率的绘画要求。
6. Conclusions
本文的条件生成对抗网络学习一个非真实感渲染器,可以自动从手绘草图生成阴影。本文是第一个尝试通过深入学习从草图直接生成阴影的人。与现有技术相比,本文的结果更为有利,现有技术可以在简单和复杂的图像上渲染草图的法线贴图。本文还证明,本文的网络架构能够“理解”二维线图所隐含的三维空间关系,足以生成详细和准确的阴影。
给手绘图着色(添加颜色或色彩):CVPR2020论文点评的更多相关文章
- 第03课 OpenGL 添加颜色
添加颜色: 作为第二课的扩展,我将叫你如何使用颜色.你将理解两种着色模式,在下图中,三角形用的是光滑着色,四边形用的是平面着色 上一课中我教给您三角形和四边形的绘制方法.这一课我将教您给三角形和四边形 ...
- WindowsPhone开发—— 使用手绘图片做景区导览地图
前些日子在做景区App遇到需求,使用手绘图片做一个简易的地图,支持放大缩小平移以及显示景点Mark,安卓上可以使用一个叫做“mAppWidget”的开源库来完成,WP上有人建议用ArcGIS,但是考虑 ...
- canvas给图形添加颜色
canvas给图形添加颜色 合法属性 ctx.fillStyle = 'orange'; ctx.fillStyle = '#FFA500'; ctx.fillStyle = 'rgb(255, 16 ...
- 在linux下给grep命令添加颜色
1打开文件,添加如下一段话 vim ~/.bashrc alias grep='grep --color' 2退出保存 source ~/.bashrc ...
- 给shell添加颜色
编辑/etc/baserc 添加 TERM=xterm-color; export TERM alias ls='ls -G' alias ll='ls -lG' 给vim添加颜色 编辑/usr/sh ...
- roughViz 一个可重用,功能强大的手绘图表组件
前段时间介绍过一个chart.xkcd 的手绘图表组件,roughViz 是另外一个,同时也提供了 比较多的图表类型,api 参考文档也比较全 支持的图表类型 Bar Horizontal Bar D ...
- vue项目中使用bpmn-为节点添加颜色
内容概述 本系列 “vue项目中使用bpmn-xxxx” 分为五篇,均为自己使用过程中用到的实例,手工原创,目前属于陆续更新中.主要包括vue项目中bpmn使用实例.应用技巧.基本知识点总结和需要注意 ...
- CVPR2020论文解读:手绘草图卷积网络语义分割
CVPR2020论文解读:手绘草图卷积网络语义分割 Sketch GCN: Semantic Sketch Segmentation with Graph Convolutional Networks ...
- openGl从零开始之添加颜色
OpenGL 支持两种颜色模式:一种是 RGBA模式,一种是 颜色索引模式.无论哪种颜色模式,计算机都必须为每一个像素保存一些数据,即通过每一个像素的颜色,来改变整体图形的颜色.不同的是, RGBA ...
随机推荐
- 小图标文字对齐的终极解决方案demo
CSS代码: .icon { display: inline-block; width:20px; height:20px; background: url(delete.png) no-repeat ...
- ThinkPHP5 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php
1.首先修改Apache的httpd.conf文件. 确认httpd.conf配置文件中加载了mod_rewrite.so 模块,加载的方法是去掉mod_rewrite.so前面的注释#号 讲http ...
- ACM JAVA大数
有的水题自己模拟下大数就过了,有的各种坑,天知道曾经因为大数wa了多少次....自己最近学者用JAVA,下面是自己总结的JAVA常用知识.. 框架 import java.util.Scanner; ...
- hdu 1867 求两个串的"和"最小 ,KMP
题意: 给你两个字符串,让你求str1+str2,就是把1的后面和2的前面重叠的地方只显示一遍就行了 abc + bcd = abcd,要求和的长度最小,和最小的前提下求字典序最小,还有就 ...
- adbi学习:安装和使用
adbi 是一个android平台(arm 32 )的so注入+挂钩框架,源码开放在github上 : ADBI 项目 .从github上下载来目录如下: 执行主目录下build.sh编译后目录如下 ...
- WindowsPE 第五章 导出表编程-1(枚举导出表)
导出表编程-1-枚举导出表 开始前先回忆一下导出表: 1.枚举dll函数的导出函数名字: 思路: (1)加载dll到内存里. (2)获取PE头,逐步找到可选头部. (3)然后找到里面的第一个结构(导出 ...
- php isset()与empty()的使用
PHP isset函数作用 isset函数是检测变量是否设置. 格式:bool isset( mixed var [, mixed var [, ...]] ) 返回值: 若变量不存在则返回FALSE ...
- 基于MXNET框架的线性回归从零实现(房价预测为例)
1.基于MXNET框架的线性回归从零实现例子 下面博客是基于MXNET框架下的线性回归从零实现,以一个简单的房屋价格预测作为例子来解释线性回归的基本要素.这个应用的目标是预测一栋房子的售出价格(元). ...
- Object划分
Object划分 1.PO(persistantobject)持久对象 PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不包 含任何对数据库的操作. 2.DO(Domain ...
- 改善c++程序的150个建议(读后总结)-------19-26
19. 明白在c++中如何使用c c++可以兼容c的绝大部分代码,但是还是有一部分不能兼容. c语言的编译器在调用函数时会把函数翻译成 : "_函数名",例如: int nasa( ...