随手拍张照片, 顺势转换为宫崎骏, 新海诚等日漫大师的手绘风格作品, 这个专门生成动漫图像的 GAN, 实测很好用.
机器之心根据真实店铺照片生成的效果图, 一度以为, 这就是某个日漫番剧的截图.
尽管最近 2019 年的图灵奖颁给了计算机图形学, 颁给了皮克斯 3D 动画, 但很多人可能认为二维动漫更有意思一些. 像宫崎骏, 新海诚这些大师手绘下的动漫, 才有了灵魂, 张张都能成为壁纸, 而整个日漫也以二维为核心.
如果有模型能将真实画面转化为日漫风格的手绘画面, 那一定非常炫酷. 最近机器之心发现确实有这些模型, 从 CartoonGAN 到 AnimeGAN 都能生成非常有意思的图像.
这里有一个 TensorFlow 新项目, 它实现了 AnimeGAN, 并提供了预训练模型. 也就是说, 我们下载后可以直接试试生成效果. 作为日漫风格的爱好者, 我们很快就试用了一下新项目.
项目地址: https://github.com/TachibanaYoshino/AnimeGAN
虽然原项目给出的优秀示例很多都是街景, 但我们发现各种场景也都还行, 如下是我们试用的原图与生成效果. 看看第一张樱花道生成效果, 忽然有一种《千与千寻》的感觉.
如果只针对人物, 转换效果也是非常不错的. 我们尝试将新垣结衣的照片输入 AnimeGAN 模型, 然后就有如下这种神奇的画风, 感觉直接用到动漫里也没什么问题了.
在原 GitHub 项目中, 作者还给了非常多的示例, 上面只是机器之心试用的结果, 你也可以来用一用.
AnimeGAN
整个项目实现的是论文「AnimeGAN: a novel lightweight GAN for photo animation」中所提方法, 作者在论文中分别将 AnimeGAN 与 CartoonGAN,ComixGAN 进行对比.
从图中可以看到, AnimeGAN 在细节方面的表现要优于以上两种方法, 色彩相对而言更加自然, 涂抹感也没有那么强烈. 最明显的是第二行的效果图, 使用 AnimeGAN 生成的漫画更加接近宫崎骏的画风.
方法简介
对于这个项目的 AnimeGAN, 如下所示为 AnimeGAN 所采用的生成器网络与判别器网络. 看起来模型整体是比较常规地一个卷积神经网络, 但它会采用实例归一化以及新型的 LReLU 激活函数.
除了架构细节上的更新外, 作者还提出了以下三个新的损失函数:
灰度风格(grayscale style)loss
灰度对抗(grayscale adversarial)loss
色彩重构(color reconstruction)loss
这些损失函数能够让生成图片的风格更加接近于真实的漫画风格.
下表比较了 ACartoonGAN 与 AnimeGAN 的模型大小与推理速度. 可以明显看出, AnimeGAN 是个相对轻量级的 GAN, 具有更少的参数量以及更快的推理速度.
总体来说, 新提出来的 AnimeGAN 是一种轻量级的生成对抗模型, 它采用了较少的模型参数, 以及引入格拉姆矩阵 (Gram matrix) 来加强照片的风格. 研究者的方法需要采用一系列真实图片与一系列动漫图片做训练, 且这些图片并不需要成对匹配, 这就表明训练数据非常容易获得.
项目实测
我们在 Ubuntu 18.04 下对本项目进行了测试, 相关依赖环境如下:
- python 3.6.8
- tensorflow-gpu 1.8
- opencv
- tqdm
- numpy
- glob
- argparse
这些依赖项可以说都是 CV 中常用的扩展库, 我们就不用费尽心思去解决各种依赖环境冲突的问题了, 这里给个好评.
以下是本项目的训练及测试详细流程. 我们首先将 AnimeGAN 项目克隆到本地, 在 Jupyter notebook 中输入:
!Git clone https://github.com/TachibanaYoshino/AnimeGAN
将工作目录切换到 AnimeGAN:
- import os
- os.chdir('AnimeGAN')
- print(os.getcwd())
接下来下载项目作者提供的预训练模型, 使用 VIM download_staffs.sh 创建一个 Shell 文件, 输入如下命令:
- URL=https://github.com/TachibanaYoshino/AnimeGAN/releases/download/Haoyao-style_V1.0/Haoyao-style.zip
- ZIP_FILE=./checkpoint/Haoyao-style.zip
- TARGET_DIR=./checkpoint/saved_model
- mkdir -p ./checkpoint
- wget -N $URL -O $ZIP_FILE
- mkdir -p $TARGET_DIR
- unzip $ZIP_FILE -d $TARGET_DIR
- rm $ZIP_FILE
- DatesetURL=https://github.com/TachibanaYoshino/AnimeGAN/releases/download/dataset-1/dataset.zip
- ZIP_FILE=./dataset.zip
- TARGET_DIR=./dataset
- rm -rf dataset
- wget -N $DatesetURL -O $ZIP_FILE
- unzip $ZIP_FILE -d $TARGET_DIR
- rm $ZIP_FILE
- VGG_FILE=./vgg19_weight/vgg19.npy
- wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate'https://docs.google.com/uc?export=download&id=1U5HCRpZWAbDVLipNoF8t0ZHpwCRX7kdF'-O- | sed -rn's/.*confirm=([0-9A-Za-z_]+).*/1n/p')&id=1U5HCRpZWAbDVLipNoF8t0ZHpwCRX7kdF" -O $VGG_FILE && rm -rf /tmp/cookies.txt
保存后退出, 以上命令会将预训练的模型, vgg19 权重以及训练数据集下载并保存到其对应目录下. 在 notebook 中运行:
!bash download_staffs.sh
至此即完成所有准备工作, 运行如下代码就可以对模型进行训练了:
!python main.py --phase train --dataset Hayao --epoch 101 --init_epoch 1
AnimeGAN 的训练过程如下图所示:
当进行测试时, 我们需要将用于测试的图片保存到 dataset/test/real 目录下, 并运行如下代码:
!python test.py --checkpoint_dir checkpoint/saved_model --test_dir dataset/test/real --style_name H
当看到以上输出说明程序已经成功运行完成, 生成结果保存在 results 文件夹下. 可以看到, 在 P100 GPU 上生成一幅图片需要大约 2.3 秒左右.
来源: http://www.tuicool.com/articles/numi6n6