0

我正在学习 StyleGAN 架构,我对映射网络的目的感到困惑。在原始论文中它说:

我们的映射网络由 8 个全连接层组成,所有输入和输出激活(包括 z 和 w)的维数为 512。

并且没有关于这个网络以任何方式被训练的信息。

就像,它不会产生一些无意义的价值吗?

我试过创建一个这样的网络(但形状更小(16,)):

import tensorflow as tf
import numpy as np

model = tf.keras.models.Sequential()
model.add(tf.keras.Input(shape=(16)))

for i in range(7):
  model.add(tf.keras.layers.Dense(16, activation='relu'))

model.compile()

然后根据一些随机值对其进行评估:

g = tf.random.Generator.from_seed(34)
model(
    g.normal(shape=(16, 16))
)

我得到一些随机输出,例如:

array([[0.        , 0.01045225, 0.        , 0.        , 0.02217731,
        0.00940356, 0.02321716, 0.00556996, 0.        , 0.        ,
        0.        , 0.03117323, 0.        , 0.        , 0.00734158,
        0.        ],
       [0.03159791, 0.05680077, 0.        , 0.        , 0.        ,
        0.        , 0.05907414, 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.03110216, 0.04647615, 0.        ,
        0.04566741],
       .
       .  # More similar vectors goes there
       .   
       [0.        , 0.01229661, 0.00056016, 0.        , 0.03534952,
        0.02654905, 0.03212402, 0.        , 0.        , 0.        ,
        0.        , 0.0913604 , 0.        , 0.        , 0.        ,
        0.        ]], dtype=float32)>

我错过了什么?网上有没有关于训练Mapping Network的资料?有什么数学解释吗?真的很困惑:(

4

1 回答 1

2

据我了解,映射网络没有单独训练。它是生成器网络的一部分,并像网络的其他部分一样根据梯度调整权重。

在他们的stylegan 生成器代码实现中,它编写的生成器由两个子网络组成,一个映射和另一个合成。在stylegan3 生成器源代码中,它更容易看到。映射的输出被传递到生成图像的合成网络。

class Generator(torch.nn.Module):
    ...
    def forward(self, z, ...):
        ws = self.mapping(z, ...)
        img = self.synthesis(ws, ...)
        return img

下图显示了stylegan 2019 论文中的映射网络。第 2 节描述了映射网络。

带有映射层的生成器图

在此处输入图像描述

映射层在论文中用 表示,它采用从正态分布初始化f的噪声向量并映射到中间潜在表示。它是用 8 层 MLP 实现的。Stylegan 映射网络实现将 MLP 层设置为 8。zw

他们在第 4 节中提到,

一个共同的目标是一个由线性子空间组成的潜在空间,每个子空间控制一个变化因素。但是,每个因素组合的采样概率Z需要与训练数据中相应的密度相匹配。

我们的生成器架构的一个主要好处是中间潜在空间W不必支持根据任何固定分布的采样。

因此,z并且w具有相同的尺寸,但wz. w从图像的中间潜在空间中寻找W一个允许特定图像编辑。

来自用于编辑论文的编码器,

在此处输入图像描述

在带有其他更改的 stylegan2-ada 论文中,他们发现映射网络深度 2 优于 8。在stylegan3 映射层代码实现中,映射中的默认层数设置为 2。

参考

于 2022-02-05T01:29:20.580 回答