CVPR2018 CartoonGAN 解读

CartoonGAN前言

      本文是对CVPR2018的一篇关于图像风格迁移的论文解读,即CartoonGAN,它可以用真实景物的照片作为源图片,生成任意风格的漫画,如新海诚或者宫崎骏。有人说这不就是Photoshop的滤镜而已嘛,当然Photoshop也可以做到,但是只给你一分钟来产生上百张效果图,Photoshop能否做到?我自己也在复现,但发现真的很难调出效果好的模型,自己的实验还得继续。

作者调出的模型效果是非常不错的了,效果图如下:真实景物——新海诚风格——宫崎骏风格

CVPR2018 CartoonGAN 解读_第1张图片

论文链接:

http://203.187.160.133:9011/openaccess.thecvf.com/c3pr90ntc0td/content_cvpr_2018/papers/Chen_CartoonGAN_Generative_Adversarial_CVPR_2018_paper.pdf

作者未开源代码,只给出了四个训练好的模型(宫崎骏、细田守、今敏和新海诚风格),作者用torch进行实验,模型下载链接:

http://cg.cs.tsinghua.edu.cn/people/~Yongjin/CartoonGAN-Models.rar

于是Github有人写了test代码用以上四个模型来前向测试图像,以下用Pytorch写的test代码还不错:

https://github.com/Yijunmaverick/CartoonGAN-Test-Pytorch-Torch

大家可以自己看论文,下载模型,找一些真实场景图试试速度和效果。


CartoonGAN理论解读

CartoonGAN其实就是一个用于非成对image训练的GAN,可以说是单向的CycleGAN罢了,创新点就三点:

1、作者自己设计的GAN网络架构,包括生成网络G和判别网络D,都比较直观基础,如下图:

CVPR2018 CartoonGAN 解读_第2张图片

2、提出了损失函数L(G,D),由两部分组成,第一部分Ladv(G,D)为普通的GAN损失,第二部分Lcon(G,D)为保证原真实图像内容的内容损失:

CVPR2018 CartoonGAN 解读_第3张图片


       可以看到Ladv(G,D)比普通GAN损失多加了一个EejSdata(e)[log(1 - D(ej))],也就多了一个数据集ej,那这个数据集怎么来的,它是通过对原始卡通图像进行边缘模糊后得到的,目的是为了让生成网络G生成边缘清晰的图片,所以D(ej)判别为假数据。而Lcon(G,D)就是Neural Style里面的内容损失,只不过把L2损失改为L1损失,在这里我们可以看成是一个正则化。

3、引入一个初始化过程,先用Lcon(G,D)单独一个损失来训练G,大概训练10个epoch,目的是为了生成的图片初始后就能保证原真实场景的内容,毕竟普通的单向GAN要是没有加入一些限制很难稳定保证原始图片的内容,大多会出现扭曲或更严重的情况,而类似的,在CycleGAN中体现为用cycle_loss来保证原始图片内容。


CartoonGAN实验

       想跑一跑CartoonGAN的test效果,直接用作者所给的四个模型就好了,假如还想自己训练其他风格的模型,或者加点别的效果,那就得自己写代码实现论文以上三个创新点了,难度不大,用Tensorflow/Pytorch实现很快,只不过要自己挑好训练集、训练集数量要足够多,质量也要好,其次各种调参也是非常重要的,训练时间也很长啦~~


最后,欢迎大家讨论交流哈哈~




你可能感兴趣的:(深度学习)