把现实中拍的照片,变成动漫的画风,这就是cartoonGAN做到的事情。
这篇论文的全名叫做:《CartoonGAN: Generative Adversarial Networks for Photo Cartoonization》
cartoonGAN主要做了以下几点创新:
1、提出了一个基于GAN的方法,使用不配对的训练集,将现实世界的照片转为卡通图片。
2、提出了两个loss,在生成器中使用了语义分割loss,在判别器中使用了边缘提升对抗loss。
3、提出了一种初始化权重方法。
接下来让我们详细看看吧:
一、网络结构
上方的是生成器,先降采样再上采样。
下方的是判别器,作者在这使用了简单的patch-level的判别器,网络比较浅,因为动漫和真实照片的风格差异主要在局部特征。
二、损失函数
总损失函数如下:
对抗损失Ladv:
本来GAN的对抗损失没什么好说的,无非就是生成器G努力生成逼真的图像,判别器D努力判断图像是真的还是假的,但是作者发现卡通图片的清晰边缘是一个很重要的特征,当生成器生成的图没有清晰的边缘但是有正确的形状的时候,判别器容易也把它分成真图。这样就会导致生成的图不像卡通风格。
因此定义数据Sdata(p)为真实照片photo,Sdata(c)为卡通图片cartoon,作者在这里自己生成了数据Sdata(e),去掉了Sdata(c)中清晰的边界。具体做法:1、使用标准的canny边缘检测器检测边缘像素 2、膨胀边缘区域 3、在膨胀的边缘区域使用高斯平滑。效果如下图:
因此Ladv如下:
也就是说判别器不仅要分清c和p,也要分清c和e。
内容损失Lcon:
其次是需要保持生成的图的语义信息。因此作者使用了预训练好的VGG,并在特征上对生成的图和原图施加了一个l1loss:
这里作者特别说明了他们使用l1loss跟其他人都使用l2不太一样,是因为卡通画跟真实照片差别太大。
三、初始化方式
因为GAN比较难训练,要是随机初始化权重的话,优化器很容易陷在局部最优里。作者为了解决这个问题,作者预训练了生成器,只使用Lcon。在对比实验中作者证明了这种方式是有效的。下图为预训练中10个epoch的生成结果:
四、实验部分
实验部分就不细说了,放几张图: