NICE-GAN: 把判别器重用为编码器的图像翻译模型.
无监督图像翻译是指学习多个图像域之间的映射关系,即给定边缘分布$p(X)$和$p(Y)$,学习条件映射$f_{x \to y}=p(Y|X)$和$f_{y \to x}=p(X|Y)$。目前常见的模型架构是通过编码器$E_x$和生成器$G_{x \to y}$实现图像的生成:
\[f_{x \to y}(x)= G_{x \to y} (E_x(x))\]为了训练模型,引入判别器$D_x$区分真实图像和生成图像,以此构造对抗损失。
有一些方法是把编码器和生成器分开构造的,比如UNIT系列;而有一些方法是把生成器设计为编码器-解码器结构,比如CycleGAN系列。这些模型在训练完成后会丢弃判别器;而本文作者提出将判别器的一部分用作编码器,从而实现更紧凑的网络结构设计。
把判别器$D_x$拆分成编码器$E_x^D$和分类器$C_x^D$,则图像生成过程为:
\[f_{x \to y}(x)= G_{x \to y} (E_x^D(x))\]NICE-GAN的训练流程与CycleGAN类似,训练两个生成器,\(G_{X→Y}\)实现从类型$X$转换成类型$Y$,\(G_{Y→X}\)实现从类型$Y$转换成类型$X$。训练两个判别器,\(D_{X}\)判断图像是否属于类型$X$;\(D_{Y}\)判断图像是否属于类型$Y$。
NICE-GAN的判别器采用多尺度形式,除了编码器结构外,还应用了多个尺度的分类器做了多层特征的判别。
NICE-GAN的生成器损失函数包括对抗损失(LSGAN)、L1循环一致性损失和L1重构损失;判别器的损失函数为对抗损失(LSGAN)。作者采用了解耦的训练过程,由于编码器是判别器的一部分,因此在训练生成损失时,不更新编码器的参数。
\[\begin{aligned} \mathop{\min}_{D_X=E_X\circ C_X,D_Y=E_Y\circ C_Y} & \Bbb{E}_{y \text{~} P_{data}(y)}[(D_Y(y)-1)^2] + \Bbb{E}_{x \text{~} P_{data}(x)}[(D_Y(G_{X \to Y}(E_X(x))))^2] \\ &+ \Bbb{E}_{x \text{~} P_{data}(x)}[(D_X(x)-1)^2] + \Bbb{E}_{y \text{~} P_{data}(y)}[(D_X(G_{Y \to X}(E_Y(y))))^2] \\ \mathop{ \min}_{G_{X \to Y},G_{Y \to X}} & \Bbb{E}_{x \text{~} P_{data}(x)}[(D_Y(G_{X \to Y}(E_X(x)))-1)^2]+\Bbb{E}_{y \text{~} P_{data}(y)}[(D_X(G_{Y \to X}(E_Y(y)))-1)^2] \\ &+ \Bbb{E}_{x \text{~} P_{data}(x)}[||G_{Y \to X}(E_Y(G_{X \to Y}(E_X(x))))-x||_1] \\ &+ \Bbb{E}_{y \text{~} P_{data}(y)}[||G_{X \to Y}(E_X(G_{Y \to X}(E_Y(y))))-y||_1] \\ &+ \Bbb{E}_{x \text{~} P_{data}(x)}[||G_{Y \to X}(E_X(x))-x||_1] \\ &+ \Bbb{E}_{y \text{~} P_{data}(y)}[||G_{X \to Y}(E_Y(y))-y||_1] \end{aligned}\]