第四章 基于SSD改进的物体识别方法
物体检测与识别在实际应用中的多个领域都占据一席之地。物体检测是将图像或者视频中感兴趣的物体与其他物体进行区分。物体识别是判断是否存在目标,确定目标位置,识别目标种类的一种计算机视觉任务。人类生产生活中存在着大量的图像和视频数据,计算机视觉技术起到的作用越来越大,随之而来对计算机视觉的研究也越来越火。物体检测识别作为计算机视觉领域的重要一支,也越来越受到重视,越来越多的成果,论文发表在各种顶级期刊会议上。在各位专家学者的共同努力下,物体识别技术飞速发展,识别算法不断创新并在各大公开数据集上有着明显的进步,算法不断接近人眼的准确率。
本章首先解释了检测过程的三个步骤:生成目标建议框、提取特征、预测类别并进行边框回归。针对这三个步骤,本人提出基于深度神经网络的策略解决了以往算法中存在的速度慢、特征不准确、识别率低等问题。最后将本人提出的改进策略应用到SSD物体检测模型上,具体来说就是用上一章改进后的DenseNet作为模型的基础网络,使用“跳跃连接”的思想改进预测网络。最终生成一个改进版的SSD检测模型,实验证明,改进后的SSD模型在速度和精度上都有明显提升,并且对于小目标的识别更加精准。
物体识别检测技术的研究主要分为两大类,一是传统图像处理方法(以机器学习为代表),二是基于深度学习的识别检测方法。传统的物体识别方法主要流程为:目标特征提取、目标识别、目标定位。随着深度神经网络算法在图像处理方面开始大放异彩,人们开始尝试使用深度神经网络的算法来研究物体识别问题。
基于深度学习的物体识别检测方法又可以分为两大类:一,基于区域建议的目标检测与识别算法,最具代表的是R-CNN,Fast R-CNN,Faster R-CNN;二,基于回归的目标检测与识别算法,其中YOLO,SSD识别效果更好。
基于区域建议的物体识别检测算法的主要工作流程为:首先通过目标候选区域生成算法(如Selective Search、Bing、EdgeBoxes)生成一系列目标候选区域,然后通过深度神经网络提取各目标区域的特征,并对这些特征进行分类,最后进行目标真实边界的回归。该方法首次将CNN应用到物体识别检测上,相比传统机器学习算法有了质的飞跃。
明显可以看出,基于区域建议的方法大部分工作都消耗在对很多个建议区域的处理上,使得算法的实时性很差。这就催生了基于回归的检测算法,这种算法不生成目标候选区域。YOLO算法将输入图像简单地划分为几个小区域,然后通过CNN来判断每一个区域是否存在目标,并预测目标的种类和边界框。这种方法不需要生成目标建议区域,大大节约了图像处理的时间,虽然保证了实时性,但是准确性却大打折扣。SSD就结合了YOLO和Faster R-CNN的anchor机制,并使用不同特征图上的多层特征去检测不同位置的目标。这既保证了检测速度,又保证了与基于区域建议检测方法相近的准确率。
4.1 目标检测理论
4.1.1 基于快速CNN的目标检测方法
物体检测算法在机器学习之后进入了一个瓶颈期,人工提取图像特征的检测算法已经逐步被淘汰。而深度学习的复苏带来了新的希望,Ross Girshick等人率先提出一种基于深度学习的物体识别检测算法R-CNN(Region-based Convolutional Neural Networks)。该算法将物体识别任务转化为基于候选区域的分类任务,这样就非常有效地利用了深度神经网络在分类任务上的强大功能,开辟了将CNN应用于物体检测的新时代。
对比传统方法,R-CNN的主要优势是:一,取代人工提取特征,进而使用CNN得到更具表达力的深度特征,从而提高识别精度。二,采用区域建议而非穷举的方式提取目标,可以减少很多不必要的计算过程。三,加入了边界回归策略进一步提高检测精度。同时,R-CNN的缺点也很明显,就是对于每个建议区域都要重新计算整个网络,出现很多冗余的计算,使得运算效率不高。区域建议的过程独立于整个深度学习模型之外,无法做到实时的端到端(end-to-end)的检测。R-CNN的工作原理如图4-1所示:
图4-1 R-CNN工作原理
针对R-CNN计算量大的弊端,Ross Girshick等人又提出Fast R-CNN模型。相比较与前者,Fast R-CNN在生成目标候选区域方面没有变,不同的是提出了Regions of Interest(RoIs)策略将候选区域映射到CNN模型的特征层上,直接在特征层上提取相应的深度特征。这就避免了不断输入不同区域图像的部分。最后将提取的特征用Softmax层预测类别,并使用网络来学习一个边界回归器。Fast R-CNN将特征提取,分类和边界回归组合在一起,提高了整体模型的利用率。不过候选区域部分仍然独立,仍不能实现端到端的实时检测。Fast R-CNN工作原理如图4-2所示:
图4-2 Fast R-CNN工作原理图
Fast R-CNN克服了R-CNN提取深度特征时造成的计算冗余问题,将物体识别方法的特征提取,目标分类和边框回归统一到一个结构中。但是,目标候选域的提取过程仍然独立于神经网网络之外,成为阻塞检测速度的一个瓶颈。为了解决这一问题,Faster R-CNN算法应运而生,该算法采用了区域生成网络(Region Proposal Networks,RPN)进行目标候选域的生成。其中RPN是一个全卷积神经网络,前一层是任意大小的feature map,输出为一系列的矩形目标候选区。RPN结构如图4-3所示,Faster R-CNN结构如图4-4所示。一般地,候选区域生成策略是在网络的最后一个卷积层的feature map上进行滑动窗口操作。对于每个窗口,同时生成k个目标候选区,每个候选区又有不同的尺寸和比例,这k个候选区成为anchors。每个窗口映射为一个低维向量,随即被传入两个子网络中:边框分类网络和边框回归网络。边框分类网络输出的是每个anchor属于目标或背景的概率,边框回归网络输出的是每个anchor的平移缩放的值。RPN的训练和检测实现了端到端的连接,训练过程使用的是反向传播和随机梯度下降算法。损失函数是分类误差和边框回归误差的联合损失。
图4-3 RPN网络结构
图4-4 Faster R-CNN工作原理图
从上面三种网络的检测效果来看,经过不断改进,基于区域建议的方法精度越来越高。但是,这三种网络在检测比较小的目标时结果不太令人满意,仍然需要更好的目标候选区域提取方法,更好的深度学习模型,更有价值的训练数据。
4.1.2 基于回归学习的目标检测方法
上一节看到,基于区域建议的检测算法在提取建议区域上花费了更多的时间,很难做到实时检测。而基于回归的目标检测算法由于没有候选区提取这一步骤,所有的识别和检测步骤都融合在一个深度神经网络结构中,能够很容易做到实时检测。
对于人眼来说,识别出图像中的目标是非常快速的,而且不需要经过反复观察。基于此Joseph Redmon等人提出YOLO(You Only Look Once)算法,这是一种全新的目标检测算法。他们通过回归的方式检测图像中目标的位置和类别,而且用回归的方式可以把图像的特征提取,目标边框和类别回归过程合并到同一个网络中,实现了端到端的检测方式。
YOLO算法可以分成三步:一、将输入图像等分成 个格子;二、将整张图像输入进神经网络,预测每一个格子是否存在目标,目标的边界框,目标的类别;三、将上一步中的边界框做非极大值抑制(NMS)筛选出最优的边界框。
YOLO网络训练时每次使用的数据包括图像,图像中目标的类别c和对应目标的边界框坐标 ,其中 是目标的中心位置, 是目标边界框的宽和高,一个图像中可以包含多个目标。简单地将整个图像分成 个格子能够简单快速地确保某些格子中存在目标。比如S=7,就只需要判断49个格子里是否存在目标,并预测目标位置。这比基于区域建议的算法动辄上千个区域要少很多,大大提高了检测的效率。目标位置和类别的预测可以用一个 的向量表示,其中B表示每个格子规定的目标边界框数,论文中令B=2,表示一个格子生成2个边界框。数字5代表5个参数,分别是目标边界框的位置 及对应目标的置信度Conf。C表示数据集中目标的类别数(如使用PASCAL VOC数据集,则C=20)。接下来就是设计深度神经网络来提取图像中的深度特征,论文中使用的是由GoogLeNet改进而来的网络结构。整个网络包含了24个CNN层,2个全连接层,最后通过一个全连接层来预测各图像块的目标类别和目标边框。整个模型先用ImageNet图像数据进行预训练,然后使用目标检测数据集微调网络参数并训练预测器。
YOLO相比之前的方法有如下改进:一、算法足够快,模型结构比较简单,能够做视频的检测与识别。二、算法每次检测图像中的所有目标。三、算法能够学习目标的一种概括性表示,泛化能力强。但是YOLO仍存在一些缺点:定位精准差,对小目标或者目标之间很接近的情况下检测效果不好。
YOLO的诞生对端到端的目标检测算法的发展产生很大的启示。到目前为止,检测算法的瓶颈都出现在区域建议这一环节。因此,Wei Liu等人在YOLO的基础上提出了SSD(Single Shot MultiBox Detector)检测算法,与YOLO类似,SSD同样是一种端到端的模型,所有的检测和识别过程都整合在同一个网络结构中。不同的是,SSD加入了Faster R-CNN的anchor机制,就相当于在回归的基础上结合了区域建议的功能。SSD并没有用图像的全局特征,而是使用深度网络提取的深度特征进行区域建议。SSD在深度神经网络不同的特征层上提取特征,然后分别在这些特征上进行回归算法预测目标,这样能够加入更多尺度的信息,对一个目标作出更多的判断,继而在不影响精度的情况下提高检测速度。
SSD算法的主要过程如下:一、使用深度神经网路提取图像的深度特征;二、对于不同尺寸的特征图设计不同的Default Box(将这些Default Box与实际边框想匹配进行训练);三、通过提取Default Box对应的特征图里的特征来预测Box中目标的类别和边框;四、最后通过NMS算法筛选出最佳匹配结果。SSD模型在训练时用图像做输入,将图像中目标的类别和边框位置信息作为标签。
论文使用的网络结构如下图4-5所示,模型的输入是整个图像,然后经过一个以VGG16为原型的卷积神经网络提取图像的特征。接下来的一步是关键,VGG网络后面又加入了新的CNN层,且这些CNN层的尺寸都不一样,这样就很容易提取多尺度的特征。最后一步是提取多尺度特征图的局部特征,并用于预测结果。与YOLO对原始图像分割不同,SSD依次对特征图上的所有点进行Default Box的设计。
图4-5 SSD(上)与YOLO(下)模型对比
SSD算法最具创新以及最有意义的改进方案就是重新选取了Default Box的生成方案。Default Box可以用如下方式定义,首先对不同尺度的特征图设计不同的尺度参数,假设有N个特征图,则Default Box的尺度参数如下:
其中 和 分别为最大和最小尺度参数。随后针对不同的目标大小,不同的长宽比例设计不同的Default Box,5种不同的长宽比参数 ,根据这组参数计算Default Box的宽和高,其中宽为 ,高为 ,对于长宽比为1的Box,增加一组尺度参数 。那么对于每个特征图上的一个点,可以得到6个不同尺寸的Default Box。Default Box选取流程如图4-6所示:
图4-6 Default Box生成策略
接着根据每个特征图上设计好的Default Box提取特征。论文使用 的卷积核来提取特征,每个特征图用到的卷积核为 个,其中6为Box的数量,20为VOC数据集的目标类别数,4是预测边界框与真实边框之间的误差。这些Default Box并不是每一个都对应一个目标,在训练阶段还需要筛选出有效的Default Box当成正样本训练,论文使用best jaccard overlap来做匹配,操作如图4-7所示:
图4-7 Default Box生成过程
对于一个 的特征图,最终会产生 个输出结果。在训练过程中,会先从中选择一些Box,选择的依据就是best jaccard overlap算法,即算出所有的Default Box位置与真实边框位置的交并比(IoU),筛选出IoU超过阈值0.5的Box成为正样本,其他的为负样本。直观地能够看出,得到的负样本远远多于正样本,这样不利于网络训练的收敛性,论文中将负样本和正样本的比例设为3:1,其中负样本按IoU的值进行排序,取前面的一部分。得到正负样本之后,我们用这些样本和实际边框位置做回归训练,回归的任务如图4-8所示:
图4-8 边框回归示意图
从图4-8可以看出,边框一般使用四维向量 来表示,边框P表示原始的建议框(Default Box),边框G表示目标边框的真实值(Ground Truth),我们的目的是寻找一种关系使得建议框P经过映射得到一个跟真实值更接近的回归边框 (Bounding Box)。于是我们自然想到用目标的位置信息和置信度构建深度学习模型,然后利用梯度下降和反向传播算法训练模型。整个模型的损失函数可以定义为:
(4-2)
其中x用来判断Default Box中是否有相应的目标, 表示第i个Box是否与第p类物体的第j个目标的边框相匹配,匹配为1,否则为0。若 ,则表示对于第j个目标,候选Box至少有一个与之匹配。N表示匹配的Box的数量。式子(4-2)中前半部分用来衡量置信度,主要使用了一个多分类的Softmax损失函数,具体如式(4-3):
(4-3)
其中 。第二部分用来衡量边界框预测的性能,损失函数类似于Fast R-CNN,具体如式(4-4):
(4-4)
其中 表示第j个目标的Default Box与真实目标边框之间的误差, , 是Box的中心点坐标, 表示Box的宽和高。
模型在训练时,预先训练好VGG模型,然后使用VOC2007/2012数据集训练网络。训练过程使用SGD算法优化目标函数,初始学习率为0.001,动量项为0.9,权重惩罚为0.0005,每次处理的图像批量为32。实验证实,SSD目标检测算法无论在速度还是准确度上均领先于当前其他算法。