Conditional Generation
你可以根据你所输入得到你想要的输出,而不是由GAN随机生成,你可以通过控制输入来控制输出的结果
1. generator增加的输入
Conditional GAN的输入 不只输入vector还要输入normal distribution z一起产生结果
2. discriminator 增加的输入
原来的discriminator只需要输入一张图片,但是现在也有问题,因为discriminator只检查你现在输入的图片是不是高质量的,而完全忽略了输入条件
所以还需要另外的输入,这时discriminator就有x是否真实,x和c是否应该凑成一对的两个任务,来输出分数(所以cat和火车图片的输出也要打0分最好)
3. 算法迭代过程
Learning D
- 从database中sample m个正确的example(c,x)
- 从分布中sample出m个noise(z) ,从而生成的m个图像(KaTeX parse error: Undefined control sequence: \wave at position 10: \overset{\̲w̲a̲v̲e̲} {x}),与noise组成(c,z)
- database sample出m个 图片( x ‾ \overline {x} x)
- 之后我们我们执行下面的公式(三种打分:真图片与正确标签高分,假图片与正确标签低分,假图片与错误标签低分),梯度上升
learning G
- 从distribution中采样m个noise(z)
- 从database中采样出m个condition(c)
- 执行公式,也就是有generator(c,z)输出图片交给- - discriminator判断,要尽可能的打高分
4. discriminator的架构
- 第一种架构中:x输入到network,生成embedding,c(可能是文字)输入到另一个network,生成embedding,两个embedding进入到第三个网络来生成分数(一个分数决定了两个性能好坏与匹配度)
- 第二种架构中:x输入到network中,输出好坏分数和embedding,embedding再与condition输入到另一个网络输出匹配度(两个分数分别代表好坏与匹配度)这个可以避免产生好的图片只是由于标签不对应而否定了它的情况
5. Stack GAN (文字到图片)
先产生小图,再根据小图产生大图,它把生成过程拆分成为两阶
第一阶generator:输入一段文字和noise,产生一个图片
第一阶discriminator:这个小图搭配文字叙述是否匹配
第二阶generator:输入一段文字和一张图产生一个大的图片
第二阶discriminator:输入大的图片和文字看是否匹配
6. Image-to-image(图片到图片)
可以将简单几何图形对应建筑,黑白图转为彩色图,白天转为夜晚,涂色等等
6.1传统监督学习
假如要做几何图形变房屋,需要几万张pair数据(几何图形对应的建筑)
但是这种方法因为可能对应很多张图,接近平均值,从而比较模糊
6.2 GAN
GAN的generator给一个{ noise:z } 和 { condition:几何图形 }输出图片,discriminator给一个几何图形和image来输出分数
问题是下面的第三幅图左上角会产生一些奇怪的东西
解决方法:增加constraint,对于generator所输出的image要与训练的数据目标image越close越好,generator就有两个目标,产生够清晰真实变generator,产生的图不要跟原来的目标差太多,产生图有上面的第四张
6.3 discriminator的设计
如果图片很大,discriminator是输入整张图片作为输入,所以discriminator参数就会很多,会overfiting,训练时间长
这时候discriminator改进为,每次只检查图片的小块,而不是检查整张图片,这样就减少了参数数量,从而输出这小张图片的分数,所以检查区域的大小就需要调整
7. 其他的应用方面
7.1 speech enhancement
将背景noise去掉
7.1.3传统
我们需要找很多声音,并将声音加noise做成pair
这同样也会产生模糊