基于深度学习的图像识别模型研究综述
基于深度学习的图像识别模型研究综述
摘要:深度学习是机器学习研究中的一个新的领域,其目的在于训练计算机完成自主学习、判断、决策等人类行为并建立、模拟人脑进行分析学习的神经网络,它模仿人类大脑的机制来解释数据,例如图像,声音和文本。本文从图像识别背景入手,针对深度学习在图像识别领域中的不同处理方法及模型的发展进行介绍。
关键词: 深度学习;图像识别;神经网络
Abstract: Deep learning is a new field in machine learning research, the purpose of which is to train computers to complete human behaviors such as autonomous learning, judgment, and decision-making, and to build and simulate neural networks that analyze and learn from the human brain. Interpret data such as images, sounds, and text. Starting from the background of image recognition, this article introduces the development of different processing methods and models of deep learning in the field of image recognition.
Key words: deep learning ;image recognition ;neural network
一、图像识别概述
图像识别也就是图像的模式识别,是模式识别技术在图像领域中的具体应用,是对输入的图像信息建立图像识别模型,分析并提取图像的特征,然后建立分类器,根据图像的特征进行分类识别的一种技术。图像识别的常用方法有:贝叶斯分类法、模板匹配法等。贝叶斯分类法,是假设图像的特征之间独立并计算特征的后验概率来对图像进行分类模板匹配法,是将样本特征与特定的模板比较,根据相似度判断是否同类。但由于贝叶斯定理假设一个属性值对给定类的影响独立于其它属性的值,而此假设在实际情况中经常是不成立的,因此其分类准确率可能会下降。模板匹配法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物。但模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效。而基于深度学习的图像识别方法,是使用大规模深层次卷积神经网络模型从海量数据集中自动学习图像特征,并泛化到实际识别场景中。其通过模拟人类的大脑皮层,采用多层非线性方式处理、逐级提取以及逐层建立映射的方式使复杂的工作简单化。
二、深度学习
提到人工智能,人们往往会想到深度学习,深度学习又称为deep Learming,是机器学习的一个子集,机器学习又是人工智能的一个子集,深度学习近年来的发展是突飞猛进的,人工智能的应用也越来越多。深度学习其本质是在模拟人类大脑神经元以及大脑的工作原理,是一个可以模拟人类大脑进行分析和学习的神经网络,它通过模仿人类大脑的工作机制来解释数据(如图像、文本和声音),深度学习通过将简单的低层次特征进行组合,形成更加抽象更为复杂的高层次特征,来拟合人们日常生活中的各种事情。深度学习被广泛用于人们息息相关的各种领域,可以实现机器翻译、人脸识别、语音识别、信号恢复、商业推荐、金融分析、医疗辅助和智能交通等,早期深度学习领域内的研究人员更多受到人类大脑工作原理的启发,但现代深度学习的发展有了自身的特点,模拟人脑不再是主导方向,已经超越了神经科学的观点。
深度学习是一门新的技术科学,但实际上目前大家所熟悉的“深度学习”基本上是深层神经网络的代名词,而早期神经网络的发展可以追溯到上个世纪40年代,深度学习的发展历史主要可以分为三个阶段,从BP算法的提出到2006年这段期间被称作萌芽期;1896年,辛顿和鲁梅哈特共同提出了BP后向传播算法,解决了当时双层网络难以训练的问题,使得神经网络进入了实用阶段,但是,随着神经网络的层数加深,研究员们发现了BP算法存在着一个缺点,在计算梯度时发生了不稳定的情况,直白来说就是离输出层越远的参数就越难以训练,要么变化非常大,要么就不发生变化,这种问题后来被称作梯度爆炸或者梯度消失,通过研究发现,随着层数递增,出现梯度爆炸或者梯度消失的情况就越明显。除了层数的限制,参数过多也成了神经网络的问题之一,对计算机的能力也提出了要求,加之那个年代很多问题的训练数据都不大,模型容易发生过拟合,泛化能力很差,除了参数的问题之外,因为BP算法本身依赖于梯度,所以神经网络在训练时容易陷入局部最小值而不能达到全局最小值,这也是存在的一个大问题。在进入二十世纪九十年代后,神经网络的发展变的相对缓慢,由于新的机器学习算法支持向量机SVM(Support Vector Machine)被提出,SVM在解决当时手写体识别等问题上成功打败了其他的浅层神经网络,在当时SVM相比其他的浅层神经网络,具有调参简单、全局最优、泛化能力强等优点,很快就成了研究的主流对象,神经网络再一次受到了冷落。
在2006到2012年期间,是深度学习的迅速发展期,在2006年,号有深度学习之父之称的Hinton教授提出了深度信念网络吗,一举打败了风光已久的SVM,这让许多研究者的目光重新回到了神经网络,并提出了“深度学习”概念和深度学习的训练方法,揭开了深度学习发展的序幕;自2012年后到今天,深度学习进入了爆发期,2012年由Hilton教授的学生提出的AlexNet 模型在Imagenet竞赛中取得了冠军,并且效果在很大程度上超过了传统的方法,经过将近十年的发展,深度学习逐渐出现了以卷积神经网络、深度置信网络、栈式自编码网络和循环神经网络为代表的模型四。现在世界各大互联网公司已经成立了专门进行深度学习工程化的研究部门,其中国外的代表公司有谷歌、微软,国内有百度和科大讯飞,均已经在语音识别、图像检索、机器翻译等领域上取得了很好的效果。
机器学习是实现人工智能的一种重要途径,而深度学习又是机器学习中极为有效的一种方法叫。以目标检测为例,基于区域选择和人工特征提取的传统方法大大增加了计算量,耗时而且无法满足实时性的要求,并且识别误差明显过大,因此传统方法遇到了瓶颈。然而,深度学习以其强大的模型表达和特征提取的能力,使精确度和实时性取得了跨越式提升,推动了目标检测领域的变革。
从宏观角度讲,深度学习中的“深度”即神经网络的层数之深,如图1.1所示,最常见的人工神经网络由输入层、隐含层和输出层构成,最左边的是输入层,其中包含输入神经元,最右边是输出层,其中包含有输出神经元,中间层就是隐含层。这种以上一层的输出作为下一层的输入,并且上一层神经元与先下一层神经元均有联系的网络,即为前馈全连接神经网络,也是最基本的神经网络。深度学习又称为深度神经网络,所以网络中隐含层的层数较大,少者数十层,多者数百层,这种结构有利于从原始数据中自主、有效的学习到复杂特征。以卷积神经网络为例,一般来讲,卷积神经网络层数越深,模型从数据中学习到的特征越复杂,识精确度越高。
深度学习中的“学习”也是核心问题之一,简单来讲,即为自动的将简单的特征组合成更加复杂的特征,并利用这些组合特征解决问题。以卷积神经网络为例,深度学习可以从图像的像素特征逐渐组合线、边、角、简单形状、复杂形状等更加有效的复杂特征。出学习的过程即为权重更新过程,通过正向传播和反向传播的结合,以损失函数的渐小为目标,不断沿着梯度的反方向更新权重的大小,直至模型合适。学习过程中,采用**函数去除模型线性化,引入正则化防止模型过拟合,以及采用梯度下降算法、学习率衰减算法等方法对学习过程进行优化。
图1.1前馈全连接神经网络
三、深度学习在图像识别中的发展
1.卷积神经网络(CNN)
卷积神经网络的结构和传统的神经网络有很多的相似之处:阈值、前向传播、计算残差、反向传播,直到残差收敛且满足精度需求。其基本结构包括卷积层、池化层和全连接层。卷积层实质上是通过卷积核计算后的网络层。卷积核是利用卷积层计算的重要组成部分,通过卷积层的运算,把原图像转换到超平面坐标系下,超平面能最大程度上集中同类图像。在前向传播的过程中,每个卷积核进行卷积计算,生成一个2维的特征图,通过一定的网络训练,将这些卷积结果**图进行叠加,便可得出结果。池化层也称为下采样层,利用卷积层处理过的数据作为输入来进行池化操作对结果进行一定的压缩,以降低数据的空间尺寸,减少参数数量,进而可以提高计算效率,有效控制过拟合。全连接层在卷积神经网络的最后会把卷积输出的二维特征图转化成一维的一个向量,以提高特征提取的纯度,更方便的交给最后的分类器或者回归。
2.LeNet-5模型
图2 LeNet-5网络结构
深度学习的兴起源于深度神经网络的崛起,1989年,被世界公认的人工智能三大巨头之一的Yann LeCun教授提出了LeNet网络结构,这是卷积神经网络的鼻祖,接着在1998年,他又提出了新的LeNet结构,即LeNet-5,当时LeNet-5用于解决手写数字识别问题,输入的图片均为单通道灰度图,分辨率为28×28,在MNIST数据集上,LeNet-5达到了大约99.2%的正确率,LeNet-5模型总共7层(不包括输入层),由两个卷积层,两个下采样(池化)层,三个全连接层组成,最后通过输出全连接层输出10个概率值,对应0~9的预测概率,其网络结构如图2所示。每层都有训练参数,输入图像大小为32×32(像素),卷积窗口大小为5×5(像素),卷积核在二维平面上平移,并且卷积核的每个元素与被卷积图像对应位置相乘,再求和。通过卷积核的不断移动可得出完全由卷积核在各个位置时的乘积求和的结果组成的图像。经过池化和全连接层后,其采用滑动卷积窗口的方法对输入图像进行卷积。
3.AlexNet
AlexNet在2012年ImageNet竞赛中以超过第二名10.9个百分点的绝对优势一举夺冠,从此深度学习和卷积神经网络名声鹊起,深度学习的研究如雨后春笋般出现。相比LeNet,AlexNet设计了更深层的网络。AlexNet针对的是1000类的分类问题,输入图片规定是256×256的三通道彩色图片,为了增强模型的泛化能力,避免过拟合,作者使用了随机裁剪的思路对原来256×256的图像进行随机裁剪,得到尺寸为3×224×224的图像,输入到网络训练。
图2 AlexNet网络结构
如图2是AlexNet的结构图,其中有5个卷积层和3个全连接层,中间穿插着池化操作。除去卷积、池化、全连接操作外,本模型还有以下几点优化:
(1)ReLU作为**函数
模拟神经元输出的标准函数一般是:tanh(x)或者sigmoid(x)函数(也称为饱和函数);而f(x)=max(0,x)是一种非线性的非饱和函数。这种扭曲线性函数,不但保留了非线性的表达能力,而且由于其具有线性性质(正值部分),相比前者在误差反向传递时,不会有由于非线性引起的梯度弥散现象, 因此ReLU作为**函数可以训练更深的网络。
(2)多GPU并行训练
因为使用多GPU训练,所以可以看到第一层卷积层后有两个完全一样的分支,以加速训练。事实证明,120万个训练样本才足以训练网络,但这对于一个GPU的工作能力而言是不可能顺利完成的。所以AlexNet模型将网络分布在两个GPU上。即每个GPU中放置一半核(或神经元)。这种结构降低了错误率,提高了图像识别效率,减少了大量的训练时间。
(3)局部反应归一化(LRN)
利用临近的数据做归一化。这个策略贡献了1.2%的Top-5错误率。Dropout和LRN 技术使网络的去过拟合能力更强,保证了卷积神经网络的学习能力和泛化性能。
4.ZF_Net
ZF_Net是2013ImageNet分类任务的冠军,其网络结构没什么改进,只是调了调参,性能较Alex提升了不少。ZF-Net只是将AlexNet第一层卷积核由11变成7,步长由4变为2,第3,4,5卷积层转变为384,384,256。这一年的ImageNet还是比较平静的一届,其冠军ZF-Net的名堂也没其他届的经典网络架构响亮。其网络结构如图4所示。
图4 ZF_Net网络结构
5.VGG_Nets
VGG-Nets是由牛津大学VGG(Visual Geometry Group)提出,是2014年ImageNet竞赛定位任务的第一名和分类任务的第二名的中的基础网络,分类任务当时的第一名是GoogleNet。VGG可以看成是加深版本的AlexNet. 都是conv layer+FC layer,因为层数高达十多层,在当时看来这是一个非常深的网络了。图5描述了VGG网络结构及诞生过程。为了解决初始化(权重初始化)等问题,VGG采用的是一种Pre-training的方式,这种方式在经典的神经网络中经常见得到,就是先训练一部分小网络,然后再确保这部分网络稳定之后,再在这基础上逐渐加深。图5从左到右体现的就是这个过程,并且当网络处于D阶段的时候,效果是最优的,因此D阶段的网络也就是VGG-16了。E阶段得到的网络就是VGG-19了。VGG-16的16指的是conv+fc的总层数是16,是不包括max_pool的层数。
图5 VGG诞生过程
图6 VGG-16网络结构
由图6看出,VGG-16的结构非常整洁,深度较AlexNet深得多,里面包含多个conv->conv->max_pool这类的结构,VGG的卷积层都是same的卷积,即卷积过后的输出图像的尺寸与输入是一致的,它的下采样完全是由max_pooling来实现。VGG网络后接3个全连接层,filter的个数(卷积后的输出通道数)从64开始,然后每接一个pooling后其成倍的增加,128、512、VGG的注意贡献是使用小尺寸的filter,及有规则的卷积-池化操作。此外,VGG-Nets在卷积设计上,使用了更小的1×1和3×3的卷积核,验证了小尺寸的卷积核在深度网络中,不仅减少了参数,也达到了更好的效果。
6. GoogLeNet
GoogLeNet在2014的ImageNet分类任务上击败了VGG-Nets夺得冠军,GoogLeNet跟AlexNet,VGG-Nets这种单纯依靠加深网络结构层数进而改进网络性能的思路不一样,它另辟蹊径,在加深网络的同时(22层),也在网络结构上做了创新,引入Inception结构代替了单纯的卷积+**的传统操作(这思路最早由Network in Network提出)。通过多个卷积核提取图像不同尺度的信息,最后进行融合,可以得到图像更好的表征。GoogLeNet基于Network in Network(网中网)的思想,对卷积核进行改进,将原来的线性卷积层(linear convolution layer)变为多层感知卷积层(multilayer perceptron),使得卷积核具有更强的特征提取能力,同时使用全局平均池化层(Average pool)(即将图片尺寸变为1X1)来取代最后全连接层,去掉了全连接层使得参数大量减少,也减轻了过拟合。图7是Inception结构。Inception一直在不断发展,目前已经V2、V3、V4了。
图7 Inception结构
上图结构就是Inception,结构里的卷积stride都是1,另外为了保持特征响应图大小一致,都用了零填充。最后每个卷积层后面都立刻接了个ReLU层。在输出前有个叫concatenate的层,直译的意思是“并置”,即把4组不同类型但大小相同的特征响应图一张张并排叠起来,形成新的特征响应图。Inception结构里主要做了两件事:
1. 通过3×3的池化、以及1×1、3×3和5×5这三种不同尺度的卷积核,一共4种方式对输入的特征响应图做了特征提取。
2. 为了降低计算量。同时让信息通过更少的连接传递以达到更加稀疏的特性,采用1×1卷积核来实现降维。
GoogLeNet网络结构中有3个LOSS单元,这样的网络设计是为了帮助网络的收敛。在中间层加入辅助计算的LOSS单元,目的是计算损失时让低层的特征也有很好的区分能力,从而让网络更好地被训练。在论文中,这两个辅助LOSS单元的计算被乘以0.3,然后和最后的LOSS相加作为最终的损失函数来训练网络。此外GoogLeNet还有一个闪光点值得一提,那就是将后面的全连接层全部替换为简单的全局平均pooling,在最后参数会变的更少。而在AlexNet中最后3层的全连接层参数差不多占总参数的90%,使用大网络在宽度和深度允许GoogleNet移除全连接层,但并不会影响到结果的精度,在ImageNet中实现93.3%的精度,而且要比VGG还要快。
7. ResNet
2015年何恺明推出的ResNet,其层数非常深,已经超过百层,在ISLVRC(ImageNet大规模视觉识别挑战赛)和COCO上横扫所有选手,获得冠军。ResNet在网络结构上做了大创新,而不再是简单的堆积层数,ResNet在卷积神经网络的新思路,即引入残差单元来解决退化问题,绝对是深度学习发展历程上里程碑式的事件。
图8 网络退化
从前面可以看到,随着网络深度增加,网络的准确度应该同步增加,当然要注意过拟合问题。但是网络深度增加的一个问题在于这些增加的层是参数更新的信号,因为梯度是从后向前传播的,增加网络深度后,比较靠前的层梯度会很小。这意味着这些层基本上学习停滞了,这就是梯度消失问题。深度网络的第二个问题在于训练,当网络更深时意味着参数空间更大,优化问题变得更难,因此简单地去增加网络深度反而出现更高的训练误差,深层网络虽然收敛了,但网络却开始退化了,即增加网络层数却导致更大的误差,比如图8所示,一个56层的网络的性能却不如20层的性能好,这不是因为过拟合(训练集训练误差依然很高),而是退化问题。残差网络ResNet设计一种残差模块让我们可以训练更深的网络。图9所示为残差模块
图9 残差模块
从上图可以看出,数据经过了两条路线,一条是常规路线,另一条则是捷径(shortcut),直接实现单位映射的直接连接的路线,这有点类似与电路中的“短路”。通过实验,这种带有shortcut的结构确实可以很好地应对退化问题。我们把网络中的一个模块的输入和输出关系看作是y=H(x),那么直接通过梯度方法求H(x)就会遇到上面提到的退化问题如果使用了这种带shortcut的结构,那么可变参数部分的优化目标就不再是H(x),若用F(x)来代表需要优化的部分的话,则H(x)=F(x)+x,也就是F(x)=H(x)-x。因为在单位映射的假设中y=x就相当于观测值,所以F(x)就对应着残差,因而叫残差网络。图10展示了两种形态的残差模块。
图10 残差模块
图10中的左图是常规残差模块,有两个3×3卷积核组成,但是随着网络进一步加深,这种残差结构在实践中并不是十分有效。针对这问题,右图的“瓶颈残差模块”(bottleneck residual block)可以有更好的效果,它依次由1×1、3×3、1×1这三个卷积层堆积而成,这里的1×1的卷积能够起降维或升维的作用,从而令3×3的卷积可以在相对较低维度的输入上进行,以达到提高计算效率的目的。
8. DenseNet
自Resnet提出以后,ResNet的变种网络层出不穷,都各有其特点,网络性能也有一定的提升。DenseNet是CVPR(国际计算机视觉与模式识别会议)2017年的最佳论文,论文中提出的DenseNet(Dense Convolutional Network)主要还是和ResNet及Inception网络做对比,思想上有借鉴,但却是全新的结构,网络结构并不复杂,却非常有效,在CIFAR指标上全面超越ResNet。可以说DenseNet吸收了ResNet最精华的部分,并在此上做了更加创新的工作,使得网络性能进一步提升。
DenseNet 是一种具有密集连接的卷积神经网络。在该网络中,任何两层之间都有直接的连接,也就是说,网络每一层的输入都是前面所有层输出的并集,而该层所学习的特征图也会被直接传给其后面所有层作为输入。下图11是 DenseNet 的一个dense block示意图。
图11 dense block图
一个block里面的结构如下,与ResNet中的BottleNeck基本一致:BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3),而一个DenseNet则由多个这种block组成。每个DenseBlock的之间层称为transition layers,由BN−>Conv(1×1)−>averagePooling(2×2)组成。需要明确一点,dense connectivity仅仅是在一个dense block里的,不同dense block之间是没有dense connectivity的,如图12所示。
图12 多个dense block
密集连接这个词给人的第一感觉就是极大的增加了网络的参数量和计算量。但实际上DenseNet 比其他网络效率更高,其关键就在于网络每层计算量的减少以及特征的重复利用。DenseNet则是让l层的输入直接影响到之后的所有层,它的输出为:xl=Hl([X0,X1,…,xl−1]),其中[x0,x1,...,xl−1]就是将之前的
feature map以通道的维度进行合并。并且由于每一层都包含之前所有层的输出信息,因此其只需要很少的特征图就够了,这也是为什么DneseNet的参数量较其他模型大大减少的原因。这种dense connection相当于每一层都直接连接input和loss,因此就可以减轻梯度消失现象,这样更深网络不是问题。天底下没有免费的午餐,网络自然也不例外。在同层深度下获得更好的收敛率,自然是有额外代价的。其代价就是巨大的内存占用。
9. SENet
Squeeze-and-Excitation Networks(简称 SENet),中文可以翻译为压缩和激励网络是 Momenta 胡杰团队(WMW)提出的新的网络结构,利用SENet,一举取得最后一届 ImageNet 2017 竞赛 Image Classification 任务的冠军,在ImageNet数据集上将top-5 error降低到2.251%,原先的最好成绩是2.991%。。SENet主要由两部分组成:
1. Squeeze部分。即为压缩部分,原始feature map的维度为H*W*C,其中H是高度(Height),W是宽度(width),C是通道数(channel)。Squeeze做的事情是把H*W*C压缩为1*1*C,相当于把H*W压缩成一维了,实际中一般是用global average pooling实现的。H*W压缩成一维后,相当于这一维参数获得了之前H*W全局的视野,感受区域更广。
2. Excitation部分。即激励部分,得到Squeeze的1*1*C的表示后,加入一个FC全连接层(Fully Connected),对每个通道的重要性进行预测,得到不同channel的重要性大小后再作用(激励)到之前的feature map的对应channel上,再进行后续操作。其结构如图13所示。可以看出,SENet和ResNet很相似,但比ResNet做得更多。ResNet只是增加了一个skip connection,而SENet在相邻两层之间加入了处理,使得channel之间的信息交互成为可能,进一步提高了网络的准确率。
图13 SENet网络结构
参考文献
[1] 高扬,卫峥.白话深度学习与TensorFlow[M].北京:机械工业出版社,2018.
[2] 邹伟,姚新新 译 基于TensorFlow的深度学习[M].北京:中国电力出版社,2019.
[3] 蒋子阳 TensorFlow深度学习算法原理与编程实战[M].北京:中国水利水电出版社,2019.
[4] 李卫.深度学习在图像识别中的研究及应用[D].武汉:武汉理工大学,2014.
[5] 丰晓流,基于深度学习的图像识别算法研究[D].太原:太原理工大学,2015.
[6] 周凯龙,基于深度学习的图像识别应用研究[D].北京:北京工业大学,2016.
[7] https://www.cnblogs.com/jackhehe/p/9808368.html
[8] https://www.cnblogs.com/jackhehe/p/9808368.html
[9] http://blog.itpub.net/31509949/viewspace-2156472
[10] https://cloud.tencent.com/developer/article/1491393
[11] 胡貌男,邱康,谢本亮.基于改进卷积神经网络的图像分类方法[J].通信技术,2018,51(11):2594-2600.
[12] 卷积网络深度学习算法与实例[J].陈旭,张军,陈文伟,李硕豪.广东工业大学学报. 2017(06)
[13] 基于卷积神经网络的手写数字识别[J].李斯凡,高法钦.浙江理工大学学报(自然科学版). 2017(03)
[14] 一种改进的BP神经网络手写体数字识别方法[J].王燕.计算机工程与科学. 2008(04)
[15] 基于卷积神经网络图像分类优化算法的研究与验证[D].石琪.北京交通大学 2017
[16] https://www.jianshu.com/p/aac06d1fa626
[17] https://blog.csdn.net/hellocsz/article/details/88875304
[18] https://blog.csdn.net/aaa958099161/article/details/90373543
[19] https://blog.csdn.net/guanxs/article/details/98544872
[20] https://blog.csdn.net/weixin_41923961/article/details/88983505