域 B 中生成的图像在样式和样式上都类似于域 A 中的图像。 无需在训练过程中显式配对来自两个域的图像就可以学习这种关系。 鉴于项目的配对是一项耗时的任务,因此这是一项非常强大的功能。 在较高的水平上,它尝试学习神经网络`G[AB]`和`G[BA]`形式的两个生成器函数。 图像`x[A]`,当通过发生器馈入时`G[AB]`,产生图像`x[AB]`,在域`B`中看起来很真实。此外,当此图像`x[AB]`通过其他生成器网络`G[BA]`馈送时,它应产生图像`x[ABA]`,理想情况下应与原始图像`x[A]`相同。 关于生成器功能,以下关系应成立:
仅使前面的损失最小化是不够的。 我们必须确保在域 B 中创建的图像*x <sub>B</sub>* 看起来逼真。例如,如果我们将域 A 中的衣服映射到域 B 中的鞋子,我们将 确保 *x <sub>B</sub>* 类似于鞋子。 如果图像不够真实,则在域 B 侧的鉴别符 *D <sub>B</sub>* 将检测为 *x <sub>B</sub>* 为假。 鞋子,因此也要考虑与此有关的损失。 通常,在训练过程中,向鉴别器提供生成的图像 *x <sub>AB</sub> = G <sub>AB</sub> (x <sub>A</sub> )* 域 B,我们选择在这里用 *y <sub>B</sub>* 表示,以便它学习从假图像中对真实图像进行分类。 您可能还记得,在 GAN 中,生成器和判别器相互进行*零和最小极大值游戏*,以便不断变得更好,直到达到平衡为止。 如果伪造的图像看起来不够逼真,则鉴别器将对其进行惩罚,这意味着生成器必须学习产生更好的图像 *x <sub>AB</sub>* ,如果输入图像 *x <sub>A</sub>* 。 考虑到所有这些因素,我们可以将我们希望最小化的生成器损耗公式化为重建损耗,以及鉴别器将 *x <sub>AB</sub>* 识别为假冒的损耗。 第二种损失将试图使生成器在域 B 中生成逼真的图像。将域 A 中的图像 *x <sub>A</sub>*映射到域 B 中的图像的生成器损失可以表示为 如下:
仅使前面的损失最小化是不够的。 我们必须确保在域 B 中创建的图像`x[B]`看起来逼真。例如,如果我们将域 A 中的衣服映射到域 B 中的鞋子,我们将 确保`x[B]`类似于鞋子。 如果图像不够真实,则在域 B 侧的鉴别符`D[B]`将检测为`x[B]`为假。 鞋子,因此也要考虑与此有关的损失。 通常,在训练过程中,向鉴别器提供生成的图像 *x <sub>AB</sub> = G <sub>AB</sub> (x <sub>A</sub> )* 域 B,我们选择在这里用`y[B]`表示,以便它学习从假图像中对真实图像进行分类。 您可能还记得,在 GAN 中,生成器和判别器相互进行*零和最小极大值游戏*,以便不断变得更好,直到达到平衡为止。 如果伪造的图像看起来不够逼真,则鉴别器将对其进行惩罚,这意味着生成器必须学习产生更好的图像`x[AB]`,如果输入图像`x[A]`。 考虑到所有这些因素,我们可以将我们希望最小化的生成器损耗公式化为重建损耗,以及鉴别器将`x[AB]`识别为假冒的损耗。 第二种损失将试图使生成器在域 B 中生成逼真的图像。将域 A 中的图像`x[A]`映射到域 B 中的图像的生成器损失可以表示为 如下:
最大的问题是,我们可以在这里停下来吗? 由于我们有来自两个域的图像,因此要获得更好的映射,我们也可以从域 B 拍摄图像,并通过生成器*G <sub>BA</sub>* 将它们映射到域 A。 如果我们在域 B 中拍摄 *x <sub>B</sub>* 图像,并通过生成器 *G 将其转换为图像 *x <sub>BA</sub>* HTG13] BA* ,而域 A 上的标识符由 *D <sub>A</sub>*给出,则与这种转换相关的成本函数由以下给出:
最大的问题是,我们可以在这里停下来吗? 由于我们有来自两个域的图像,因此要获得更好的映射,我们也可以从域 B 拍摄图像,并通过生成器`G[BA]`将它们映射到域 A。 如果我们在域 B 中拍摄`x[B]`图像,并通过生成器 *G 将其转换为图像`x[BA]`HTG13] BA* ,而域 A 上的标识符由`D[A]`给出,则与这种转换相关的成本函数由以下给出:
| `self.D_B_loss_real` | 在对域 B 中的真实图像进行分类时,鉴别符*D <sub>B</sub>*的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator *D<sub>B.</sub>*) |
| `self.D_B_loss_fake` | 在对域 B 中的伪造图像进行分类时,鉴别符*D <sub>B</sub>*的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator *D<sub>B.</sub>*) |
| `self.D_A_loss_real` | 在对域 A 中的真实图像进行分类时,鉴别符*D <sub>A</sub>*的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator *D<sub>A.</sub>*) |
| `self.D_A_loss_fake` | 在对域 A 中的伪造图像进行分类时,鉴别符*D <sub>A</sub>*的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator *D<sub>A.</sub>*) |
| `self.loss_GABA` | 通过两个生成器*G <sub>AB</sub>* 和 *G <sub>BA</sub>*将域 A 中的图像映射到 B,然后再映射回 A 的重建损失 )加上假图片 *G <sub>AB</sub> (x <sub>A</sub> )*的二进制交叉熵,并由域 B 中的鉴别器标记为真实图像。(This loss is to be minimized with respect to the parameters of the generators *G<sub>AB</sub>* and *G<sub>BA.</sub>*) |
| `self.loss_GBAB` | 通过两个生成器*G <sub>BA</sub>* 和 *G <sub>AB</sub>*将域 B 中的图像映射到 A,然后再映射回 B 的重建损失 加上伪图片 *G <sub>BA</sub> (x <sub>B</sub> )*的二元交叉熵,由域 A 中的鉴别器标记为真实图像。(This loss is to be minimized with respect to the parameters of the generators *G<sub>AB</sub>* and *G<sub>BA.</sub>*) |
| `self.D_B_loss_real` | 在对域 B 中的真实图像进行分类时,鉴别符`D[B]`的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator *D<sub>B.</sub>*) |
| `self.D_B_loss_fake` | 在对域 B 中的伪造图像进行分类时,鉴别符`D[B]`的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator *D<sub>B.</sub>*) |
| `self.D_A_loss_real` | 在对域 A 中的真实图像进行分类时,鉴别符`D[A]`的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator *D<sub>A.</sub>*) |
| `self.D_A_loss_fake` | 在对域 A 中的伪造图像进行分类时,鉴别符`D[A]`的二进制交叉熵损失。(This loss is to be minimized with respect to the parameters of the discriminator *D<sub>A.</sub>*) |
| `self.loss_GABA` | 通过两个生成器`G[AB]`和`G[BA]`将域 A 中的图像映射到 B,然后再映射回 A 的重建损失 )加上假图片 *G <sub>AB</sub> (x <sub>A</sub> )*的二进制交叉熵,并由域 B 中的鉴别器标记为真实图像。(This loss is to be minimized with respect to the parameters of the generators *G<sub>AB</sub>* and *G<sub>BA.</sub>*) |
| `self.loss_GBAB` | 通过两个生成器`G[BA]`和`G[AB]`将域 B 中的图像映射到 A,然后再映射回 B 的重建损失 加上伪图片 *G <sub>BA</sub> (x <sub>B</sub> )*的二元交叉熵,由域 A 中的鉴别器标记为真实图像。(This loss is to be minimized with respect to the parameters of the generators *G<sub>AB</sub>* and *G<sub>BA.</sub>*) |
在此`sample_model`函数中,从域 A 随机选择的图像被拍摄并馈送到生成器*G <sub>AB</sub>* ,以在域 B 中生成图像。类似地,从域 B 随机选择的图像是 馈送到生成器 *G <sub>BA</sub>*中,以在域 A 中生成图像。这些输出图像由两个生成器在不同时期生成,并将批次保存在样本文件夹中以查看是否 生成器在训练过程中随着时间的推移而不断改进,以产生更好的图像质量。
在此`sample_model`函数中,从域 A 随机选择的图像被拍摄并馈送到生成器`G[AB]`,以在域 B 中生成图像。类似地,从域 B 随机选择的图像是 馈送到生成器`G[BA]`中,以在域 A 中生成图像。这些输出图像由两个生成器在不同时期生成,并将批次保存在样本文件夹中以查看是否 生成器在训练过程中随着时间的推移而不断改进,以产生更好的图像质量。