目录
理解图像内容以及图像含义方面,计算机遇到了很大困难。本章先介绍计算机理解图像教育方面 遇到的难题,接着重点讲解一个基于深度学习的解决方法。我们会学习配置深度学习模型的高层 次理论,并且讨论如何使用一个Java库------Deeplearning4j实现对图像进行分类的模型。
本章涵盖如下内容:
图像识别简介
讨论深度学习基础
创建一个图像识别模型
图像识别简介
图像识别的典型目标是从一幅数字图像中检测并识别一个对象。图像识别可以应用于工厂自 动化系统,以监督产品质量;也可以应用于监控系统,以识别潜在的危险行为,比如行人或移动 的车辆;还可以应用到=于安保系统,以通过指纹、虹膜、面部特征进行生物特征识别;以及应 用于汽车自动驾驶技术,以重建路面与环境条件等。
数字图像不以带有属性描述的结构化方式呈现,相反,它们会被编码为不同通道中的颜色数 量,比如黑白与红绿蓝通道。学习的目标是识别与特定对象相关联的模式。传统的图像识别 方法是,将一幅图像转换为不同形式,比如识别对象的角点、边缘、同色斑点与基本形状。然后 使用这些模式训练学习器,使之能够区分不同对象。下面列出了一些有名的传统图像识别算法。
边缘检测:查找一幅图像中对象的边界。
角点检测:识别两条边的交叉点或者其他感兴趣的点,比如行尾结束符号、曲率极大值/ 极小值等。
斑点检测:识别与周边区域有不同特征的区域,比如亮度、颜色。
岭检测:使用平滑函数识别图像中的兴趣点。
尺度不变特征变换(SIFT):这个算法十分强大,即使目标对象大小或方向与比对数据库 中的典型样本不同,它依然能够匹配目标对象。
霍夫变换(Hough transform):识别图像中的特定模式。
目前,图像识别使用的最新方法是深度学习技术。深度学习是神经网络的一种,它模仿了大 脑处理信息的方法。深度学习的主要优点是,我们可以设计神经网络自动提取相关模式,这些模 式反过来用于训练学习器。随着神经网络技术最新取得进展,图像识别精度得到了明显提升。比 如,ImageNet挑战赛(ImageNet,2016)中,主办方提供了120万张图像,这些图像分别来自1000 个不同分类,最佳算法的错误率由28%(2010年,利用SVM)降低到7%(2014年,利用深度神 经网络)。
本章将简单了解神经网络,从最基本的构建块------感知器开始,逐渐引入更复杂的结构。
神经网络
神经网络最早出现在20世纪60年代,其灵感来自生物神经网络的研究。神经网络最新研究成 果表明,深度神经网络非常适合用于模式识别任务,因为它们能够自动提取有趣特征,并且学习 底层表示。这部分内容中,我们将学习从单个感知器到深度网络的基本结构与组件。
感知器
感知器是神经网络最基本的构建单元,也是最早的监督算法之一。它定义为,用权值对输入 进行加权并加上偏置。求和函数称为"和传递函数"(sum transfer function),它被送到一个激 活函数(activation function)。如果激活函数到达阈值,输出为1,否则为0。这就为我们提供了 一个二元分类器。感知器神经元模型如图
训练感知器使用的学习算法相当简单:先在计算输出值与正确的训练输出值之间计算误差, 然后根据误差调整权重,从而实现某种形式的梯度下降算法。这个算法通常称为delta规则。
单层感知器不是很先进,非线性可分函数(比如XOR)不能用它建模。为了解决这个问题, 人们引入了多个感知器结构,称为多层感知器,也叫前馈神经网络。
前馈神经网络
前馈神经网络是由多个感知器组成的人工神经网络,这些感知器按层组织,可分为:输入层、 输出层、一个或多个隐藏层,如图所示。每层感知器(也叫神经元)与下层感知器直接相连, 两个神经元之间的连接带有一个权重,类似于感知器权重。图8-2显示的是一个带有四元输入层 的网络(对应于长度为4的特征向量)、四元隐藏层,以及二元输出层,每元对应于一个类值。
训练多层网络最流行的方法是反向传播算法。这种算法中,采用与delta规则一样的方式,将 计算得到的输出值与实际输出值进行比较。然后借助各种技术,通过网络反馈误差,调整每个连 接的权重,以便减小误差值。这个过程不断重复,达到足够多的训练周期,直到错误少于某个特 定阈值。
前馈神经网络可以拥有一个以上的隐藏层,每一个新增隐藏层在先前层之上创建一个新的抽 象。这样做通常可以让模型变得更精确,但增加隐藏层数目会导致如下两个问题。
消失的梯度问题:随着隐藏层的增多,将信息传递到先前层时,反向传播训练方法变得 越来越无用,这会导致先前层训练很慢。
过拟合:模型对训练数据拟合过度,对于真实样本表现糟糕。
接下来,了解用来处理这些问题的其他网络结构。
自动编码器
自动编码器(Autoencoder)是一种前馈神经网络,其目标是学习如何压缩原数据集。我们不 是将特征映射到输入层以及将标签映射到输出层,而是将特征同时映射到输入与输出层。隐藏层 的元数与输入层的元数通常是不同的,这会强制网络要么扩展,要么减少原特征的数量。借助这种方式,网络会学习那些重要特征,进而有效进行维数缩减。
图是一个自动编码器的例子。如图所示,首先三元输入层扩展为四元层,然后压缩成一 元层。在网络的另一侧将一元层恢复为四元层,然后再恢复为原来的三元输入层。
一旦网络训练好之后,我们就可以利用左侧网络提取图像特征,就像我们在传统图像处理中 所做的那样。
还可以将多个自动编码器组成堆叠式自动编码器,如图8-4所示。前面已经对最基本的自动 编码器做了讲解,这里要讨论其隐藏层。然后,选取学好的隐藏层(圆圈),并且重复这个步骤, 学习更多的抽象表示。可以多次重复这个过程,将原特征转换为越来越少的维数。最后,选择所 有隐藏层,将其堆叠为一个规则的前馈网络,如图
受限玻尔兹曼机
受限玻尔兹曼机(Restricted Boltzman machine,RBM)是一种无向神经网络,也称为生成式随机神经网络(Generative Stochastic Networks,GSN),它能够在输入集之上学习概率分布。 顾名思义,它起源于玻尔兹曼机(Boltzman machine),这是一种20世纪80年代出现的循环神经网 络。"受限"是指神经元必须组成两个全连接层------输入层与隐藏层,如图
不同于前馈网络,可见层与隐藏层之间的连接是无向的。
因此,值可以沿着"可见隐藏" 与"隐藏可见"方向传播。 受限玻尔兹曼机的训练基于对比散度算法(Contrastive Divergence),使用类似反向传播的 梯度下降过程更新权重,将吉布斯采样(Gibbs sampling)应用到马尔可夫链以评估梯度------权 重的改变方向。
我们也可以堆叠受限玻尔兹曼机,形成深度信念网络(Deep Belief Networks,DBN)。此情 形之下,RBM的隐藏层充当RBM层的可见层,如图
训练是渐进式的,即逐层训练。
深度卷积网络
最近,在图像识别测试中取得很好效果的一种网络结构是卷积神经网络(Convolutional Neural Network,CNN)。它是前馈神经网络的一种,模拟视觉皮层的行为,用于探索输入图像 的2D结构,即展现空间局部相关性的模式。
CNN网络由若干卷积与子采样层组成,后面可以有全连接层。图8-7显示的是一个CNN网络。 输入层读取一幅图像中的所有像素,然后应用多个过滤器。图中应用了4个不同的过滤器。每个 过滤器都应用到原图像,比如一个6×6过滤器的一个像素被计算为输入像素的6×6平方与相应的 6×6权重之和。这实际引入了与处理标准图像类似的过滤器,比如平滑、相关、边缘检测等。这 样产生的结果图像称为特征图(feature map)。
图像例子中,我们有4个特征图,每一个对应一 个过滤器。 接下来的层是子采样层,它用于减少输入大小。在2×2的连续区域上(大图像高达5×5), 通常采用平均值或最大池化(max pooling)方法,对每个特征图做子采样。比如,如果特征图大 小是16×16,子采样区域是2×2,缩减后的特征图尺寸是8×8,通过计算最大、最小、平均值或 者用其他函数,将4个像素(2×2方格)合并成一个像素。
网络可以包含几个连续卷积与子采样层,如图所示。一个特定的特征图会被连接到下一 个缩减/卷积特征图,而相同层上的特征图不会彼此相连。
在最后的子采样层或卷积层之后,通常会有一个全连接层(与标准多层神经网络中的层完全 相同),表示目标数据。
CNN训练采用修改过的反向传播算法,它会把子采样层也一起考虑进来,并且基于所有应用 过滤器的值更新卷积过滤器的权重。
至此,我们大致了解了主要的神经网络结构。接下来,我们将学习如何实际实现。