新垣结衣是否住在StyleGAN2的潜在空间中?


1.首先

上次,由于调查了"新垣结衣是否住在ProgressiveGAN的潜在空间中?"这个主题,结果不幸地是,我发现她没有住。

这次,我想使用最新的StyleGAN2处理相同的主题。该代码由Google Colab创建并发布在Github上,因此,如果您想自己尝试,可以通过单击此"链接"并单击显示的表格顶部的" Web上的Colab"按钮来移动它。

2.什么是StyleGAN2?

首先,我将解释StyleGAN。
stylegan.png

这是到目前为止比较(a)GAN(ProgressiveGAN)和(b)StyleGAN的网络结构的示意图。 StyleGAN具有与以前完全不同的结构,并且由两部分组成:映射网络和综合网络。

映射网络由八个完全连接的层组成,并将输入潜变量z(1,512)映射到中间输出潜变量w(18,512)。

合成网络由9层组成,输入是4 x 4 x 512的常数,其中潜变量w(A)和噪声(B)输入到每一层。由于潜在变量w每层有两个输入,因此有9层x 2 = 18。

潜在变量w被称为样式,并控制主要图像的生成(脸部形状,肤色,头发颜色,性别等),而噪点是细节的特征(头发质量,头发流动,胡须等)。 )。控制雀斑,肤色等。最后,综合网络的分辨率将依次从4x4向上采样到1024x1024。

NVIDIA在2018年宣布了这种Style GAN。 NVIDIA在2019年宣布将StyleGAN2作为StyleGAN的改进版本(例如规范CNN的Weight而不是AdaIN)。

3.如何找到新垣结衣的潜在变量

スクリーンショット 2020-07-01 10.08.24.png

由于潜变量w(18×512)明显比潜变量z(1×512)更具表现力,因此搜索潜变量w。

该算法在合成网络的9个层中的每一个层中适当地初始化潜变量w,输出初始图像,并使与目标图像(新垣结衣的图像)的差异成为损失,从而使损失尽可能小。它优化潜在变量w使其变为。

因此,有必要将目标图像准备为具有9种不同分辨率的图像(4 x 4?1024 x 1024)。另外,应当注意,如果面部图像的剪切位置不合适,则到目前为止所学习的内容不能被充分利用,并且图像不能很好地生成。

然后,让我们实际尝试一下。

4.程序

1)切出脸部图像
通常,这是使用OpenCV完成的,但StyleGAN2学习的FFHQ数据集是通过使用dlib对齐(旋转以便使面部直立)并切出其自身设置的范围来创建的,因此由我自己完成。使用原始图像时将执行此处理。
スクリーンショット 2020-07-01 17.43.50.png
然后,将切出的面部图像(目标图像)调整为1024 x 1024。

2)创建多分辨率数据
将切割的面部图像转换为具有9种不同分辨率的图像。使用dataset_tool.py创建多分辨率图像TFRecord,这是Tensorflow规范。

3)搜索潜在变量w
基于多分辨率图像,在每一层中的损失被最小化并且搜索潜变量w。当将结果总结为目标图像的"目标",并总结为基于搜索到的潜在变量w生成的图像的"生成"时,看起来像这样。

スクリーンショット 2020-07-01 13.47.35.png

我选择了一个相对不错的产品,但我认为这是一个不错的结果。可惜我还不够,所以大概是70分。

4)带有潜在变量w的动画
可以通过将两个图像的潜在变量w之间的差异分成相等的部分,然后一点一点地改变它们以生成图像来创建所谓的动画。

movie_256.gif

原始尺寸为1024 x 1024,但无法上载到Qiita,因此以256 x 256尺寸显示,即原来的尺寸的16/16。这是真正的高质量。

*此博客中显示的图像具有1000次搜索尝试,但Google Colab中的搜索尝试次数设置为300。如果要更改搜索尝试次数,请更改projection.py中的num_steps值。

5.结论

结论是,"一个看起来像新垣结衣的人住在StyleGAN2的潜在空间中"(笑)。

(参考)
播放StyleGAN !!?无需额外学习即可进行图像编辑?