Another url:https://bulihanjie.github.io/2019/03/19/GLANN笔记/
虽然生成对抗网络(GANs)在图像生成的任务中大放异彩,但依然存在着各种各样的问题。论文中参考GLO和IMLE模型,提出非对抗式的图像生成模型GLANN,克服了GANs的缺点,得到了不错的效果。
图像生成的定义即是:给定有限的图像训练样本学习得到能生成整个图像分布的函数。
GANs由于其鲁棒的生成能力,能够把无监督学习的任务转化为一个有监督的学习任务,能够适用于各种图像任务中,如不同域之间的无监督图像转换、生成超分辨率图像等。但GANs依然存在以下两个问题:
GLO(Generative Latent Optimization)模型通过学习隐变量到图片的映射函数,最终能够得编码所有模式(每个图片有对应的隐变量编码得到),具有以下的优点:
GLO算法具体如下图所示, 对于所有的图片都赋予一个隐变量 z i z_i zi,模长限定为1。然后通过一个CNN的网络得到图片,然后采用Lap1 loss来进行优化。其中loss函数是
Lap 1 ( x , x ′ ) = ∑ j 2 − 2 j ∣ L j ( x ) − L j ( x ′ ) ∣ 1 \operatorname{Lap}_{1}\left(x, x^{\prime}\right)=\sum_{j} 2^{-2 j}\left|L^{j}(x)-L^{j}\left(x^{\prime}\right)\right|_{1} Lap1(x,x′)=j∑2−2j∣∣Lj(x)−Lj(x′)∣∣1
考虑生成图像和真实样本之间不同维度间的差异。并且每个图片 x i x_i xi通过训练有对应的 z i z_i zi生成得到,因此图像的生成分布能够捕捉训练集的所有模式。但由于隐藏空间的分布是未知的, z i z_i zi是通过学习得到,难以选择适合的隐藏变量来生成别的图像。
IMLE(Implicit Maximum Likelihood Estimation)也是非对抗式的图像生成方法之一。其中,隐变量 z i z_i zi服从某个分布,,然后采用最近邻的训练方式,使得训练样本在隐空间中都有隐变量生成得到与之相近的图像。具体的算法流程如下图所示:
对于每个批次的样本,首先从隐变量中采样生成大量的图像,然后训练样本从中找到与之最近的生成样本,计算L2 loss进行优化:
σ ( i ) ← arg min j ∥ x i − x ~ j θ ∥ 2 2 ∀ i ∈ S \sigma(i) \leftarrow \arg \min _{j}\left\|\mathbf{x}_{i}-\tilde{\mathbf{x}}_{j}^{\theta}\right\|_{2}^{2} \forall i \in S σ(i)←argjmin∥∥xi−x~jθ∥∥22∀i∈S
这个步骤是从隐空间中找到最近的隐变量进行优化,具体所用的指标对 IMLE 影响很大,尤其是当训练集大小有限时。当使用 L2 损失直接在图像像素上训练时,IMLE 合成的图像是模糊不清的。
GLANN(Generative Latent Nearest Neighbors)模型,本质上就是结合了 IMLE 和 GLO 两者之长,克服了两种方法各自的主要缺点。因此模型具有易采样、能建模整个分布、训练稳定且能合成锐利的图像的特点。其具体模型如下图所示:
如图所示,模型主要包含三部分,隐变量的学习、隐变量与分布的对齐和生成图像。
与GLO模型相似,也是每个训练样本有一个对应的可学习隐变量 z i z_i zi,通过学习隐变量和图像之间的映射函数得到图像生成函数:
arg min G ~ , { z i } ∑ i ℓ perceptual ( G ~ ( z i ) , x i ) s.t. ∥ z i ∥ = 1 \arg \min _{\tilde{G},\left\{z_{i}\right\}} \sum_{i} \ell_{\text {perceptual}}\left(\tilde{G}\left(z_{i}\right), x_{i}\right) \quad \text { s.t. } \quad\left\|z_{i}\right\|=1 argG~,{zi}mini∑ℓperceptual(G~(zi),xi) s.t. ∥zi∥=1
不同的在于这里的loss函数采用VGG perceptual loss function。
为了克服隐空间分布未知的缺陷,通过学习 T T T函数,把另一个服从高斯分布的 e e e隐变量映射到 z z z所在的空间。这里借鉴IMLE模型,采用最近邻的方式,每次采样多个 e t e_t et变量,然后找到 z t z_t zt对应最近的 T ( e t ) T(e_t) T(et),然后对 z t − T ( e t ) z_t−T(e_t) zt−T(et)优化,具体的公式如下:
z ~ m = T ( e m ) \tilde{z}_{m}=T\left(e_{m}\right) z~m=T(em)
e t = arg min e m ∥ z t − T ( e m ) ∥ 2 2 e_{t}=\arg \min _{e_{m}}\left\|z_{t}-T\left(e_{m}\right)\right\|_{2}^{2} et=argemmin∥zt−T(em)∥22
T = arg min T ~ ∑ t ∥ z t − T ~ ( e t ) ∥ 2 2 T=\arg \min _{\tilde{T}} \sum_{t}\left\|z_{t}-\tilde{T}\left(e_{t}\right)\right\|_{2}^{2} T=argT~mint∑∥∥∥zt−T~(et)∥∥∥22
当已经知道 e e e变量和 z z z变量的映射函数 T T T,也知道 z z z变量到图像的生成函数 G G G,那么从高斯分布中采样 e e e然后依次经过 T T T和 G G G函数可以得到生成的图像。
z e = T ( e ) z_{e}=T(e) ze=T(e)
I e = G ( z e ) I_{e}=G\left(z_{e}\right) Ie=G(ze)
可以看出用L2 loss的IMLE生成图像效果最差。
GLO生成的图像,只有部分的模糊。
GAN生成的图像还是不错的,但在动物那里容易得到奇奇怪怪的图像。
GLANN生成的图像比较的好。
GLANN模型虽然是结合GLO和IMLE两者之间的优势,能够从一个分布中进行隐变量的采样然后生成图像,也能够无模式丢失的得到生成的函数。但感觉就是两者之间的拼接,创新其实并不大。