接下来的博客将陆续介绍三篇图像转换相关的工作。以往看过CycleGAN和StarGAN这样的工作,但这三篇工作给出了一个新的思路,很有启发意义。本文先介绍第一篇工作UNIT。
UNIT(UNsupervised Image-to-image Translation)发表于NIPS2017。UNIT提出了一个称为共享的潜在空间(a shared-latent space)的假设:处于不同domain的两张对应图像可以映射到共享的潜在空间中的同一个潜在表示(latent representation)。基于这个假设,提出了基于GAN和VAE的UNIT框架。
定义 X 1 X_1 X1和 X 2 X_2 X2是两个image domain。在有监督的图像到图像转换中,样本 ( x 1 , x 2 ) (x_1, x_2) (x1,x2)服从联合分布 P X 1 , X 2 ( x 1 , x 2 ) P_{X_1, X_2}(x_1, x_2) PX1,X2(x1,x2);在无监督的图像到图像转换中,样本 ( x 1 , x 2 ) (x_1, x_2) (x1,x2)服从边缘分布 P X 1 ( x 1 ) P_{X_1}(x_1) PX1(x1)和 P X 2 ( x 2 ) P_{X_2}(x_2) PX2(x2)。没有特殊假设的情况下,我们不能从边缘分布中得出联合分布。
下面给出对共享的潜在空间的假设。如下图所示,给定样本对 x 1 x_1 x1和 x 2 x_2 x2,我们可以从一个潜在编码 z z z恢复出这两张图像,也可以从这两张图像得到这个共享的潜在编码。假设存在函数 E 1 ∗ E_1^* E1∗, E 2 ∗ E_2^* E2∗, G 1 ∗ G_1^* G1∗和 G 2 ∗ G_2^* G2∗,满足 z = E 1 ∗ ( x 1 ) = E 2 ∗ ( x 2 ) z=E_1^*(x_1)=E_2^*(x_2) z=E1∗(x1)=E2∗(x2)。反过来,满足 x 1 = G 1 ∗ ( z ) x_1=G_1^*(z) x1=G1∗(z)和 x 2 = G 2 ∗ ( z ) x_2=G_2^*(z) x2=G2∗(z)。这样以来, F 1 → 2 ∗ ( x 1 ) = x 2 = G 2 ∗ ( E 1 ∗ ( x 1 ) ) F^*_{1\rightarrow2}(x_1)=x_2=G_2^*(E_1^*(x_1)) F1→2∗(x1)=x2=G2∗(E1∗(x1))实现了从 X 1 X_1 X1到 X 2 X_2 X2的映射, F 2 → 1 ∗ ( x 2 ) = x 1 = G 1 ∗ ( E 2 ∗ ( x 2 ) ) F^*_{2\rightarrow1}(x_2)=x_1=G_1^*(E_2^*(x_2)) F2→1∗(x2)=x1=G1∗(E2∗(x2))实现了从 X 2 X_2 X2到 X 1 X_1 X1的映射。因此,UNIT要实现的就是 F 1 → 2 ∗ F^*_{1\rightarrow2} F1→2∗和 F 2 → 1 ∗ F^*_{2\rightarrow1} F2→1∗。更进一步地,两个函数还满足下面的cycle-consistency constraint: x 1 = F 2 → 1 ∗ ( F 1 → 2 ∗ ( x 1 ) ) x_1=F^*_{2\rightarrow1}(F^*_{1\rightarrow2}(x_1)) x1=F2→1∗(F1→2∗(x1))和 x 2 = F 1 → 2 ∗ ( F 2 → 1 ∗ ( x 2 ) ) x_2=F^*_{1\rightarrow2}(F^*_{2\rightarrow1}(x_2)) x2=F1→2∗(F2→1∗(x2))。换句话说,UNIT提出的共享的潜在空间假设满足循环一致性假设(the cycle-consistency assumption)。
为了实现这样一个共享的潜在空间假设,我们进一步假设一个一个共享的中间表示 h h h。这样生成一对对应图像的过程变成了下面这样一种形式:
z → h ↘ x 2 ↗ x 1 z\rightarrow h^{\nearrow x_1}_{\searrow x_2} z→h↘x2↗x1
因此有了 G 1 ∗ = G L , 1 ∗ ∘ G H ∗ G_1^*=G_{L,1}^* \circ G_H^* G1∗=GL,1∗∘GH∗和 G 2 ∗ = G L , 2 ∗ ∘ G H ∗ G_2^*=G_{L,2}^*\circ G_H^* G2∗=GL,2∗∘GH∗。其中 G H ∗ G_H^* GH∗是一个高阶的生成函数,用来将 z z z映射到 h h h; G L , 1 ∗ G_{L,1}^* GL,1∗和 G L , 2 ∗ G_{L,2}^* GL,2∗是低阶的生成函数,用来分别将 h h h映射到 x 1 x_1 x1和 x 2 x_2 x2。在多domain的图像转换中, z z z可以表示一个场景的紧凑的、高阶的表示(如车在前,树在后的场景), h h h可以看做是 z z z的一个具体的实现(车和树分别占据了对应的像素),而 G L , 1 ∗ G_{L,1}^* GL,1∗和 G L , 2 ∗ G_{L,2}^* GL,2∗则是每个domain中真实图像的生成函数(“tree in lush green in the sunny domain, but dark green in the rainy domain”)。
上图中的框架是基于VAE和GAN的,由六部分组成:两个domain的图像编码器 E 1 E_1 E1和 E 2 E_2 E2,两个domain的图像生成器 G 1 G_1 G1和 G 2 G_2 G2,两个domain的对抗判别器 D 1 D_1 D1和 D 2 D_2 D2。六部分网络的功能可以从下表中看到。
VAE. E 1 E_1 E1和 G 1 G_1 G1构成了 X 1 X_1 X1 domain的一个变分自编码器 V A E 1 VAE_{1} VAE1。对于一个输入图像 x 1 ∈ X 1 x_1 \in X_1 x1∈X1, V A E 1 VAE_1 VAE1首先通过编码器 E 1 E_1 E1将 x 1 x_1 x1映射到潜在空间 Z Z Z内的一个编码,之后又由生成器 G 1 G_1 G1将这个编码重构成图像 x 1 x_1 x1。另一个变分自编码器 V A E 2 VAE_2 VAE2的作用类似。
Weight-sharing. 基于前面介绍的共享的潜在空间假设,我们通过权重共享将两个VAE联系到一起。具体地,我们让 E 1 E_1 E1和 E 2 E_2 E2的最后几层网络共享参数,这几层网络负责从来自两个domain的输入图像中提取到高阶表示。类似地,我们让 G 1 G_1 G1和 G 2 G_2 G2的前几层网络共享参数,这几层网络负责解码高阶表示以重构输入图像。
要注意到权重共享这一约束并不能保证两个domain中的对应图像有着同样的潜在编码。在无监督训练中,在两个domain中不存在成对的对应图像能够映射到同一个潜在编码,即成对的对应图像提取到的签字编码通常是不同的。然而通过对抗训练,我们可以看到来自两个domain的对应图像可以由 E 1 E_1 E1和 E 2 E_2 E2映射到同一个潜在编码,而这个潜在编码又可以由 G 1 G_1 G1和 G 2 G_2 G2分别映射到两个domain中的对应图像。
GANs. 我们的框架中包含了两个生成对抗网络: G A N 1 = { D 1 , G 1 } GAN_1=\{D_1, G_1\} GAN1={D1,G1}和 G A N 2 = { D 2 , G 2 } GAN_2=\{D_2,G_2\} GAN2={D2,G2}。在 G A N 1 GAN_1 GAN1中,对于第一个domain中的真实图像, D 1 D_1 D1应该判定为True;对于由 G 1 G_1 G1生成的图像, D 2 D_2 D2应该判定为False。 G 1 G_1 G1可以生成两种图像: x ~ 1 1 → 1 = G 1 ( z 1 ∼ q 1 ( z 1 ∣ x 1 ) ) \tilde{x}_1^{1\rightarrow1}=G_1(z_1 \sim q_1(z_1|x_1)) x~11→1=G1(z1∼q1(z1∣x1))和 x ~ 2 2 → 1 = G 1 ( z 2 ∼ q 2 ( z 2 ∣ x 2 ) ) \tilde{x}_2^{2\rightarrow1}=G_1(z_2 \sim q_2(z_2|x_2)) x~22→1=G1(z2∼q2(z2∣x2))。因为重构的过程是有监督的,我们只能通过对抗训练的方式来实现图像转换的过程。 G A N 2 GAN_2 GAN2有着同样的作用。
Cycle-consistency. 由于共享潜在空间假设意味着循环一致性约束,我们还可以在所提出的框架中强制执行循环一致性约束,以进一步规范不适当的无监督图像到图像转换问题。得到的信息处理流称为循环重构流。
Learning. 我们要同时进行 V A E 1 VAE_1 VAE1、 V A E 2 VAE_2 VAE2、 G A N 1 GAN_1 GAN1和 G A N 2 GAN_2 GAN2的训练,以同时实现图像重构流、图像转换流和循环重构流:
min E 1 , E 2 , G 1 , G 2 max D 1 , D 2 L V A E 1 ( E 1 , G 1 ) + L G A N 1 ( E 1 , G 1 , D 1 ) + L C C 1 ( E 1 , G 1 , E 2 , G 2 ) L V A E 2 ( E 2 , G 2 ) + L G A N 2 ( E 2 , G 2 , D 2 ) + L C C 2 ( E 2 , G 2 , E 1 , G 1 ) \min_{E_1, E_2, G_1, G_2} \max_{D_1, D_2} L_{VAE_1}(E_1,G_1)+L_{GAN_1}(E_1, G_1, D_1) + L_{CC_1}(E_1, G_1, E_2, G_2) \\ \qquad \qquad \qquad L_{VAE_2}(E_2, G_2)+L_{GAN_2}(E_2, G_2, D_2)+L_{CC_2}(E_2,G_2, E_1, G_1) E1,E2,G1,G2minD1,D2maxLVAE1(E1,G1)+LGAN1(E1,G1,D1)+LCC1(E1,G1,E2,G2)LVAE2(E2,G2)+LGAN2(E2,G2,D2)+LCC2(E2,G2,E1,G1)
VAE的训练旨在最小化一个变分的上限(a variational upper bound),VAE的目标是:
L V A E 1 ( E 1 , G 1 ) = λ 1 K L ( q 1 ( z 1 ∣ x 1 ) ∣ ∣ p η ( z ) ) − λ 2 E z 1 ∼ q 1 ( z 1 ∣ x 1 ) [ l o g p G 1 ( x 1 ∣ z 1 ) ] L_{VAE_1}(E_1, G_1) = \lambda_1 KL(q_1(z_1|x_1)||p_{\eta}(z)) - \lambda_2E_{z_1\sim q_1(z_1|x_1)}[logp_{G_1}(x_1|z_1)] LVAE1(E1,G1)=λ1KL(q1(z1∣x1)∣∣pη(z))−λ2Ez1∼q1(z1∣x1)[logpG1(x1∣z1)]
L V A E 2 ( E 2 , G 2 ) = λ 1 K L ( q 2 ( z 2 ∣ x 2 ) ∣ ∣ p η ( z ) ) − λ 2 E z 2 ∼ q 2 ( z 2 ∣ x 2 ) [ l o g p G 2 ( x 2 ∣ z 2 ) ] L_{VAE_2}(E_2, G_2) = \lambda_1 KL(q_2(z_2|x_2)||p_{\eta}(z)) - \lambda_2E_{z_2\sim q_2(z_2|x_2)}[logp_{G_2}(x_2|z_2)] LVAE2(E2,G2)=λ1KL(q2(z2∣x2)∣∣pη(z))−λ2Ez2∼q2(z2∣x2)[logpG2(x2∣z2)]
GAN的目标函数如下:
L G A N 1 ( E 1 , G 1 , D 1 ) = λ 0 E x 1 ∼ P X 1 [ l o g D 1 ( x 1 ) ] + λ 0 E z 2 ∼ q 2 ( z 2 ∣ x 2 ) [ l o g ( 1 − D 1 ( G 1 ( z 2 ) ) ) ] L_{GAN_1}(E_1, G_1, D_1)=\lambda_0E_{x_1\sim P_{X_1}}[logD_1(x_1)] + \lambda_0E_{z_2\sim q_2(z_2|x_2)}[log(1-D_1(G_1(z_2)))] LGAN1(E1,G1,D1)=λ0Ex1∼PX1[logD1(x1)]+λ0Ez2∼q2(z2∣x2)[log(1−D1(G1(z2)))]
L G A N 2 ( E 2 , G 2 , D 2 ) = λ 0 E x 2 ∼ P X 2 [ l o g D 2 ( x 2 ) ] + λ 0 E z 1 ∼ q 1 ( z 1 ∣ x 1 ) [ l o g ( 1 − D 2 ( G 2 ( z 1 ) ) ) ] L_{GAN_2}(E_2, G_2, D_2)=\lambda_0E_{x_2\sim P_{X_2}}[logD_2(x_2)] + \lambda_0E_{z_1\sim q_1(z_1|x_1)}[log(1-D_2(G_2(z_1)))] LGAN2(E2,G2,D2)=λ0Ex2∼PX2[logD2(x2)]+λ0Ez1∼q1(z1∣x1)[log(1−D2(G2(z1)))]
我们使用类似于VAE的目标函数来实现循环一致约束:
L C C 1 ( E 1 , G 1 , E 2 , G 2 ) = λ 3 K L ( q 1 ( z 1 ∣ x 1 ) ∣ ∣ p η ( z ) ) + λ 3 K L ( q 2 ( z 2 ∣ x 1 1 → 2 ) ∣ ∣ p η ( z ) ) − λ 4 E z 2 ∼ q 2 ( z 2 ∣ x 1 1 → 2 ) [ l o g p G 1 ( x 1 ∣ z 2 ) ] L_{CC_1}(E_1, G_1, E_2, G_2)=\lambda_3KL(q_1(z_1|x_1)||p_{\eta}(z))+\lambda_3KL(q_2(z_2|x_1^{1\rightarrow2})||p_{\eta}(z)) \\ -\lambda_4E_{z_2\sim q_2(z_2|x_1^{1\rightarrow2})}[logp_{G_1}(x_1|z_2)] LCC1(E1,G1,E2,G2)=λ3KL(q1(z1∣x1)∣∣pη(z))+λ3KL(q2(z2∣x11→2)∣∣pη(z))−λ4Ez2∼q2(z2∣x11→2)[logpG1(x1∣z2)]
L C C 2 ( E 2 , G 2 , E 1 , G 1 ) = λ 3 K L ( q 2 ( z 2 ∣ x 2 ) ∣ ∣ p η ( z ) ) + λ 3 K L ( q 1 ( z 1 ∣ x 2 2 → 1 ) ∣ ∣ p η ( z ) ) − λ 4 E z 1 ∼ q 1 ( z 1 ∣ x 2 2 → 1 ) [ l o g p G 2 ( x 2 ∣ z 1 ) ] L_{CC_2}(E_2, G_2, E_1, G_1)=\lambda_3KL(q_2(z_2|x_2)||p_{\eta}(z))+\lambda_3KL(q_1(z_1|x_2^{2\rightarrow1})||p_{\eta}(z)) \\ -\lambda_4E_{z_1\sim q_1(z_1|x_2^{2\rightarrow1})}[logp_{G_2}(x_2|z_1)] LCC2(E2,G2,E1,G1)=λ3KL(q2(z2∣x2)∣∣pη(z))+λ3KL(q1(z1∣x22→1)∣∣pη(z))−λ4Ez1∼q1(z1∣x22→1)[logpG2(x2∣z1)]
后面是参数设置与实验过程,这里不再展开。这个工作的一大亮点是在进行两个domain之间的图像转换时引入了一个潜在空间,两个domain内的对应图像会映射到潜在空间中的同一个编码,并通过VAE和GAN实现了这一过程。