**3D 生成对抗网络**(**3D-GAN**)是 GAN 的变体,就像 StackGAN,CycleGAN 和`S`**上层分辨率一样 生成对抗网络**(**SRGAN**)。 与朴素 GAN 相似,它具有生成器和判别器模型。 这两个网络都使用 3D 卷积层,而不是使用 2D 卷积。 如果提供足够的数据,它可以学习生成具有良好视觉质量的 3D 形状。
**3D 生成对抗网络**(**3D-GAN**)是 GAN 的变体,就像 StackGAN,CycleGAN 和**超分辨率生成对抗网络**(**SRGAN**)一样 。 与朴素 GAN 相似,它具有生成器和判别器模型。 这两个网络都使用 3D 卷积层,而不是使用 2D 卷积。 如果提供足够的数据,它可以学习生成具有良好视觉质量的 3D 形状。
在仔细查看 3D-GAN 网络之前,让我们了解 3D 卷积。
...
...
@@ -36,7 +36,7 @@
简而言之,3D 卷积操作沿`x`,`y`和`z`这三个方向对输入数据应用 3D 滤波器。 此操作将创建 3D 特征图的堆叠列表。 输出的形状类似于立方体或长方体的形状。 下图说明了 3D 卷积操作。 左立方体的突出显示部分是输入数据。 内核位于中间,形状为(3,3,3)。 右侧的块是卷积运算的输出:
简而言之,3D 卷积操作沿`x`,`y`和`z`这三个方向对输入数据应用 3D 滤波器。 此操作将创建 3D 特征图的堆叠列表。 输出的形状类似于立方体或长方体的形状。 下图说明了 3D 卷积操作。 左立方体的突出显示部分是输入数据。 内核位于中间,形状为`(3, 3, 3)`。 右侧的块是卷积运算的输出:
![](img/9128ea2e-31f5-472a-8ebc-f3add1a716e0.png)
...
...
@@ -50,7 +50,7 @@
3D-GAN 中的两个网络都是深度卷积神经网络。 发电机网络通常是一个上采样网络。 它对噪声向量(来自概率潜在空间的向量)进行上采样,以生成形状为的 3D 图像,该形状的长度,宽度,高度和通道与输入图像相似。 判别器网络是下采样网络。 使用一系列 3D 卷积运算和密集层,它可以识别提供给它的输入数据是真实的还是伪造的。
3D-GAN 中的两个网络都是深度卷积神经网络。 生成器网络通常是一个上采样网络。 它对噪声向量(来自概率潜在空间的向量)进行上采样,以生成形状为的 3D 图像,该形状的长度,宽度,高度和通道与输入图像相似。 判别器网络是下采样网络。 使用一系列 3D 卷积运算和密集层,它可以识别提供给它的输入数据是真实的还是伪造的。
在接下来的两节中,我们将介绍生成器和判别器网络的体系结构。
...
...
@@ -58,16 +58,16 @@
# 发电机网络的架构
# 生成器网络的架构
生成器网络包含五个体积完全卷积的层,具有以下配置:
***卷积层**:5
***过滤器**: 512 , 256 , 128 和 64 , 1
***内核大小**:4 x 4 x 4, 4 x 4 x 4, 4 x 4 x 4, 4 x 4 x 4, 4 x 4 x 4
***步幅**:1、2、2、2、2 或(1,1),(2,2),(2,2),(2,2),(2,2)
***过滤器**: 512,256,128 和 64,1
***内核大小**:`4 x 4 x 4`, `4 x 4 x 4`, `4 x 4 x 4`, `4 x 4 x 4`, `4 x 4 x 4`
为了将照片变成一幅画或一幅画,再将它们变成照片,普通 GAN 需要一对图像。 CycleGAN 是一种 GAN 网络,可以将图像从一个域 X 转换为另一个域 Y,而无需配对图像。 CycleGAN 尝试学习发电机网络,而发电机网络又学习了两个映射。 CycleGAN 无需训练大多数 GAN 中使用的单个发电机网络,而是训练两个发电机和两个判别器网络。
为了将照片变成一幅画或一幅画,再将它们变成照片,普通 GAN 需要一对图像。 CycleGAN 是一种 GAN 网络,可以将图像从一个域 X 转换为另一个域 Y,而无需配对图像。 CycleGAN 尝试学习生成器网络,而生成器网络又学习了两个映射。 CycleGAN 无需训练大多数 GAN 中使用的单个生成器网络,而是训练两个生成器和两个判别器网络。
CycleGAN 中有两个发电机网络,如下所示:
CycleGAN 中有两个生成器网络,如下所示:
1.**生成器 A** :学习映射![](img/5ee63015-1266-4f90-b3cc-dca5d99f293e.png),其中 X 是源域,`Y`是目标域。 它从源域`A`拍摄图像,并将其转换为与目标域`B`相似的图像。 基本上,网络的目的是学习映射,以使 *G(X)*与`Y`相似。
2.**生成器 B** :学习映射![](img/4afb529e-38ff-40f5-b294-dd6545cd5251.png),然后从目标域 B 中获取图像,并将其转换为与源域 A 中的图像相似的图像。类似地, 网络要学习另一个映射,以便 *F(G(X)*类似于`X`)。
4. 接下来,创建发电机网络 A(`generatorAToB`)和 B(`generatorBToA`)。 生成器网络 A 的输入是数据集 A 的真实图像(realA),输出将是重构图像(fakeB)。 生成器网络 B 的输入是来自数据集 B 的真实图像(realB),输出将是重构图像(fakeA),如下所示:
4. 接下来,创建生成器网络 A(`generatorAToB`)和 B(`generatorBToA`)。 生成器网络 A 的输入是数据集 A 的真实图像(realA),输出将是重构图像(fakeB)。 生成器网络 B 的输入是来自数据集 B 的真实图像(realB),输出将是重构图像(fakeA),如下所示:
The 'concatenate' layer concatenates tensors along the channel dimension. You can provide a value for the axis, along which you want your tensors to be concatenated.
7. 最后,通过指定发电机网络的输入和输出来创建 Keras 模型:
7. 最后,通过指定生成器网络的输入和输出来创建 Keras 模型:
```py
# Create a Keras model
...
...
@@ -756,7 +756,7 @@ def build_unet_generator():
returnmodel
```
我们现在已经成功地为发电机网络创建了 Keras 模型。 在下一节中,我们将为判别器网络创建 Keras 模型。
我们现在已经成功地为生成器网络创建了 Keras 模型。 在下一节中,我们将为判别器网络创建 Keras 模型。
GAN 是学习生成类似于真实数据或训练集中数据的神经网络。 GAN 的关键思想是让生成器网络和判别器网络相互竞争:生成器试图生成看起来像真实数据的数据,而判别器试图分辨生成的数据是否真实(从已知实数 数据)或伪造(由生成器生成)。 生成器和判别器是一起训练的,在训练过程中,生成器学会生成看起来越来越像真实数据的数据,而判别器则学会将真实数据与伪数据区分开。 生成器通过尝试使判别器的输出概率为真实数据来学习,当将生成器的输出作为判别器的输入时,生成器的输出概率尽可能接近 1.0,而判别器通过尝试实现两个目标来学习:
* 当以发电机的输出作为输入时,使其输出的可能性为实,尽可能接近 0.0,这恰好是发电机的相反目标
* 当以生成器的输出作为输入时,使其输出的可能性为实,尽可能接近 0.0,这恰好是生成器的相反目标
* 当输入真实数据作为输入时,使其输出的可能性为实数,尽可能接近 1.0
In the next section, you'll see a detailed code snippet that matches the given description of the generator and the discriminator networks and their training process. If you feel like understanding more about GANs, in addition to our summary overview here, you can search for *"Introduction to GANs"* on YouTube and watch Ian Goodfellow's introduction and tutorial videos on GAN at NIPS (Neural Information Processing Systems) Conference 2016 and ICCV (International Conference on Computer Vision) 2017\. In fact, there are 7 NIPS 2016 Workshop on Adversarial Training videos and 12 ICCV 2017 GAN Tutorial videos on YouTube that you can immerse yourself in.