快捷搜索:  汽车  科技

如何让gan发挥作用(我为什么弃用GAN)

如何让gan发挥作用(我为什么弃用GAN)在提升4倍分辨率的任务中,SRFlow的生成结果也比基于GAN的ERSGAN更加清晰真实。输入一个低分辨率马赛克图像,基于GAN的ProgFSR模型和SRFlow生成结果对比:这项研究成果“SRFlow”,还被ECCV 2020 Spotlight收录。那么SRFlow到底有多厉害?能在多大程度上替代GAN呢?从肉眼可见的生成任务结果上,可以看出SRFlow至少在两个方面超越了GAN,一是生成结果的多样性,二是提高图片分辨率后的保真度。

贾浩楠 发自 凹非寺
量子位 报道 | 公众号 QbitAI

输出单一、调参麻烦、损失函数不能收敛、稳定性差。

苏黎世理工大学的博士Andreas Lugmayr历数了各种GAN的“罪状”,说出了今后弃用GAN的话。

如何让gan发挥作用(我为什么弃用GAN)(1)

说出“弃用”,当然是已经有了B计划。

Andreas Lugmayr博士和他的团队开发了一种新的标准化流(Normalizing Flow)模型,能够弥补GAN在生成任务中的的种种缺陷。

这项研究成果“SRFlow”,还被ECCV 2020 Spotlight收录。

那么SRFlow到底有多厉害?能在多大程度上替代GAN呢?

SRFlow“又多又好”

从肉眼可见的生成任务结果上,可以看出SRFlow至少在两个方面超越了GAN,一是生成结果的多样性,二是提高图片分辨率后的保真度

输入一个低分辨率马赛克图像,基于GAN的ProgFSR模型和SRFlow生成结果对比:

如何让gan发挥作用(我为什么弃用GAN)(2)

在提升4倍分辨率的任务中,SRFlow的生成结果也比基于GAN的ERSGAN更加清晰真实。

如何让gan发挥作用(我为什么弃用GAN)(3)

对于众多的GAN变体来说,有一些缺陷是难以避免的,比如图像复原生成任务,生成器广泛忽略了随机向量,因此,大多数基于GAN的图像到图像映射都是单一确定的。

GAN训练中的损失函数,包括了生成器伪造图像,而鉴别器却无法知道哪些图像是假的。

另一方面,鉴别器的职责就是确定一个图像是来自生成器还是来自训练集。

这两个相互冲突的目标导致了学习参数的持续漂移,导致输出结果不同程度的失真。

那么基于标准化流的SRFlow,是如何弥补这些缺陷的呢?

SRFlow不会忽略随机向量

对于GAN忽略输入的随机向量,导致输出单一的问题,传统的GAN策略是,在模型中增加一个控制信号,并抛弃重建损失函数。

如何让gan发挥作用(我为什么弃用GAN)(4)

放大16倍分辨率下的SRFlow输出结果

而SRFlow在训练过程中,算法核心—标准化流模型将高分辨率图像转化为高斯分布。图像条件标准化流的情况并非如此。

为了避免GAN的判别器损失通常会导致模式崩溃,SRFlow采用单一损失进行训练的,并且对随机输出进行内采样。

如何让gan发挥作用(我为什么弃用GAN)(5)

模型稳定超参数少,调参方便

条件GAN需要仔细的超参数调整。很多GAN的变体模型中,总损失由多个损失的加权和组成。

所以降低失真需要很大的精力来调整不同的损失函数权重。

此外还必须平衡生成器和判别器,使训练过程稳定。

在图像生成任务中SRFlow使用最大似然策略(maximum likelihood),输入的图像被转化为一个高斯潜空间。通过简单的计算得到高斯向量的似然。然后使用现成的Adam优化器,这个损失函数会稳定地收敛。

如何让gan发挥作用(我为什么弃用GAN)(6)

SRFlow的单一损失稳定且可收敛

Normalizing Flow本质上是稳定的。因为模型只有一层网络和一个损失,超参数要少得多,训练起来也更容易。

特别是对于开发新模型的研究人员来说,这一点非常实用。

新手可以更容易地比较不同的架构的Normalizing Flow变体。

输入输出保持高度稳定

在没有进一步干预的情况下,有条件的GAN是不具备输入一致性的。对于提升分辨率任务,一个重要的问题是,高分辨率的图像是否与低分辨率的输入保持最大程度一致。

如果不能,那么该方法到底是真的提高分辨率还是仅仅生成一个类似图片?这点十分值得怀疑。

GAN模型里有一个不受监督的损失函数,会导致模型自行生成图片像素。而标准化流模型避免了这种可能。它以且只以输入图像为条件,来模拟高分辨率图像的分布。

如何让gan发挥作用(我为什么弃用GAN)(7)

将SRFlow的输出与输入对比,可以看出与GAN的结果不同,具有高度一致性。

生成任务只需1张GPU训练

研究团队说,论文中的实验基于GLOW网络,使用多达40个GPU来训练图像生成。

但如果只是应对简单的图片生成任务,只需要一块GPU就能完成对SRFlow的训练。

什么是标准化流模型?

机器学习中有一类是概率模型。训练一个模型时,常见的一种处理方法是调整参数以使得模型在训练数据集的概率最大。

为了达到这个目的,需要假设模型满足一定的概率分布模式。

那么到底需要什么样的分布,既具有接近真实样本的表达能力,又具有统计机器学习模型较好的解释性呢?

如何让gan发挥作用(我为什么弃用GAN)(8)

高斯分布可以基本满足:采样方便、解析的密度已知、KL距离容易计算,还有中心极限定理的保证。最常使用的两种方法是用于分类的Categorical以及用于回归的Gaussian。

但这两种方法仍然有一些问题, 因为真实世界中样本的概率密度函数一般来说,与范畴分布以及高斯分布相差甚远。

如果简单地使用高斯作为图像生成的似然函数,那最后得到的生成结果可能很糟糕。

而标准化流(Normalizing Flow)可以把简单的概率密度(比如高斯分布)形式转化成某种更高级分布形式。

Flow指的是数据流经过一系列双射(可逆映射)。最终映射到合适的表征空间,normalizing指的是表征空间的变量积分是1,满足概率分布函数的定义。

标准化流这种工具,可以产生更强大的分布函数。

从另一个视角来看,标准化流可以看作是一种参数化对先验概率q的逼近的方法,并且也可以用在其它似然函数方程场景下。

与GAN不同,标准化流模型在采样、训练稳定性、损失函数收敛、和一致性方面具有优势。

标准化流模型更加适合用在图像生成、强化学习、变分推断之类的任务。

SRFlow的团队,已经将这个基于标准化流的模型开源。

那么你的下一个机器学习任务,会使用SRFlow吗?

论文地址

https://arxiv.org/abs/2006.14200

开源地址

https://github.com/andreas128/SRFlow?

— 完 —

量子位 QbitAI · 头条号签约

关注我们,第一时间获知前沿科技动态

猜您喜欢: