StyleGAN论文笔记+修改代码尝试3D点云生成

编辑于2019/07/04,转载请注明

论文地址:https://arxiv.org/abs/1812.04948

源码地址:https://github.com/NVlabs/stylegan

一、介绍

虽然目前的GAN生成的图片质量和分辨率都有了很大提高,但还是存在一些问题:

  1. 生成器依然是个黑盒,对生成图片过程中的各个方面依然无法理解,比如随机特征的起源。
  2. 潜在空间的性质也没有得到很好的理解,已证明的潜在空间插值并没有提供定量的方法来比较不同的生成器。 

本文设计的生成器,揭示了控制图像合成过程的新方法。我们的生成器,起始于学习到的常量输入,并且在之后的每个卷积层,基于潜在代码,调整图片的“风格”,因此直接控制图像特征在不同尺度下的强度。

二、主要内容

1、基于风格的生成器网络结构

StyleGAN论文笔记+修改代码尝试3D点云生成_第1张图片

右侧Noise部分,给生成图片带来细节上的多样性:

  • 高斯Noise先输入B
  • B是学习出的每通道scale系数,自动控制Noise对生成图片的影响大小
  • Noise在每次卷积之后输入(我的理解,相当于bias)

左侧z,w部分,控制生成图片风格:

  • 把输入z映射到中间值w,z就是GAN网络常见的输入噪声。
  • 通过学习得到的仿射变换A,自动控制w变成图片的“风格”style
  • style输入到每个卷积+B之后的AdaIN(AdaIN是正则化,所以最后)中,每次输入都是对生成网络g的一次风格控制

中间生成网络g,是生成图片的主干:

  • 起始于常量Const,这个常量并不能控制图片风格。
  • g网络共18层,每两层2倍升采样一次,输出为高清的1024*1024
  • 最后输出为RGB

  AdaIN的定义:

 x_i 表示每个feature map

y表示style值,y=(y_s,y_b)

2、风格混合

在每次训练中,使用两个潜在值z1,z2,而不是一个z来训练数据。在生成图片时,替换输入两个不同的潜在值z1,z2,映射得到w1,w2,输入到AdaIN中的风格参数是两个不同的值,生成两个被z1、z2同时控制的图片。

 图中,有两组图片source A 和 B,分别用潜在值z1(n=6)和z2(n=5)生成。然后用z1和z2混合生成图片,在生成网络g中,不同尺度的层处,使用z2,其余位置用z1,可以观察到不同尺度输入z2带来的效果。

  • Coarse行:
    在4x4、8x8处,输入z2,B 控制了高层次信息,比如姿态、发型、脸型、眼镜等。
    其余位置输入z1,A控制了中、低层次信息,比如颜色、皮肤细节。
  • Middle行:
    在16x16、32x32处,输入z2,B 控制了中层次信息,比如一部分发型、眼睛开闭等。
    其余位置输入z1,A控制了高、低层次信息,比如姿态、脸型、眼镜,以及颜色等细节。
  • Middle行:
    在64x64~1024x1024处,输入z2,B 控制了低层次信息,比如颜色、皮肤细节等。
    其余位置输入z1,A控制了高、中层次信息,比如姿态、发型、脸型、眼镜,以及眼睛开闭等细节。

3、 随机变化

人体肖像中有很多方面可以被认为是随机的,比如头发、胡茬、雀斑或皮肤毛孔的精确位置。本文通过在卷积层后加入像素级(特征值矩阵)的噪声来实现。

StyleGAN论文笔记+修改代码尝试3D点云生成_第2张图片

4、解纠缠

一个潜在空间,包含了多个线性子空间,这些子空间各自控制着变化的一个因素,潜在空间的采样概率应该与训练数据中对应的数据密度吻合,但是由于训练数据有限,这两者往往不吻合,这会导致一些问题。

(我的理解,z这个噪声输入,根据不同的代码,是符合某一种分布的,但是训练数据有限,肯定无法覆盖z的分布,部分z是没有对应的训练数据的)

StyleGAN论文笔记+修改代码尝试3D点云生成_第3张图片

作者举了个例子,以头发长短和性别为特征:

  • 假设训练集里没有长发男性,那么训练集特征的分布就是(a),左上角长发男性缺失。
  • 缺失的训练数据,迫使从z到训练集特征的映射成为曲线,如(b),从而使缺失对应的部分在z中消失,以防止对无效的采样。
  • 使用f(z)=w的后,从z到w的学习映射能够“撤消”大部分的扭曲,如图中(c)

 关于这z --> w 的映射详述,以及相关的两个评价指标,在文中第四章。

三、修改源码网络生成3D的图

我工作的内容是研究3D相关的,于是对源码做了点修改,看看styleGAN对3D数据效果如何。

核心思想,就是把人脸图当成是3D空间中的一张纸,每个像素对应的xyz也输入到网络中,和rgb一起训练,然后生成xyzrgb。

当然,训练就是用的3D数据,要是先用2D训练在用输出结果转换成3D就没意义了。试了试,效果如下:

StyleGAN论文笔记+修改代码尝试3D点云生成_第4张图片

左侧为生成的3D点云,右侧为生成的2D图。

你可能感兴趣的:(论文笔记,图像生成,3D)