原文
Generative Image Modeling using Style and Structure Adversarial Networks
以往生成图像的研究是端到端的,对均匀分布的噪声采样而生成图像。
然而图像是兼具结构和纹理的一种产品(尤其是表征三维空间的图像)。纯粹通过像素采样所生成的图像无视了这一重要原则。
因此,文章提出了结构-风格生成对抗网络SS-GAN:
- 先使用结构GAN生成法线图像
- 然后将法线图像作为风格GAN的输入,生成2D图像
- 从生成图像再生成法线来衡量损失
- 先各自独立训练,再联合训练
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的架构如下
可以看到和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的架构如下
联合训练时,将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 结果
上面三行是采集到的法线图像、生成的RGB和原始RGB;下面两行是从3D场景模型中获得的法线图像和生成的RGB。
对2个法线图像进行插值得到一系列渐变的法线图像,采用固定的风格,SSGAN可以生成系列对应渐变的RGB结果;当结构固定,风格插值时,也能使结果略有差别。
风格插值时的差异确实挺小的。不得不说,结构+风格的分段还是比较粗略的
体会
这篇文章可以算是将过程融入对抗生成的代表作了。站在设计的角度,结构+风格划分仍然比较粗略,这也导致结果虽然和以往CGAN等模型相比好一些,但是和真实差距还是不小。
论文中的输入是法线图像,推而广之,更丰富的信息可以作为“结构”输入,比如轮廓,比如元素分布等等。关键是如何矢量化这些类型的结构信息。
对整个网络架构进行推广,将来能生成好结果的网络架构,可能是建立在更加细分的过程建模上的,比如草图一个网络,元素一个网络,排布一个网络,颜色一个网络……不过这种架构带来的问题也很明显:各过程网络差异化严重,连续过程导致总网络更深,反向传递很可能造成梯度消失,而这不一定是残差块能解决得了的。
那么如何更简单而有效地对过程进行分段、如何向量化各分段的输入信息,可能就是SSGAN的推广模型在更广泛领域落地的关键了。