苹果的第一篇人工智能领域的文章,一出来也是吸足了眼球,我看了下文章做了个ppt,跟大家分享一下。
本文的目的是要训练一个改善网络,使得模拟器生成的合成图片经改善后能更贴近真实图片。
贡献1就是用了S+U(生成+无监督)的方法,贡献2则是网络损失函数的定义,贡献3是对标准GAN做了一定的改进,贡献4说的是效果上的突破。
左图体现了整个网络结构,由原始生成器生成的合成图片,经过改善网络R后输出改善图片,另有一个鉴别器D,需要区分改善后的图片和无标签的真实图片。R的目的是要生成尽可能真实的图片去欺骗D,而D的目的就是要区分生成的和真实图片,这就是生成式对抗网络的最基本模型。
右边的公式介绍一下:
x上面加波浪线表示的是改善后的图片样本;
网络R的损失函数包含真实性成本和差异性成本,前者为了让改善图片更真实,与真实图片的风格更接近;后者是为了让合成图片在改善前后不至于有太大的变化以致于失真;
网络D的损失函数包含两项,对于合成图片,希望网络输出1,对于真实图片,希望网络D输出0,如此将两者区分。训练过程中,我们要最小化这个损失函数;
在实际应用中,我们网络R的损失函数的真实性成本用对抗损失,而为了减少改善前后的差异,引入1范数的正则项。
值得注意的是,R的输入和输出尺寸相同,实现了像素级别上的修改。
以上是两个网络的训练过程。
前文提到本文对标准GAN模型做了一定的改进,其一就是上图的本地对抗损失函数。在训练鉴别网络D的时候,我们不对全局的输入求loss,而是将其分割为w×h个小块,每个小块依次输入网络D,得到该小块属于生成图片的概率。如此,我们的网络D参数可以减少,训练样本得到了增加。
在更新网络R的时候,我们则是讲刚才的Probability map每一格的值求和后作为第一项损失值(真实性成本)。
右图是一个实验结果比较,用全局的loss改善的图片,放大后在边缘上有剧烈的抖动,而采用局部损失值得到的改善图就比较平滑,符合真实情况。
对模型的改进之二就是类似RNN,引入了历史信息。原来,我们在训练网络D的时候,只要求它识别出当前输入的合成图片和真实图片,更新参数,在这个过程中,D可能遗忘掉以前的一些特征,这使得我们的网络R又会产生一些不合理的细节改善,因此本文提出加入一个缓存区Buffer,尺寸固定为B,我们的batch size为b。
更新D的时候不仅有当前R的输出图片,还有历史的图片,结合右图,可见增加了这个历史信息后,图片改善效果有明显的提高。
这是文章中的实验结果图,关于手势的深度图,改善后在边缘有了一些抖动和不平滑,作者的解释是真实样本在边缘是存在噪声的,而我们的改善网络R能够学习到这一特征并对合成样本进行更改,使得生成的样本更符合实际,但具体的效果还是要在实际训练中看效果才行。
这里展示的定量的结果分析。本文的方法用合成图片为训练样本,而以前的方法用有真实的图片作为训练集,但从最后的结果看出,本文的方法效果还是很突出的。