【深度学习】卷积神经网络为什么能称霸计算机视觉领域?基于深度学习的目标检测算法综述、生成式对抗网络模型综述

2018 年 8 月 7 日 产业智能官

导言

在机器视觉和其他很多问题上,卷积神经网络取得了当前最好的效果,它的成功促使我们思考一个问题,卷积神经网络为什么会这么有效?在本文中,将为大家分析卷积神经网络背后的奥秘。



思想起源

在各种深度神经网络结构中,卷积神经网络是应用最广泛的一种,它由LeCun在1989年提出[1]。卷积神经网络在早期被成功应用于手写字符图像识别[1][2][3]。2012年更深层次的AlexNet网络[4]取得成功,此后卷积神经网络蓬勃发展,被广泛用于各个领域,在很多问题上都取得了当前最好的性能。


卷积神经网络通过卷积和池化操作自动学习图像在各个层次上的特征,这符合我们理解图像的常识。人在认知图像时是分层抽象的,首先理解的是颜色和亮度,然后是边缘、角点、直线等局部细节特征,接下来是纹理、几何形状等更复杂的信息和结构,最后形成整个物体的概念。


视觉神经科学(Visual Neuroscience)对于视觉机理的研究验证了这一结论,动物大脑的视觉皮层具有分层结构。眼睛将看到的景象成像在视网膜上,视网膜把光学信号转换成电信号,传递到大脑的视觉皮层(Visual cortex),视觉皮层是大脑中负责处理视觉信号的部分。1959年,David和Wiesel进行了一次实验[5],他们在猫的大脑初级视觉皮层内插入电极,在猫的眼前展示各种形状、空间位置、角度的光带,然后测量猫大脑神经元放出的电信号。实验发现,当光带处于某一位置和角度时,电信号最为强烈;不同的神经元对各种空间位置和方向偏好不同。这一成果后来让他们获得了诺贝尔奖。


目前已经证明,视觉皮层具有层次结构。从视网膜传来的信号首先到达初级视觉皮层(primary visual cortex),即V1皮层。V1皮层简单神经元对一些细节、特定方向的图像信号敏感。V1皮层处理之后,将信号传导到V2皮层。V2皮层将边缘和轮廓信息表示成简单形状,然后由V4皮层中的神经元进行处理,它颜色信息敏感。复杂物体最终在IT皮层(inferior temporal cortex)被表示出来。

视觉皮层结构


卷积神经网络可以看成是上面这种机制的简单模仿。它由多个卷积层构成,每个卷积层包含多个卷积核,用这些卷积核从左向右、从上往下依次扫描整个图像,得到称为特征图(feature map)的输出数据。网络前面的卷积层捕捉图像局部、细节信息,有小的感受野,即输出图像的每个像素只利用输入图像很小的一个范围。后面的卷积层感受野逐层加大,用于捕获图像更复杂,更抽象的信息。经过多个卷积层的运算,最后得到图像在各个不同尺度的抽象表示。


卷积运算

一维信号的卷积是数字信号处理里的一种经典手段,在图像处理领域,卷积也是一种常用的运算。它被用于图像去噪、增强、边缘检测等问题,还可以提取图像的特征。卷积运算用一个称为卷积核的矩阵自上而下、自左向右在图像上滑动,将卷积核矩阵的各个元素与它在图像上覆盖的对应位置的元素相乘,然后求和,得到输出像素值。以Sobel边缘检测算子为例,它的卷积核矩阵为:

假设输入图像的矩阵为以(x,y)为中心的3x3子图像为:

在该点处的卷积结果按照如下方式计算:

即以(x,y)为中心的的子图像与卷积核的对应元素相乘,然后相加。通过核卷积作用于输入图像的所有位置,我们可以得到图像的边缘图。边缘图在边缘位置有更大的值,在非边缘处的值接近于0。下图为Sobel算子对图像卷积的结果,左图为输入图像,右图为卷积后的结果:

Sobel算子卷积结果


从上图可以看到,通过卷积将图像的边缘信息凸显出来了。除了Sobel算子之外,常用的还有Roberts 、Prewitt算子等,它们实现卷积的方法相同 ,但有不同的卷积核矩阵。如果我们使用其他不同的核,也可以抽取更一般的图像特征。在图像处理中,这些卷积核矩阵的数值是人工设计的。通过某种方法,我们可以通过机器学习的手段来自动生成这些卷积核,从而描述各种不同类型的特征,卷积神经网络就是通过这种自动学习的手段来得到各种有用的卷积核。


卷积层

卷积层是卷积神经网络的核心。下面通过一个实际的例子来理解卷积运算。如果被卷积图像为:

卷积核为:

首先用图像第一个位置处的子图像,即左上角的子图像和卷积核对应元素相乘,然后相加,在这里子图像为:

卷积结果为:

接下来在待卷积图像上向右滑动一列,将第二个位置处的子图像:

与卷积核卷积,结果为154。接下来,再向右滑动一位,将第三个位置处的子图像与卷积核进行卷积,结果为166。处理完第一行之后,向下滑动一行,然后重复上面的过程。以此类推,最后得到卷积结果图像为:



经过卷积运算之后,图像尺寸变小了。我们也可以先对图像进行扩充(padding),例如在周边补0,然后用尺寸扩大后的图像进行卷积,保证卷积结果图像和原图像尺寸相同。另外,在从上到下,从左到右滑动过程中,水平和垂直方向滑动的步长都是1,我们也可以采用其他步长。


卷积运算显然是一个线性操作,而神经网络要拟合的是非线性的函数,因此和全连接网络类似,我们需要加上激活函数,常用的有sigmoid函数,tanh函数,ReLU函数等。关于激活函数的解释,为什么需要激活函数,什么样的函数可以用来做激活函数


前面我们讲述的是单通道图像的卷积,输入是二维数组。实际应用时我们遇到的经常是多通道图像,如RGB彩色图像有三个通道,另外由于每一层可以有多个卷积核,产生的输出也是多通道的特征图像,此时对应的卷积核也是多通道的。具体做法是用卷积核的各个通道分别对输入图像的各个通道进行卷积,然后把对应位置处的像素值按照各个通道累加。


由于每一层允许有多个卷积核,卷积操作后输出多张特征图像,因此第L个卷积层的卷积核通道数必须和输入特征图像的通道数相同,即等于第L-1个卷积层的卷积核的个数。


下图是一个简单的例子:

多通道卷积


在上图中卷积层的输入图像是3通道的(图中第1列)。对应的,卷积核也是3通道的。在进行卷积操作时,分别用每个通道的卷积核对对应通道的图像进行卷积,然后将同一个位置处的各个通道值累加,得到一个单通道图像。在上图中,有4个卷积核,每个卷积核产生一个单通道的输出图像,4个卷积核共产生4个通道的输出图像。


池化层

通过卷积操作,我们完成了对输入向图像的降维和特征抽取,但特征图像的维数还是很高。维数高不仅计算耗时,而且容易导致过拟合。为此引入了下采样技术,也称为pooling即池化操作。


池化的做法是对图像的某一个区域用一个值代替,如最大值或平均值。如果采用最大值,叫做max池化;如果采用均值,叫做均值池化。除了降低图像尺寸之外,下采样带来的另外一个好处是平移、旋转不变性,因为输出值由图像的一片区域计算得到,对于平移和旋转并不敏感。


下面通过一个实际例子来理解下采样运算。输入图像为:

在这里进行无重叠的2x2max池化,结果图像为:

结果图像中第一个元素11是原图左上角2x2子图像:

元素的最大值11。第二个元素9为第二个2x2子图像:



元素的最大值9,其他的以此类推。如果是采用的均值下采样,结果为:

池化层的具体实现是在进行卷积操作之后对得到的特征图像进行分块,图像被划分成的不相交块,计算这些块内的最大值或平均值,得到池化后的图像。


均值池化和max池化都可以完成下采样操作,前者是线性函数,而后者是非线性函数,一般情况下max池化有更好的效果。


网络结构

典型的卷积神经网络由卷积层、池化层、全连接层构成。在这里以LeNet5网络来说明,下图是这个网络的结构:

网络的输入为的灰度图像,由3个卷积层,2个池化层,1个全连接层组成。前面两个卷积层后面都有一个池化层。输出层有10个神经元,表示0-9这10个数字。


应用

机器视觉是深度学习技术最先取得突破的领域,也是应用最广泛的领域。在AlexNet出现之后,卷积神经网络很快被用于机器视觉里的各种任务,包括通用目标检测、行人检测、人脸检测、人脸识别、图像语义分割、边缘检测、目标跟踪、视频分类等各种问题,都取得了成功。


自然语言处理领域大多数的问题都是时间序列问题,这是循环神经网络擅长处理的问题。但对于有些问题,使用卷积网络也能进行建模并且得到了很好的结果,典型的是文本分类和机器翻译。


除此之外,卷积神经网络在语音识别、计算机图形学等其他方向也有应用。


卷积层可视化

卷积网络设计的初衷是通过卷积层和池化层逐级提取图像在各个不同抽象层次的特征,我们会有这样的疑问:现实结果真的是这样的吗?


先看图像卷积之后的结果。下面是一张卡车的图像:

卡车图像


用AlexNet网络处理之后,第一个卷积层的输出结果(我们把各个卷积核的结果依次排开了)是这样的:

卷层1的结果


可以看到这里抽取了一些边缘信息。第二个卷积层的输出结果是这样的:

卷层2的结果


它抽取了更大区域的特征。后面几个卷积层的结果是这样的:

卷层3—5的结果


卷积层3-5的结果在上图中依次排开。然后我们看全连接层,下图自上向下是3个全连接层的输出结果:

全连接层的结果


我们再来看卷积核的可视化结果。第一个卷积层的卷积核图像如下图所示:

     卷积层1的卷积核


     可以看到,这些卷积核确实是在提取边缘,方向等信息。再看第2个卷积层的卷积核:


卷积层2的卷积核


看上去很杂乱,没有反应太多信息。有没有更好的办法?答案是肯定的,目前出现了一些文章解决卷积层可视化的问题。在这里,我们介绍一种典型的方法,通过反卷积运算将卷积核的效果可视化出来。


文献[6]设计了一种用反卷积操作可视化卷积层的方案。具体做法是,将卷积网络学习到的特征图像左乘得到这些特征图像的卷积核的转置矩阵,将图片特征从特征图像空间投影到像素空间,以发现是哪些像素激活了特定的特征图像,达到分析理解卷积网络的目的。这这操作称为反卷积,也叫转置卷积。


对于卷积层,在反卷积运算时使用正向传播时的卷积核的转置矩阵对特征图像进行卷积,将特征图像还原到原始的像素图像空间得到重构的图像。通过反卷积操作得到卷积核的可视化图像如下图所示:

     通过反卷积进行可视化


上图表明,前面的层提取的特征比较简单,是一些颜色、边缘特征。越往后的卷积层提取的特征越复杂,是一些复杂的几何形状。这符合我们对卷积神经网络的设计初衷,即通过多层卷积完成对图像的逐层特征提取和抽象。


另外一种分析卷积网络机理的方法是根据卷积结果图像直接重构出原始输入图像,如果根据卷积结果可以重构出原始输入图像,则说明卷积网络很大程度上保留了图像的信息。文献[7]设计了一种方法,通过卷积网络提取出来的特征反向表示图像来观察卷积网络的表达能力。在这里,反向表示是指由卷积网络编码后的向量近似重构原始输入图像。具体做法是给定卷积网络编码后的向量,寻找一张图像,这种图像通过卷积网络编码之后的向量与给定向量最匹配,这通过求解一个最优化问题实现。下图是根据卷积输出结果重构出来的图像:

卷积图像重构


其中,上面一行是原始图像,下面一行是重构后的图像。从这个结果可以看出,卷积神经网络确实提取出了图像的有用信息。


理论分析

对卷积神经网络的理论解释和分析来自两个方面。第一个方面是从数学角度的分析,对网络的表示能力、映射特性的数学分析;第二个方面是卷积网络和动物视觉系统关系的研究,分析二者的关系有助于理解、设计更好的方法,同时也促进了神经科学的进步。


数学特性

神经网络代表了人工智能中的连接主义思想,它是一种仿生的方法,被看做是对动物大脑神经系统的模拟。在实现时,它又和大脑的结构不同。从数学上看,多层神经网络本质上是一个复合函数。


既然神经网络在本质上是一个复杂的复合函数,这会让我们思考一个问题:这个函数的建模能力有多强?即它能模拟什么样的目标函数?已经证明,只要激活函数选择得当,神经元个数足够多,使用3层即包含一个隐含层的神经网络就可以实现对任何一个从输入向量到输出向量的连续映射函数的逼近[8][9][10],这个结论称为万能逼近(universal approximation)定理。


文献[10]对使用sigmoid激活函数时的情况进行了证明。文献[8]指出,万能逼近特性并不取决于神经网络具体的激活函数,而是由神经网络的结构保证的。


万能逼近定理的表述为:如果是一个非常数、有界、单调递增的连续函数,是m维的单位立方体,中的连续函数空间为。对于任意以及函数,存在整数N,实数,实向量,通过它们构造函数作为函数f的逼近:

对任意的满足

万能逼近定理的直观解释是可以构造出上面这样的函数,逼近定义在单位立方体空间中的任何一个连续函数到任意指定的精度。这一结论和多项式逼近类似,后者利用多项式函数来逼近任何连续函数到任何精度。这个定理的意义在于,从理论上保证了神经网络的拟合能力。


但是这只是一个理论结果,具体实现时,神经网络需要多少层,每层要多少个神经元?这些问题只能通过实验和经验来确定,以保证效果。另外一个问题是训练样本,要拟合出一个复杂的函数需要大量的训练样本,而且面临过拟合的问题。这些工程实现的细节也至关重要,卷积网络在1989年就已经出现了,为什么直到2012年才取得成功?答案有这么几点:


1.训练样本数量的限制。早期的训练样本非常少,没有大规模采集,不足以训练出一个复杂的卷积网络。

2.计算能力的限制。1990年代的计算机能力太弱,没有GPU这样的高性能计算技术,要训练一个复杂的神经网络不现实。

3.算法本身的问题。神经网络长期以来存在梯度消失的问题,由于反向传播时每一层都要乘上激活函数的导数值,如果这个导数的绝对值小于1,次数多了之后梯度很快趋近于0,使得前面的层无法得到更新。


AlexNet网络的规模尤其是层数比之前的网络更深,使用了ReLU作为激活函数,抛弃了sigmoid和tanh函数,一定程度上缓解了梯度消失问题。加上Dropout机制,还减轻了过拟合问题。这些技术上的改进,加上ImageNet这样的大样本集,以及GPU的计算能力,保证了它的成功。后面的研究表明,加大网络的层数、参数数量,能够明显的增加网络的精度。


卷积神经网络本质上权重共享的全连接神经网络,因此万能逼近定理对它是适用的。但卷积网络的卷积层,池化层又具有其特性。文献[11]从数学的角度对深层卷积网络进行了解释。在这里,作者将卷积网络看做是用一组级联的线性加权滤波器和非线性函数对数据进行散射。通过对这一组函数的压缩(contraction)和分离(separation)特性进行分析从而解释深度卷积网络的建模能力。另外,还解释了深度神经网络的迁移特性。卷积神经网络的卷积操作分为两步,第一步是线性变换,第二步是激活函数变换。前者可以看成是将数据线性投影到更低维的空间;后者是对数据的压缩非线性变换。作者对这几种变换的分离和压缩特性分别进行了分析。


     与视觉神经系统的关系

卷积网络与人脑视觉系统的关系对于卷积网络的解释和设计有重要的意义,这分为两个方面的问题。第一个问题是深度卷积神经网络是否能够取得和人脑视觉系统相似的性能,这涉及到二者能力的对比。第二个问题是二者在结构上是否具有一致性,这是从系统结构上分析二者的关系。


从更深层来看,这个问题也是人工智能无法回避的一个问题。很多人都会有一个疑问:我们是否要理解了大脑的工作机理才能实现出和它相当的人工智能?对这个问题的答案有两种观点。第一种观点认为,我们要先弄清楚大脑的原理,才能研制出和他功能相当的人工智能。第二种观点认为,即使我们没有弄清大脑的工作原理,也能研制出和它能力相当的人工智能。一个例子就是飞机的发明过程,长期以来,人们都想通过仿照鸟的飞行方式来制造飞机,即煽动翅膀,结果均以失败告终。而螺旋桨的使用,使得我们采用另外一种方法,也能让飞机飞起来,后面出现的喷气发动机甚至让我们突破了音速,远比鸟强大。事实上,大脑可能不是实现和它具有同等功能的智能的唯一方案。

文献[12]对第一个问题进行了分析。他们验证了深度神经网络可以取得和灵长类动物视觉IT皮层相同的性能。人脑的视觉神经系统在物体样例变化,几何变换,背景变化的情况下仍然可以达到很高的识别性能,这主要归功于下颞叶皮层inferior temporal cortex,简称IT皮层的表示能力。通过深度卷积神经网络训练的模型,在物体识别问题上同样达到了很高的性能。对两者的精确比较存在很多困难。


作者用扩展的核分析技术对深度神经网络和IT皮层进行了比较。这种技术将模型的泛化误差作为表示复杂度的函数。分析结果表明,深度神经网络在视觉目标识别任务上的的性能可以得到大脑IT皮层的表示能力。

神经网络与视觉皮层能力的对比


文献[13]也分析了深层神经网络与视觉神经之间的对应关系。他们利用目标驱动的深度学习模型来理解大脑的感觉皮层。具体的思路是用目标驱动的分层卷积神经网络(goal-driven hierarchical convolutional neural networks,简称HCNNs)对高视觉皮层区中单个单元和群体的输出响应进行建模。这种手段建立起了深层神经网络和大脑感知皮层的对应关系,能够帮助我们理解视觉皮层的机理。从另一角度看,也找到了深度神经网络在神经科学上的对应点。下图是神经网络与视觉皮层的结构和功能对比:

神经网络与视觉皮层的结构对比


目前对深度神经网络工作机理、理论的研究还不完善,脑科学的研究也还处于比较低级的阶段。相信在未来通过人类不断的努力,能够更清楚的理解大脑的工作机理,也能够设计出功能更强大的神经网络。




基于深度学习的目标检测算法

导言

目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一。由于各类物体有不同的外观,形状,姿态,加上成像时光照,遮挡等因素的干扰,目标检测一直是机器视觉领域最具有挑战性的问题。本文将针对目标检测(Object Detection)这个机器视觉中的经典任务进行解析,抛砖引玉。


什么是目标检测?

目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一。由于各类物体有不同的外观,形状,姿态,加上成像时光照,遮挡等因素的干扰,目标检测一直是机器视觉领域最具有挑战性的问题。


计算机视觉中关于图像识别有四大类任务:

分类-Classification:解决“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。

定位-Location:解决“在哪里?”的问题,即定位出这个目标的的位置。

检测-Detection:解决“是什么?在哪里?”的问题,即定位出这个目标的的位置并且知道目标物是什么。

分割-Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每一个像素属于哪个目标物或场景”的问题。



目标检测要解决的核心问题


除了图像分类之外,目标检测要解决的核心问题是:

1.目标可能出现在图像的任何位置。

2.目标有各种不同的大小。

3.目标可能有各种不同的形状。

如果用矩形框来定义目标,则矩形有不同的宽高比。由于目标的宽高比不同,因此采用经典的滑动窗口+图像缩放的方案解决通用目标检测问题的成本太高。


目标检测的应用


目标检测在很多领域都有应用需求。其中被广为研究的是人脸检测,行人检测,车辆检测等重要目标的检测。



行人检测


行人检测在视频监控,人流量统计,自动驾驶中都有重要的地位,后续也会有相关综述文章。



车辆检测


车辆检测在智能交通,视频监控,自动驾驶中有重要的地位。车流量统计,车辆违章的自动分析等都离不开它,在自动驾驶中,首先要解决的问题就是确定道路在哪里,周围有哪些车、人或障碍物。



其他应用


交通标志如交通灯、行驶规则标志的识别对于自动驾驶也非常重要,我们需要根据红绿灯状态,是否允许左右转、掉头等标志确定车辆的行为。


交通标志检测


除了这些常见目标的检测之外,很多领域里也需要检测自己感兴趣的目标。比如工业中材质表面的缺陷检测,硬刷电路板表面的缺陷检测等。

      表面缺陷检测


农业中农作物表面的病虫害识别也需要用到目标检测技术:


农作物病虫害检测


人工智能在医学中的应用目前是一个热门的话题,医学影像图像如MRI的肿瘤等病变部位检测和识别对于诊断的自动化,提供优质的治疗具有重要的意义。

肿瘤检测


目标检测相关算法


DPM算法


与人脸、行人等特定类型的目标检测不同,通用目标检测要同时检测出图像中的多类目标,难度更大。处理这一问题的经典方法是DPM(Deformable Part Model),正如其名,这是可变形的组件模型,是一种基于组件的检测算法。该模型由Felzenszwalb在2008年提出,并发表了一系列的CVPR,NIPS文章,蝉联三届PASCAL VOC目标检测冠军,拿下了2010年PASCAL VOC的“终身成就奖”。


在深度卷积神经网络(DCNN)出现之前,DPM算法一直是目标检测领域最优秀的算法,它的基本思想是先提取DPM人工特征(如下图所示),再用latentSVM分类。这种特征提取方式存在明显的局限性,首先,DPM特征计算复杂,计算速度慢;其次,人工特征对于旋转、拉伸、视角变化的物体检测效果差。这些弊端很大程度上限制了算法的应用场景。


DPM目标检测流程


Alexnet


现代深度神经网络的想法早在2006年就被 Geoffrey Hinton 提出,直到2012年,Alex Krizhevsky凭借著名的Alexnet卷积神经网络模型以领先第二名10%的成绩夺得ILSVRC2012图像分类比赛冠军,深度学习技术才真正走进主流学术界和工业界的视野。深度神经网络的出现颠覆了传统的特征提取方式,凭借其强大的表达能力,通过丰富的训练数据和充分的训练能够自主学习有用的特征。这相比传统的人工发现特征并根据特征设计算法的方式是质的飞跃。

AlexNet 网络结构


通过卷积神经网络可以学到物体在各个层次的抽象表达:

深度学习得到的层次特征表达


OverFeat


2013年纽约大学Yann LeCun团队中Zhang xiang等提出的OverFeat在ILSVRC2013比赛中获得了多项第一,他们改进了Alexnet,提出了使用同一个卷积网络完成了多个任务的方法。该方法充分利用了卷积神经网络的特征提取功能,它把分类过程中提取到的特征同时又用于定位检测等各种任务,只需要改变网络的最后几层,就可以实现不同的任务,而不需要从头开始训练整个网络的参数。这充分体现和发掘了CNN特征共享的优点。


该文主要的亮点是:

1.共享卷基层用于多任务学习。

2.全卷积网络思想。

3.在特征层进行滑窗操作(Sliding Window)避免大量重复运算,这也是后来的系列算法不断沿用和改进的经典做法。


OverFeat几个明显的缺陷

1.采用了多尺度贪婪的划窗策略,导致计算量还是很大 。

2.由于当时并没有太优秀的backbone网络,共享特征层的表征能力不是太强,没有考虑多尺度特征融合,对小目标效果差,整体的检测效果不尽如人意。ILSVRC 2013数据集上的mAP(可以简单的理解为检测准确率)为24.3%。


经典的卷积神经网络有一个问题是它只能接受固定大小的输入图像,这是因为第一个全连接层和它之前的卷积层之间的权重矩阵大小是固定的,而卷积层、全连接层本身对输入图像的大小并没有限制。而在做目标检测时,卷积网络面临的输入候选区域图像大小尺寸是不固定的。


下面用一个例子说明怎么让一个已经设计好的DCNN模型,可以支持任意大小图片输入,其中一种方案是全卷积网络(FCN),即去掉所有全连接层,全部由卷积层来替代:


FCN并不是把5×5的图片展平成一维向量再进行计算,而是直接采用5×5的卷积核对一整张图片进行卷积运算。比如16×16大小的特征图片,那么会是什么样的结果?请看下面的示意图:

这个时候就会发现,网络最后的输出是一张2×2大小的特征图片。可以发现采用FCN网络,可以输入任意大小的图片。需要注意的是网络最后输出的特征图片大小不再总是1×1而是一个与输入图片大小相关。


OverFeat有很多创新,但是不能算是目标检测典型的Pipeline,所以我们单独提了出来。下面将从R-CNN开始介绍目前基于DCNN物体检测发展脉络。


卷积神经网络用于目标检测之后,进展神速,在短期内大幅度的提高了算法的精度,推动这一技术走向实用。


基于DCNN的目标检测算法发展路线图


R-CNN

Region CNN(简称R-CNN)由Ross Girshick

(江湖人称RBG大神,Felzenszwalb的学生)提出,是利用深度学习进行目标检测的里程碑之作,奠定了这个子领域的基础。这篇文章思路清奇,在DPM方法经历多年瓶颈期后,显著提升了检测率(ILSVRC 2013数据集上的mAP为31.4%)。RBG是这个领域神一样的存在,后续的一些改进方法如Fast R-CNN、Faster R-CNN、YOLO等相关工作都和他有关。


R-CNN检测时的主要步骤为:

1.使用Selective Search算法从待检测图像中提取2000个左右的区域候选框,这些候选框可能包含要检测的目标。

2.把所有侯选框缩放成固定大小(原文采用227×227)。

3.用DCNN提取每个候选框的特征,得到固定长度的特征向量。

4.把特征向量送入SVM进行分类得到类别信息,送入全连接网络进行回归得到对应位置坐标信息。


R-CNN不采用滑动窗口方案的原因一是计算成本高,会产生大量的待分类窗口;另外不同类型目标的矩形框有不同的宽高比,无法使用统一尺寸的窗口对图像进行扫描。用于提取特征的卷积网络有5个卷积层和2个全连接层,其输入是固定大小的RGB图像,输出为4096维特征向量。对候选区域的分类采用线性支持向量机,对每一张待检测图像计算所有候选区域的特征向量,送入支持向量机中进行分类;同时送入全连接网络进行坐标位置回归。



R-CNN虽然设计巧妙,但仍存在很多缺点:

1.重复计算。R-CNN虽然不再是穷举,但通过Proposal(Selective Search)的方案依然有两千个左右的候选框,这些候选框都需要单独经过backbone网络提取特征,计算量依然很大,候选框之间会有重叠,因此有不少其实是重复计算。

2.训练测试不简洁。候选区域提取、特征提取、分类、回归都是分开操作,中间数据还需要单独保存。

3.速度慢。前面的缺点最终导致R-CNN出奇的慢,GPU上处理一张图片需要十几秒,CPU上则需要更长时间。

4.输入的图片Patch必须强制缩放成固定大小(原文采用227×227),会造成物体形变,导致检测性能下降。


SPPNet


此后MSRA的Kaiming He等人在R-CNN的基础上提出了SPPNet,该方法虽然还依赖候选框的生成,但将提取候选框特征向量的操作转移到卷积后的特征图上进行,将R-CNN中的多次卷积变为一次卷积,大大降低了计算量(这一点参考了OverFeat)。


R-CNN的卷积网络只能接受固定大小的输入图像。为了适应这个图像尺寸,要么截取这个尺寸的图像区域,这将导致图像未覆盖整个目标;要么对图像进行缩放,这会产生扭曲。在卷积神经网络中,卷积层并不要求输入图像的尺寸固定,只有第一个全连接层需要固定尺寸的输入,因为它和前一层之间的权重矩阵是固定大小的,其他的全连接层也不要求图像的尺寸固定。如果在最后一个卷积层和第一个全连接层之间做一些处理,将不同大小的图像变为固定大小的全连接层输入就可以解决问题。


SPPNet引入了Spatial Pyramid pooling层,对卷积特征图像进行空间金字塔采样获得固定长度的输出,可对特征层任意长宽比和尺度区域进行特征提取。具体做法是对特征图像区域进行固定数量的网格划分,对不同宽高的图像,每个网格的高度和宽度是不规定的,对划分的每个网格进行池化,这样就可以得到固定长度的输出。下图是SPP操作示意图:


相比R-CNN,SPPNet的检测速度提升了30倍以上。下图是R-CNN和SPPNet 检测流程的比较:


下图是SPPNet的原理:


SPPNet 检测框架图


SPPNet和R-CNN一样,它的训练要经过多个阶段,中间特征也要进行存储;backbone网络参数沿用了分类网络的初始参数,没有针对检测问题进行优化。


Fast RCNN

Ross Girshick 针对SPPNet做了进一步改进提出的FRCNN ,其主要创新是RoI Pooling 层,它将不同大小候选框的卷积特征图统一采样成固定大小的特征。ROI池化层的做法和SPP层类似,但只使用一个尺度进行网格划分和池化。该层可以直接求导,训练时直接将梯度传导到backbone网络进行优化。FRCNN针对R-CNN和SPPNet在训练时是多阶段的和训练的过程中很耗费时间空间的问题进行改进。将深度网络和后面的SVM分类两个阶段整合到一起,使用一个新的网络直接做分类和回归。使得网络在Pascal VOC上的训练时间从R-CNN的84小时缩短到9.5小时,检测时间更是从45秒缩短到0.32秒。


重要的是Fast RCNN的backbone网络也可以参与训练了!!!


Faster RCNN

SPPNet和Faster RCNN都需要独立的候选区域生成模块,这个模块计算量很大,而且不易用GPU加速。针对这个问题,Shaoqin Ren 等人在Faster RCNN基础上提出Faster R-CNN ,在主干网络中增加了RPN (Region Proposal Network)网络,通过一定规则设置不同尺度的锚点(Anchor)在RPN的卷积特征层提取候选框来代替Selective Search等传统的候选框生成方法,实现了网络的端到端训练。候选区域生成、候选区域特征提取、框回归和分类全过程一气呵成,在训练过程中模型各部分不仅学习如何完成自己的任务,还自主学习如何相互配合。这也是第一个真正意义上的深度学习目标检测算法。


注:Shaoqin Ren实现的matlab版本中RPN阶段和FRCNN阶段是分开训练的,但是在实际的实践中(RBG实现的Python版本)发现二者可以一起优化训练,而且精度没有损失,可以说Faster RCNN真正实现了端到端的训练。

Fast RCNN(左) 和 Faster RCNN(右)框架结构对比


R-FCN

由于现在的主流网络层数越来越多,基于Faster RCNN检测框架的方法的计算量受到了3个因素的影响:

1.基础网络的复杂度

2.候选框数量的多少

3.分类和位置回归子网络的复杂度(每个候选框的box都会独立进行前向计算)。


一般来说直接优化前两点性价比不太高。如果直接优化RoI-wise subnetwork是否可行呢,将子网络的深度尽可能减少?分类是要增加物体的平移不变性(不同的位置都是同一个物体);目标检测时减少物体的平移变化(目标检测需要得到物体所在的位置)。通常我们所用的网络都是ImageNet的分类任务训练得到的,在目标检测的时候进行Finetune。由于得到的初始模型基于分类任务,那么会偏向于平移不变性,这和目标检测就出现了矛盾。


MSRA的Jifeng Dai等人提出了R-FCN,通过position-positive score maps(位置敏感得分图)来解决这个矛盾。位置敏感得分图通过预测RoI中不同部位的类别投票表决产生该RoI的类别预测。引用原文中的例子,“如果我们的算法要识别婴儿,那么把一个目标区域分成九宫格,其中算法认为其中五个格子中的区域分别像婴儿的头、四肢和躯干,那么根据投票机制,就认为这个目标区域里的是一个婴儿。这很符合我们人类的判断逻辑。”


 R-FCN沿用了 Faster RCNN 的框架结构,不同的是在Faster R-CNN的基础上通过引入位置敏感得分图,将RoI-wise subnetwork消灭了,直接在位置敏感得分图上利用ROI Pooling进行信息采样融合分类和位置信息。


R-FCN 网络框架结构

ResNet101为例,不同检测框架复用卷积网络层数


Mask R-CNN

2017年Kaiming He等提出了Mask R-CNN ,并获得ICCV2017 Best Paper Award。作者指出,Faster R-CNN在做下采样和RoI Pooling时都对特征图大小做了取整操作,这种做法对于分类任务基本没有影响,但对检测任务会有一定影响,对语义分割这种像素级任务的精度影响则更为严重。为此,作者对网络中涉及特征图尺寸变化的环节都不使用取整操作,而是通过双线性差值填补非整数位置的像素。这使得下游特征图向上游映射时没有位置误差,不仅提升了目标检测效果,还使得算法能满足语义分割任务的精度要求。


以上介绍的检测方法都属于two-stage的方案,即分为候选区域生成和区域分类两步,接下来我们将介绍几种single-stage的经典方法。


YOLO系列


2015年,随着YOLO算法的出现,深度学习目标检测算法开始有了两步(two-stage)和单步(single-stage)之分。区别于R-CNN系列为代表的两步检测算法,YOLO舍去了候选框提取分支(Proposal阶段),直接将特征提取、候选框回归和分类在同一个无分支的卷积网络中完成,使得网络结构变得简单,检测速度较Faster R-CNN也有近10倍的提升。这使得深度学习目标检测算法在当时的计算能力下开始能够满足实时检测任务的需求。


算法将待检测图像缩放到统一尺寸,为了检测不同位置的目标,将图像等分成的网格,如果某个目标的中心落在一个网格单元中,此网格单元就负责预测该目标。


YOLOv1只针对最后7x7的特征图进行分析,使得它对小目标的检测效果不佳,当多个目标出现在一个Grid Cell时不容易区分。

YOLOv1原理图

YOLOv1在7X7特征图上对每个Grid cell进行操作


YOLOv2改进了YOLOv1的网络结构,除加入时下热门的批量归一化层以及残差网络结构以外,还针对性的训练了一个高分辨率的分类网络(448x448)然后利用该网络训练检测网络,单单通过提升输入的分辨率,mAP获得了4%的提升。YOLOv1利用单个grid cell拼接成全连接层完成边框的预测,导致丢失较多的空间信息,定位不准,作者在这一版本中进行了优化改进:


1.借鉴了Faster R-CNN中的Anchor思想,但是作者在实践中发现用基于规则选择的Anchor效果并没有得到提升,实验中作者对Pascal VOC和COCO的数据集进行了统计分析(聚类分析)选择针对行的Anchor的尺寸性能的到了明显提升。


2.作者在使用anchor boxes时发现模型收敛不稳定,尤其是在早期迭代的时候。大部分的不稳定现象出现在预测box的 (x,y) 坐标的优化上。因此作者就没有采用直接预测offset的方法,而使用了预测相对于grid cell的坐标位置的办法,利用logistic函数把ground truth归一化到0到1之间,坐标值被归一化后,模型优化会更稳定。

YOLOv3在YOLOv2的基础上使用了全新设计的Darknet53残差网络并结合FPN网络结构,在网络后两个特征图上采样后于网络前期相应尺寸的特征图聚合再经过卷积网络后得到预测结果。这些改进使得YOLOv3用三分之一的时间达到与SSD相当的精确度。在 COCO test-dev 上 mAP@0.5 达到 57.9%,与RetinaNet(FocalLoss论文所提出的单阶段网络)的结果相近,但速度快4倍。


YOLOv3的模型比之前的版本复杂了不少,可以通过改变模型结构的大小来权衡速度与精度。

YOLOv3的改进点:

1. 多尺度预测(FPN)

2. 更好的Backbone网络(Darknet53残差网络)

3. 分类损失采用binary cross-entropy损失函数替换Softmax损失函数(Softmax会选择分数最高的类别判定为当前框所属的类别,而现实中一个目标可能属于多个类别标签)


SSD

SSD对YOLO进行了改进,达到了和两阶段方法相当的精度,同时又保持了较快的运行速度。SSD也采用了网格划分的思想,和Faster RCNN不同的是它将所有的操作整合在一个卷积网络中完成。为了检测不同尺度的目标,SSD对不同卷积层的特征图像进行滑窗扫描;在前面的卷积层输出的特征图像中检测小的目标,在后面的卷积层输出的特征图像中检测大的目标。它的主要特点是:


1.基于多尺度特征图像的检测:在多个尺度的卷积特征图上进行预测,以检测不同大小的目标,一定程度上提升了小目标物体的检测精度。

2.借鉴了Faster R-CNN中的Anchor boxes思想,在不同尺度的特征图上采样候选区域,一定程度上提升了检测的召回率以及小目标的检测效果。下图是SSD的原理:


FPN

FPN(Feature Pyramid Network)方法同时利用低层特征高分辨率和高层特征的高语义信息,通过融合这些不同层的特征达到提升预测的效果的作用。FPN中预测是在每个融合后的特征层上单独进行的,这和常规的特征融合方式有所不同。


FPN 网络结构如下图d(其中YOLO使用b结构,SSD使用c结构)所示,它的结构具有相当的灵活性,可以和各种特征提取网络结合作为检测算法的基础网络。在后文中会看到,目前大多数state-of-art的模型都采用了这种结构。其中RetinaNet在FPN的基础上使用了ResNet网络提取特征,并用Focal Loss损失改善单步目标检测算法中普遍存在的前景类和背景类损失不均衡的问题。这些基于FPN结构的检测算法能够在增加网络深度、获取更丰富语义信息的同时从浅层特征图中获取更丰富且高分辨率的图像特征,这使得这种网络结构在实际应用中表现出优异的性能。


目前主流检测框架有4种使用特征的形式:


1.图像金字塔。即将图像缩放到不同的大小,然后不同大小的图像生成对应的特征。这种方法的缺点是增加了时间成本。有些算法会在检测时采用这种图像金字塔的方案。

2.单一尺度特征层。SPPNet,Fast RCNN,Faster RCNN采用这种方式,即仅采用网络最后一层卷积层的特征。

3.SSD采用这种多尺度特征融合的方式,但是没有上采样过程,即从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。SSD算法中没有用到足够低层的特征(在SSD中,最低层的特征是VGG网络的conv4_3),而足够低层的特征对于检测小物体是很有帮助的。

4.FPN采用bottom-up与top-down的结构,实现了低层特征和高层语义特征的融合,提高了特征映射的信息密度和分辨率,提高了小目标物体的检测效果;区别于SSD,FPN每层都是独立预测的。


COCO2017排行榜


最后我们来看通用目标检测算法的最新进展。下图是MSCOCO 2017年目标检测竞赛的领先算法:

其中排名第一的模型为旷视科技(face++)提交的MegDet。他们的方案没有在检测算法方面做过多优化(采用的是ResNet50+FPN),而是在并行训练规模上做了优化。训练硬件环境是由128个GPU组成的集群,通过改进跨GPU批量归一化算法和学习率变化策略,将batch size增大到256张,这使得批量归一化层中使用的批均值和方差更能够反应总体特征,有效提升了归一化效果,从而大幅提升训练速度并且得到了非常好的结果。


排名第二的方案PAN改进了FPN算法,如下图所示。它在FPN的基础上不仅增加了一个降采样网络(b),还聚合使用了多个不同尺度特征图上的预测候选框(c)。该模型不仅在这一届的COCO目标检测竞赛中名列第二,而且取得了语义分割任务的冠军。



第三名的模型出自MSRA之手,他们同样没有对检测算法本身做过多改进,在FPN基础上使用了Xception网络结构和SoftNMS,但与以往不同的是使用了可变卷积层DCN(deformable convnet)替代了传统卷积,使得卷积层能够根据图片的语义信息调整卷积核感受点的位置,达到提升网络特征提取能力的目的。下图是可变卷积层的原理:

排名第四的结果是用以FPN+ResNeXt网络为作为基础网络的Mask R-CNN算法得到的。后面大多数成绩优异的模型都是R-FCN、FPN、Faster-RCNN等经典模型结合DCN、Attention机制、先进分类网络结构和模型融合等技术而形成的算法。



生成式对抗网络模型综述

摘要

生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络最最直接的应用是数据的生成,而数据质量的好坏则是评判GAN成功与否的关键。本文介绍了GAN最初被提出时的基本思想,阐述了其一步步演化、改进的动机和基本思想以及原理,从基于模型改进的角度介绍了WGAN,WGAN-GP,LSGAN,f-GAN,LS-GAN以及GLS-GAN,EBGAN,BEGAN等GAN发展过程中较为重要的改进模型,以及从应用创新角度介绍了CGAN,InfoGAN,Pix2Pix,CycleGAN,StarGAN等较为常用或热门的GAN的应用方法。此外,本文还介绍了GAN的几种应用,包括图像翻译,语言翻译以及基于GAN的辅助驾驶等。最后本文还介绍了GAN的主要发展和研究方向,提出了GAN现在以及将来发展的热点与难点等,如如何提高图片的质量,避免模式崩塌等。

 深度学习  生成式对抗网络  卷积神经网络  Wasserstein距离  对抗训练


deep learning, generate adversial network, convolutionalneural network, Wasserstein Distance, adversial training

 

引言

近年来,人工智能与深度学习已经成为耳熟能详的名词。一般而言,深度学习模型可以分为判别式模型与生成式模型。由于反向传播(Back propagation, BP)、Dropout等算法的发明,判别式模型得到了迅速发展。然而,由于生成式模型建模较为困难,因此发展缓慢,直到近年来最成功的生成模型——生成式对抗网络的发明,这一领域才焕发新的生机。


生成式对抗网络(Generative adversarial network, GAN)自Ian Goodfellow[1]等人提出后,就越来越受到学术界和工业界的重视。而随着GAN在理论与模型上的高速发展,它在计算机视觉、自然语言处理、人机交互等领域有着越来越深入的应用,并不断向着其它领域继续延伸。因此,本文将对GAN的理论与其应用做一个总结与介绍。


GAN的基本思想

GAN受博弈论中的零和博弈启发,将生成问题视作判别器和生成器这两个网络的对抗和博弈:生成器从给定噪声中(一般是指均匀分布或者正态分布)产生合成数据,判别器分辨生成器的的输出和真实数据。前者试图产生更接近真实的数据,相应地,后者试图更完美地分辨真实数据与生成数据。由此,两个网络在对抗中进步,在进步后继续对抗,由生成式网络得的数据也就越来越完美,逼近真实数据,从而可以生成想要得到的数据(图片、序列、视频等)。


如果将真实数据和生成数据服从两个分布,那么如图所示

图1 GAN的基本思想

蓝色分布为生成分布,绿色分布为真实分布,D为判别器,GAN从概率分布的角度来看,就是通过D来将生成分布推向真实分布,紧接着再优化D,直至到达图1(d)所示,到达Nash均衡点,从而生成分布与真实分布重叠,生成极为接近真实分布的数据。


GAN的基本模型

设z为随机噪声,x为真实数据,生成式网络和判别式网络可以分别用G和D表示,其中D可以看作一个二分类器,那么采用交叉熵表示,可以写作:

其中第一项的logD(x)表示判别器对真实数据的判断,第二项log(1 − D(G(z)))表示则对数据的合成与判断。通过这样一个极大极小(Max-min)博弈,循环交替地分别优化G和D来训练所需要的生成式网络与判别式网络,直到到达Nash均衡点。


GAN与Jensen-Shannon散度

对于原目标函数,在生成器G固定参数时,可以得到最优的判别器D。对于一个具体的样本,它可能来自真实分布也可能来自生成分布,因此它对判别器损失函数的贡献是:

其中pr为真实分布,pg为生成分布。令上式关于D(x)的导数为0,可以得到D(x)的全局最优解为:

对于gan 的生成器的优化函数可以写成:

将最优判别器代入,可以得到生成器的优化函数为:

此处简单回顾一下JS散度与KL散度:

显然,(1)式与JS散度形式相似,可以转换成:

综上,可以认为,当判别器过优时,生成器的loss可以近似等价于优化真实分布与生成器产生数据分布的JS散度。


生成器与判别器的网络

Ian在2014年提出的朴素GAN在生成器和判别器在结构上是通过以多层全连接网络为主体的多层感知机(Multi-layer Perceptron, MLP) 实现的,然而其调参难度较大,训练失败相当常见,生成图片质量也相当不佳,尤其是对较复杂的数据集而言。


由于卷积神经网络(Convolutional neural network, CNN)比MLP有更强的拟合与表达能力,并在判别式模型中取得了很大的成果。因此,Alec等人[2]将CNN引入生成器和判别器,称作深度卷积对抗神经网络(Deep Convolutional GAN, DCGAN)。图2为DCGAN生成器结构图。本质上,DCGAN是在GAN的基础上提出了一种训练架构,并对其做了训练指导,比如几乎完全用卷积层取代了全连接层,去掉池化层,采用批标准化(Batch Normalization, BN)等技术,将判别模型的发展成果引入到了生成模型中。此外,[2]还并强调了隐藏层分析和可视化计数对GAN训练的重要性和指导作用。


DCGAN虽然没有带来理论上以及GAN上的解释性,但是其强大的图片生成效果吸引了更多的研究者关注GAN,证明了其可行性并提供了经验,给后来的研究者提供了神经网络结构的参考。此外,DCGAN的网络结构也可以作为基础架构,用以评价不同目标函数的GAN,让不同的GAN得以进行优劣比较。DCGAN的出现极大增强了GAN的数据生成质量。而如何提高生成数据的质量(如生成图片的质量)也是如今GAN研究的热门话题。

图2 DCGAN生成器网络结构图

GAN的模型改进

然而,GAN自从2014年提出以来,就存在着训练困难、不易收敛、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。从那时起,很多研究人员就在尝试解决,并提出了改进方案,切实解决了部分问题,如生成器梯度消失导致的训练困难。当然也还有很多问题亟待解决,如生成样本的评价指标问题。本文将简单阐述几个较为突出的的改进措施。


WGAN

与前文的DCGAN不同,WGAN(Wasserstein GAN)并不是从判别器与生成器的网络构架上去进行改进,而是从目标函数的角度出发来提高模型的表现[3]。Martin Arjovsky等人先阐述了朴素GAN因生成器梯度消失而训练失败的原因[4]:他们认为,朴素GAN的目标函数在本质上可以等价于优化真实分布与生成分布的Jensen-Shannon散度。而根据Jensen-Shannon散度的特性,当两个分布间互不重叠时,其值会趋向于一个常数,这也就是梯度消失的原因。此外,Martin Arjovsky等人认为,当真实分布与生成分布是高维空间上的低维流形时,两者重叠部分的测度为0的概率为1,这也就是朴素GAN调参困难且训练容易失败的原因之一。


 针对这种现象,Martin Arjovsky等人利用Wasserstein-1距离(又称Earth Mover距离)来替代朴素GAN所代表的Jensen-Shannon散度[3]。Wasserstein距离是从最优运输理论中的Kantorovich问题衍生而来的,可以如下定义真实分布与生成分布的Wasserstein-1距离:

其中pr,pg分别为真实分布与生成分布,pr,pg分的联合分布。相较于Jensen-Shannon散度,Wasserstein-1距离的优点在于,即使pr,pg互不重叠,Wasserstein距离依旧可以清楚地反应出两个分布的距离。为了与GAN相结合,将其转换成对偶形式:

从表示GAN的角度理解,fw表示判别器,与之前的D不同的是,WGAN不再需要将判别器当作0-1分类将其值限定在[0,1]之间,fw越大,表示其越接近真实分布;反之,就越接近生成分布。此外,||f||≤ 1表示其Lipschitz常数为1。显然,Lipschitz连续在判别器上是难以约束的,为了更好地表达Lipschitz转化成权重剪枝,即要求参数w ∈ [−c, c],其中为常数。因而判别器的目标函数为:

其中w ∈ [−c, c],生成器的损失函数为:

WGAN的贡献在于,从理论上阐述了因生成器梯度消失而导致训练不稳定的原因,并用Wasserstein距离替代了Jensen-Shannon散度,在理论上解决了梯度消失问题。此外,WGAN还从理论上给出了朴素GAN发生模式坍塌(mode collapse)的原因,并从实验角度说明了WGAN在这一点上的优越性。最后,针对生成分布与真实分布的距离和相关理论以及从Wasserstein距离推导而出的Lipschitz约束,也给了后来者更深层次的启发,如基于Lipschitz密度的 损失敏感GAN(loss sensitive GAN, LS-GAN)。

 

WGAN—GP 

虽然WGAN在理论上解决了训练困难的问题,但它也有各种各样的缺点。在理论上,由于对函数(即判别器)存在Lipschitz-1约束,这个条件难以在神经网络模型中直接体现,所以作者使用了权重剪枝(clip) 来近似替代Lipschitz-1约束。显然在理论上,这两个条件并不等价,而且满足Lipschitz-1约束的情况多数不满足权重剪枝约束。而在实验上,很多人认为训练失败是由权重剪枝引起的,如图3。对此Ishaan Gulrajani提出了梯度带梯度惩罚的WGAN(WGAN with gradient penalty, WGAN-GP)[5],将Lipschitz-1约束正则化,通过把约束写成目标函数的惩罚项,以近似Lipschitz-1约束条件。

图3 WGAN与WGAN-GP的权重分布情况

因而,WGAN的目标函数可以写作

其中prpg之间的线性采样,即满足。此外,生成器的目标函数与WGAN相同,取第二项进行优化即可。


WGAN-GP的贡献在于,它用正则化的形式表达了对判别器的约束,也为后来GAN的正则化模型做了启示。此外WGAN-GP基本从理论和实验上解决了梯度消失的问题,并且具有强大的稳定性,几乎不需要调参,即在大多数网络框架下训练成功率极高。


LSGAN

虽然WGAN和WGAN-GP已经基本解决了训练失败的问题,但是无论是训练过程还是是收敛速度都要比常规 GAN 更慢。受WGAN理论的启发,Mao 等人提出了最小二乘GAN (least square GAN, LSGAN)[6]。LSGAN的一个出发点是提高图片质量。它的主要想法是为判别器D提供平滑且非饱和梯度的损失函数。这里的非饱和梯度针对的是朴素GAN的对数损失函数。显然,x越大,对数损失函数越平滑,即梯度越小,这就导致对判别为真实数据的生成数据几乎不会有任何提高。针对于此,LSGAN的判别器目标函数如下:

生成器的目标函数如下:

这里a, b, c满足b − c = 1b − a = 2。根据[6],它等价于f散度中的散度,也即是说,LSGAN用散度取代了朴素GAN的Jensen-Shannon散度。


最后,LSGAN的优越性在于,它缓解了GAN训练时的不稳定,提高了生成数据的质量和多样性,也为后面的泛化模型f-GAN提供了思路。


 f-GAN

由于朴素GAN所代表的Jensen-Shannon散度和前文提到的LSGAN所代表的散度都属于散度的特例,那么自然而然地想到,其它f散度所代表的GAN是否能取得更好的效果。实际上,这些工作早已完成[7],时间更是早过WGAN与LSGAN。甚至可以认为,是f-GAN开始了借由不同散度来代替Jensen-Shannon散度,从而启示了研究者借由不同的距离或散度来衡量真实分布与生成分布。首先衡量p(x), q(x)f散度可以表示成如下形式:

其中下半连续映射,通过各种特定的函数f,可以得到不同的散度。其结果如表1所示:

表1 f-GAN中基于不同散度的结果

此外,f-GAN还可以得到如下的泛化模型,其目标函数如下:

其中vw是判别器的输出函数,gf是最后一层的激活函数,f的共轭凸函数,以朴素GAN为例,当,时,上式即为朴素GAN的目标函数。


LS-GAN(损失敏感GAN)与GLS-GAN

与前文提到的LSGAN (least square GAN)不同,这里的LS-GAN是指Loss-Sensitive GAN,即损失敏感GAN。一般认为,GAN可以分为生成器G和判别器D。与之不同的是,针对判别器D,LS-GAN想要学习的是损失函数,要求在真实样本上尽可能小,在生成样本上尽可能大。由此,LS-GAN基于损失函数的目标函数为:

生成器的目标函数为:

此处∆(x, zG )是来自约束假设(x) ≤ ( zG) − ∆(x,  zG),表示真实的样本要与生成样本间隔∆(x,zG)的长度,如此LS-GAN就可以将用于提高距离真实样本较远的样本上,可以更合理的发挥LS-GAN的建模能力。


此外,为了证明LS-GAN的收敛性,还做了一个基本的假设:要求真实分布限定在Lipschitz 密度上,即真实分布的概率密度函数建立在紧集上,并且它是Lipschitz连续的。通俗地说,就是要求真实分布的概率密度函数不能变化的太快,概率密度的变化不能随着样本的变化而无限地增大。


最后,Qi等人还对LS-GAN做了推广,将其扩展为GLS-GAN(Generalized LS-GAN)。所谓的GLS-GAN,就是将损失函数的目标函数扩展为:

此处C(a) = max{a, va},其中v∈ [−∞, 1]。可以证明,当v = 0时,GLS-GAN就是前文的LS-GAN。另外,当v = 1时,可以证明,GLS-GAN就是WGAN。所以,Qi认为,LS-GAN与WGAN都是GLS-GAN的一种特例。


EBGAN

朴素GAN提出将二分类器作为判别器以判别真实数据和生成数据,并将生成数据“拉向”生成数据。然而自从WGAN抛弃了二分类器这个观点,取以函数fw代替,并不将之局限在[0,1]之后,很多改进模型也采取了类似的方法,并将之扩展开来。例如LS-GAN以损失函数(x)作为目标,要求(x)在真实样本上尽可能小,在生成样本尽可能大。


基于能量的GAN(Energy-based GAN, EBGAN)则将之具体化了。它将能量模型以及其相关理论引入GAN,以“能量”函数在概念上取代了二分类器,表示对真实数据赋予低能量,对生成数据赋予高能量。


首先,EBGAN给出了它的目标函数

其中[∙]= max{0,∙},极大化LD的同时极小化LG。EBGAN的设计思想是,一方面减少真实数据的重构误差,另一方面,使得生成数据的重构误差趋近于m,即当D(G(z)) < m时,改下为正,对LD的极小化产生贡献,反之D(G(z)) ≥ mLD为0,会通过极小化LG,将D(G(z))拉向m。可以证明,当到达Nash均衡时,生成数据分布等于真实数据分布,并且此时LD的期望即


此外在EBGAN中,对D的结构也做了改进。不再采用DCGAN对D的网络框架或者其相似结构,EBGAN对D的架构采用自动编码器的模式,模型架构如图所示

图4 EBGAN模型架构

可以发现,其判别器或者说能量函数D可以写作

其中Enc,Dec是自编码器中的编码与解码操作。


最后,由于自编码器的特殊构造,EBGAN还针对LG做了特殊设计,即增加一个正则项fPT来避免模式崩溃(mode collapse)问题。设是一个batch的编码器(encoder)输出结果,fPT可以定义为

其思想很简单,利用一个批次的编码器输出结果计算余弦距离并求和取均值,若这一项越小,则两两向量越接近正交。从而解决模式崩溃问题,不会出现一样或者极其相似的图片数据。


BEGAN

以上的GAN在本质上的目标是让真实分布pr与生成分布pg尽量接近,大多数GAN之间可以解释成其区别在于衡量方式不同,比如朴素GAN的Jensen-Shannon散度,WGAN的Wasserstein距离,f-GANs的f散度等等。


特殊的是,边界平衡GAN(Boundary Equilibrium Generative Adversarial Networks, BEGAN)颠覆了这种思路,虽然它是基于WGAN与EBGAN上发展而来的。


首先,设D为判别函数,其结构采用上一节中EBGAN上的自编码器的模式,即

另外,设D(x)D(G(z))的分布,其中x即为输入的样本图片,G(z)为生成图片,那么真实分布pr与生成分布pg之间的Wasserstein距离如下

m1,m2的期望,根据Jensen不等式,有

由此,BEGAN的特殊性在于,它优化的不是真实分布pr与生成分布pg之间的距离,而是样本图片和生成图片下的判别函数的分布之间的Wasserstein下界。


要计算Wasserstein下界,就要最大化|m− m2|,显然它至少有两个解,极大化m1,极小化m2或者极大化m2,极小化m1,此处取后一种,即可从优化

Wasserstein下界的角度看待GAN下的优化,即

上式均取极小值,前者LD优化,极大化m2,极小化m1,由此计算Wasserstein下界;后者LG优化,极小化m2,由此优化Wasserstein下界。


当上述的GAN成功训练到达均衡点,显然有:

当真实分布pr与生成分布pg相等时,显然满足上式。但是在训练时,并不是两者完全重叠最佳,LS-GAN在设计时就有这种思想。同样,BEGAN在设计时选择通过超参∈ [0,1]来放宽均衡点

即生成样本判别损失的期望与真实样本判别损失的期望值之比。而此处之所以让判别器设计成自编码其的模式,是因为判别器有两个作用:1.对真实图片自编码;2. 区分生成图片与真实图片。超参的特殊之处在于,它能平衡这两个目标:值过低会导致图片多样性较差,因为判别器太过关注对真实图片自编码;反之,图片视觉质量则会不佳。


由此,可以BEGAN的目标函数如下

其中初始化为0,为学习率(learning rate)。


此外,BEGAN的另一个卓越效果是,它的网络结构极为简单,不需要ReLU,minbatch,Batch Normalization等非线性操作,但其图片质量远远超过与其结构相近的EBGAN。


改进模型的总结

前文除了DCGAN,其余的改进都是基于目标函数。如果不考虑InfoGAN,CGAN和Auto-GAN等当下流行的GAN模型,可以将针对目标函数的改进分为两种,正则化与非正则化。如图所示:

图5 基于loss改进的GAN的分类

一般认为,到目前为止,GLS-GAN有更好的建模能力。而GLS-GAN的两种特例LS-GAN和WGAN都是建立在Lipschitz连续函数空间中进行训练。而对判别器或损失函数而言,至今也尚未发现比Lipschitz约束更好的限制判别能力的条件,这也可能是今后研究的难点。

GAN的应用模型改进

以上对GAN的改进可以说是对GAN基础的改进。然而基础的GAN有时在实际中是不足以满足我们对生成数据的要求。例如,有时侯我们会要求生成指定的某类图像,而不是随意模拟样本数据,比如生成某个文字;有时我们要求对图像某些部分做生成替换,而不是生成全部的图像,比如消除马赛克。基于这些实际生活上的要求,GAN也需要对模型的结构做出调整,以满足生成我们需要的数据。


cGAN

如今在应用领域,绝大多数的数据是多标签的数据,而如何生成指定标签的数据就是条件GAN(conditional GAN,cGAN)在GAN模型上做的贡献。在基本的GAN模型中,生成器是通过输入一串满足某个分布的随机数来实现的(一般以均匀分布和高斯分布为主下,当然,改进后的GAN也有不以随机数作为生成器的输入值的,如CycleGAN等,此处暂不讨论),而在CGAN中,不仅要输入随机数,还需要将之与标签类别做拼接(concat,一般要将标签转换成如one-hot或其它的tensor),再将其输入生成器生成所需要的数据。此外,对判别器,也需要将真实数据或生成数据与对应的标签类别做拼接,再输入判别器的神经网络进行识别和判断,其目标函数如下:

其模型结构图如下:

图6 CGAN的结构图

 

InfoGAN

自cGAN被提出后,针对cGAN的后续工作,也有很多学者利用cGAN做了应用或者改进。如拉普拉斯GAN (Laplacian Generative Adversarial Networks, LAPGAN)结合了GAN与cGAN的原理,利用一个串联的网络,以上一级生成的图片作为条件变量,构成拉普拉斯金字塔(laplacian pyramid),从而生成从粗糙到精密的图片。


InfoGAN(MutualInformation)本质上也可以看作是一种cGAN。从出发点看,InfoGAN是基于朴素GAN改进的。它将原先生成器上输入的z进行分解,除了原先的噪声z以外,还分解出一个隐含编码c。其中c除了可以表示类别以外,还可以包含多种变量。以MNIST数据集为例,还可以表示诸如光照方向,字体的倾斜角度,笔画粗细等。InfoGAN的基本思想是,如果这个c能解释生成出来的G(z,c),那么c应该与G(z,c)由高度的相关性。在InfoGAN中,可以表示为两者的互信息,目标函数可以写作

然而在互信息I(c; G(z, c))的优化中,真实的P(c|x)很难计算,因此作者采用了变分推断的思想,引入了变分分布Q(c|x)来逼近P(c|x)

如此可以定义变分下界为

这样InfoGAN的目标函数可以写作

从模型结构上,可以表示成如下所示

图7 InfoGAN模型结构示意图

Q通过与D共享卷积层,计算花销大大减少。此外,Q是一个变分分布,在神经网络中直接最大化,Q也可以视作一个判别器,输出类别c。


InfoGAN的重要意义在于,它通过从噪声z中拆分出结构化的隐含编码c的方法,使得生成过程具有一定程度的可控性,生成结果也具备了一定的可解释性。


Pix2Pix

图像作为一种信息媒介,可以有很多种表达方式,比如灰度图、彩色图、素描图、梯度图等。图像翻译就是指这些图像的转换,比如已知灰度图,进而生成一张彩色照片。多年以来,这些任务都需要用不同的模型去生成。在GAN以及CGAN出现后,这些任务成功地可以用同一种框架来解决,即基于CGAN的变体——Pix2Pix。


Pix2Pix将生成器看作是一种映射,即将图片映射成另一张需要的图片,所以才将该算法取名为Pix2Pix,表示map pixels to pixels,即像素到像素的映射。这种观点也给了后来研究者改进的想法和启发。


因此,生成器输入除随机数z以外,将图片x(如灰度图,素描图等)作为条件进行拼接,输出的是转换后的图片(如照片)。而判别器输入的是转换后的图片或真实照片,特别之处在于,文章发现,判别器也将生成器输入的图片x作为条件进行拼接,会极大提高实验的结果,其结构图如下所示(此处结构图隐去了生成器的随机数z)

图8 Pix2Pix模型结构示意图

Pix2Pix的目标函数分为两部分,首先是基于CGAN的目标函数,如下式所示,

此外,还有生成的图像与原图一致性的约束条件

将之作为正则化约束,所以Pix2Pix的目标函数为

Pix2Pix成功地将GAN应用于图像翻译领域,解决了图像翻译领域内存在的众多问题,也为后来的研究者做了重要的启发。


CycleGAN

然而,Pix2Pix致命的缺点在于,Pix2Pix的训练需要相互配对的图片x与y,然而,这类数据是极度缺乏的,也为极大限制了Pix2Pix的应用。


对此,CycleGAN提出了不需要配对的数据的图像翻译方法。


设X,Y为两类图像,px,py为两类图像间的相互映射。CycleGAN由两对生成器和判别器组成,分别为若以wgan为基础,那么对Y类图像,有

同样,对X类图像,有

此外,Cycle以及CycleGAN中较为重要的想法循环一致性(Cycle-Consistent),这也是CycleGAN中Cycle这一名称的由来。循环一致性也可以看作是Pix2Pix一致性约束的演变进化,其基本思想是两类图像经过两次相应的映射后,又会变为原来的图像。因此,循环一致性可以写作

因此,优化问题可以写成

其中为常数。


CycleGAN的成功之处在于,他们用如此简单的模型,成功解决了图像翻译领域面临的数据缺乏问题。不需要配对的两个场景的相互映射,实现了图像间的相互转换,是图像翻译领域的又一重大突破。


StarGAN

由上所述,Pix2Pix解决了有配对的图像翻译问题,CycleGAN解决了无配对的图像翻译问题,然而无论是Pix2Pix又或者是Cycle,他们对图像翻译而言,都是一对一的,也即是一类图像对一类图像。然而涉及多类图像之间的转换,就需要CycleGAN进行一对一逐个训练,如图6(a)所示,显然这样的行为是极为低效的。


针对这种困境,StarGAN解决了这类问题。如下图所示,StarGAN希望能够通过一个生成器解决所有跨域类别问题。

图9 跨域模型(如CycleGAN等)与StarGAN

针对于此,StarGAN在生成器与判别器的设计以及模型结构上如下图所示:

图10 StarGAN模型结构示意图

模型中(a)-(d)的要求如下:

(a)D学会区分真实图像和生成图像,并将真实图像分类到其对应的域。因此,对D而言,实际上是由两部分组成的,即

(b)拼接目标标签与输入图片,将之输入G,并生成相应的图像;

(c)在给定原始域标签的情况下,G要尽量能重建原始图像。这与CycleGAN的循环一致性一脉相承;

(d)这一点与一般的GAN相同,G要尽量生成与真实图像相似的图像,但同时又尽量能被D区分出来。

从目标函数上来看,首先判别器的目标函数,要求满足GAN的结构,即

此外,还要就判别器能将真实图像分类到相应的域,

针对生成器,除了对应的GAN的结构外,还要求判别器能将生成图像分类到相应的域

此外,还要求尽量能重建原始图像

其中,c′为原始图像对应的类别。如此,可以得到判别器的目标函数

以及生成器的目标函数为

其中均为常数。


StarGAN作为CycleGAN的推广,将两两映射变成了多领域之间的映射,是图像翻译领域的又一重大突破。此外,StarGAN还可以通过实现多数据集之间的联合训练(比如将拥有肤色,年龄等标签的CelebA数据集和拥有生气、害怕等表情标签的RaFD数据集),将之训练到同一个模型,完成了模型的压缩,是图像翻译领域的一大突破。


GAN 的应用

GAN最直接的应用在于数据的生成,也就是通过GAN的建模能力生成图像、语音、文字、视频等等。而如今,GAN最成功的应用领域主要是计算机视觉,包括图像、视频的生成,如图像翻译、图像上色、图像修复、视频生成等。此外GAN在自然语言处理,人机交互领域也略有拓展和应用。本章节将从图像领域、视频领域以及人机交互领域分别介绍GAN的相关应用。


图像领域

例如,CycleGAN就是GAN在图像领域上的一种重要应用模型。CycleGAN以无需配对的两类图像为基础,可以通过输入一张哭脸将其转变为笑脸。StarGAN是CycleGAN的进一步扩展,一个类别与一个类别对应就要训练一次太过麻烦,我们不但需要把笑脸转化为哭脸,还需要把它转化为惊讶,沮丧等多种表情,而StarGAN实现了这种功能。


此外,很多的GAN技术也有将文字描述转换成图片,根据轮廓图像生成接近真实的照片等等功能。


视频领域

Mathieu[10]等人首先将GAN训练应用于视频预测,即生成器根据前面一系列帧生成视频最后一帧,判别器对该帧进行判断。除最后一帧外的所有帧都是真实的图片,这样的好处是判别器能有效地利用时间维度的信息,同时也有助于使生成的帧与前面的所有帧保持一致。实验结果表明,通过对抗训练生成的帧比其他算法更加清晰。


此外,Vondrick[11]等人在视频领域也取得了巨大进展,他们能生成32帧分辨率为64×64 的逼真视频,描绘的内容包括高尔夫球场、沙滩、火车站以及新生儿。经过测试,20%的标记员无法识别这些视频的真伪。


人机交互领域

Santana等人实现了利用GAN 的辅助自动驾驶。首先,生成与真实交通场景图像分布一致的图像,然后,训练一个基于循环神经网络的转移模型来预测下一个交通场景。


另外,GAN还可以用于对抗神经机器翻译,将神经机器翻译(neural machine translation, NMT)作为GAN 的生成器,采用策略梯度方法训练判别器,通过最小化人类翻译和神经机器翻译的差别生成高质量的翻译。


总结

GAN由于其强大的生成能力,正被广泛地研究与关注。目前,在学术领域,目前GAN训练指标,模式坍塌以及模型的生成能力的可解释性正受广泛的关注。最后,在拓展应用领域,由于生成的图片有较高的噪音,如何提高数据(图片或视频等)也是研究的一大热点。此外,GAN作为一种深度模型,也是解决自然语言处理(Natural Language Processing, NLP)天然的良好模型。如何将GAN应用在NLP领域也是下一步要解决的问题。



工业互联网操作系统




产业智能官  AI-CPS


用“人工智能赛博物理操作系统新一代技术+商业工业互联网操作系统“AI-CPS OS”:云计算+大数据+物联网+区块链+人工智能)在场景中构建状态感知-实时分析-自主决策-精准执行-学习提升的认知计算和机器智能;实现产业转型升级、DT驱动业务、价值创新创造的产业互联生态链


长按上方二维码关注微信公众号: AI-CPS



本文系“产业智能官”(公众号ID:AI-CPS)收集整理,转载请注明出处!



版权声明产业智能官(公众号ID:AI-CPS推荐的文章,除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,与您共同协商解决。联系、投稿邮箱:erp_vip@hotmail.com




登录查看更多
4

相关内容

在数学(特别是功能分析)中,卷积是对两个函数(f和g)的数学运算,产生三个函数,表示第一个函数的形状如何被另一个函数修改。 卷积一词既指结果函数,又指计算结果的过程。 它定义为两个函数的乘积在一个函数反转和移位后的积分。 并针对所有shift值评估积分,从而生成卷积函数。
深度学习目标检测方法及其主流框架综述
专知会员服务
143+阅读 · 2020年6月26日
【文献综述】深度学习目标检测方法及其主流框架综述
专知会员服务
114+阅读 · 2020年6月26日
最新《深度学习自动驾驶》技术综述论文,28页pdf
专知会员服务
153+阅读 · 2020年6月14日
基于深度学习的表面缺陷检测方法综述
专知会员服务
92+阅读 · 2020年5月31日
基于深度学习的手语识别综述
专知会员服务
45+阅读 · 2020年5月18日
最新《深度学习行人重识别》综述论文,24页pdf
专知会员服务
80+阅读 · 2020年5月5日
3D目标检测进展综述
专知会员服务
187+阅读 · 2020年4月24日
深度神经网络模型压缩与加速综述
专知会员服务
126+阅读 · 2019年10月12日
深度学习自然语言处理综述,266篇参考文献
专知会员服务
225+阅读 · 2019年10月12日
做目标检测,这一篇就够了!2019最全目标检测指南
机器学习算法与Python学习
30+阅读 · 2019年9月11日
深度学习详解
人工智能学家
5+阅读 · 2019年4月25日
深度学习目标检测算法综述
AI研习社
24+阅读 · 2019年2月1日
干货 | 基于深度学习的目标检测算法综述
AI科技评论
18+阅读 · 2018年9月1日
博客 | 基于深度学习的目标检测算法综述(二)
AI研习社
11+阅读 · 2018年8月22日
干货 | 基于深度学习的目标检测算法综述(二)
AI科技评论
21+阅读 · 2018年8月20日
深度学习时代的目标检测算法
炼数成金订阅号
39+阅读 · 2018年3月19日
综述:深度学习时代的目标检测算法
极市平台
26+阅读 · 2018年3月17日
好文 | 基于深度学习的目标检测技术演进
七月在线实验室
12+阅读 · 2018年1月31日
深度学习时代的目标检测算法综述
AI前线
10+阅读 · 2017年9月22日
TResNet: High Performance GPU-Dedicated Architecture
Arxiv
7+阅读 · 2020年3月30日
A Probe into Understanding GAN and VAE models
Arxiv
9+阅读 · 2018年12月13日
Arxiv
8+阅读 · 2018年11月21日
The Matrix Calculus You Need For Deep Learning
Arxiv
11+阅读 · 2018年7月2日
Arxiv
10+阅读 · 2018年3月23日
Arxiv
10+阅读 · 2017年12月29日
VIP会员
相关VIP内容
深度学习目标检测方法及其主流框架综述
专知会员服务
143+阅读 · 2020年6月26日
【文献综述】深度学习目标检测方法及其主流框架综述
专知会员服务
114+阅读 · 2020年6月26日
最新《深度学习自动驾驶》技术综述论文,28页pdf
专知会员服务
153+阅读 · 2020年6月14日
基于深度学习的表面缺陷检测方法综述
专知会员服务
92+阅读 · 2020年5月31日
基于深度学习的手语识别综述
专知会员服务
45+阅读 · 2020年5月18日
最新《深度学习行人重识别》综述论文,24页pdf
专知会员服务
80+阅读 · 2020年5月5日
3D目标检测进展综述
专知会员服务
187+阅读 · 2020年4月24日
深度神经网络模型压缩与加速综述
专知会员服务
126+阅读 · 2019年10月12日
深度学习自然语言处理综述,266篇参考文献
专知会员服务
225+阅读 · 2019年10月12日
相关资讯
做目标检测,这一篇就够了!2019最全目标检测指南
机器学习算法与Python学习
30+阅读 · 2019年9月11日
深度学习详解
人工智能学家
5+阅读 · 2019年4月25日
深度学习目标检测算法综述
AI研习社
24+阅读 · 2019年2月1日
干货 | 基于深度学习的目标检测算法综述
AI科技评论
18+阅读 · 2018年9月1日
博客 | 基于深度学习的目标检测算法综述(二)
AI研习社
11+阅读 · 2018年8月22日
干货 | 基于深度学习的目标检测算法综述(二)
AI科技评论
21+阅读 · 2018年8月20日
深度学习时代的目标检测算法
炼数成金订阅号
39+阅读 · 2018年3月19日
综述:深度学习时代的目标检测算法
极市平台
26+阅读 · 2018年3月17日
好文 | 基于深度学习的目标检测技术演进
七月在线实验室
12+阅读 · 2018年1月31日
深度学习时代的目标检测算法综述
AI前线
10+阅读 · 2017年9月22日
Top
微信扫码咨询专知VIP会员