CVPR2021 Ensembling with Deep Generative Views 基于GAN的数据扩增方法

并非论文的翻译,全文都是我自己对这篇论文的理解,写的不好,仅供自己参考,如有理解错误的地方求指正

论文地址:https://arxiv.org/pdf/2104.14551v1.pdf
代码地址:https://chail.github.io/gan-ensembling/

1.总述

这篇文章主要介绍了一种生成图像变体的方法(如颜色、姿势变化),就是给出一张输入图片,可以生成多种与输入图片相似的图片。这种相似图片生成任务可以用在许多下游任务中,比如数据扩增,特别是分类任务的数据扩增中。本文将相似图片生成网络与图像分类网络结合在一起,验证了本文网络可以生成高质量的相似图片,从而用于分类数据集的数据扩增,以得到更好更准确的分类效果。

2.优点

众所周知,很早就有人工的数据扩增方法,如随机裁剪、水平翻转等。那么既然有这种人工的数据扩增方法,为什么还要用深度学习的方法进行数据扩增呢,很显然的一点就是用GAN进行数据扩增出来的图片一定有着人工方法所没有的优点:
(1)GAN生成连续变化的图像(油管官方视频连续变化动图),所以生成的样本可以无穷多,这是它的第一个优点,样本数量比人工多。
(2)人工方法数据扩增和GAN扩增生成的样本大相径庭。人工方法一般是裁剪翻转改变颜色之类的,并没有改变目标的结构形状等特征。而GAN改变了目标的形状结构(记得论文里好像提到过,实验发现两种扩增方法结合使用效果更好),用这种方式训练的样本对于同一类别不同目标更有鲁棒性,训练出来的分类器性能更好,识别得更准确。
(3)人工数据扩增和本文基于GAN的数据扩增训练分类器的方法也不同。人工数据扩增仅仅增大了样本容量,在训练方法上并没有过多改进。而基于GAN的数据扩增不仅增大了样本容量,它更是从另一个角度上训练了分类器,正如标题中所提到的“Ensembling”。至于这个“Ensembling”方法是什么,接下来会详细介绍。

3.动机

本文是基于GAN网络进行数据扩增的,恰恰是用到了GAN一些独特的性质。最近GAN在生成大量逼真的图片上展示出了它的优越性。从以往的网络中也可以看到(如用于风格转换的StyleGAN),GAN也可以生成与输入相似又不同的图片,所以很自然地就可以把GAN应用到数据扩增任务当中。

我们知道,自然世界的分类数据集样本一般都是离散的,所以分类器也只能从间断、不连续的样本中推测样本空间的构成。而GAN是有这种性质的:GAN网络大量利用的特征在潜在空间中是局部光滑的,也就是说临近样本是相似的。所以可以把GAN看成能够融合重组图像的“插值机器”。

既然GAN有这种性质,那我们可以生成相似的图像替代或者给出一张图像生成无限的变体吗?

答案当然是肯定的。本文的网络就充分利用了GAN的这种性质。网络结构图如下:
在这里插入图片描述
一般来说,GAN能将输入的随机z映射成有规律的输出图像,但是有时会生成效果不好的图片。
而作为数据扩增的样本,必须生成质量高的图片,必须重建与输入图片相似性高的图片,这样才能在判断类别上不出错。这是对于GAN来说的一个难点。

那么如何克服这个困难呢?

显然,GAN的输入越具有随机性,得到的输出就越容易生成效果不好的图片。如果GAN的输入与输出有关,那么得到的图像效果就会好一些。也就是说,我们可以先把输入映射到latent space上,得到包含输出特征的latent code,这样的输入通过GAN网络就会生成质量好的图片。这个结构也就是上图红色部分。这种方法用在了以往的多篇文章中如styleGAN。我们用一个Encoder将输入映射到latent code上,为了用无监督的方法提取图片的特征(这也是本文网络的一个优点),这里输入用的是原始图片而不是噪声。

那么问题又来了,我要输出的可是输入图像的多种变体,但输入的是一张确定的图片,训练之后,这个网络的Encoder、Generator也都固定了,那么GAN也只能输出一种图片,所以多种多样的图片在哪?

问题的答案就在latent space中。所有地方都是固定的,但是有一个地方可以改变,那就是中间层的latent code w。这也是引入latent code的一个巧妙之处。本文分别用三种方式对latent code做了一个抖动(扰动?),生成多个不同的w,每一个w经过生成器之后都会得到一个不同的输出图片,这样就做到了输出多种图片。

以上就是本文所提出的网络结构的动机,接下来会具体介绍每个模块的方法。

4.方法

4.1 预备知识

本文的GAN用的是StyleGAN2的网络,生成的latent code加入到GAN的不同层,会得到不同的输出。如低层改变的是精细的特征比如颜色,高层改变的是高级语义特征。写的好累qwq具体就不介绍了,网上搜StyleGAN有一堆解释。

4.2 图片映射到latent space

这一节主要目的是用一种好的优化方法优化w,使w经过GAN能输出质量更好的图片。

要知道,得到一个与输出图像完全对应的潜在编码w是很难的,所以我们只需找到那个最好的w就好。以往用image distance metric的方法来找最好的w,公式如下:
在这里插入图片描述但是这种优化场景很复杂,计算量大(这里不是很懂,为什么复杂,为什么计算量大,个人猜想难道是感知损失要经过卷积网络导致计算量大?),而且严重依赖初始化,所以我们用的是另一种优化方法。

额外还要说一下,在优化w之前对图像有一个预处理。GAN有一个缺点,对偏离图像中心的目标,GAN生成的图像目标会更偏离图像中心(为什么会这样可能目前还没有一个解释,或者是我没找到解释以后找到了会补充),所以为了防止生成图像的目标出图像边界,在优化了latent code前首先给图片加上mask使目标尽可能在图像中心。(具体操作在补充材料里我还没看)

本文用的优化latent code的公式是这样的:
在这里插入图片描述
与(1)的优化方法的不同之处就是第二项,这里并没有从GAN的角度考虑问题,而是从网络的上一步,从输入经过Encoder到w的角度来考虑问题。为什么这种方法就比(1)更好呢,论文里好像并没有细致说明,猜想可能是通过x->E->w来考虑问题比经过x->E->G->x更直接吧。公式中的G()用的是4.1节中介绍的预训练的StyleGAN2网络。(那G难道就不训练了吗?就用StyleGAN2的参数?应该不是这样吧……有可能最开始G()用的是StyleGAN2,之后的迭代次数和E一起训练,这里不太清楚,还要去代码中找答案

优化过程是这样的:
首先对编码器E做一个初始化,先不管生成的w是什么,找到使得损失最小的E,像这样:
在这里插入图片描述
之后再用这个E*,去找使得损失最小的w,像这样:
在这里插入图片描述之后反复迭代,直到收敛。
这里有一个细节就是第一次迭代的时候,参数lamata取1,Limg和Llatent同等地位,占相同的权重,之后的迭代过程中,因为最主要的还是训练GAN网络,所以之后的迭代过程就把Llatent当做一个正则化项,参数喇嘛塔这时取0.5。

4.3 在latent space上进行数据扩增

这节介绍动机里面提到的对latent code w的抖动(扰动?)方法,本文共用了三种抖动方法。

(1)各向同性高斯采样
(2)主成分分析
(3)风格混淆

4.4 Ensembling

在这里插入图片描述极端一点,如果alpha=0的话说明生成器产生的多样图片质量不好,完全没起到作用,还不如不加。(我觉得这个应该从消融实验中看到alpha的合适值)
质量不好有两点原因:(1)生成的图像不逼真,重建得不好(2)生成的图像扰动太大的,缺少原图中的关键特征,或完全不像原图。

另一个极端,alpha=1说明生成图像中包含了原图所有的关键特征。

4.3 4.4未完
写不动了好累好累好累,耗时有费力

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值