SketchMan 水记 (线稿增强)

SketchMan 水记 (线稿增强)

https://github.com/LCXCUC/SketchMan2020

https://github.com/jerryli27/pixiv_dataset

https://doi.org/10.1145/3394171.3413720

这篇论文感觉写的不是很专业……

数据集

从pixiv上弄了 2120 张最受欢迎的线稿(可以说是很少了)

获得业余线稿

分成 30 个组,找了 30 个大学生来画了一遍

每张图片都有两种版本,

一种是徒手画图,在一两分钟内概括一下关键部分。眼睛就是椭圆,头发就是随机的稀疏的线。

一种是描图,允许放大描,在6-8分钟内描画。模拟手抖、断断续续、偏移、遗漏之类的。(然而似乎并没有用这个版本)

去背景、上色(用于 线稿→灰度图→线稿)

因为大部分真正的线稿都是没有背景的,为此,作者为图片创建了背景 mask (似乎是根据线稿创建的,没讲清楚)

专业的线稿是很少的,而且大部分都没有对应的上色版,作者使用了 PaintsChainer 和 Style2paint V3 给线稿自动上色(震惊,这么整不太好吧,唉,算了,确实这个也算是没有办法的办法,感觉能体会到作者内心的纠结)

获得区域分割图(用于 线稿→区域→线稿)

在专业线稿上用 SLIC 超像素,得到区域分割图

注意到单次的 SLIC 不能提取出完整的外轮廓,所以分别水平反转、逆时针转 90 度后做 SLIC ,三个结果结果叠起来作为最终结果。

在这里插入图片描述

于是我们得到一个干净而且准确的区域分割图。

业余线稿变形(数据增强)

可以通过图像变形[24]得到更多的业余线稿。

模型(试了5种)

结构似乎就是 cGAN,

把业余线稿作为条件,输入噪声,输出专业线稿

在这里插入图片描述

线稿→线稿

把输入的业余线稿当作条件,做 cGAN, G : { x , z } → y G:\{x, z\} \rightarrow y G:{x,z}y

在这里插入图片描述

损失函数有三部分:cGAN 对抗损失、L1 损失、SSIM 损失、VGG 感知损失

VGG 感知损失使用的是 VGG-19 的 relu1_1, relu2_1, relu3_1, relu4_1, relu5_1 这些层。

线稿→线稿 + Huber 损失

用 Huber 损失 替换上面用的 L1 损失

在这里插入图片描述

  • 查了一下 Huber 损失:

    回归损失函数:Huber Loss_Peanut_范的博客-CSDN博客_huber loss

    可以看作 L1 损失和 L2 损失的融合。

    特点是:

    1. 差不多就是 L1 损失,
      当误差很小的时候,变为 L2
    2. 在 0 处可微分
    3. 当 δ→0 时,Huber损失会趋向于 L1;
      当 δ→ ∞(很大的数字),Huber损失会趋向于 L2
    4. 对异常值的敏感程度:比 L1 敏感,没有 L2 敏感

    为何使用 Huber 损失:

    使用 L1 用于训练神经网络的一个大问题就是,它的梯度始终很大,这会导致使用梯度下降训练模型时,在结束时遗漏最小值。对于 L2 ,梯度会随着损失值接近其最小值逐渐减少,从而使其更准确。

    在这些情况下,Huber损失函数真的会非常有帮助,因为它围绕的最小值会减小梯度。而且相比 L2,它对异常值更具鲁棒性。因此,它同时具备 L2和 L1 这两种损失函数的优点。不过,Huber损失函数也存在一个问题,我们可能需要训练超参数 δ,而且这个过程需要不断迭代。

可以把 Huber 损失看作 L1 损失和 L2 损失的融合。

线稿→线稿 + 判别器感知损失

加入判别器的感知损失 L F M \mathcal{L}_{FM} LFM

在这里插入图片描述

这玩意和 PatchGAN 的差别就是 PatchGAN 的卷积层输出的是真假,这个的卷积层输出的是特征图,后面还要在判别器里继续卷,判断真假的

线稿→灰度图→线稿

分为两个阶段

第一个阶段是线稿生成灰度图 G S C : { x , z } → y ^ C G_{S C}:\{x, z\} \rightarrow \hat{y}_{C} GSC:{x,z}y^C

灰度图的 groud truth 是由上色图灰度化得到的。

在这里插入图片描述

第二个阶段是一个 边缘提取 GAN, G C S : { y ^ C , z } → y G_{C S}:\left\{\hat{y}_C, z\right\} \rightarrow y GCS:{y^C,z}y

在这里插入图片描述

(为啥这玩意也要 GAN)

线稿→形状→线稿

分为两个阶段

第一个阶段是业余线稿生成区域图, G S A : { x , z } → y A G_{S A}:\{x, z\} \rightarrow y_{A} GSA:{x,z}yA

这里的区域图(或者说边缘图)就是前面用 SLIC 超像素弄出来的那个

在这里插入图片描述

第二个阶段输入区域图和业余线稿,生成专业线稿, G A S : { y A ^ , x , z } → y G_{A S}:\left\{\hat{y_{A}}, x, z\right\} \rightarrow y GAS:{yA^,x,z}y

在这里插入图片描述

这里,作者的思路是,第一个阶段拟合外轮廓,第二个阶段拟合内部细节

实验

几个任务效果的直观对比,还顺便拉上了 pix2pix

在这里插入图片描述

看得出 线稿→线稿 比另外两个差远了

在这里插入图片描述

F-score 比较,似乎 线稿→灰度图→线稿线稿→形状→线稿 要更好一点

(不过我感觉从上面的效果来看,差不太多,可能稍微好一点点吧)

如果用区域图的 IoU 来衡量,线稿→形状→线稿线稿→灰度图→线稿 好一点,但是最好的是 线稿→线稿 + 判别器感知损失

还有实验,没仔细看了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值