开始了解用于图像到图像转换的GANs
图像域是一组具有相似特征的图像。例如,图像域可以是在特定照明条件下获得的一组图像,也可以是具有一组常见噪声畸变的图像。
图像到图像转换是将风格和特征从一个图像域转移到另一个图像域的任务。源域是起始图像的域。目标域是转换后的期望域。三个样本图像域的域转换应用包括:
应用程序 | 源领域 | 目标领域 |
---|---|---|
从到黄昏风格转换 | 白天拍摄的图像 | 黄昏时拍摄的图像 |
图像去噪 | 有噪声失真的图像 | 不含可见噪声的图像 |
超分辨率 | 低分辨率图像 | 高分辨率图像 |
选择GAN
您可以使用深度学习生成对抗网络(GANs)执行图像到图像的转换。GAN由一个生成器网络和一个或多个同时训练以最大化整体性能的鉴别器网络组成。生成器网络的目标是在翻译域内生成与原始域内无法区分的逼真图像。鉴别器网络的目标是正确地将原始训练数据分类为真实的,并将生成器合成的图像分类为虚假的。
GAN的类型取决于训练数据。
受监督的gan在源域和目标域的图像之间具有一对一的映射。有关示例,请参见使用深度学习从分割地图生成图像(计算机视觉工具箱).在本例中,源域由捕获的街道场景图像组成。目标域由表示语义分割映射的分类图像组成。该数据集为每个输入的训练图像提供了一个ground truth分割图。
无监督gan在源域和目标域的图像之间没有一对一的映射。有关示例,请参见使用UNIT进行无监督的从到黄昏图像转换.在本例中,源域和目标域分别由在白天和黄昏条件下捕获的图像组成。但是白天图像和黄昏图像的场景内容不同,因此白天图像没有对应的黄昏图像,且场景内容相同。
创建GAN网络
图像处理工具箱™提供功能,使您能够创建流行的GAN网络。您可以通过更改属性来修改网络,例如下采样操作的数量以及激活和归一化的类型。介绍了创建和修改GAN网络的相关功能。
网络 | 创建和修改功能 |
---|---|
pix2pixHD生成器网络[1] | pix2pixHD GAN执行监督学习。该网络由单个生成器和单个鉴别器组成。 创建一个pix2pixHD生成器网络 |
CycleGAN发电机网络[4] | CycleGAN网络执行无监督学习。该网络由两个发生器和两个鉴别器组成。第一个生成器从域中获取图像一个并在域中生成图像B.相应的鉴别器取第一生成器生成的图像和域内的实图像B,并试图正确地将图像分为真实和虚假。相反,第二个生成器从域中获取图像B并在域中生成图像一个.相应的鉴别器取第二发生器生成的图像和域中的实图像一个,并试图正确地将图像分为假的和真实的。 创建一个CycleGAN生成器网络 |
机组发电机网络[4] | 无监督图像到图像转换(UNIT) GAN执行无监督学习。该网络由一个发生器和两个鉴别器组成。生成器在两个域都拍摄图像,一个而且B.生成器返回四张输出图像:两张翻译后的图像(一个- - - - - - - - -B而且B- - - - - - - - -一个),以及两幅自重建图像(一个- - - - - - - - -一个而且B- - - - - - - - -B).第一个鉴别器从域中获取一个实数图像和一个生成的图像一个然后返回图像为实数的概率。类似地,第二个鉴别器从域中获取实数和生成的图像B然后返回图像为实数的概率。 创建一个UNIT生成器网络 |
PatchGAN鉴别器网络[3] | PatchGAN鉴别器网络可以作为pix2pixHD、CycleGAN和UNIT gan以及自定义gan的鉴别器网络。 创建一个PatchGAN鉴别器网络 你也可以使用 |
一些网络需要额外的修改,超出网络创建功能中可用的选项。例如,您可能希望用深度连接层替换附加层,或者您可能希望UNIT网络的初始泄漏ReLU层具有不同于0.2的比例因子。要改进现有的GAN网络,可以使用深度网络设计器(深度学习工具箱).有关更多信息,请参见用深度网络设计器构建网络(深度学习工具箱).
如果您需要通过内置创建功能无法使用的网络,那么您可以从模块化组件创建自定义GAN网络。首先,创建编码器和解码器模块,然后使用encoderDecoderNetwork
函数。您可以选择在网络末端包括网桥连接、跳过连接或其他层。有关更多信息,请参见创建模块化神经网络.
列车GAN网络
要训练GAN生成器和鉴别器网络,必须使用自定义训练循环。准备自定义训练循环涉及几个步骤。有关显示完整工作流的示例,请参见训练生成对抗网络(GAN)(深度学习工具箱).
创建生成器和鉴别器网络。
创建一个或多个数据存储,用于读取、预处理和增强训练数据。有关更多信息,请参见用于深度学习的数据存储(深度学习工具箱).然后,创建一个
minibatchqueue
(深度学习工具箱)对象,用于管理自定义训练循环中观察结果的迷你批处理。定义每个网络的模型梯度函数。该函数将网络和一小批输入数据作为输入,并返回损失的梯度。可选地,您可以向gradients函数传递额外的参数(例如,如果损失函数需要额外的信息),或者返回额外的参数(例如,损失值)。有关更多信息,请参见定义自定义训练循环的模型损失函数(深度学习工具箱).
定义损失函数。某些类型的损失函数通常用于图像到图像转换应用程序,尽管每种损失的实现可能有所不同。
对抗损失通常用于发生器和鉴别器网络。这种损失依赖于鉴别器的正确分类和预测分类之间的像素级或补丁级差异。
循环一致性损失通常用于无监督发电机网络。这种损失是基于这样的原则:图像从一个域转换到另一个域,然后再转换到原始域,应该与原始图像相同。
指定训练选项,如解算器类型和epoch数。有关更多信息,请参见在自定义培训循环中指定培训选项(深度学习工具箱).
创建自定义训练循环,在每个时代循环小批量。循环读取每个小批数据,并使用
dlfeval
(深度学习工具箱)函数,更新网络参数。可选地,包括显示功能,如得分图或生成的图像批次,使您能够监视训练进度。有关更多信息,请参见监控GAN培训进度,识别常见故障模式(深度学习工具箱).
参考文献
[1]
[2]
[3]
[4]
另请参阅
encoderDecoderNetwork
|blockedNetwork
|pretrainedEncoderNetwork
|cycleGANGenerator
|patchGANDiscriminator
|pix2pixHDGlobalGenerator
|unitGenerator
相关的例子
- 使用UNIT进行无监督的从到黄昏图像转换
- 使用深度学习从分割地图生成图像(计算机视觉工具箱)
更多关于
- 创建模块化神经网络
- 训练生成对抗网络(GAN)(深度学习工具箱)
- 定义自定义训练循环、损失函数和网络(深度学习工具箱)
- 定义自定义训练循环的模型损失函数(深度学习工具箱)
- 在自定义培训循环中指定培训选项(深度学习工具箱)
- 使用自定义训练循环训练网络(深度学习工具箱)