对于这个项目的 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 U R L − O URL -O URL −O ZIP_FILE
mkdir -p $TARGET_DIR
unzip Z I P F I L E − d ZIP_FILE -d ZIPFILE −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 D a t e s e t U R L − O DatesetURL -O DatesetURL −O ZIP_FILE
unzip Z I P F I L E − d ZIP_FILE -d ZIPFILE −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=KaTeX parse error: Expected 'EOF', got '&' at position 136: …export=download&̲id=1U5HCRpZWAbD…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
下面是我在学习HTML和CSS的时候整理的一些笔记,有兴趣的可以看下:
进阶阶段
进阶阶段,开始攻 JS,对于刚接触 JS 的初学者,确实比学习 HTML 和 CSS 有难度,但是只要肯下功夫,这部分对于你来说,也不是什么大问题。
JS 内容涉及到的知识点较多,看到网上有很多人建议你从头到尾抱着那本《JavaScript高级程序设计》学,我是不建议的,毕竟刚接触 JS 谁能看得下去,当时我也不能,也没那样做。
我这部分的学习技巧是,增加次数,减少单次看的内容。就是说,第一遍学习 JS 走马观花的看,看个大概,去找视频以及网站学习,不建议直接看书。因为看书看不下去的时候很打击你学下去的信心。
然后通过一些网站的小例子,开始动手敲代码,一定要去实践、实践、实践,这一遍是为了更好的去熟悉 JS 的语法。别只顾着来回的看知识点,眼高手低可不是个好习惯,我在这吃过亏,你懂的。
1、JavaScript 和 ES6
在这个过程你会发现,有很多 JS 知识点你并不能更好的理解为什么这么设计,以及这样设计的好处是什么,这就逼着让你去学习这单个知识点的来龙去脉,去哪学?第一,书籍,我知道你不喜欢看,我最近通过刷大厂面试题整理了一份前端核心知识笔记,比较书籍更精简,一句废话都没有,这份笔记也让我通过跳槽从8k涨成20k。
2、前端框架
前端框架太多了,真的学不动了,别慌,其实对于前端的三大马车,Angular、React、Vue 只要把其中一种框架学明白,底层原理实现,其他两个学起来不会很吃力,这也取决于你以后就职的公司要求你会哪一个框架了,当然,会的越多越好,但是往往每个人的时间是有限的,对于自学的学生,或者即将面试找工作的人,当然要选择一门框架深挖原理。
以 Vue 为例,我整理了如下的面试题。