InfoGAN
InfoGAN希望输入数据的每一个维度代表着输出图像的某个特定特征,改变输入数据的某个维度,输出图像会同时有某一特征的改变,即解决input feature对output影响不明显的问题。
架构
和普通的GAN主要由两个地方的不同。
第一,input vector被分成了两个部分,第一个部分c代表了输出图像的特征的集合,z‘代表了纯粹随机的无法解释的部分。
第二,generator的输出被添加到两个路径,一个是到discriminator,一个是到classifier。classifier的作用是能根据generator的output x反推获得generator的input中代表特征的那个部分。但是如果没有discriminator,generator可能就偷懒直接把input c的部分直接放到output x,然后让classifier很方便就读出来。discriminator要让generator去创造。
总结
input characteristic c must have a clear influence on x; The classifier can recover c from x.
GAN + AutoEncoder
应用在Interactive Photo Enditing中。
第一步,对于给一张image,投射到image embedding space中,变成一个code。
第二步,在这个code的向量空间内稍作移动就可以实现更改了某一特征(user给的constraint),但总体与原来的image相似的图片。
image back to vector
有三种实现方式。
Editing photos
要找一个满足三个条件的图片。
第一个是user constraint,即要改变图片的某个feature。
第二个是要求计算两个图片的距离相近,即与原图片类似。
第三个是用discriminator来判断图片是否足够real。
VAE-GAN
架构
Encoder的任务就是Minimize reconstruction error,并且让output z close to normal(Variational Auto-Encoder)。
Generator as Decoder的任务也是Minimize reconstruction error,并且cheat discriminator。
Discriminator的任务是Discriminate real, generated and reconstructed images。
注意这里有三种image,一个是real image,一个是generator as decoder的generated image,另一个是decoder as generator的reconstrcuted image。
WHY VAE-GAN
一方面,从VAE考虑。VAE希望reconstruction error越小越好,也就是希望input x of encoder和output x of decoder as generator越接近越好,但问题是VAE的output不一定会realistic,会很模糊,因为无法衡量loss。
另一方面,从GAN考虑。原来在train GAN,Generator没有看过真正的image长什么样,需要很多时间去调参数。但是加上encoder,他知道真正的image长什么样。
Algorithm
Initialize En, De, Dis
In each iteration:
Sample M images
from database Generate M codes
from encoder 此处是encoder从real image输出的code
Generate M images
from decoder 此处是decoder从encoder的code输出的reconstructed image
以上是auto-encoder的操作流程。
Sample M codes
from prior Generate M images
from decoder/generator 此处是用从normal distribution中sample出得随机的一个vector当作generator的输入。
以上是GAN的generator部分的操作流程。
Update En to decrease
, decrease Update De to decrease
, increase and Update Dis to increase
, decrease and
BiGAN
BiGAN也是VAE-GAN的一种变形,还是建立在Encoder/Decoder/Discriminator这三者之上。只不过这些基本单元的连接方式有所不同。
架构
和VAE-GAN不同,BiGAN的Encoder和Decoder不再有一个real image和generated image的比较。Encoder和Decoder互相独立。
那如何训练这两者?这个任务在于Discriminator。对于每一对image x和code z的pair,discriminator要判断他来自encoder还是decoder。
解读
Encoder的输入和输出构成一个disribution,记做
Decoder的输入和输出构成一个disribution,记做
Discriminator的作用是evaluate the difference between P and Q
到最后P和Q会是一样的。
Alogorithm
Initialize En, De, Dis
In each iteration:
Sample M images
from database Generate M codes
from encoder Encoder生成一个pair
Sample M codes
from prior Generate M images
from decoder/generator Decoder/generater生成一个pair
Update Dis to increase
, decrease Update En and De to decrease
, increase
同样的还有Triple GAN
Domain-adversarial training
Testing data and training data are in different domains. How to extract feature of the same distribution via generator.
架构
主要由三个部分组成,generator的作用是domain extractor,discriminator的作用是domain classifier,判断feature来自哪个domain。同时需要另外一个class label classifier。
这三个部分可以一起learn,也可以不一起learn。
simultaneous training还是iterative training?其实fGAN中提出了一种将GAN simultaneous training的方法,但是会不太稳;原始GAN中还是iterative training。
Feature Disentangle
WHY
在encoder的时候单纯的把input segment输出成一个code,那么这个code可能包含了很多信息,例如phonetic information, speaker information.
如果我们一开始就把code利用feature分开来,细化每一个encoder的任务,那么结果丢进encoder去test的时候reconstruct的效果会更好。
HOW
利用一个speaker classifier当作discriminator来训练前面两个不同“domain”的encoder。
- 本文标题:Feature Extraction with GAN
- 本文作者:徐徐
- 创建时间:2020-11-17 16:25:35
- 本文链接:https://machacroissant.github.io/2020/11/17/ganfeatureextraction/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!