本文针对"Controlling generative models with continuous factors of variations"[1] 一文学习。

problem

本文和之前阅读的论文问题也差不多:针对连续的变换T{T}在latent space上寻找方向u{\vec{u}},使得生成的图像是原图像经过T{T}变换后的图像

是一种无监督(或者自监督)的控制GAN生成图像的方法。

Paper Framework

整体的文章结构如下:

  • Introduction 简要介绍了GAN的发展和通过控制latent code修改生成图像的以往工作。

  • Methods

  • Experiments

    • 量化方法:对研究的三种变换(x,y轴平移,比例放缩)提出了基于saliency detection的量化方法,探究控制变换量t{t}和检测的实际变换量的关系,并记录实际变换量的方差(方差越小表示t{t}越能精确控制实际变换量大小)。
    • Results on BigGAN:展示了BigGAN的结果,并对BigGAN不同层次注入的z{z}的影响进行了研究。
    • The importance of disentangled representations:在训练好的β{\beta}-VAE上应用该方法。
  • Related Work

  • Appendix:

    • 分析使用MSE作为Reconstruction Loss函数的缺点:倾向忽略高频率信号影响,使图像模糊。
    • 说明用于dSprites数据集上图像生成的β{\beta}-VAE结构。
    • 超参数比较(LPIPS量化结果):包括(1) σ{\sigma}(高斯核的方差) 的选择。(2) 是否 constraint。 (3) 比对其他的Reconstruction Loss。
    • 说明Inverse GAN求解的优化困难问题。
    • 展示了更多结果。

从文章结构来说,Appendix C部分应该放入实验部分。Related Work 一节放置在Introduction之后比较好。

Methods

整体上,作者的研究思路是:

先对原噪声z0{z_0}生成的图像I=G(z0){I = G(z_0)}经过变换Tδt{T_{\delta_t}}( 变换大小由δt{\delta_t}决定)得到图像I{I^{\prime}},求解Inverse GAN问题,即找到I{I^{\prime}}对应的latent codes zδt{z_{\delta_t}},并且得到由数对z0,zδt,δt{\\{ z_0, z_{\delta_t}, \delta_t \\}}组成的数据集。由该数据集研究求解某一种变换在latent space的方向u{\vec{u}}

所以,作者的主要理论性工作可以分为两步:首先是Inverse GAN,其次是求解variations对应的latent space上的方向u{\vec{u}}

Inverse GAN

Inverse GAN的问题是:对任意一张图像找到它在latent space上对应的点。寻找最优的latent codes z{z},使得GAN使用它生成的图像和目标图像的距离最小,距离由L(I1,I2){\mathcal{L}(I_1,I_2)}度量。

z^=argminzZL(I,G(z)){ \hat{z} = \arg \min_{z \in \mathcal{Z}} \mathcal{L}(I,G(z)) }

和Inverse GAN问题不同的是,这里的任意一张图像I{I}是原latent code z0{z_0}生成图像经过transform得到的。

I=Tt(G(z0)){ I = T_{t}(G(z_0)) }

本质上作者希望找到某种变化得到图像对应的latent codes的规律。

zN(0,Id){z \sim \mathcal{N}(0,\mathbb{I}_{d})},则zχd{\|z\| \sim \chi_{d}}

{limd+E[z]=dlimd+Var[z]=0{ \left\{ \begin{aligned} \lim_{d \to +\infty} &\mathbf{E}\left[ \|z\| \right] = \sqrt{d} \\ \lim_{d \to +\infty} &\mathbf{Var}\left[ \|z\| \right] = 0 \\ \end{aligned} \right. }

添加优化约束:zd{\|z\| \leq \sqrt{d}} (注:直观解释:限制z{z}的范围,避免生成图像的失真。)

Reconstruction Loss

L(I1,I2)=F{I1I2}F(σ)2=(I1I2)σ2{ \begin{aligned} \mathcal{L}(I_1,I_2) &= \| \mathcal{F}\{I_1 - I_2\} \mathcal{F}(\sigma)\|^{2} \\ &= \| (I_1 - I_2) \ast \sigma \|^{2} \end{aligned} }

其中σ{\sigma}为高斯核,{\ast}表示卷积运算。

(注:选择原因:MSE会倾向更多地惩罚高频信号,使得图像模糊(原文Appendix A进行了理论分析),该选择使得对高频信号的penalty降低,使得图像更真实(可参考原文Appendix C对比实验))

Solve

原始问题:

zT=argminzZ,zdL(G(z),TT(I)){ z_{T} = \arg \min_{z \in \mathcal{Z}, \|z\| \leq \sqrt{d}} \mathcal{L}(G(z),T_{T}(I)) }

初始化对该问题求解影响大,作者提出迭代求解:将Tt{T_{t}}分解成一系列小的变换Tδ0,Tδ1,,TδN{T_{\delta_0}, T_{\delta_1}, \cdots, T_{\delta_N}},(其中Tδ0=I,δN=δT{T_{\delta_0} = I, \delta_N = \delta_T}),求解一系列的子问题,前一个子问题的最优值作为下一个子问题的初始值,迭代求解。

zn=argminzZ,zdL(G(z;zint:=zn1),Tδn(z0))forn=1,,N{ z_{n} = \arg \min_{z \in \mathcal{Z}, \|z\| \leq \sqrt{d}} \mathcal{L}(G(z;z_{int} := z_{n-1}),T_{\delta_n}(z_0)) \qquad \text{for} \qquad n = 1, \cdots, N }

算法中的几个细节:

  • L{\mathcal{L}}不计算未定义区域的值。(因为平移导致没有定义的区域)
  • 经过transformed的图像不一定在图像流形上,可能导致求解的最优latent code和tranformed的图像还是差的很多,所以作者抛弃求解得到的重建误差超过阈值的latent code。

如此可以得到(z0,zδn,δn){(z_{0},z_{\delta_n},\delta_n)}组成的多对值,z0{z_{0}}表示初始值,zδn{z_{\delta_n}}是求解的最优latent code,δn{\delta_n}z0{z_{0}}zδn{z_{\delta_n}}生成图像的变换程度之差。完整算法如算法1。(注:为了方便理解较原文算法有所改动)

InverseGAN 求解算法
InverseGAN 求解算法

Defactor the variations

接下来作者寻找变换对应的方向u{\vec{u}}(\textbf{the way how factors of variations are encoded in the latent space} )。作者提出假设:某一变换的变换程度t{t}可以从latent code在方向u{\vec{u}}上投影预测得到,即:

t=f(z)=g(z,u){ t = f(z) = g(\langle\vec{z},\vec{u}\rangle) }

限制u=1{\|\vec{u}\| = 1}g{g}是分段线性函数。

(注:在作者的代码实现中,g{g}表示成一个多个分段线性函数,为什么取分段线性函数,它的取法尚有疑问。不过,特殊地,如果gθ(x)=θx{g_{\theta}(x) = \theta x},意味着此时t{t}直接和z,u{\langle z, \vec{u} \rangle}成线性关系,也是resonable的,所以作者更加合理地g{g}取成分段线性函数,但是如何选取分段会对最终的结果有影响吗,有多大的影响?)

t=fθ,u(z)=gθ(u,z)u=1{ t = f_{\theta,\vec{u}}(z) = g_{\theta}(\langle\vec{u},z\rangle) \qquad \|\vec{u}\| = 1 }

根据得到的数据集:(z0,zδt,δt){(z_{0},z_{\delta_t},\delta_t)}不能直接得到t{t},所以改成差分的形式:

δt=tG(zδt)tG(z0)=fθ,u(zδt)fθ,u(z0)u=1gθ(0)=0{ \delta_{t} = t_{G(z_{\delta_t})} - t_{G(z_0)} = f_{\theta,\vec{u}}(z_{\delta_t}) - f_{\theta,\vec{u}}(z_{0}) \qquad \|\vec{u}\| = 1 \qquad g_{\theta}(0) = 0 }

其中u{\vec{u}}θ{\theta}是可学习的参数,u{\vec{u}}为相应变换在latent pace上移动方向。f{f}的训练如同回归训练,使用MSE Loss

在latent space上修改生成图像的变换大小由以下公式:

z=zz,uu+tu{ z = z - \langle z, \vec{u} \rangle \vec{u} + t \vec{u} }

Conclusions

实验得到的结论有:

  • Results on BigGAN

结论:
(1) 检测的变换量随控制变换量t{t}的增加而增加,方法有效。(2) 即使不同类使用同一个变换的u{\vec{u}}也可以达到相同的效果。(3) BigGAN 将 z{z} 分为六个部分注入到不同层,作者对这六个部分的u{u}的范数进行比较,通常都是第一个部分的u{\vec{u}}的范数最大,也就是它对控制器最大的作用,除此之外,y-position变换的第五个level的范数较其他两个变换范数偏大。作者将这一发现归因于变换会同时改变物体的纵向位置和背景,两种因素有相关性。(4) 当t{t}过大时,实际变换大小反而下降,作者认为一部分原因是当图像主要物体和图像差不多大时,saliency model的表现会变差,导致检测的实际变换大小不准确。

  • Disentangled Representation

β{\beta}-VAE,β{\beta}越大,latent spaces越disentangled。该方法对β{\beta}-VAE也取得了相同的效果,而且β{\beta}越大,实际变换的大小的方差越小,效果越好。作者认为这说明latent space越disentangled,该方法表现越好。

问题

  • fθ,u{f_{\theta, \vec{u}}} 函数

从文中看fθ,u{f_{\theta, \vec{u}}}的作用仅仅在于求解u{\vec{u}}上了。我认为fθ,u{f_{\theta, \vec{u}}}函数在预测程度上是否准确,可以从侧面反映u{\vec{u}}的可靠性,而作者并没有对此深入,导致这个函数整体比较鸡肋。

  • 本篇文章也没有对方法的限度继续实验,继续增大或者减小t{t},生成的图像一定会出现失真或者实际可变换的大小不能继续改变的情况,如何改善该问题是一个值得思考的方向。

本文比较有意义的是提出了一种新的Inverse GAN的方法,而且很有意思地构造了数据集D{D},数据集D{D}的进一步探索可能会带来一些新的想法。

Reference


[1] Plumerault, A., Borgne, H. Le, & Hudelot, C. (2020). Controlling generative models with continuous factors of variations. 1–16. http://arxiv.org/abs/2001.10238