【StyleGAN代码学习】模型修改与拓展技巧

完整StyleGAN笔记:http://www.gwylab.com/pdf/Note_StyleGAN.pdf

基于StyleGAN的一个好玩的网站:www.seeprettyface.com
—————————————————————————————————

第三章 StyleGAN模型修改与拓展

前两章介绍了很多关于StyleGAN的模型原理与实现细节,而通常我们在自己去应用新的模型时需要对它做一些修改与拓展,以实现个性化的功能。这一章将记录和介绍一些我学到的部分trick,虽然不难,但能够帮助我们在使用StyleGAN时拥有更加灵活的手段和方法。当然,更重要的应该是先有想法,然后再找trick去实现这些想法。我的一些想法被记录在了网站:www.seeprettyface.com/research_notes.html中,虽然都比较简单,但是这种实践对提升自己的工程能力还是有一定帮助的。

3.1 如何修改StyleGAN架构

在第二章中已经对StyleGAN的网络做了细致的介绍,如果对tensorflow掌握的熟练的话,tf.nn下有一大堆好用(但不好记。。。)的网络层或结构,依据自己的需要去对原始架构做删改或增添就可以了。
还有一种应用方法是将StyleGAN的一些组件扒出来用在别的模型架构上,目前AdaIN在生成模型中的应用是非常广泛的。我的感觉,当被学习的图片服从一个很强的集中分布模式时(譬如人脸图,猫图,Waifu图等),AdaIN就特别适合应用在这种模型上。
AdaIN还有一种妙用,就是用来做样式迁移(Style Transfer)。举个例子,在我的Github上展示的所有生成器,如黄种人生成器网红脸生成器明星脸生成器超模脸生成器以及萌娃脸生成器等,都是用样式迁移(代码上基于Finetune编写)制作出来的,即当新数据与原数据服从同一种分布但仅具有样式的不同时,就可以基于AdaIN实现这样的风格转换。AdaIN实现样式迁移的效率非常高,本站提供的所有人脸生成器都是用单卡1080Ti制作的,训练时间不超过1天。

3.2 如何拓展StyleGAN组件

通常来说,StyleGAN最有价值的部分是生成器,它可以提供各种各样的生成图片给我们。但有时我们希望生成的图片能被定制,或者有所筛选,于是可以在生成器初始端添加一个latents的处理模块,或者在生成器末端添加一个图片的筛选模块等。
假设我们现在想给latents添加一个线性变换矩阵以实现latents的微调,就可以构建一个create_variable_for_generator()函数来创建一个对latents进行线性变换的模块:
在这里插入图片描述
上述函数创建了一个模块,在给initial_dlatents添加了17个编辑向量的处理后,得到新的latent作为返回值。如果想要将这个模块融入进Generator中,只需在创建Generator时将其写在custom_inputs参数中即可。
在这里插入图片描述
上图便是在Generator初始化时调用了create_variable_for_generator()函数以创建扩增后的模型输入,注意另外一个函数create_stub()会返回一个值为0的tf.constant常量,可以理解为是生成器输入的但无效的标签。
注意,这份包含Generator类的代码来自官方的额外补充工作中,这一部分讲述的技巧也是从这份代码中学到的,在此特别感谢NVIDIA团队的无私开源与分享。

3.3 如何指定仅拓展组件的参数更新而固定Generator参数

当添加了新的组件后,训练策略也会有一些改变。有时我们会希望Generator的参数固定不动,模型仅去更新新添加组件的参数。一种简单的方法是,optimizer.minimize()函数中有一个可选参数var_list,它可以指定需要更新的参数有哪些(如下图所示)。
在这里插入图片描述
因此,我们只需将指定组件的参数作为var_list,然后交给optimizer去更新就可以了。

3.4 拓展组件无法梯度反向传播的解决方法

有时我们在模型后端加上了类别分类器或者姿态提取器,但是通常它们有可能不是用tensorflow写的,这样在反向传播时这些模块的梯度就无法计算,训练就会出问题。一种非常简单的解决方法是使用@tf.custom_gradient装饰器为这些模块自定义一阶导或二阶导,类似于下面这种写法:
在这里插入图片描述

3.5 StyleGAN衍生论文介绍

StyleGAN的应用和商业潜力是非常大的,最后推荐两篇基于StyleGAN的偏应用方向的论文:

3.5.1 StyleGAN-Embedder

这篇paper主要关于如何用StyleGAN做图像编码、图像变换与风格融合。
· Arxiv地址:https://arxiv.org/pdf/1904.03189.pdf
· 译文地址:http://www.gwylab.com/pdf/stylegan-embedder_chs.pdf

3.5.2 StyleGAN-Wearing

这篇paper主要关于如何用StyleGAN做换装应用。
· Arxiv地址:https://arxiv.org/pdf/1908.08847.pdf
· 译文地址:http://www.gwylab.com/pdf/stylegan-wearing_chs.pdf


版权声明:本文为a312863063原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。