转自:https://blog.csdn.net/m0_37231012/article/details/70331114
论文链接
摘要
我们研究条件对抗网络的目的是将之作为一种图片到图片“翻译”问题的通用的解决方法。这些网络不仅学习了从输入图像到输出图像的映射,还学习了训练这个映射的损失函数。这使得将这个一般方法解决通常需要完全不同的损失函数公式的问题成为了可能。我们证实了这个方法在从标签图来合成图片、从边缘图来重构目标以及给图片着色问题上都很有效。作为一个共同体,我们不再需要人为构建映射函数,而且这项工作发现不用人为构造损失函数,我们也能得出合理的结果。
在图片处理、计算机图片合成和计算机视觉的许多问题都能被视作是一种从输入图片到相对应输出图片的“翻译”问题。正如一个概念能用英语或者法语表示一样,一个场景可能用RGB图像、梯度场、边缘图、一个语义标签图等等来表达。在与语言自动翻译的比喻中,我们将图片到图片的自动转化定义为在已给训练集足够的情况下,将一个场景的可能表示转化成另一个。
内容
a) 目的
:传统的图片到图片的“转化”通常需要人为构造复杂且合理的损失函数,针对不同的问题都必须采用特定的机制,虽然他们的背景都是从像素到像素的映射(pix2pix)。但是,GAN是一个不需要构建复杂损失函数的结构,它会自动学习从输入到输出图片的映射。因此,应用这个到图片“翻译”问题中,就可以实现一个泛化的模型。
b) 结果贡献
:论证了条件GAN能在广泛领域的问题中产生合理的结果;提出了一个能达到很好结果的简单框架,并且分析了重要结构的选择原因。
c) 目标函数
:这一块儿和普通的CGAN大同小异,
G网络目标是最小化目标函数,D网络目标是最大化目标函数。
这篇论文作者又考虑到将传统的损失函数也应用到整个模型,因为过去的方法证明这个很有效,但是作者没有使用L2范数而是直接使用的L1范数,即是输入输出的差值,炉温提到这样可以对高频结构进行建模。得到最终的目标函数:
d) 网络结构
:与传统的encoder-decoder网络结构不同的是,本论文中,作者用了U-NET结构来作为生成器,与传统结构的不同之处在于,所有的信息流不用全部通过所有的层,而且这样让输入与输出有一个低级的结构类似(不是镜像的)可以得到很好的效果。(不知道为什么)
在判别器上,作者提出了一种PatchGAN的结构,只对小块规模上对结构做出奖惩调整。并且在N×N batch中,当N远小于图片规模时也可以得到很好的结果,但是却具有参数少、训练快且能应用在任意图片上。(有点类似于我毕设中的D网络用CNN结构,也算是对输入的一种高层次特征的学习)
e) 训练过程
:交替训练D网络和G网络,而且步数相同。这个训练的次数问题可以随具体任务的不同而定,每一篇论文都有不同的训练超参数。
f) 实验结果
:作者用了很多数据集进行训练测试,结果都比原来的好~
g) 最后作者用控制变量法分别测试了GAN和CGAN,L1+GAN和GAN的优劣,最终得出L1+CGAN效果最好的结论。分析之下,L1可以让输出的分布比输入更窄,从而得到平均化的结果。而CGAN可以让结果更加锐利不模糊,使得输出更加接近真实,目的达成。
h) 后面的appendix部分暂时没看,而具体的代码也暂时没有实现~
2.心得体会
a) GAN为什么能适用于多个场景?因为对于以前的任务,我们想要生成特定的输出,必须采用专业知识来构造特定的损失函数,结果却不尽如人意,生成的输出很模糊,不能达到生成尖锐的、真实的输出的目的。但是GAN只是明确了一个高等级的目标,即直接对输出做出是否与真实数据可分辨,这样就自动得到了一个满足目标的损失函数。
b) 作者在目标函数构建的那一部分,提出将传统的损失也作为目标加入进去。这里和我的毕设中,训练之前都用MLE进行预训练的原理相似。D网路部分用PatchGAN也和毕设中D网络用CNN类似。开始不太理解毕设里面模型采用这些机构的作用,现在理解了一些:预训练可以让结果靠近真实分布,用在预训练可以加速训练进程,因为GAN的训练过程太慢,难度太高;而CNN也是学习局部特征,避免参数过多,避免过拟合。