基于SimGAN网络的人眼数据生成方法_SimGAN原理_参考代码

注:此文为复现sim-GAN,参考了一些论文,博客,如有侵权请联系,我附上原出处。
由于一些格式原因,文章有些部分会比较乱,请见谅。

Learning from Simulated and Unsupervised Images through Adversarial Training
通过对抗的训练来从模拟和无监督图像中学习

摘要

[摘要] 随着计算机视觉的进步,在合成图像上训练模型变得更容易处理,可能避免需要昂贵的注释。然而,由于合成图像和真实图像分布之间的差距,从合成图像学习可能无法实现预期的性能。为了减少这种差距,本文实现了最近十分流行(模拟+无监督)学习Simulated+Unsupervised(S+U)learning,其任务是学习模型以使用未标记的真实数据改善模拟器输出的真实性,同时保留模拟器中的注释信息。使用了一种S + U学习方法,该方法使用类似于生成对抗网络(GAN)的对抗网络,但使用合成图像作为输入而不是随机向量。(模拟+无监督)学习对传统的GAN算法进行了几项关键修改,以保留注释,避免人造痕迹并保持稳定性:(i)自我正规化,(ii)局部对抗性损失,(iii)利用历史缓冲区的细化图片来更新判别器。实验结果表明,这可以生成高度逼真的图像。

[关键词] 生成对抗网络; (模拟+无监督)学习; 深度学习

第1章 引言

1.1背景介绍与研究意义

随着近来深度神经网络的兴起,大型的标记训练数据集变得越来越重要。然而,标记这样大的数据集是昂贵且耗时的。因此,对合成而非真实图像进行训练的想法变得有吸引力,因为其是自动可用的。
然而,由于合成图像和实际图像分布之间的差距,从合成图像中学习可能是有问题的。合成数据通常不够真实,导致网络学习仅存在于合成图像中的细节并且不能在真实图像上很好地概括。缩小这一差距的一个解决方案是改进模拟器。然而,增加真实感通常在计算上是昂贵的,渲染器设计需要大量的努力,甚至顶级渲染器仍然可能无法模拟真实图像的所有特征。这种现实细节的缺乏可能会导致模型在合成图像中超出“不现实”的细节。
在这里插入图片描述
如图1,在本文中,采用了模拟+无监督(S + U)学习,其目标是使用未标记的实际数据来改善细化器中合成图像的真实性。改进的真实性使得能够在大型数据集上训练更好的机器学习模型,而无需任何数据收集或人工标记工作。除了增加真实感外,S + U学习还应保留用于训练机器学习模型的标注信息,例如应该保留图1中的凝视方向。此外,由于机器学习模型可能对合成数据中的人造痕迹敏感,因此S + U学习应该生成没有人造痕迹的图像。
S+U学习方法(SimGAN):用一个细化器(细化网络refiner network)来细化合成图像,概述见图2,合成图像由黑箱模拟器生成,并经细化网络细化。
(i)为增加真实度,类似GANs训练对抗网络,用正则损失,使判别网络无法区分细化的生成图像与真实图像。
(ii)为保留合成图像的标注,为对抗损失补充自正则损失,来惩罚合成图像与真实图像间的巨大改变。进一步用一全卷积网络操作像素并保留全局结构(而非如全连接编码网络那样去完全改变图像内容)。
(iii)GAN框架用竞争的目标来训练2个网络,使网络不稳定且易引入合成现象。因此限制判别器的感受野至局部区域(而非整幅图像),使每幅图有多个局部的对抗损失。并用细化图像的历史(而非当前细化网络输出的细化图像)更新判别器来稳定训练。
在这里插入图片描述

1.2研究内容与目标

本实验研究内容主要是基于SimGAN网络的人眼数据生成方法及系统,提升人眼数据的真实度。
本实验目标主要有两个:一方面是,在可用数据集上基于SimGAN网络训练出一个较好的人眼数据生成模型;另一方面是, 在python 上开发构建出一个人眼数据训练与生成系统,实现:一、对图片的人眼进行识别分割,输出仅含人眼数据的可用数据集,二、对合成的人眼数据进行提升真实度操作。

第2章 GAN网络原理

2.1 GAN网络

对抗生成网络GAN(Generative Adversarial Networks)。原始的GAN是一种无监督学习方法,它巧妙地利用“对抗”的思想来学习生成式模型,一旦训练完成后可以生成全新的数据样本,是近年来复杂分布上无监督学习最具前景的方法之一。
GAN的基本原理非常简单。生成器G的输入是一个n维向量,包含有各种待生成的图片的标签信息等,将该向量添加一个噪声后送入生成器中,生成器生成图片送入判别器D中,由判别器判断这张图片是真实的还是虚假的,(通常情况下,若输出为1,判断图片为真实,而输出为0,判断图片为虚假)。
若将生成器生成的图片判断为虚假的,则生成器需要优化参数来生成更加逼真的,能够欺骗判别器的图片;若被判断为是真实的,则判别器需要优化参数来更准确的判断送入的图像。生成器生成的样本和真实样本是交替的送入判别器中的。
这样生成器G和判别器D构成了一个动态的“博弈”,这是GAN的基本思想。

在这里插入图片描述
最后博弈的结果是什么?在最理想的状态下,生成器G可以生成足以“以假乱真”的图片G(z)。 对于判别器D来说,它难以判定生成器G生成的图片究竟是不是真实的,因此D(G(z))=0.5。此时得到了一个生成式的模型,它可以用来生成图片。
下面用数学化的语言来描述这个过程。假设用于训练的真实图片数据是x,图片数据的分布为p_data (x),之前说生成器G能够“生成图片”,实际是生成器G可以学习到的真实数据分布p_data (x)。 噪声z的分布设为p_z (x),p_z (x)是已知的,而p_data (x)是未知的。在理想情况下,G(z)的分布应该尽可能接近p_data (x),生成器G将已知分布的z变量映射到了未知分布x变量上。

注:关于交叉熵的理解,可以参考
https://blog.csdn.net/tsyccnh/article/details/79163834
写得挺好的

根据交叉摘损失,可以构造下面的损失函数
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.1 卷积神经网络

卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一。卷积神经网络具有特征学习能力,能够按其阶层结构对输入信息进行平移不变分类,因此也被称为“平移不变人工神经网络”。
2.1.1 卷积层
卷积神经网络用卷积层提取特征。卷积层由一个卷积核(kernel),参数步长(stride)和补齐操作(pad)。卷积运算就是卷积核在二维图像上滑动,将卷积核覆盖图像区域像素于对应卷积核的值相乘后再一起相加作为输出。如图2-1所示。

图2-2 一个输入为6 × 6,stride=3,pad=0的卷积操作过程

2.1.2 池化层

池化层(pooling layer)是卷积神经网络一个重要操作,也称为下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。和卷积层类似,有kernel_size、stride和pad两个参数。最常见的池化层有最大池化和平均池化。平均池化是取这个范围内平均值,而最大池化就取kernel_size × kernel_size范围内的最大值。如图2-2所示。

图2-3 一个输入为8×8,kernel_size为2的最大池化的过程

2.1.3 激活函数层

激活函数主要来做非线性变换,前面卷积层、pooling层都是线性的,如果没有激活函数,整个网络都是线性的,训练模型效果较差。加入激活函数,可以加快训练速度,使模型更具鲁棒性。常见激活函数主要有Sigmoid、Relu等。Sigmoid激活函数在两端梯度几乎为0,如果输入数据过大或过小,会导致梯度消散现象发生。Relu激活函数就是为了解决这个问题,在大于0的时候导数为1,小于0时候为0,因为训练时候小于零情况较少,所以能有效解决梯度消散的问题。
在训练网络时候,正常情况下把激活函数放在卷积层后面,不同激活函数用于不同任务。

图2-4 Relu激活函数

2.2残差网络((Residual Networks, ResNets)

残差网络是由来自Microsoft Research的4位学者提出的卷积神经网络。残差网络的特点是容易优化,并且能够通过增加相当的深度来提高准确率。其内部的残差块使用了跳跃连接,缓解了在深度神经网络中增加深度带来的梯度消失问题。
可以看到x=Input Features是这一残差块的输入,也称作F(x)为残差,x为输入值,F(X)是经过第一层线性变化并激活后的输出,该图表示在残差网络中,第二层进行线性变化之后激活之前,F(x)加入了这一层输入值X,然后再进行激活后输出。在第二层输出值激活前加入X,这条路径称作shortcut连接。

在这里插入图片描述
shortcut layer是F(x)+x的实现层,F(x)输出尺寸如果和原来输入 x 维度一样,则直接相加,否则尺度较小的需要用0填充或使用1×1卷积进行变换。
残差网络结构设计巧妙,通过两层或多次的跳越进行短接,有效解决了深度网络退化问题。

2.3小结

卷积神经网络与全连接层网络相比的优点:1、参数共享2、稀疏连接。它只与图像中的一个区域有关,与其他区域(像素点)无关,因此减小了参数。并且,卷积神经网络善于捕捉平移不变性(移动后的结构特征依然明显),因此是否适合用于提取图像特征。
最大池化,选取根由特征的点保留下来,以此达到尽可能提取更多特征的效果。
通常情况下,非常深的网络难以训练,因为存在梯度消失和梯度爆炸。残差网络通过跳远连接,有效传递了参数,能够更好的训练网络。

第3章 SimGAN原理

3.1. 使用SimGAN的S+U学习

在这里插入图片描述

3.2 细化网络结构

细化网络(细化器refiner network)为残差网络:包括3×3大小的滤波器卷积55×35大小的输入图像,输出64个特征图。输出经过4个残差模块。最后1个残差模块的输出经过1个1×1大小的卷积层来输出1个对应细化的合成图像的特征图,如图。

图3-1 细化网络结构
每个残差网络模块包含2个卷积层,每个卷积层包含64个特征图,如图。

图3-2 残差网络模块
细化网络的作用:合成图像送入细化器中,细化器通过学习到的真实图像的特征,对合成图像进行修正,它在像素级别修改合成图像,而不是整体修改图像内容,保留全局结构和注释,添加一些逼真的细节。

3.3 判别网络结构

在这里插入图片描述

3.4损失函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值