【ECCV2020】【逆推】In-Domain GAN Inversion for Real Image Editing

拉到最后有视频版哦~

 

论文地址:https://arxiv.org/pdf/2004.00049.pdf

项目地址:https://github.com/genforce/idinvert

 

文字版

这次给大家讲一篇关于 GAN 逆推的论文,我先给大家介绍下为什么要做 GAN 的逆推。我之前讲过的,stylegan 能学习到解耦合的特征,基于这个优点,我们可以做图片的很多语义编辑。但是做图片的编辑的前提是我们能拿到图片的隐空间表示,就是 latent code,GAN 的逆推就是做的这个工作。总结下就是,对于编辑任务,我们需要先逆推,再编辑。

我会从这四个点来介绍这篇论文

首先是背景,就是我之前说的,GAN 中学习到了很多耦合或者解耦合的语义,这对语义编辑很有意义。但是在做编辑前,我们需要做一次 GAN 的逆推

动机

接着是动机,动机主要是之前的一些方法效果不好,这里我拿一个例子说一下。这篇 image2style 是我上次在大组会上讲的,他也是做 GAN 的逆推,但是方法很一般,他是直接用梯度下降暴力调 latent code 的,loss 在蓝色的框里,可以看到,loss 都是一些 pixel-wise 的,但是这种监督是有问题的。因为他只考虑了像素级的关系。这样出来的效果很可能会有什么问题呢,我们看上面的图,第一列是真实的图片,第二列是用 image2stylegan 逆推后的图片,后三列是用逆推后做语义编辑的效果,可以看到,姿态和表情还好说,但是戴眼镜的时候,就戴不上去,这表明很可能这种优化方法把图片优化到 GAN 学习的空间外面去了,这张图片已经不具备眼镜的语义特征

目标

然后是研究目标,很纯粹的一个目标,就是希望能我们逆推之后还能很好的做语义编辑

方法

然后是方法,我先讲一下现在做逆推任务的基本套路,一般就是两步,第一步是训一个 encoder,注意一下,这里的训练集是用的生成数据,但是一般 encoder 没有那么好的表示能力,所以一般就是用 encoder 算一个粗略值,然后再用一个优化过程,比如梯度下降慢慢调。现在的一些工作要么就是只有 encoder,要么只有第二部的优化过程,要么就是结合在一起,无非就是这几个套路。

我这里也再提一下 image2stylegan,蓝色框里的图是我在 image2stylegan 论文中截取的,我上次讲论文时候说这是一种泛化能力,我这里勘误一下,这根本不是什么泛化能力,这说明这篇论文的方法太粗糙了。因为你想,我的模型是在人脸上训的,但是他居然能生成猫,狗,图片,车的图片,这不是很扯的事情吗?我再退一步说,就算可以逆推出猫和狗的图片,但是这有什么用呢?从目的导向来说,我的目的是编辑啊。我在下面画了一个图,隐空间是很大的,我学习的 GAN 空间可能只有这么大,这个空间内的点经过生成器出来就是人脸的图片。同时因为图片是像素组成的,可能人脸上的像素以其他的组合方式能组成猫和车的图片,很明显这些组合方式和人脸是很不一样的,所以他们不可能在我的人脸空间中,也不可能有我人脸中的语义。而 image2stylegan 的方法会强行把人脸空间中的点拉到猫空间中,同时猫空间内是没有人脸语义的,所以在猫空间做编辑是没有意义的

我在这里也对语义这个概念说一下我自己的理解,我觉得语义就是一种规定,但这是相对于同类事物来说的,比如人的笑,人的哭,这写人的语义对猫来说就是无意义的。举个例子,有点类似开车的规则,我们大陆是右边行,但是日本是左边行,如果你去了日本还是右边行,那不就不符合规定了嘛

说回来,下面是这篇文章提出的方法,第一步还是训一个 encoder,但是他有三个亮点,第一个是,loss 是在图片上做的,不是在 latent code 上做的,这样的监督会更加强,第二个,他的训练集是真实的图片,而不是生成的图片,这肯定能涵盖更多的场景,第三点,我觉得就是本文最精髓的地方,就是他加了一个判别器,可以把这个判别器理解为 GAN 区域的约束器,之前的方法不是很容易通到 GAN 空间外面去嘛,这个判别器就是针对这个现象加以限制。E 和 D 是要更新参数的,loss 在下面,都是一些平常的 loss

对于第二步,由于我们第一步是有一个 encoder 的,所以优化目标不但有正推的图片 loss,还有先正推再逆推的 code loss

实验

然后是实验,第一个实验是评价逆推前后图片的语义的,比如有一张我的图片,逆推前用一个网络回归,出来是 23 岁,然后做一次逆推,用相同的网络回归一次,如果也是 23 岁,那就说明逆推的效果很好,如果出来是 70 岁,就说明逆推时候丢了我很多的特征。最后把效果画到一个 PR 曲线上,可以看到红色的,就是本文的方法,面积要大于 image2style 的方法

第二个实验是我们很关心的速度和质量,第一行是原图,第二行是之前的方法,只用一个 encoder 得到的效果,可以看到效果很差的。第三还是用 image2stylegan 出来的效果,看着还行,但是很多细节丢了。最后两行是本文的方法。看一下左边的表,看速度来说,只训一个 encoder 的方法是最快的,但是质量很差,所以这一个方法基本就是没用

然后看其他的指标,FID,SWD 和 MSE 都是评价质量的,可以看到都是本文的方法效果最好。我这里说一下为什么 image2stylegan 的 MSE 是最好的,因为这是他的 loss

第三个实验是真实图片的编辑,我们可以看到在两张图片的逆推结果上做线性插值,偶数行的效果比奇数行的更加平滑,fid 值和 swd 值也更加低

第四个实验是关于人脸编辑的,编辑的方法就是逆推后加上 interfacegan 求的 direction

可以看到偶数行的编辑效果比奇数行要好一些

同时在 FID 和 SWD 上效果更好

最后一个实验,他发现了一个很有意思的点,就是图片的融合,我在 target 上裁一个区域,贴到 context 上去,得到第三列的效果,然后把第三列的图片做逆推,我们发现之前的 image2stylegan 基本上保留了 pixel 上的信息,该有的棱角,边缘都还在。但是本文的方法,居然能把他很好的融合在一起。我觉得这是因为训 encoder 时候加上了判别器,这对逆推的约束很大,尽量把逆推结果约束在 GAN 的空间里了

结论

然后是本文的研究结论,提出了一个逆推方法,保证逆推结果还是在 GAN 的空间内,使得能有好的语义编辑

不足

最后是文章的局限性,第一点,我测了他的模型,泛化性还是不好,而且逆推后存在 trade-off 现象,比如用不同的权重,最好的重建结果和最好的编辑结果不会在同一个参数内出现

视频版

[ECCV2020]In-Domain GAN Inversion for Real Image Editing

代码讲解

[OpenBayes实现][ECCV2020]In-Domain GAN Inversion for Real Image Editing

 

 

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值