下采样(subsampled)
- 下采样实际上就是缩小图像,主要目的是为了使得图像符合显示区域的大小,生成对应图像的缩略图。比如说在CNN中得池化层或卷积层就是下采样。不过卷积过程导致的图像变小是为了提取特征,而池化下采样是为了降低特征的维度。
上采样(upsampling)
- 有下采样也就必然有上采样,上采样实际上就是放大图像,指的是任何可以让图像变成更高分辨率的技术,这个时候我们也就能理解为什么在(G)网络中能够由噪声生成一张图片了。
反卷积(Deconvolution)
- 反卷积(Deconvolution)也称为分数步长的卷积和转置卷积(transposed convolution)。
- convolution过程是将4×4的图像映射为2×2的图像,而反卷积过程则是将2×2的图像映射为4×4的图像,两者的kernel size均为3。不过显而易见,反卷积只能恢复图片的尺寸大小,而不能准确的恢复图片的像素值。
批标准化(Batch Normalization)
-
对数据做 normalization 预处理, 使得输入的 x 变化范围不会太大, 让输入值经过激励函数的敏感部分.
-
Batch normalization 的 batch 是批数据, 把数据分成小批小批进行 stochastic gradient descent.
-
**梯度下降:**我们知道曲面上方向导数的最大值的方向就代表了梯度的方向,因此我们在做梯度下降的时候,应该是沿着梯度的反方向进行权重的更新,可以有效的找到全局的最优解。
-
步长(Learning rate):步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。
- 算法的步长选择。步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次运行后才能得到一个较为优的值。
- 算法参数的初始值选择。 初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。
- 归一化。由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据归一化,也就是对于每个特征x,求出它的期望E(x)和标准差std(x),然后转化为:(xi-E(x))/std(x).这样特征的新期望为0,新方差为1,迭代次数可以大大加快。
-
特征(feature):指的是样本中输入部分,比如样本(x0,y0),(x1,y1)则样本特征为x,样本输出为y。
-
假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为hθ(x)。
-
损失函数(loss function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数通常为样本输出和假设函数的差取平方。比如对于样本(xi,yi)(i=1,2,…n)(xi,yi)(i=1,2,…n),采用线性回归,损失函数为:J(θ0,θ1)=∑i=1m(hθ(xi)−yi)2
-
几种梯度下降法
-
批量梯度下降法(Batch Gradient Descent)
- 在更新参数时使用所有的样本来进行更新
-
随机梯度下降法(Stochastic Gradient Descent)
-
和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本j来求梯度。
- 对于训练速度来说,随机梯度下降法由于每次仅仅采用一个样本来迭代,训练速度很快,而批量梯度下降法在样本量很大的时候,训练速度不能让人满意。
- 对于准确度来说,随机梯度下降法用于仅仅用一个样本决定梯度方向,导致解很有可能不是最优。
- 对于收敛速度来说,由于随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解。
-
-
小批量梯度下降法(Mini-batch Gradient Descent)
- 小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样子来迭代,1<x<m。一般可以取x=10,当然根据样本的数据,可以调整这个x的值。
-
-
梯度下降与最小二乘法之间的对比
- 梯度下降法需要选择步长,而最小二乘法不需要。
- 梯度下降法是迭代求解,最小二乘法是计算解析解。
- 样本量不算很大,且存在解析解,最小二乘法比起梯度下降法要有优势,计算速度很快。但是如果样本量很大,用最小二乘法由于需要求一个超级大的逆矩阵,这时就很难或者很慢才能求解解析解了,使用迭代的梯度下降法比较有优势。
-
-
-
每批数据进行前向传递 forward propagation 的时候, 对每一层都进行 normalization 的处理,
-
Batch normalization 也可以被看做一个层面. 在一层层的添加神经网络的时候, 我们先有数据 X, 再添加全连接层, 全连接层的计算结果会经过激励函数成为下一层的输入, 接着重复之前的操作. Batch Normalization (BN) 就被添加在每一个全连接和激励函数之间.
内容感知填充
-
分三步完成图像
-
我们首先将图像解释为来自概率分布的样本
-
关注两种类型的信息:
- **上下文信息:**可以根据周围像素提供的信息推断丢失的像素。
- **感知信息:**将填充的部分解释为“正常”,就像在现实生活中看到的或从其他图片中看到的一样。
-
-
这种解释让我们学习如何生成假图像
-
然后我们会找到最好的假图像来完成。
-
-
无监督表示学习的一种经典方法是对数据进行聚类(例如,使用K-means),并利用聚类提高分类分数。
生成图像模型
-
参数模型
- 用于生成图像的变分采样方法(Kingma& Welling,2013)
- 使用迭代前向扩散过程生成图像(Sohl Dickstein等人,2015)
-
非参数模型
-
非参数模型通常从现有图像的数据库进行匹配
-
应用
- 纹理合成(Efros等人,1999年)、
- 超分辨率(Freeman等人,2002年)
- 绘画(Hays& Efros,2007年)
-
DCGAN
- DCGAN模型由生成网络G与判别网络D组成,网络结构均为五层,生成网络的接受一个随机输入的噪声,通过该噪声生成一张目标图像;判别网络接受一张图像,对该图像做出判断后,计算出一个概率值,若该图像来源为生成网络,则输出0,若该图像来自真实的数据分布,则输出为1。两者根据反馈的结果,不断更新自己的参数,直至达到纳什均衡。
DCGAN的贡献
- 提出了一类基于卷积神经网络的GANs,称为DCGAN,它在多数情况下训练是稳定的。
- 与其他非监督方法相比,DCGAN的discriminator提取到的图像特征更有效,更适合用于图像分类任务。
- 通过训练,DCGAN能学到有意义的 filters。
- DCGAN的generator能够保持latentspace到image的“连续性”。
基于GAN的图像处理研究现状
- GAN的博弈过程,就是使用生成器制造的数据分布来拟合真实的数据分布。
- 基于GAN性能的优越性,该模型逐渐被运用到图像处理领域的各个方向,其中包括图片转换、图像修复、风格迁移、图像生成等。
DCGAN方法的核心是采用和修改CNN架构的更改。
-
全卷积网络,它用跨步卷积代替确定性空间池函数(如maxpooling),允许网络学习自己的空间下采样。生成器中使用这种方法,允许它学习自己的空间上采样和鉴别器。
-
在卷积特征之上消除完全连接的层。
- 全局平均池增加了模型的稳定性,但降低了收敛速度。
- 将最高卷积特征分别直接连接到发生器和鉴别器的输入和输出
- GAN的第一层采用均匀的噪声分布作为输入,可以称之为完全连接,因为它只是矩阵乘法,但结果被重塑为四维张量,并用作卷积堆栈的开始。
-
批量标准化
- 通过将每个单位的输入标准化为零均值和单位方差的正态分布来稳定学习。
- 有助于处理由于初始化不良而产生的训练问题,并有助于在更深的模型中实现梯度流。
- 对于让深层生成器开始学习至关重要,可以防止生成器将所有样本压缩到单个点,
- 将batch norm直接应用于所有层会导致样本振荡和模型不稳定。通过不对生成器输出层和鉴别器输入层应用batchnorm,可以避免这种情况。
-
对于generator,输出层的激活函数采用Tanh,其它层的激活函数采用ReLU。对于discriminator,激活函数采用leaky ReLU
- 使用有界激活可以使模型更快地学习以饱和和覆盖训练分布的颜色空间。
-
DCGAN目前是GAN在实际工程实践中被采用最多的衍生网络,为了提高图像生成质量,增强其稳定性,许多研究学者尝试进行优化
- 卷积层代替池化层
- 池化操作会使卷积核在缩小的特征图上覆盖了更大的图像视野,但是对网络性能的优化效果较小,使用卷积层代替池化层,让网络自动选择筛去不必要信息,学习上采样和下采样过程,提高计算机运算能力。
- 去掉全连接层
- 全连接层一般添加在网络的末层,用于将图像特征进行连接,可以减少特征信息的损失,但是由于其参数过多,会产生过拟合、计算速度降低等问题。由于面部图像特征提取的感受野范围较小,不需要提取全图特征,所以为了避免上述问题,本项目中网络模型去掉了全连接层。
- 批量归一化
- 本课题中的生成器和判别器都是五层神经网络,每一层输入的数据的复杂度都会逐层递增,使输出数据的分布发生变化,对网络参数的初始化和BP算法的性能产生影响。将数据进行批量归一化(Bach Normalization,BN),可以使输出的数据服从某个固定数据的分布,把数据特征转换为相同尺度,从而加速神经网络的收敛速度。
- 生成器模型
- 生成模型的网络结构一共有五层,通过上采样方法生成大小的图像
- 各层之间运用激活函数,BN层等情况 - ![在这里插入图片描述](https://img-blog.csdnimg.cn/59cf5305e022452abd4fc9e74d282892.png#pic_center)
- ![在这里插入图片描述](https://img-blog.csdnimg.cn/7996a7d7dfe44301aff5626f2bf18ea4.png#pic_center)
- 判别器模型
- 判别模型的网络结构一共有五层,采用下采样方法。整个网络结构没有池化层,采用LeakyReLU作为激活函数,最后,通过一个全连接层输出判别结果,范围为0∼1,表示输入图像属于真实样本还是由生成器所生成的图像
- 各层之间运用激活函数,BN层等情况 - ![在这里插入图片描述](https://img-blog.csdnimg.cn/8d12668ec970444d9fb8063f3d95f98e.png#pic_center)
- 激活函数
- 激活函数(Activation Function)具有连续可导的特性,可以使神经网络进行非线性变化,通过对数值优化来学习网络参数,提升网络的扩展性。本课题的生成器和判别器均为五层网络模型,计算量较大,每一层的激活函数选择需要满足高计算效率和训练稳定两点,其导函数的值域分布合理。
- 基于以上原则,在DCGAN的生成器添加了ReLu函数、Tanh函数,判别器中添加了LeakyReLu函数和Sigmoid函数
https://blog.51cto.com/u_15298598/3118893
- 卷积层代替池化层
训练方式
- 单独交替迭代训练。
Adam优化器
- 在DCGAN的训练过程中,可以通过优化器最小化损失函数,一般分为一阶优化算法和二阶优化算法。本课题选用Adam优化程序调整超参数,它结合了 AdaGrad 和 RMSProp 算法最优的性能,不仅可以计算每个参数的自适应学习率,还可以通过训练数据的不断迭代使网络权重自动更新,相较于其他几种算法而言Adam算法实现简单、对计算机资源占用率较低,收敛速度也更快。
- 本文基于Adam优化器的默认参数做出改进,采用一种动态调整学习率的方法,改善训练过程中产生的图像模糊,模式崩塌,损失函数震荡明显等问题
转置卷积
-
普通卷积
-
优化计算,等效卷积引入
VAE
- 变分编码器VAE(Variational Auto-encoder)同GAN一样,成为无监督复杂概率分布学习的最流行的方法。
- VAE之所以流行,是因为它建立在标准函数逼近单元,即神经网络,此外它可以利用随机梯度下降进行优化。
- 基于一个令人惊叹的数学事实:对于一个目标概率分布,给定任何一种概率分布,总存在一个可微的可测函数,将其映射到另一种概率分布,使得这种概率分布与目标的概率分布任意的接近。
- VAE一个联合高斯分布作为隐含可测函数的分布(这个隐含可测函数将上面所说的所有现实世界影响写字样式的隐含因素映射到欧式空间中去了),随即将问题转化为学习一个从隐含可测函数(隐含变量)到一个所希望生成样本的映射。后面我们会看到,这个过程就是解码过程。可以想象,这个映射会极为复杂。我们自然会想到利用深度学习强大的函数拟合能力来学习这个映射。
另一种概率分布,使得这种概率分布与目标的概率分布任意的接近。
- VAE一个联合高斯分布作为隐含可测函数的分布(这个隐含可测函数将上面所说的所有现实世界影响写字样式的隐含因素映射到欧式空间中去了),随即将问题转化为学习一个从隐含可测函数(隐含变量)到一个所希望生成样本的映射。后面我们会看到,这个过程就是解码过程。可以想象,这个映射会极为复杂。我们自然会想到利用深度学习强大的函数拟合能力来学习这个映射。