Learning to Cartoonize Using White-box Cartoon Representations 阅读笔记
前言
自己在阅读这篇文章的过程中发现github中并没有公开数据集,后来发现在issue中可以找到,但是有提到可能会因为版权问题不放数据集链接,因此在这里为了方便大家学习,在此记录一下自己运行这个项目的过程,如果大家需要论文可以直接从github的项目中查看论文,相关文献推荐cartoongan和AnimeGAN。
github地址: https://github.com/SystemErrorWang/White-box-Cartoonization
数据集链接:https://pan.baidu.com/s/12R6sHLjLX4lGOR2OXulavg
提取码:83jk
VGG19预训练模型链接:https://pan.baidu.com/s/19e2hxWBdrE-MUnT4AD4qRA
提取码:wukk
一、文件目录
下载百度网盘中的数据集,将文件解压后放置data文件目录即可,请将下载的VGG19预训练模型更改为如下的名字,我提供的下载链接是VGG16和VGG16的预训练模型。
二、需要安装的包
个人尝试了tensorflow=1.12.0和tensorflow=1.8都可以运行,若是已经安装了tensorflow=1.8的应该不需要再重新安装了,请务必安装scikit-image=0.14.5,否则可能报错。
tensorflow-gpu==1.12.0 and 1.13.0rc0
scikit-image==0.14.5,
在utils.py文件中使用了scikit-image,其中包括以下接口,如过使用最新的scikit-image,会因为取消了 “kind=mix” 而报错。
def label2rgb(label_field, image, kind='mix', bg_label=-1, bg_color=(0, 0, 0)):
#std_list = list()
out = np.zeros_like(image)
labels = np.unique(label_field)
bg = (labels == bg_label)
if bg.any():
labels = labels[labels != bg_label]
mask = (label_field == bg_label).nonzero()
out[mask] = bg_color
for label in labels:
mask = (label_field == label).nonzero()
#std = np.std(image[mask])
#std_list.append(std)
if kind == 'avg':
color = image[mask].mean(axis=0)
elif kind == 'median':
color = np.median(image[mask], axis=0)
elif kind == 'mix':
std = np.std(image[mask])
if std < 20:
color = image[mask].mean(axis=0)
elif 20 < std < 40:
mean = image[mask].mean(axis=0)
median = np.median(image[mask], axis=0)
color = 0.5*mean + 0.5*median
elif 40 < std:
color = image[mask].median(axis=0)
out[mask] = color
return out
三、运行数据集
预训练
想要自己训练数据集要先将生成器进行预训练,只有当生成器预训练完后才可以开始整个生成对抗网络模型的训练,右击运行pretrain即可,右边是放置的数据集目录。
在compare_cartoon\White-box-Cartoonization\train_code\pretrain\images目录下可以看到数据集经过生成器预训练的图片。
在compare_cartoon\White-box-Cartoonization\train_code\pretrain\saved_models目录下放置的是预训练的模型,在正式训练中需要加载此预训练的模型。
正式训练
在正式训练中右击train.py开始训练即可,右边是加载VGG19的模型,我电脑写相对路径识别不到,因此写了绝对路径地址,这里已经要将VGG19文件名字改正,不然找不到模型。
通过saver.restore(sess, tf.train.latest_checkpoint(‘pretrain/saved_models’))这一条语句加载预训练模型,开始整个模型的训练
训练结果
我自己本身使用的是2080TI显卡,参数使用的是默认的参数。
该文件目录中显示的是训练结果。
风格迁移前
风格迁移后
训练出的模型和训练日志文件如下。
总结
总体上,该论文中已经实现了很好的风格迁移的效果,如果有需要学习的小伙伴可以直接按照我的步骤进行实验,有什么问题欢迎留言交流,后续可能会进行论文部分的讲解。