1. Unsupervised Conditional Generation
不止可以用于图像, 也可以用于audio或者是NLP
两种方法来做;
- 直接转换
只能做类似颜色/质地这样的小的改动, 比如style transform比较有可能用这种方法来做 - 先映射到一个common space
input和outpt差距比较大
先learn一个encoder, 将人脸特征抽出来, 然后decoder根据input人脸的特征生成一个动画角色
direct方法需要train一个Y domain的discriminator来鉴别Generator产生的image究竟像不像;
但有一个问题是Generator可以产生一个能够骗过D的图像, 但是与Domain X的input无关, 即是课中讲的"Not what we want"
G来生成图像, 不仅要D认为是real, 还要图像pixel级别尽量像, 就还是类似SRGAN, 其实直接做下去也可以, 无视这个问题也还是有机会work的, 就是说如果对G没有其他要求, train的过程还是倾向于改变不太多图片就可以骗过D, 就是说G的input/output不会差太多, 文献中提到的就是在shallow network的情况下, 无视这个问题确实是work的, 但如果网络很深, G就确实会产生一些和input没什么关系的东西
用一个pretrained好的network来做feature extract, 然后训练的时候希望抽出来的feature尽量接近, 也就是G的input/output的特征没有太大区别
train一个X domain->Y domain的GX->Y(蓝色), 同时train一个Y domain->X domain的GY->X(橘色), 目的是能从GX->Y产生的图像里还原回原图, 也就是要保证GX->Y不能改变图像结构信息
可以把两个G和两个D一起train, 这就是Cycle GAN的完全体
Cycle-GAN会在GX->Y的时候把某些信息藏起来, 然后在GY->X把这部分信息再还原出来, 有可能Genorator过程把这些信息分散隐藏在了其他的部分中, 如果G确实会藏信息, 那Cycle GAN就失去了意义, 因为即便是有Cycle-GAN的结构, GX->Y也有可能会产生和input差异大的图片, train的过程有可能会学到一些hidden information的方法来避开cycle consistency带给你的constraint
这几个GAN基本都和Cycle-GAN大同小异
多个domain之间用一个Generator互转
D不止要判断图像是否real, 还要判断生成的图像属于哪个domain, G的做法和Cycle-GAN差不多
你可以把X/Y domain的EN-DE对分开train, 但是问题就是这两对EN-DE之间就没什么关系了
为了不让EN-DE生成的image不模糊, 在后面加上一个Discriminator, EN-DE+Discriminator就是一个VAE-GAN
X/Ydomain的两对EN-DE对之间没有关系的问题就是会发现这两个产生的latent space的意义是不一样的, 也就是说他们编解码的语言是不一样的(比如上面code第一维的意思是'发色', 下面code第一维的意思却是'性别'), 你从domain-X丢一张image进去, 从DEy生成的图像和原图是没有什么关系的
如果解决两对EN-DE产生的latent space的关联性问题就是approach2要解决的关键问题
第一个揭发是不同domain的EN-DE来share weight, 希望EN抽出来的特征的语义是相同的, 就是每个维度表示的意义是一样的, 最极限的情况就是不同domain的EN-DE的weight完全是相同的, 但是要多加一个数字(1/-1)input表示image来自不同的domain
给latent vector加一个Domain Discriminator, 用来判断latent vector是源自哪个domain, 那ENx和ENy的工作就是要骗过这个Domain Discriminator, 如果这个Domain Discriminator无法判断latent vector来自哪个domain, 那意味着ENx和ENy产生的latent vector的distribution就是一样的
也可以用cycle consistency的方法, 就是绕一个圈再解回X domain, 希望和原图接近, 其实意义和Cycle-GAN是一样的, 只是在这里那个GX->Y被切分成了ENx->DEy, 而GY->X被切分成了ENy->DEx
这个做法实际和cycle consistency差不多, 但是是在latent vector上去尽量接近, 就是说不要两张相同domain的image在pixel上接近, 而是绕一个小圈, 让两次得到的latent vector尽量接近, 所以叫语义相似性
你的话用别人的声音说出来, 这和文字转语音的差别在于这个方法不只是把意思表达出来, 同时也会保有之前说话人的语音语调等voice structure