提交 e8942677 编写于 作者: W wizardforcel

2021-01-08 18:06:59

上级 2c61f3ee
......@@ -66,9 +66,9 @@ pix2pix 算法与**条件 GAN**(**CGAN**)[4]相似,我们在“第 4 章
图 7.1.4:伪造`y`的 CycleGAN 生成器`G`
“公式 7.1.1”只是假目标数据![](img/B14853_07_002.png)的生成器`G`。 它将数据从源域`x`转换为目标域`y`
“公式 7.1.1”只是假目标数据`y'`的生成器`G`。 它将数据从源域`x`转换为目标域`y`
要训​​练生成器,我们必须构建 GAN。 这是正向循环 GAN,如图“图 7.1.5”所示。 该图表明,它类似于“第 4 章”,“生成对抗网络(GANs)”中的典型 GAN,由生成器`G`和判别器![](img/B14853_07_003.png)组成,它可以以相同的对抗方式进行训练。通过仅利用源域中的可用实际图像`x`和目标域中的实际图像`y`,进行无监督学习。
要训​​练生成器,我们必须构建 GAN。 这是正向循环 GAN,如图“图 7.1.5”所示。 该图表明,它类似于“第 4 章”,“生成对抗网络(GANs)”中的典型 GAN,由生成器`G`和判别器`D[y]`组成,它可以以相同的对抗方式进行训练。通过仅利用源域中的可用实际图像`x`和目标域中的实际图像`y`,进行无监督学习。
![A close up of a logo Description automatically generated](img/B14853_07_05.png)
......@@ -100,7 +100,7 @@ Backward Cycle GAN 生成器的目标是合成:
图 7.1.7:CycleGAN 向后循环 GAN
这可以通过对抗性训练反向循环 GAN 来完成。 目的是让生成器`F`学习如何欺骗判别器![](img/B14853_07_007.png)
这可以通过对抗性训练反向循环 GAN 来完成。 目的是让生成器`F`学习如何欺骗判别器`D[x]`
此外,还具有类似的向后循环一致性,以恢复原始源`y`
......@@ -110,7 +110,7 @@ Backward Cycle GAN 生成器的目标是合成:
![](img/B14853_07_009.png) (Equation 7.1.5)
总而言之,CycleGAN 的最终目标是使生成器`G`学习如何合成伪造的目标数据![](img/B14853_07_002.png),该伪造的目标数据![](img/B14853_07_002.png)会在正向循环中欺骗识别器![](img/B14853_07_011.png)。 由于网络是对称的,因此 CycleGAN 还希望生成器`F`学习如何合成伪造的源数据![](img/B14853_07_012.png),该伪造的源数据可以使判别器![](img/B14853_07_007.png)在反向循环中蒙蔽。 考虑到这一点,我们现在可以将所有损失函数放在一起。
总而言之,CycleGAN 的最终目标是使生成器`G`学习如何合成伪造的目标数据`y'`,该伪造的目标数据`y'`会在正向循环中欺骗识别器`D[y]`。 由于网络是对称的,因此 CycleGAN 还希望生成器`F`学习如何合成伪造的源数据`x'`,该伪造的源数据可以使判别器`D[x]`在反向循环中蒙蔽。 考虑到这一点,我们现在可以将所有损失函数放在一起。
让我们从 GAN 部分开始。 受到*最小二乘 GAN(LSGAN)* [5]更好的感知质量的启发,如“第 5 章”,“改进的 GAN” 中所述,CycleGAN 还使用 MSE 作为判别器和发电机损耗。 回想一下,LSGAN 与原始 GAN 之间的差异需要使用 MSE 损失,而不是二进制交叉熵损失。
......@@ -138,7 +138,7 @@ CycleGAN 的总损失为:
![](img/B14853_07_022.png) (Equation 7.1.13)
CycleGAN 建议使用以下权重值![](img/B14853_07_023.png)和![](img/B14853_07_024.png),以更加重视循环一致性检查。
CycleGAN 建议使用以下权重值`λ1 = 1.0``λ2 = 10.0`,以更加重视循环一致性检查。
训练策略类似于原始 GAN。 “算法 7.1.1”总结了 CycleGAN 训练过程。
......@@ -146,10 +146,10 @@ CycleGAN 建议使用以下权重值![](img/B14853_07_023.png)和![](img/B14853_
`n`训练步骤重复上述步骤:
1. 通过使用真实的源数据和目标数据训练前向循环判别器,将![](img/B14853_07_025.png)降至最低。 实际目标数据的小批量`y`标记为 1.0。 伪造的目标数据![](img/B14853_07_026.png)的小批量标记为 0.0。
2. 通过使用真实的源数据和目标数据训练反向循环判别器,将![](img/B14853_07_027.png)最小化。 实际源数据的小批量`x`标记为 1.0。 一小部分伪造的源数据![](img/B14853_07_028.png)被标记为 0.0。
1. 通过使用真实的源数据和目标数据训练前向循环判别器,将`L_forward_GAN^(D)`降至最低。 实际目标数据的小批量`y`标记为 1.0。 伪造的目标数据`y' = G(x)`的小批量标记为 0.0。
2. 通过使用真实的源数据和目标数据训练反向循环判别器,将`L_backward_GAN^(D)`最小化。 实际源数据的小批量`x`标记为 1.0。 一小部分伪造的源数据`x' = F(y)`被标记为 0.0。
1. 通过训练对抗网络中的前向周期和后向周期生成器,将![](img/B14853_07_029.png)和![](img/B14853_07_030.png)最小化。 伪造目标数据的一个小批量![](img/B14853_07_026.png)被标记为 1.0。 一小部分伪造的源数据![](img/B14853_07_028.png)被标记为 1.0。 判别器的权重被冻结。
1. 通过训练对抗网络中的前向周期和后向周期生成器,将`L_GAN^(D)``L_cyc`最小化。 伪造目标数据的一个小批量`y' = G(x)`被标记为 1.0。 一小部分伪造的源数据`x' = F(y)`被标记为 1.0。 判别器的权重被冻结。
在神经样式转移问题中,颜色组合可能无法成功地从源图像转移到伪造目标图像。 此问题显示在“图 7.1.8”中:
......@@ -165,7 +165,7 @@ CycleGAN 的总损耗变为:
![](img/B14853_07_034.png) (Equation 7.1.15)
其中![](img/B14853_07_035.png)。 在对抗训练中,身份损失也得到了优化。“图 7.1.9”重点介绍了实施身份正则器的 CycleGAN 辅助网络:
其中`λ3 = 0.5`。 在对抗训练中,身份损失也得到了优化。“图 7.1.9”重点介绍了实施身份正则器的 CycleGAN 辅助网络:
![A screenshot of a cell phone Description automatically generated](img/B14853_07_09.png)
......@@ -449,9 +449,9 @@ def build_discriminator(input_shape,
return discriminator
```
使用生成器和判别器生成器,我们现在可以构建 CycleGAN。“列表 7.1.4”显示了构建器功能。 与上一节中的讨论一致,实例化了两个生成器`g_source = F``g_target = G`以及两个判别器`d_source = D[x]``d_target = D[y]`。 正向循环为![](img/B14853_07_036.png) `reco_source = g_source(g_target(source_input))`。反向循环为![](img/B14853_07_037.png) `reco_target = g_target(g_source (target_input))`
使用生成器和判别器生成器,我们现在可以构建 CycleGAN。“列表 7.1.4”显示了构建器功能。 与上一节中的讨论一致,实例化了两个生成器`g_source = F``g_target = G`以及两个判别器`d_source = D[x]``d_target = D[y]`。 正向循环为`x' = F(G(x)) = reco_source = g_source(g_target(source_input))`。反向循环为`y' = G(F(y)) = reco_target = g_target(g_source (target_input))`
对抗模型的输入是源数据和目标数据,而输出是![](img/B14853_07_007.png)和![](img/B14853_07_039.png)的输出以及重构的输入![](img/B14853_07_040.png)和![](img/B14853_07_002.png)。 在本示例中,由于由于灰度图像和彩色图像中通道数之间的差异,因此未使用身份网络。 对于 GAN 和循环一致性损失,我们分别使用建议的![](img/B14853_07_042.png)和![](img/B14853_07_043.png)损失权重。 与前几章中的 GAN 相似,我们使用 RMSprop 作为判别器的优化器,其学习率为`2e-4`,衰减率为`6e-8`。 对抗的学习率和衰退率是判别器的一半。
对抗模型的输入是源数据和目标数据,而输出是`D[x]``D[y]`的输出以及重构的输入`x'``y'`。 在本示例中,由于由于灰度图像和彩色图像中通道数之间的差异,因此未使用身份网络。 对于 GAN 和循环一致性损失,我们分别使用建议的`λ1 = 1.0``λ2 = 10.0`损失权重。 与前几章中的 GAN 相似,我们使用 RMSprop 作为判别器的优化器,其学习率为`2e-4`,衰减率为`6e-8`。 对抗的学习率和衰退率是判别器的一半。
“列表 7.1.4”:`cyclegan-7.1.1.py`
......@@ -956,7 +956,7 @@ def mnist_cross_svhn(g_models=None):
图 7.1.19:带有 MNIST 上的 PatchGAN 的 CycleGAN 与 SVHN(目标)的反向循环。 重建的目标与原始目标并不完全相似。 原始彩色照片可以在该书的 [GitHub 存储库](https://github.com/PacktPublishing/Advanced-Deep-Learning-with-Keras/blob/master/chapter7-cross-domain-gan/README.md)中找到。
在“图 7.1.3”中,CycleGAN 被描述为具有周期一致性。 换句话说,给定源`x`,CycleGAN 将正向循环中的源重构为![](img/B14853_07_012.png)。 另外,在给定目标`y`的情况下,CycleGAN 在反向循环中将目标重构为![](img/B14853_07_045.png)
在“图 7.1.3”中,CycleGAN 被描述为具有周期一致性。 换句话说,给定源`x`,CycleGAN 将正向循环中的源重构为`x'`。 另外,在给定目标`y`的情况下,CycleGAN 在反向循环中将目标重构为`y'`
重建了许多目标图像。 有些数字显然是相同的,例如最后两列(3 和 4)中的第二行,而有些数字却是相同的但是模糊的,例如前两列列中的第一行(5 和 2)。 尽管样式仍像第二行一样,但在前两列(从 33 和 6 到 1 以及无法识别的数字)中,有些数字会转换为另一数字。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册