ECCV2016 SSGAN结构风格对抗网络

原文

Generative Image Modeling using Style and Structure Adversarial Networks

以往生成图像的研究是端到端的,对均匀分布的噪声采样而生成图像。

然而图像是兼具结构和纹理的一种产品(尤其是表征三维空间的图像)。纯粹通过像素采样所生成的图像无视了这一重要原则。

因此,文章提出了结构-风格生成对抗网络SS-GAN:

  • 先使用结构GAN生成法线图像
  • 然后将法线图像作为风格GAN的输入,生成2D图像
  • 从生成图像再生成法线来衡量损失
  • 先各自独立训练,再联合训练

overview

1 网络细节

网络细节

uconv是反卷积层

2 Structure GAN

生成器输入100维噪声,除了最后一层tanh外,其他每层BN+ReLU。输出法线图像

判别器激活函数使用Leaky-ReLU,不使用BN。输出法线图像的真假判断。

3 Style GAN

这是一个CGAN,条件是法线图像。使用场景的RGB图像和Kinect采集的法线图数据训练,只把 { 真实RGB图,相应的法线图 } 作为正例。

设噪声为$\hat Z$,RGB图像为X,法线图像为C,熵损失为L,则损失函数为

$$
\mathcal L_D = \sum ^{M/2}_{i=1}L(D(C_i,X_i),1)+\sum ^M_{i=M/2+1} L(D(C_i,G(C_i,\tilde z_i)),0)
$$
$$
\mathcal L_G = \sum ^M_{i=M/2+1} L(D(C_i,G(C_i,\tilde z_i)),1)
$$

生成器的细节如下

Style-GAN生成器

整个Style-GAN的架构如下

Style-GAN架构

可以看到和CGAN相比,多了一个FCN,将G生成的图像作为输入,输出法线图像。这一层的作用是提供额外的损失以优化生成的RGB图像结果。如果没有这个FCN,生成的RGB图像会有不少噪点,且和输入的法线图像也不能很好的对齐。

4 像素约束FCN

FCN处理图片-法线图像时,将法线的取值离散化,使用k-means聚类为40个类别。定义输出的法线图像尺寸是K*K(K=128),$F_k(X_i)$是第i个样本的第k个像素的输出,$C_{i,k} \in [1,40]$是第i个样本的第k个像素的法线的类别,$L_s$为softmax损失,则FCN的损失为

$$
\mathcal L_{FCN} = \frac{1}{K\times K} \sum ^M_{i=1} \sum ^{K \times K}_{k=1}L_s(F_k(X_i),C_{i,k})
$$

FCN的架构是AlexNet,128*128的图像先上采样成512*512再喂入FCN。倒数第2,3层采用512和1024个卷积核,最后一层是stride=2的反卷积。最终执行4倍分辨率上采样,生成高质量的结果。

引入了FCN之后,就将FCN和G的损失之和作为生成器的损失。

单独训练过程就是如下3步的循环:

  • 固定G,更新D
  • 固定FCN和D,更新G
  • 固定G,更新FCN

5 SSGAN的最终架构和训练

最终SSGAN的架构如下

SSGAN架构

联合训练时,将FCN去掉。Structure-GAN生成的法线图像进入Style-GAN之前先进行一次双线性插值。

反向传播中,Structure-GAN的生成器不仅会得到其判别器的梯度,也会得到Style-GAN的梯度。所以联合以后生成器损失就变成了2个GAN的生成器损失的加权和:

$$
\mathcal L^{joint} = L_G^{struct}(\hat Z) + \lambda L_G^{style}(G(\hat Z),\tilde Z)
$$

$\lambda=0.1$,并且设置Structure-GAN的学习速率比Style-GAN小,防止生成的法线图像过拟合生成的RGB图像。

6 结果

SSGAN结果

上面三行是采集到的法线图像、生成的RGB和原始RGB;下面两行是从3D场景模型中获得的法线图像和生成的RGB。

SSGAN插值

对2个法线图像进行插值得到一系列渐变的法线图像,采用固定的风格,SSGAN可以生成系列对应渐变的RGB结果;当结构固定,风格插值时,也能使结果略有差别。

风格插值时的差异确实挺小的。不得不说,结构+风格的分段还是比较粗略的


体会

这篇文章可以算是将过程融入对抗生成的代表作了。站在设计的角度,结构+风格划分仍然比较粗略,这也导致结果虽然和以往CGAN等模型相比好一些,但是和真实差距还是不小。

论文中的输入是法线图像,推而广之,更丰富的信息可以作为“结构”输入,比如轮廓,比如元素分布等等。关键是如何矢量化这些类型的结构信息。

对整个网络架构进行推广,将来能生成好结果的网络架构,可能是建立在更加细分的过程建模上的,比如草图一个网络,元素一个网络,排布一个网络,颜色一个网络……不过这种架构带来的问题也很明显:各过程网络差异化严重,连续过程导致总网络更深,反向传递很可能造成梯度消失,而这不一定是残差块能解决得了的。

那么如何更简单而有效地对过程进行分段、如何向量化各分段的输入信息,可能就是SSGAN的推广模型在更广泛领域落地的关键了。