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