基本信息

论文标题:《PaintsTorch: a User-Guided Anime Line Art Colorization Tool with Double Generator Conditional Adversarial Network》 —— 基于用户指导的,且具有双生成器的条件对抗网络的动漫艺术线条着色工具

论文链接https://dl.acm.org/doi/10.1145/3359998.3369401

关键词:深度学习(Deep Learning)、神经网络(Neural Networks)、生成对抗网络(Generative Adversarial Network)、用户指导的上色(User-guided Colorization)

发表会议:2019 CVMP

主要贡献:开发了一个类似于PaintsChainer的上色工具,用户可以提供类似于笔刷的颜色提示。

创新点

  • 引入了一种基于笔触仿真的方法来生成提示,也就是颜色提示从随机像素采样修改成了笔划的形式
  • 提出了一个新的更清洁的数据集
  • 使用包含了双重生成器的GAN网络来提高视觉效果

实验过程

数据集

作者提到了两个比较出名的动漫人物数据集:

  • Nico-opendatahttps://nico-opendata.jp/en/seigadata/index.html, 包含了400k 张图像

  • Danbooru2018https://hyper.ai/datasets/9000

    Danbooru2018 数据集是由 Kaggle 平台发布,包括日本动漫人物的图像与相对应的标签信息。标签通常分为版权、角色、作者等信息。该数据集由动漫爱好者收集,十分具有针对性,弥补了类似于 ImageNet 等大型数据集对于图像粗略描述分类而导致的应用限制问题。

但是他还是嫌弃数据集的质量不够高,对《User-Guided Deep Anime Line Art Colorization with Conditional Adversarial Networks》这篇论文所使用的数据集进行了一定的过滤和添加,最后确定了适用于训练的数据集,其包含了21930张的高质量动漫插图。

预处理

1. 生成线稿图

线稿是从原图中生成的,提取方法XDoG(场景画用XDoG不太合适,这玩意好像主要针对动漫人物

2. 颜色提示生成

使用带有圆形笔刷的PIL图形库模拟人的画笔,并且定义了四个参数:笔划数0-120、笔刷厚度1-4、每一笔的长度1-5、宽度0-10。

(这每一笔长度原翻译是the number of waypoints per stroke,宽度是a square of width)

3. 模型输入变形

假设此时给定一张动漫图,需要将它的尺寸放大/缩小并裁剪至512*512*3的尺寸,接着分出两个分支。其中一个分支将图片作为XDoG的输入,进而得到对应的线稿图。另一个分支则继续将照片调整为128*128*3的尺寸,生成模拟提示(Strokes),结合黑白mask才成为最后的用户提示128*128*4

(其实我觉得不应该是4呀,把遮罩的channel广播成三通道,然后和strokes相乘,这样不是就可以保证颜色的提取了么??)

比如右边的用户提示,它的背景是黑色的,这就是遮罩的作用。

模型结构

生成网络使用的是U-net结构,不过内部由ResNetXt块组成,这些块可以增加网络的感受野。

引入了本地特征网络F1,其作用是使用Illustration2Vec网络来标记插图,这些标签与提示图像一起通过生成器和鉴别器传递,并作为条件,把相关的语义信息提供给生成器。

判别器收到SRGAN的启发,不过相同的块结构更多,层数也更多。

显然,在论文中还有两个网络结构,一个是F2,另一个是G2。

第二个生成器负责从第一个生成的假插图中生成合成线条图,F2应该是ImageNet [5]上预训练的VGG16 [26]的第四次卷积激活结果。

损失函数

生成器的损失函数由三个部分组成:内容部分,对抗部分,重建部分。

1. 内容部分

感知损失用于内容损失,这取决于输出图像与原始图像之间的L2值,该值来自ImageNet [5]上预训练的VGG16 [26]的第四次卷积激活得到的结果。

2. 对抗损失

使用了局部条件网络F1作为条件输入,并且使用WGAN-GP区分了虚假实例和真实实例

3. 重建损失

对线稿图进行重建,由于输出不包含多通道信息,因此使用均方误差计算差值。

综合来看就是:

鉴别器损失函数由两部分组成:Wasserstein Loss & Penalty Loss.

1. Wasserstein loss:详细查看WGAN

2. Penalty Loss:参考《Progressive Growingd of GANs for Improved Quality, Stability, and Variation》

(损失函数可真有讲究

实验结果

评估指标FID

对于我们已经拥有的真实图像,这个向量是服从一个分布的,(我们可以假设它是服从一个高斯分布);对于那些用GAN来生成的n维特征它也是一个分布;我们应该立马能够知道了,GAN的目标就是使得两个分布尽量相同。假如两个分布相同,那么生成图像的真实性和多样性就和训练数据相同了。

于是,现在的问题就是,怎么计算两个分布之间的距离呢?我们需要注意到这两个分布是多变量的,也就是前面提到的n维特征。也就是说我们计算的是两个多维变量分布之间的距离,数学上可以用Wasserstein-2 distance或者Frechet distance来进行计算

较低的FID意味着两个分布之间更接近,也就意味着生成图片的质量较高、多样性较好。

详细查看【深度理解】如何评价GAN网络的好坏?IS(inception score)和FID(Fréchet Inception Distance)

Stroke & model

Stroke与单/双生成器的网络结构相配合,可以使得FID的值更低。(所以我要不要也试试用笔划来做提示?

由于艺术是完全主观的事情,因此我们无法推断出双生成器是否在视觉上改善了输出。

最后,较大的batch不会对FID值产生太大影响,但可以加快训练速度。

评估指标MOS

MOS(Mean Opinion Score),平均主观意见分。在国际标准中,统一使用MOS值来评价系统接收到的经过压缩后的话音质量,这边用来评价生成图片的质量。

SD的效果明显比其他两个好一些。

上色效果

就总体而言还是蛮好的,但是还是会出现一些color bleeding的问题。

下排是PaintsTorch的效果,它在圆上的上色不会溢出,说明对边界的处理效果比较好,应该是损失函数的作用。

笔触效果对比

上一排是PaintsChainer,笔触的粗细长短对上色结果的影响很大,但是本文的方法并不太受影响,意思是上色效果比较稳定。

缺点

在存在高度饱和的颜色或提示比较密集的情况下,输出图像上出现的伪像

个人学习

  • 笔划效果比随机像素的提示效果可能会好一些,可以作为消融实验的参考
  • 双生成器的必要性作者自己的都不太确定,具体可以看看DualGAN,我觉得在山水画这里可以学习一下
  • 损失函数也可以参考一下,鉴别器损失这个还挺有意思的