专栏名称: 唤之
目录
相关文章推荐
码农翻身  ·  Bill Gates 和 Linus ... ·  8 小时前  
程序员的那些事  ·  字节用 8266.8 ... ·  3 天前  
程序员的那些事  ·  if微信+DeepSeek=王炸,百度+De ... ·  昨天  
程序员小灰  ·  如何用DeepSeek来变现?90%的人都不知道 ·  2 天前  
程序员小灰  ·  DeepSeek 被放弃了,阿里牛逼!!! ·  4 天前  
51好读  ›  专栏  ›  唤之

CVPR2018精选#1: 无监督且多态的图片样式转换技术

唤之  · 掘金  · 程序员  · 2018-06-01 03:04

正文

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

更新:有同学发现这篇文章可能并没有在CVPR2018最终录取名单(只是投稿),最终 录取名单参考可以看下面链接:

github.com/amusi/daily…

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

这股“无监督”之风的刮起,只是因为我们发现用 GAN 结合一些 人为约束和先验逻辑 ,训练时 无需监督图片配对 ,直接在 domain1 domain2 中随机抽一些图片训练,即可得到样式转换模型。这些约束和先验有许多做法,可以迫使样式转换模型(从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源码 中也有对应(代码位置: github.com/taki0112/MU… ):

  1. Generator_A_loss = self.gan_w * G_ad_loss_a + \
  2. self.recon_x_w * recon_A + \
  3. self.recon_s_w * recon_style_A + \
  4. self.recon_c_w * recon_content_A + \
  5. self.recon_x_cyc_w * cyc_recon_A
  6. Generator_B_loss = self.gan_w * G_ad_loss_b + \
  7. self.recon_x_w * recon_B + \
  8. self.recon_s_w * recon_style_B + \
  9. self.recon_c_w * recon_content_B + \
  10. 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生成的参数,用来调整图片生成( 让图片内容更适应图片样式 )。

对应代码在 github.com/taki0112/MU… :







请到「今天看啥」查看全文