很多的模型的训练都是基于监督训练,然而,为了保证高准确度,训练集必须数量巨大,多样而且是具有清楚地标签,这些的消耗是非常巨大的。针对此种问题,一种有效的解决方案是通过模拟器中合成的图像的方式来给大量的数据来添加标签,这种方法几乎没有什么消耗,但是合成的图像会不够真实,导致在真实的图像上也推论出一个错误的结果,这种方案的解决方式是提炼合成的图像使他们变得更加真实。
概览
直接在合成图像上训练神经网络模型可能会导致问题,因为合成图像是不够真实的,模型只在合成图像上学习细节,移到真实的图像上进行识别就可能会出现问题。这种真实性的缺失可能导致模型对合成图像上的一些“不真实的”细节进行过拟合。通过一种提取算法,可以将合成图像变得更加真实。
为了训练一个提取神经网络,需要一些真正的图像。需要确定真实图像和合成图像上的像素级别的相似之处,或者是使用真实的带有注释的图像,比如眼神在凝视时的信息。这可以被认为是一个容易的问题,但是与之相关的数据却是非常难收集的。为了去创建像素级别相似度,要么是渲染一张合成图像来和真实图像进行对比,要么是采集一张和渲染的合成图像匹配的真实图像,能不能既不用学习相似度又不用任何图像标签?如果不用的话,只需要生成一串合成图像,采集真正的眼部图像,不需要给任何真实图像添加标签,学习这样的图谱可以使训练的成本降到最低。
为了无监督的训练提取神经网络,需要利用一个辨别神经网络来将真实图像和合成的图像进行分类,提取网络会使辨别网络混淆,让它误以为合成图像就是真实图像。两个网络的训练是交替进行的,训练直到辨别神经网络无法将真假图像分别出来为止,这个辨别网络类似于生成式对抗网络(GAN)【1】。最终的目标是训练一个提取网络,更像是一个生成器,将一个合成图像映射成为一个真实的图像。
如何保护注释信息
为了生成趋近真实的图像,提取网络必须保存来自模拟器的注释信息。这个限制是利用模拟器的注释信息来提取图像的必不可少的因素。为了保护合成图像的注释信息,我们利用生成式对抗的损失和将合成图像变成真实图像中产生的自正则化L1范数损失进行互补。
在本地进行改变
利用生成历史来提升辨别网络的识别效果
前面说过,提取网络的目标是用来欺骗识别网络的,提取网络生成一个新的图像,在训练到识别网络能识别出这张新图像之前,欺骗都是有效果的。提取网络欺骗识别网络的有效的方式朝着我们的目标的方向进行生成。
两种方式。简单的一种是生成一个新的输出,然后利用这个输出来观察识别网络和辨别网络进行对抗。另一种方式利用生成过的图像在此基础上再进一步生成,然后交给识别网络去辨别。如下图,两种识别速度一目了然。
训练过程
首先,只对提取网络进行自正则化损失训练,然后引入识别网络,产生模糊的输入合成图像。起初,它输出一个模糊的图像,随着训练的进行变得越来越逼真。将辨别网络和生成器的损失带入再进行不同的迭代训练。请注意,辨别网络的损耗在开始时是低的,这意味着它可以很容易地分辨出真正的和精细的区别。慢慢地,随着训练过程的增加,辨别网络的损失增加,生成器损失减小,从而产生更加真实图像。
注
【1】说到GAN第一篇要看的paper当然是Ian Goodfellow大牛的Generative Adversarial Networks,这篇paper算是这个领域的开山之作。
GAN的基本原理其实非常简单,这里以生成图片为例进行说明。假设我们有两个网络,G(Generator)和D(Discriminator)。正如它的名字所暗示的那样,它们的功能分别是:
G是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片,记做G(z)。
D是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片。
在训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。
最后博弈的结果是什么?在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z)) = 0.5。
这样我们的目的就达成了:我们得到了一个生成式的模型G,它可以用来生成图片。
以上只是大致说了一下GAN的核心原理,如何用数学语言描述呢?这里直接摘录论文里的公式:
简单分析一下这个公式:
整个式子由两项构成。x表示真实图片,z表示输入G网络的噪声,而G(z)表示G网络生成的图片。
D(x)表示D网络判断真实图片是否真实的概率(因为x就是真实的,所以对于D来说,这个值越接近1越好)。而D(G(z))是D网络判断G生成的图片的是否真实的概率。
G的目的:上面提到过,D(G(z))是D网络判断G生成的图片是否真实的概率,G应该希望自己生成的图片“越接近真实越好”。也就是说,G希望D(G(z))尽可能得大,这时V(D, G)会变小。因此我们看到式子的最前面的记号是min_G。
D的目的:D的能力越强,D(x)应该越大,D(G(x))应该越小。这时V(D,G)会变大。因此式子对于D来说是求最大(max_D)