基于候选区域的深度学习目标检测算法综述

2019-06-21 07:47詹炜长江大学计算机科学学院湖北荆州434023
长江大学学报(自科版) 2019年5期
关键词:池化层卷积神经网络

詹炜 (长江大学计算机科学学院,湖北 荆州 434023)

Inomjon Ramatov (长江大学计算机科学学院,国际学院,湖北 荆州 434023)

崔万新,喻晶精 (长江大学计算机科学学院,湖北 荆州 434023)

1 目标检测的提出

从计算机诞生之时,人们就希望它可以帮助甚至代替人类完成一些重复性工作。利用巨大的存储空间和极快的运算速度优势,计算机可以轻易地完成一些对于人类非常困难的问题。如统计一本书中不同单词出现的次数,存储一个图书馆中所有的藏书,计算复杂的数学公式,都可以通过计算机轻松解决。然而,一些人类可以轻松解决的问题,目前却难以通过计算机实现。如自然语言理解、图像识别、语音识别等,而这些就是人工智能(artificial intelligence,AI)[1]需要解决的问题。

2006年以来,随着深度学习的出现,机器学习领域取得突破性进展。深度学习是机器学习的一个分支,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,如图像、声音和文本。2006年加拿大多伦多大学教授、机器学习领域的泰斗Geoffrey Hinton和他的学生Ruslan Salakhutdinov在《Science》上发表了一篇文章,掀起了深度学习在学术界和工业界的研究和应用浪潮[2]。之后一直到2016年由Google开发的AlphaGo击败围棋世界冠军李世石,人工智能的深度学习展现出了极大的潜力。

虽然人工智能目前已经可以击败围棋世界冠军,但让人工智能实现汽车自动驾驶仍然十分困难。要实现汽车自动驾驶,计算机需要判断哪里是路,哪里是障碍,这些对人类非常直观的东西对计算机却是相当困难,这是因为人类有最重要的感知系统——视觉。人类大脑中几乎一半的神经元与视觉有关,视觉系统主要解决的是物体识别、物体形状和方位确认、物体运动判断这3个问题。人类能通过视觉从复杂结构的图片中找到关注重点,在幽暗的环境中认出熟人。但由于主观及客观条件的影响,导致许多信息无法被人类视觉系统准确获取,于是便产生了计算机视觉(computer vision,CV)[3]。随着信息时代的到来,大量图像和视频数据的产生,计算机视觉已成为人工智能最重要和发展最快的研究领域之一。

计算机视觉是一个跨领域的交叉学科,通过计算机模拟人的视觉系统,实现人的视觉功能,以适应、理解外界环境和控制自身的运动。计算机视觉能够增强、改善人们的生活,代替人类完成更多的任务:一方面,它为人类自身视觉提供强有力的辅助和增强,极大地改善人与世界交互的方式,如通过图片搜索引擎找到与之相关信息;另一方面,机器可以准确、客观而稳定地看见,突破人类视觉的局限,代替人类完成更多的任务,如24h不间断、不疲倦地进行场景监控。

人工智能基础架构如图1所示,计算机视觉赋予机器“看”和“认知”的功能,是人工智能的一类基础应用技术,它与语言识别[4]、语音识别[5]一起构成人工智能的感知智能,让机器完成对外部世界的探测,进而做出判断,采取行动,让更复杂层面的智慧决策、自主行动成为可能。基于深度学习算法模型和CPU、GPU等关键硬件的支撑,计算机视觉技术应用得以实现,并最终集成于多类产品和应用场景之中,目前计算机视觉正应用于车辆交通检测[6]、智慧工业[7]、农业自动化[8]等多个领域。

图1 人工智能基础架构

图2 目标检测流程

作为图像理解和计算机视觉的基石,目标检测(object detection)是计算机视觉中真正核心的任务,也一直都是一个活跃的研究领域。目标检测流程如图2所示,目标检测不是简单的将图像分类,是将目标定位和目标分类结合起来,通过海量而优质的图片数据训练算法模型,从而实现机器判断出输入图像中具有所需特征的物体,并且确定目标物体的位置与范围。其准确性和实时性是整个系统的重要指标。然而,这其中有很多难点,如视角、不同照明条件、可变型、遮挡、图片背景混乱、类内差异,算法需要处理这些难点,这是具有挑战性的难题。

传统的目标检测算法[9]多是通过在输入图像中滑动一个固定大小的窗口,将窗口中的子图像作为候选区,使用尺度不变特征变换(Scale-Invariant Feature Transform,SIFT)[10~12]、方向梯度直方图(Histogram of Oriented Gradient,HOG)[13~15]、Haar[16]提取特征,再使用训练完成的分类器进行分类,如部位形变模型(Deformable Part Model,DPM)[17~20]、支持向量机(Support Vector Machine,SVM)模型[21]等。但是,由于传统目标检测主要存在的2个缺陷(基于滑动窗口的区域选择策略的针对性不强,导致时间复杂度提高,窗口冗余;设计的特征难以应用于多目标检测),使得其目标检测的准确性达不到实际需求。为促进计算机视觉的发展,从2009年开始,ImageNet团队组织了ImageNet大规模视觉识别大赛,其中具有7层的AlexNet卷积网络[22]在2012年度的大赛中以绝对的优势取得冠军,其效果远超传统算法,将大众的视野聚集到了卷积神经网络(Convolutional Neuron Networks,CNN)。

从2012年到2015年,通过对深度学习算法的不断研究,ImageNet图像分类的错误率以4%的速度递减,这说明深度学习算法完全打破了传统算法在图像分类上的瓶颈,让图像分类问题得到了更好的解决。到2015年时,深度学习算法的错误率为4.94%,已经成功超越了人工标注的错误率(5.1%),实现了计算机视觉研究领域的一个突破。

2 目标检测算法——卷积神经网络的基本结构

图3 LeNet-5模型

一个简单的卷积神经网络是由各种层按照顺序排列组成,主要由输入层、卷积层、池化层、全连接层、输出层组成。通过将这些层叠加起来,就可以组成一个完整的神经网络。由加拿大多伦多大学LeCun教授提出的LeNet-5网络[23]如图3所示,该模型由8层网络结构构成,除输出层外,其余每层都有训练参数。

卷积层是构建卷积神经网络的核心层,它产生网络中大部分的计算量。卷积层越多,特征的表达能力就越强。卷积核是卷积层的重要组成,其作用是对输入图像的深层信息进行提取。输入图像大小为32×32(像素),卷积核大小为5×5(像素),采用滑动窗口的方法对图像进行卷积,得到的特征图大小为28×28(像素)。特征图之间是相互联系的,上层特征图会影响下一层特征图。

(1)

常用的激活函数为sigmoid函数和tanh函数:

(2)

(3)

通常,在连续的卷积层之间会周期性地插入一个池化层。池化层的作用是逐渐降低数据体的空间尺寸,减少网络中参数的数量,使得计算资源耗费变少,也能有效地控制过拟合。一般池化层可以通过以下方式计算:

(4)

图4 卷积和池化过程

式中:d(x)为池化操作,一般是进行最大池化操作,它是将输入的图像划分为若干个局部区域,对每个局部区域输出最大值。池化层会不重叠地选择局部区域,再次计算出图像重要的特征值。经过图像的二次特征提取,池化层降低了空间尺寸,提高了抗畸变的能力。卷积和池化操作如图4所示。卷积过程为:利用卷积核fx卷积图像,再加上偏移量bx,最后得到特征图。池化过程为:最常用的降采样操作是取最大值,这里使用的是尺寸为2×2大小(像素)的滤波器,每个取最大值操作是从4个数字中选取(即2×2的方块区域中)。

全连接层在整个卷积神经网络中起到“分类器”的作用,全连接层位于提取特征之后,全连接层将上一层的所有神经元和当前层的每个神经元相互连接,将局部特征结合成全局特征。

全连接层的一般形式为:

xl=f(wlxl-1+bl)

(5)

式中:wl表示全连接层的权重;bl表示全连接层的偏移量;函数f(x)表示非线性激活函数,即sigmoid函数或tanh函数。

3 基于候选区域的卷积神经网络的发展

3.1 R-CNN

由Girshick等提出的R-CNN是将卷积神经网络用于目标检测的开端[24]。图5是R-CNN进行目标检测步骤。首先是利用Selective search方法[25]从输入图片中预测目标可能出现的位置,生成若干个候选区域;然后将每个候选区域转换为固定大小并使用卷积神经网络对其提取特征;最后使用SVM分类器对特征进行分类,并通过边界回归得到精确的目标区域。

图5 R-CNN目标检测流程图

图6 空间金字塔池化层工作过程

图7 Fast R-CNN目标检测流程

虽然R-CNN较传统的CNN在目标检测方面准确性更高,但实时性达不到实际需求,其原因是:①训练分为多个阶段,微调卷积神经网络,对SVM分类器进行训练,对边界回归器进行训练,训练空间和时间代价很高;②多个候选区域对应的图像需要预先提取,占用较大的磁盘空间,R-CNN对每个候选区域都放入卷积神经网络进行特征提取,计算量巨大。

3.2 SPP-net

卷积神经网络需要输入固定大小的图像尺寸(如224×224)才能进行特征提取和特征分类。为了卷积神经网络能够处理任意尺寸和比例的图像,何恺明等[26]提出了空间金字塔池化层(Spatial Pyramid Pooling,SPP)。空间金字塔池化层工作过程如图6所示。通过将空间金字塔池化层替换掉全连接层之前的最后一个池化层,有效解决了R-CNN需要对每一个候选区域独立计算的问题,该网络结构称为SPP-net。

空间金字塔池化层工作过程为:输入图像在卷积层中进行特征提取,得到一个随意大小的特征图,接着在空间金字塔池化层中把特征图分成不同大小的空间块,如4×4、2×2、1×1,在每个空间块中进行一次最大池化。池化后的特征拼接得到一个k×w维的固定维度向量(k为最后一层卷积层的卷积核数量,w代表空间块的数目), 这个固定维度的向量就是全连接层的输入。虽然SPP-net在检测速度上大大提高,但是SPP-net仍然存在着同R-CNN一样的问题:训练分为多个阶段,步骤繁琐。

3.3 Fast R-CNN

由Girshick提出的Fast R-CNN[27]修正了R-CNN和SPP-net的缺点,同时提高其速度和准确性。图7是Fast R-CNN目标检测流程。

Fast R-CNN目标检测的过程为:整个网络首先会使用多个卷积层和池化层来处理输入图像,产生特征图。对每一个候选区域,用ROI池化层从特征图中提取出固定长度的特征向量。然后特征向量将被送入一系列全连接层中,这将分支成2个同级输出层:一个使用softmax输出N个类别的概率估计,另一个输出N个类别的检测框坐标,修正边界位置。

ROI是卷积特征图中的一个矩形窗口,ROI池化层是对任何有效的ROI卷积特征图通过最大池化转换成固定空间范围(H×W)的小特征图,其中H和W是层的超参数,独立于任何一个ROI。如一个尺寸大小为h×w的ROI窗口分割成H×W个网格,那么子窗口大小需要划分为(h/H)×(w/W),然后对每个子窗口进行最大池化,得到相应的输出。ROI池化层其实只是SPP-net中使用的空间金字塔池化层的特殊情况,只有一个金字塔层。

Fast R-CNN网络主要有以下优点:①训练使用多任务损失函数的单阶段训练,实现端到端的训练过程;②训练可以更新所有网络层参数;③不需要额外的磁盘空间来缓存特征。其主要缺点在于,使用selective search算法提取候选区域,使得目标检测时间大多消耗在提取候选区域上,实时性无法满足实际需求。

3.4 Faster R-CNN

图8 RPN网络结构程

图9 Mask R-CNN实例分割框架

R-CNN和Fast R-CNN都是使用selective search算法提取候选区域,但候选区域生成速度慢,特征层次较低,生成的候选区域质量不高。因此,任少卿等提出了Faster R-CNN[28],主要由区域建议网络(Region proposal -network,RPN)候选框提取模块和Fast R-CNN检测模块2个模块组成。

RPN网络结构如图8所示。对于任意大小的图像输入到RPN中,都可以生成高质量的区域建议框。RPN网络中使用一个3×3的卷积核,采用滑动窗口机制,在最后一个共享卷积层参数的特征图上滑动,以滑动窗口的中心对应位置映射回输入图像,预设3种尺度和3种长宽比,这样在特征图的每一个位置都对应着9个锚框。如果特征图的大小是H×W,则一共有H×W×9个锚框,采用滑动窗口能够关联特征图的全部特征空间,使得RPN提取的候选区域更加准确。之后再连接2个同级的1×1卷积层,其中一个使用softmax分类输出锚框目标和背景的分数,另一个用于输出锚框对应于真实目标边界框的回归偏移量。通过这2个输出对锚框进行初步筛选和初步偏移,最终得到候选区域。

3.5 Mask R-CNN

为了实现实例分割,何恺明等[29]提出了Mask R-CNN。该模型在Faster R-CNN的基础上增加了第3个模块——目标掩码模块。Mask R-CNN实例分割框架如图9所示。

ROI池化层在进行归一化过程中,会导致ROI和提取的特征之间产生错位,因此Mask R-CNN模型使用ROI Align层替代了ROI池化层。ROI Align层采用了双线性内插法,根据ROI中的4个采样点计算输入特征的精确值并汇总结果,对提取的特征和输入之间进行了校准。

Mask R-CNN定义了一个多任务损失函数L:

L=Lcls+Lbox+Lmask

(6)

式中:Lcls是分类误差;Lbox是真实目标边界框回归误差;Lmask是分割误差。对于每一个ROI,掩码分支都有一个Km2维的矩阵输出,即K个类别在分辨率为m×m上的二进制掩码。对于每一个像素,都是采用sigmoid函数求得平均二值交叉熵损失函数,即Lmask。对于仅与第K类相关联的ROI,Lmask仅在第K个上定义掩码,避免了不同类别掩码之间的影响,有效增强了实例分割的效果。

4 算法性能对比

表1 基于候选区域的深度卷积网络在目标检测方面的性能对比

基于候选区域的深度卷积网络在目标检测方面的性能对比如表1所示,Faster-RCNN在准确性和实时性上远远超越其余模型,而Mask R-CNN在性能上与Faster R-CNN差别不大,因为Mask R-CNN主要用于掩码输出,故表1中未标注Mask R-CNN。

5 结语

传统的目标检测任务使用滑动窗口的框架,把一张图分解成几百万个不同位置不同尺度的子窗口,针对每一个窗口使用分类器判断是否包含目标物体,这有极大的局限性。近年来,基于候选区域的深度学习目标检测算法飞速发展,从最初的R-CNN到现在的Mask R-CNN,其准确性和实时性比传统的目标检测有极大的突破,同时还在实例分割方面达到了目前最高的水准,但是距离广泛地实际应用还有一段差距。除此之外,还产生了基于回归的深度学习目标检测YOLO[30]、SSD[31]系列算法。R-CNN系列算法和YOLO、SSD系列算法为研究深度学习目标检测提供了2种基本框架。以下是基于深度卷积神经网络的目标检测的研究热点:

1)多层网络特征融合[32]。传统的卷积神经网络就是把输入图像一层一层地进行映射和过滤,其中最后一层的特征就是最后的结果。在此过程中,不同的卷积神经网络层提取的特征是不相同的,浅层网络提取的大多是层次信息,最深层的网络得到的则是更加抽象的语义信息,所以传统的卷积神经网络只是利用最深层网络提取出的特征信息来构建分类器,过滤掉浅层网络的特征信息,因此需要更有效地解决多层网络特征融合来增强模型算法对图像的表现能力。

2)合理利用有效感受野。感受野是指卷积神经网络中神经元对应输入图像的区域,即特征输出受感受野区域内的像素点的影响。当对输入图像中的每个像素进行预测时,每个输出像素具有大的感受野是至关重要的,这会使重要的信息在预测时不被遗漏。有效感受野即是感受野在预测时作用较大的区域,它具有高斯分布,且仅占整个理论的感受野很小的一部分。有效感受野对卷积神经网络的深度工作非常重要,如果有效感受野在目标中占有的面积很大,则目标检测中该神经元的效果好。

3)利用上下文关联信息。目标检测在实际应用中目标不可能是一个独立存在的个体,它或多或少会与周围其他的对象或者环境有一定关系,这就是上下文关联信息。机器需要通过捕捉不同的对象之间的相互作用信息,依此来对新目标进行检测。上下文关联信息能提高识别的准确度和精确度。但是想要将其广泛应用于实践之中仍有很多问题需要解决,因此有效利用上下文关联信息还是如今研究的热点。

总而言之,基于深度卷积网络的目标检测依旧是一个充满了挑战性的课题,其研究意义和应用价值十分重要。随着更多更全面的数据集和各种开源深度学习框架的出现,该课题将会更加快速地发展。

猜你喜欢
池化层卷积神经网络
基于3D-Winograd的快速卷积算法设计及FPGA实现
卷积神经网络模型研究分析*
基于卷积神经网络的纸币分类与点钞
基于深度学习卷积神经网络的人体行为识别研究
卷积神经网络的分析与设计
神经网络抑制无线通信干扰探究
从滤波器理解卷积
基于神经网络的中小学生情感分析
基于全卷积神经网络的SAR图像目标分类*
基于傅里叶域卷积表示的目标跟踪算法