Multimodal UNsupervised Image-to-image Translation是ECCV2018的一篇工作,是UNIT思路的一个延续。之前的UNIT实现的是两个domain之间的一个转换,MUNIT更进一步可以实现多个domain之间的转换,下面就来展开介绍这篇论文的细节。
计算机视觉中的很多问题的目标可以理解成是将一个domain中的图像转换到另一个domain,例如超分辨率(super-resolution),着色(colorization),图像修复(inpainting),属性转换(attribute tansfer)和风格迁移(style transfer),因此跨模态的图像转换已经成为了一个研究热点。在很多场景下,跨模态的图像转换的一个重点是多模态(multimodal)的。例如因为天气、时间、光照等的不同,一个冬天的照片转换成夏天的照片可能会是多个样子。但现有的技术通常只能实现某一个模态的转换,这篇论文提出了一个可以实现多模态的无监督图像转换框架。如Fig. 1(a)所示,该框架设定了多个假设。首先,我们假定UNIT中的潜在空间(a latent space)可以解构成一个内容空间(a content space)和一个风格空间(a style space)。进一步地,我们假定来自不同domain的图像可以共享同一个内容空间但不会共享风格空间。为了将一张图像转换到目标domain,我们将这张图像的内容编码(content code)和属于目标domain的一个随机的风格编码(style code)组合到一起就完成了图像的转换(如Fig. 1(b)所示)。也就是说,在做图像转换时,内容编码保留了图像的主要内容信息,这是要保留下来的;而风格编码在转换到下一个domain时是不需要的,因此就扔掉了它。通过抽样几个不同的风格编码,我们就可以产生多样的、多模态的输入样本。(By sampling different style codes, our model is able to produce diverse and multimodal outputs.)多组实验验证了MUNIT的有效性,并达到了state-of-the-art的效果。
定义 x 1 ∈ X 1 x_1\in X_1 x1∈X1和 x 2 ∈ X 2 x_2\in X_2 x2∈X2是来自两个不同domain的图像。在无监督的图像转换任务中,我们可以获得两张图像分别服从的边缘分布 p ( x 1 ) p(x_1) p(x1)和 p ( x 2 ) p(x_2) p(x2),但不能获取到联合分布 p ( x 1 , x 2 ) p(x_1, x_2) p(x1,x2)。我们的目标是通过学习到的图像转换模型 p ( x 1 → 2 ∣ x 1 ) p(x_{1\rightarrow 2|x_1}) p(x1→2∣x1)和 p ( x 2 → 1 ∣ x 2 ) p(x_{2\rightarrow 1|x_2}) p(x2→1∣x2)来评估两个条件分布 p ( x 2 ∣ x 1 ) p(x_2|x_1) p(x2∣x1)和 p ( x 1 ∣ x 2 ) p(x_1|x_2) p(x1∣x2),其中 x 1 → 2 x_{1\rightarrow 2} x1→2是一个由 x 1 x_1 x1转换到 X 2 X_2 X2的样本。
为了解决这个问题,我们设定了 a partially shared latent space assumption。具体地,我们假定每张图像 x i ∈ X i x_i\in X_i xi∈Xi是由一个内容潜在编码 c i ∈ C i c_i\in C_i ci∈Ci和一个风格潜在编码 s i ∈ S i s_i\in S_i si∈Si构成,其中 c i ∈ C i c_i\in C_i ci∈Ci可以是由两个domain来共享的,而 s i ∈ S i s_i\in S_i si∈Si则是某个domain所特有的。换句话说,服从某个联合分布的一组对应图像 ( x 1 , x 2 ) (x_1, x_2) (x1,x2)是由 x 1 = G 1 ∗ ( c , s 1 ) x_1=G_1^*(c, s_1) x1=G1∗(c,s1)和 x 2 = G 2 ∗ ( c , s 2 ) x_2=G_2^*(c, s_2) x2=G2∗(c,s2)组成的,其中 c , s 1 , s 2 c, s_1, s_2 c,s1,s2服从某些先验分布,而 G 1 ∗ , G 2 ∗ G_1^*, G_2^* G1∗,G2∗是潜在的生成器。更进一步地,我们假定 G 1 ∗ , G 2 ∗ G_1^*, G_2^* G1∗,G2∗是目标函数,它们的逆函数为 E 1 ∗ = ( G 1 ∗ ) − 1 E_1^*=(G_1^*)^{-1} E1∗=(G1∗)−1和 E 2 ∗ = ( G 2 ∗ ) − 1 E_2^*=(G_2^*)^{-1} E2∗=(G2∗)−1。我们的目标就是通过神经网络来学习到这些潜在的生成器和编码器。值得注意的是,尽管编码器和解码器是确定性的,但是由于 s 2 s_2 s2的存在 p ( x 2 ∣ x 1 ) p(x_2|x_1) p(x2∣x1)是一个条件分布。
Fig. 2中给出了模型的整体结构和学习过程。一个样本被自动编码器解构成了一个内容编码 c i c_i ci和一个风格编码 s i s_i si,其中 ( c i , s i ) = ( E i c ( x i ) , E i s ( x i ) ) = E i ( x i ) (c_i, s_i) = (E_i^c (x_i), E_i^s(x_i))=E_i(x_i) (ci,si)=(Eic(xi),Eis(xi))=Ei(xi);而图像转换的过程中则用到了“编码器-解码器”对。举例来说,为了将图像 x 1 ∈ X 1 x_1\in X_1 x1∈X1转换到 X 2 X_2 X2,我们首先将图像转换成内容编码 c 1 = E 1 c ( x 1 ) c_1=E_1^c(x_1) c1=E1c(x1),然后随机选取服从先验分布 q ( s 2 ) ∼ N ( 0 , 1 ) q(s_2) \sim N(0, 1) q(s2)∼N(0,1)的风格编码 s 2 s_2 s2。之后使用 G 2 G_2 G2来生成最终的输出图像 x 1 → 2 = G 2 ( c 1 , s 2 ) x_{1\rightarrow 2}=G_2(c_1, s_2) x1→2=G2(c1,s2)。尽管前面这个先验分布不是多模态的,但是因为解码器是非线性的所以输出图像的分布可以是多模态的。
损失函数中包含了一个双向重构损失(a bidirectional reconstruction loss)(保证了编码器和解码器是逆向的)和一个对抗损失(a adversarial loss)(能够让转换得到的图像的分布尽可能地接近目标domain中的图像的分布)。下面具体展开这两部分。
Bidirectional reconstruction loss.
L r e c o n x 1 = E x 1 ∼ p ( x 1 ) [ ∣ ∣ G 1 ( E 1 c ( x 1 ) , E 1 s ( x 1 ) ) − x 1 ∣ ∣ 1 ] L_{recon}^{x_1} = E_{x_1\sim p(x_1)}[||G_1(E_1^c(x_1), E_1^s(x_1)) - x_1||_1] Lreconx1=Ex1∼p(x1)[∣∣G1(E1c(x1),E1s(x1))−x1∣∣1]
L r e c o n x 2 = E x 2 ∼ p ( x 2 ) [ ∣ ∣ G 2 ( E 2 c ( x 2 ) , E 2 s ( x 2 ) ) − x 2 ∣ ∣ 1 ] L_{recon}^{x_2} = E_{x_2\sim p(x_2)}[||G_2(E_2^c(x_2), E_2^s(x_2)) - x_2||_1] Lreconx2=Ex2∼p(x2)[∣∣G2(E2c(x2),E2s(x2))−x2∣∣1]
L r e c o n c 1 = E c 1 ∼ p ( c 1 ) , s 2 ∼ q ( s 2 ) [ ∣ ∣ E 2 c ( G 2 ( c 1 , s 2 ) ) − c 1 ∣ ∣ 1 ] L_{recon}^{c_1}=E_{c_1\sim p(c_1), s_2\sim q(s_2)}[||E_2^c(G_2(c_1, s_2)) - c_1||_1] Lreconc1=Ec1∼p(c1),s2∼q(s2)[∣∣E2c(G2(c1,s2))−c1∣∣1]
L r e c o n s 2 = E c 1 ∼ p ( c 1 ) , s 2 ∼ q ( s 2 ) [ ∣ ∣ E 2 s ( G 2 ( c 1 , s 2 ) ) − s 2 ∣ ∣ 1 ] L_{recon}^{s_2}=E_{c_1\sim p(c_1), s_2\sim q(s_2)}[||E_2^s(G_2(c_1, s_2)) - s_2||_1] Lrecons2=Ec1∼p(c1),s2∼q(s2)[∣∣E2s(G2(c1,s2))−s2∣∣1]
Adversarial loss.
L G A N x 2 = E c 1 ∼ p ( c 1 ) , s 2 ∼ q ( s 2 ) [ l o g ( 1 − D 2 ( G 2 ( c 1 , s 2 ) ) ) ] + E x 2 ∼ p ( x 2 ) [ l o g D 2 ( x 2 ) ] L_{GAN}^{x_2}=E_{c_1\sim p(c_1), s_2\sim q(s_2)}[log(1-D_2(G_2(c_1, s_2)))]+E_{x_2\sim p(x_2)}[logD_2(x_2)] LGANx2=Ec1∼p(c1),s2∼q(s2)[log(1−D2(G2(c1,s2)))]+Ex2∼p(x2)[logD2(x2)]
Total loss.
min E 1 , E 2 , G 1 , G 2 max D 1 , D 2 L ( E 1 , E 2 , G 1 , G 2 , D 1 , D 2 ) = L G A N x 1 + L G A N x 2 + λ x ( L r e c o n x 1 + L r e c o n x 2 ) + λ c ( L r e c o n c 1 + L r e c o n c 2 ) + λ s ( L r e c o n s 1 + λ r e c o n s 2 ) \min_{E_1, E_2, G_1, G_2}\max_{D_1, D_2}L(E_1, E_2, G_1, G_2, D_1, D_2) = L_{GAN}^{x_1} + L_{GAN}^{x_2} \\ + \lambda_x(L_{recon}^{x_1}+L_{recon}^{x_2}) + \lambda_c(L_{recon}^{c_1}+L_{recon}^{c_2}) + \lambda_s(L_{recon}^{s_1} + \lambda_{recon}^{s_2}) E1,E2,G1,G2minD1,D2maxL(E1,E2,G1,G2,D1,D2)=LGANx1+LGANx2+λx(Lreconx1+Lreconx2)+λc(Lreconc1+Lreconc2)+λs(Lrecons1+λrecons2)
下图是MUNIT的一个具体实现,代码见 https://github.com/nvlabs/MUNIT。