论文笔记(1):CVPR2019-Latent Filter Scaling for Multimodal Unsupervised Image-to-Image Translation

论文地址:arXiv:1812.09877
原文没给代码,发了邮件给作者也石沉大海了,自己复现了一份代码,还没有调试出原文的效果,过段时间再来更新。这里先记录一下理论部分。

网络结构如图:
论文笔记(1):CVPR2019-Latent Filter Scaling for Multimodal Unsupervised Image-to-Image Translation
这篇论文的大概思想就是让latent code作为卷积核的修改器,在保持传统的对抗损失,且不添加任何额外的损失的情况下,产生了多峰的输出。除此之外,还顺带可以做到源域和目标域风格之间的disentanglement。它不修改GAN的损失,同时开销最小(不需要任何自编码或重建损失)。基本避免了image2image任务中的模式坍塌,在质量和变换之间的权衡中有更大的*度。

论文的目标是要进行一个多输出的image2image translation,给出一张原图像x作为源域X的输入,我们想要将它转换到目标域Y,为了产生多个输出,我们需要接收一个latent code作为描述输出之间差异的z,z是从正态分布中随机取样的。
所以我们的任务就是寻找一个函数G使得:
论文笔记(1):CVPR2019-Latent Filter Scaling for Multimodal Unsupervised Image-to-Image Translation
也就是最上面结构图中z1z2z3的含义。
传统的做法是将latent code和输入图片直接concat串联起来,或者通过自编码压缩进特征空间,这些都是将latentcode作为编码数据转换到全大小的图像上去。但这篇论文是将latentcode作为输入图像局部变化的调制器。
具体操作就是:给出一个k维的latent code,和一张输入图像,将latentcode送入一个全连接网络来为每一个卷积层产生一个scaler(这个scaler应该就是一个标量,来调节卷积核的尺度)。然后将图像送入卷积网,每一个卷积核都被对应的lantentcode所缩放。简单的说,就是让k*1维的标量z,每一个维度都与featuremap相乘。

最终网络只使用了一个loss:
论文笔记(1):CVPR2019-Latent Filter Scaling for Multimodal Unsupervised Image-to-Image Translation
具体训练中,使用的是LSGAN的loss:
论文笔记(1):CVPR2019-Latent Filter Scaling for Multimodal Unsupervised Image-to-Image Translation
实验中注意到他应用了一个标签平滑,即让判别器输出真实样本的概率期望值尽量接近于0.9而不是1

在求低维的lantent向量到scalar的映射时,一种做法是直接在高斯分布中取卷积核个数维度的z,但是这样做效果非常差。由于state-of-art的image2image网络的卷积核个数非常多(超过两千个),所以我们使用一个全连接网络将低维的latent向量映射到实际的卷积核个数(我还没想明白这二者之间为什么是因果关系,如果您知道还希望您留言告诉我,Thanks♪(・ω・)ノ)

它的网络结构如最上面的图所示,它是从CycleGAN的基础上做的改动。改动如下
1、只包含一个生成器和一个判别器
2、接受一个从高斯分布中随机取样的latent code(即z)作为网络的输入。
3、添加一个可训练的全连接网络来将latent code映射成scalar来与网络的每一个feature map相乘。这个scalar是在ReLU和normalization的操作之前直接卷积层的输出相乘的。