CVPR2018精选#1: 无监督且多态的图片样式转换技术,康奈尔大学与英伟达新作MUNIT及其源码

所谓无监督学习,只是人类加入了约束和先验逻辑的无监督 — David 9

最近图片生成领域正刮着一股“无监督”之风,David 9今天讲Cornell大学与英伟达的新作,正是使无监督可以生成“多态”图片的技术,论文名:Multimodal Unsupervised Image-to-Image Translation (MUNIT)。

这股“无监督”之风的刮起,只是因为我们发现用GAN结合一些人为约束和先验逻辑,训练时无需监督图片配对,直接在domain1domain2中随机抽一些图片训练,即可得到样式转换模型。这些约束和先验有许多做法,可以迫使样式转换模型(从domain1到domain2)保留domain1的一些语义特征;也可以像CycleGAN的循环一致约束,如果一张图片x从domain1转换到domain2变为y,那么把y再从domain2转换回domain1变为x2时,x应该和x2非常相似和一致:

来自CycleGAN:https://arxiv.org/pdf/1703.10593.pdf

而这些无监督方法有一个缺陷:不能生成多样(多态)的图片MUNIT正是为了解决这一问题提出的,因为目前类似BicycleGAN的多态图片生成方法都需要配对监督学习。

MUNIT为此做了一些约束和假设,如,假设图片有两部分信息:内容c样式s,另外,图片样式转换时domain1和domain2是共享内容c的信息空间的:

MUNIT的自编码器

生成图片时,把同一个内容c和不同样式s组合并编码输出,就可生成多态的图片:

来自:https://arxiv.org/pdf/1804.04732.pdf

实际训练时,我们需要两个自编码器,分别对应domain1和domain2:

来自:https://arxiv.org/pdf/1804.04732.pdf

两个自编码器都要先在各自的domain中训练,过程中需要保证同一张图片x1可以被还原出相似的域中图片\(\hat{x1}\),即所谓的让x1的domain内部重构的loss降到最小

其中E1是x1的编码器(分别编码成内容信息c样式信息s),G1是解码器(根据c和s)解码成domain1中图片。

生成样式转换图片时,把另一个domain中的内容信息c2拿过来与当前domain的样式信息s1拼接,再解码生成新的图片,就可以从domain2生成domain1样式的图片x2->1,下图即交叉domain的转换方法:

来自:https://arxiv.org/pdf/1804.04732.pdf

这时对于转换后的图片x2->1, 需要构建所谓的隐含特征重构loss(latent reconstruction loss),即,用编码器再对图片x2->1编码后,依然可以得到内容信息c2与样式信息s1(显然这时符合直觉的)

即,内容c和样式s的编码器对于生成后的图片也是适用的

最后一个需要关注的loss对抗loss,即,通过上述交叉domain生成的图片必须与内部本身domain生成的图片无法区分:

所以综合上面的3个loss考虑,我们需要的总的loss如下:

这些loss在MUNIT的tensorflow源码中也有对应(代码位置:https://github.com/taki0112/MUNIT-Tensorflow/blob/master/MUNIT.py):

Generator_A_loss = self.gan_w * G_ad_loss_a + \
                   self.recon_x_w * recon_A + \
                   self.recon_s_w * recon_style_A + \
                   self.recon_c_w * recon_content_A + \
                   self.recon_x_cyc_w * cyc_recon_A

Generator_B_loss = self.gan_w * G_ad_loss_b + \
                   self.recon_x_w * recon_B + \
                   self.recon_s_w * recon_style_B + \
                   self.recon_c_w * recon_content_B + \
                   self.recon_x_cyc_w * cyc_recon_B

其中self.recon_x_w等以_w结尾是各自的权重。

MUNIT的自编码器的实际实现架构如下:

来自:https://arxiv.org/pdf/1804.04732.pdf

其中的内容编码器(content encoder)样式编码器(style encoder)没什么好讲的。有意思的是解码器中要很好地整合c编码器s编码器(内容和样式的完美合成),使用了自适应样例规范化Adaptive Instance Normalization (AdaIN) 技术,同时用一个MLP网络生成参数,辅助Residential Blocks生成高质量图片:

来自:https://arxiv.org/pdf/1804.04732.pdf

其中z代表前面的层输出的内容信息特征,u 和 σ 是对z的一些通道平均值和方差计算,γ 和 β 就是MLP从样式信息s生成的参数,用来调整图片生成(让图片内容更适应图片样式)。

对应代码在https://github.com/taki0112/MUNIT-Tensorflow/blob/master/ops.py :

def adaptive_instance_norm(content, gamma, beta, epsilon=1e-5):
    # gamma, beta = style_mean, style_std from MLP

    c_mean, c_var = tf.nn.moments(content, axes=[1, 2], keep_dims=True)
    c_std = tf.sqrt(c_var + epsilon)

    return gamma * ((content - c_mean) / c_std) + beta

看一下MUNIT与其他模型比较(清晰度和多样性):

来自:https://arxiv.org/pdf/1804.04732.pdf

上表是从草图生成实际的鞋子和手袋的图片生成任务,可见MUNIT算是在无监督多态之间找到了较好的平衡点。

最后看看MUNIT的图片生成样例:

来自:https://arxiv.org/pdf/1804.04732.pdf
来自:https://arxiv.org/pdf/1804.04732.pdf

 

参考文献:

  1. Multimodal Unsupervised Image-to-Image Translation
  2. https://github.com/taki0112/MUNIT-Tensorflow
  3. https://github.com/NVlabs/MUNIT

本文采用署名 – 非商业性使用 – 禁止演绎 3.0 中国大陆许可协议进行许可。著作权属于“David 9的博客”原创,如需转载,请联系微信: david9ml,或邮箱:yanchao727@gmail.com

或直接扫二维码:

发布者

David 9

David 9

邮箱:yanchao727@gmail.com 微信: david9ml

发表评论

电子邮件地址不会被公开。 必填项已用*标注