想用 pix2pix 做一个图片上色的项目。
论文:https://arxiv.org/abs/1611.07004
pix2pix 的创新点:
条件生成对抗网络(Conditional Generative Adversarial Network,简称cGAN)是一种扩展的生成对抗网络(GAN),通过在生成器和判别器中引入附加的条件信息(如标签、图像等),以生成符合特定条件的样本。相比传统GAN,cGAN在生成过程中加入了指导信息,使其能够在特定的上下文中生成更为精准和有针对性的图像或数据,在图像到图像翻译、图像上色等任务中表现优异。
在pix2pix中,使用了条件生成对抗网络(cGAN)来实现图像到图像的转换。cGAN的目标是将输入图像 ( x ) 转换为目标图像 ( y ),并通过对抗训练来优化生成结果。cGAN的损失函数包括对抗损失和额外的L1损失,这两者的结合能够同时生成真实且与输入图像匹配的输出图像。
具体来说,cGAN的目标函数可以分为对抗损失和L1损失两部分:
其中,生成器 (G) 尽量生成逼真的图像来欺骗判别器 (D),判别器 (D) 则尽量区分真实图像和生成图像。
完整的损失函数可以表示为:
通过对抗损失和L1损失的结合,pix2pix能够生成高质量且与输入图像对应的输出图像,适用于多种图像到图像的转换任务。
采用卷积神经网络(CNN)来解决此类问题时,损失函数的设计尤为关键。如果采用L2损失来计算网络输出图像与真实值(ground truth)之间的差异,通常会导致生成的图像变得模糊。这主要是因为L2损失会计量网络输出与真实值之间的微小差异,为了最小化这种像素级别的平均损失,网络倾向于生成模糊的结果。因此,设计一个合理的损失函数往往需要根据具体的任务类型来进行,同时需要结合一定的专家经验。损失函数的设计复杂且难度较高,但对于提升生成图像的质量和逼真度至关重要。
在pix2pix中,PatchGAN(Patch Generative Adversarial Network)用于作为判别器的一种特殊架构,它关注图像的局部(patch)结构,而不是整个图像。PatchGAN 的主要优势是它能有效地捕捉图像的高频细节,同时减少计算复杂度。具体来说,PatchGAN 判别器尝试在局部图像块(patch)上判断这些图像块是真实的还是由生成器生成的,从而保证生成图像的局部纹理真实性。
PatchGAN 的损失函数可以表示为:
具体来说,对于 PatchGAN 判别器 (D),它的任务是学习在每个 NxN patch 上是否是真实的图像。当 (N \rightarrow \infty) 时,PatchGAN 变为标准的 GAN 判别器;而当 (N = 1) 时,PatchGAN 只关注每个像素。这使得 PatchGAN 既能保证局部细节的真实度,又不至于复杂得难以训练。
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!