之前实习的时候做过一部分利用GAN将头像、视频转换成手绘风的东西,看了一些GAN的相关论文,总结一下它们的基本思路和可参考点。
COMIXIFY: TRANSFORM VIDEO INTO A COMICS(视频取关键帧,漫画化)
基于CartoonGan,这块原作者似乎并没有开源training的代码。
对于视频图片生成漫画风格,论文提出了以下两个步骤:
1. 视频关键帧抽取算法(frame extraction)
2fps采样-特征提取(GoogLeNet v1)-DSN计算得分计算出重要帧-用KTS对视频分割再获取关键帧-图片质量score(两种评估方式:人气质量和用NIMA算法做质量评估)
2. 将抽取得到的帧转换成漫画(style transfer)
style transfer的关键点主要在于风格和原图信息的保持的平衡。
论文比较了两种方式:
AdaIN(Adaptive Instance Normalization)会更接近卡通风格,但是会导致图片中一些地方的颜色不那么符合style。
UST-WCT(Universal Style Transfer-Whitening and Coloring transform)太style了以使得图片容易被扭曲。
论文提出来cartoon gan的优越性但是也提出了它的缺点。为了解决cartoon gan训练不稳定,边缘依然不够清晰,缺少漫画风格,增加了如下改进:
1. Generator的loss function使用non-saturating loss(即,对Generator maximize logD(G(z))而不是minimize
log(1 - D(G(z))))
2. 将sigmoid函数作为Discriminator 的最后一层
3. Generator和Discriminator的训练次数是3:1,即训练3次Generator后再训练一次Discriminator
4. 用真实图片、边缘被模糊的漫画和真实的漫画图片对Discriminator预训练
(这四点改进都比较平凡,猜测网络训练时应该是用了其他的技巧而取得如此好的效果,但是作者并没有开源训练代码。这篇论文是基于cartoonGAN的,或许可以给我们基于cartoonGAN增加一些特别的loss的启示。)
CartoonGAN: Generative Adversarial Networks for Photo Cartoonization
卡通化的难点:
1. 漫画风格和现实相比具有高度简化和抽象的特征
2. 卡通图像具有锐利边缘,顺滑的色彩偏差,纹理也相对简单,需要定义新的loss来对这些进行限制。
论文贡献:
1. 定义了两个loss:
(1)在传统的对抗loss上增加一个判别器的edge判断损失。真实图片做去锐利边缘操作后,和真实图片、卡通图一起输入判别器,让判别器在卡通区、去边缘图的干扰下判别真实图片。
(2)将content loss 定义为生成图和判别图的L1损失。
2. 用content loss来与训练生成器网络,作为一个可加速收敛的初始化操作。
Landmark Assisted CycleGAN
使用了以下loss
(1)传统gan的对抗loss
(2)cycle loss,将domain A 的图片通过generator_B后再通过generator_A 得到的图片和原图做L1损失,domain B 也类似操作,两个方向的loss相加。基本思想是生成的图片最后转回原本的domain要和原图比较像。
(3)landmark 一致性损失,生成图和原始图的热力图的landmark的L2距离
网络中共有两个大类的判别器:
global discriminators:包括conditional和unconditional。
conditional gan:判别器除了要判断图片domain外还需要判断输入的condition对不对。
在带条件的判别器中,输入是图片以及对应的landmark对应热力图。
一个训练技巧是,将带有不匹配的landmark的cartoon图片也作为假的输入,喂给判别器。
local discriminators:eyes local,nose local 还有 mouth local。
将五官图片单独抽取出来做局部的判别,其中左眼和右眼会被拼成一张图片。原文中说明五官的提取crop的值是empirical的。
训练阶段分为两步:
1. 不用local discriminator来训练出一个粗略的结果
2. 用预训练的landmark回归器来预测粗略结果中的五官位置,然后根据位置坐标将脸部五官提取出来作为local discriminator的输入。
U-GAT-IT: Unsupervised Generative Attentional Networks with Adaptive Layer-Instance Normalization for Image-to-Image Translation
重点:
1. 注意力机制:
用全局平均池化和最大池化得到类激活图,用于对特征图加权,在生成器和判别器都有此结构,使得模型能够集中转换重点位置。
2. 自适应的normalization(AdaLIN, adaptive layer-instance normalization):
参数学习、控制normalization中使用权重将layer normalization以及instance normalization结合到一起,作者认为AdaLIN能够让注意力模块灵活控制形状和纹理的变化而不需要改动网络结构和超参数。
损失函数:
U-GAT-IT的损失函数稍复杂,主要包括以下几块:
(论文和源码中的loss稍有不同,这里以源码为主进行归纳)
1. 对抗loss:
除了传统的GAN对抗loss外,也用判别器输出的注意力heat map作为一个分布计算loss,两者合在一起成为新的对抗loss
2. 循环loss(cycle loss):
即循环后得到的一个domain的图,和该domain的原图的L1距离。
3. CAM loss:
只有生成器有,通过生成器注意力机制的输出计算得出。
4. identity loss:
一个domain下的生成器对该domain原题生成的图像和原图之间的L1距离。
U-GAT-IT提升思路:
1. 注入landmark来代替注意力,可能会更快且提升准确度
2. 从normalization入手
3. 从数据如何清洗和标注入手
通俗来说,就是循环,x映射到y,y又要映射回x。
所以,loss包括三个部分,x到y的gan loss,y到x的gan loss,还有cycle consistence loss
U-GAT-IT的网络结构稍微复杂,以下两篇博客图文并茂地讲解了网络结构和loss,也能作为一个参考
http://www.twistedwg.com/2019/08/07/UGATIT.html
这篇文章讲解得比较好(辅助分类器)
https://blog.csdn.net/weixin_30834783/article/details/101280340
这篇讲了loss原理,还有部分源码解读
网友评论