正文
所谓无监督学习,只是人类加入了约束和先验逻辑的无监督 — 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可以被还原出相似的域中图片
,即所谓的让
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…
):
-
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生成的参数,用来调整图片生成(
让图片内容更适应图片样式
)。
对应代码在
github.com/taki0112/MU…
: