计算机视觉

目标检测

摘要:如今人们生活在日新月异的计算机革命时代,而计算机视觉已经成为多个领域的关键技术。目标检测是一种基于目标几何和统计特征的图像分割,它将目标的分割和识别合二为一,其准确性和实时性是整个系统的一项重要能力,尤其是在复杂的场景中,需要对多个目标进行实时处理,目标检测就显得尤为重要,随着计算机技术和计算机视觉的发展,目标检测已经运用到了智能化交通系统,智能监控系统,军事目标检测以及医疗等各个行业和领域,本文主要从目标检测的背景和意义,目标检测的研究现状以及目标检测的算法等三个方面进行说明,同时介绍最新的目标检测算法的基本流程和基本原理。

关键词:目标检测 SLFT R-CNN YOLO

 

1.文章说明

本文主要介绍目标检测的相关知识,目标检测可以根据时间分为两个阶段,在神经网络和深度学习的概念以前,人们对于目标检测任务主要是根据图像本身的特性做的,例如图像的灰度直方图,梯度等,因此此类方法又称为传统的目标检测方法,这类方法往往需要计算梯度和导数,因此计算量较大,且泛化能力差;而随着深度学习的提出,卷积神经网络成为计算机视觉常用的方法,而基于深度学习的目标检测方法又称为One- stage和Two- stage两类。

本文为目标检测综述,第一部分为文章说明,第二部分说明目标检测的背景和意义,第三部分为目标检测的研究现状,第四部分为目标检测的相关算法。

2.目标检测的背景和意义

1.目标检测的定义

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

如上图所示,目标分类任务中,仅是需要判别上图中的鱼类属于哪一类即可,但是目标检测不仅仅是分类,同时需要将目标在图像中的位置找出,且图像中可能包含多个不用类别的生物。因此,目标检测比分类任务或者单纯的目标定位任务更加具有挑战性。 

2、目标检测的发展

 

在2013年以前,目标检测大都基于手工特征提取方法,通过在低层特征表达的基础上构建复杂的模型及多模型集成来提升检测精度。

2012年CNN在ILSVRC图像分类项目中大放异彩,人们发现CNN能够学习鲁棒性非常强且具有一定表达能力的特征表示,于是2014年,提出了区域卷积神经网络目标检测R-CNN模型,目标检测研究开始以前所未有的速度发展。

3、目标检测的意义

目标检测的应用十分广泛,在人脸检测中的应用:智能门控、员工考勤、人脸支付、车票检查等。行人检测:智能键控、辅助驾驶;车辆检测:自动驾驶、违章检测;遥感:农作物检测、军事领域;等等。

不言而喻,目标识别是当前人工智能应用中最重要的环节之一,各种应用场景和需求也不断的促使其改进和演化。

3、 目标检测研究现状

1、核心内容

目标检测需要找出图像中感兴趣的物体,包含物体定位和为分类两个子任务,同时需要确定物体的类别和位置。

目标检测主要有以下核心问题:

1、 分类问题

2、 定位问题

3、 大小问题

4、 形状问题

2、研究现状

目标检测的发展大致经历了两个时期:传统的目标检测时期和深度学习的检测时期。早期的目标检测算法大多是基于手工特征构建的。

(1) Viola Jones Detectors:最初的 slide windows 算法,以作者的名字命名(VJ)检测器,以纪念他们的重大贡献.

(2) HOG Detector:方向梯度直方图用于描述特征, 方向梯度直方图(HOG)特征描述符最初是由 N. Dalal 和 B.Triggs 在 2005 年提出的。HOG 可以被认为是对当时的尺度不变特征变换(scale-invariant feature transform)和形状上下文(shape contexts)的重要改进。

(3) Deformable Part-based Model (基于可变形部件的模型,DPM), DPM 作为voco -07、-08、-09 检测挑战的优胜者,是传统目标检测方法的巅峰。DPM 最初是由 P. Felzenszwalb 提出的,于 2008 年作为 HOG 检测器的扩展,之后 R. Girshick 进行了各种改进。

在深度学习时代,目标检测可以分为两类:“ two-stage detection ” 和 “ one-stage detection ”,前者将检测框定为一个 “ 从粗到细 ” 的过程,而后者将其定义为 “ 一步完成 ”。

(1) RCNN,首先在图像中选取候选区域,接着在每个候选区域送入CNN提取特征,使用SVM将得到的特征进行分类,最后进行边界框的回归预测。R-CNN的贡献在于将深度学习引入目标检测,并将Pascal VOC 2007数据集上的mAP由之前的35.1%提升至66.0%。

(2) SPPNet, 由于R-CNN卷积层后全简介的输入尺寸是固定的,这就导致图像的大小不能随意调节,此外由于候选区域经常重叠,会导致大量的重复运算,针对这两个问题,2014 年,K. He 等人提出了空间金字塔池化网络( Spatial Pyramid Pooling Networks,SPPNet).

(3) Fast RCNN, 2015 年,R. Girshick 提出了 Fast RCNN 检测器,这是对 RCNN 和 SPPNet 的进一步改进。Fast RCNN 使能够在相同的网络配置下同时训练检测器和边界框回归器。

(4) Faster RCNN, 2015 年,S. Ren 等人提出了 Faster RCNN 检测器,在 Fast RCNN 之后不久。Faster RCNN 是第一个端到端的,也是第一个接近实时的深度学习检测器。

(5) Feature Pyramid Networks(FPN), 2017 年,T.-Y.Lin 等人基于 Faster RCNN 提出了特征金字塔网络(FPN)。

 

  从R-CNN到R-FCN,都是目标检测中居于候选区域的检测方法,需要两步,第一步选出候选区域,第二部,对每个候选区域进行定位,都属于两阶段法,虽然其检测精度较高,但是速度上和实时性仍有差距。 

  为了满足实时性的要求,提出了单阶段目标检测方法。在单阶段检测方法中,不再使用候选区域进行“粗检测+精修”的流程,而采用“锚点+修正”的方法,这类算法速度很快,可以满足实时性的效果。 

6) You Only Look Once (YOLO), YOLO 由 R. Joseph 等人于 2015 年提出。它是深度学习时代[20]的第一个单级检测器。YOLO 非常快:YOLO 的一个快速版本运行速度为 155fps, VOC07 mAP=52.7%,而它的增强版本运行速度为 45fps, VOC07 mAP=63.4%, VOC12 mAP=57.9%。

7) Single Shot MultiBox Detector (SSD), SSD由 W. Liu 等人于 2015 年提出。这是深度学习时代的第二款单级探测器。SSD 的主要贡献是引入了多参考和多分辨率检测技术,这大大提高了单级检测器的检测精度,特别是对于一些小目标。

(8)2018年,YOLO再次迎来改进版本,YOLOv3。YOLOv3用多个独立的分类器代替softmax函数,用类似特征金字塔的方法进行多尺度检测。 

 

4、 目标检测算法

 

1、  SLFT
           传统的基于人工特征的分类算法往往有很大的局限性,一般是先从图像中提取SIFT或者HOG这些局部特征,之后利用VLAD或者F isher vector 等编码模型进行特诊编码,得到最终所需要的特征表示。然而由于人工特征的描述能力有限,导致分类的效果不好,特征的表示能力是制约分类性能的瓶颈。

特征点:是一副图像中独特的像素点,一般特征点都有如下性质:1,可重复性,相同的区域可以在不同的图像中找到;2,可区别性,不同区域有不同的表达;3,高效性,同一图像中,特征点的数量远小于像素数量;4,本地性,特征仅与一小片区域有关。

本文主要介绍一下SLFT方法:

SLFT:尺度不变特征转换,是一种尺度不变特征检测的方法,主要用来提取局部特征,在尺度空间中寻找极值点,提取位置,尺度,选择不变量。

当图像发生了尺度变化或者旋转的时候,能够保证提取到的特征是不变的,也就是说,特征不会因为图像场景中多了噪声,发生了失真或者亮度改变等就发生变化。

下面介绍SLFT寻找图像中的关键点的步骤:

尺度空间峰值选择,这一步的目的是在于尺度空间中选择潜在的满足尺度不变性和旋转不变性的关键点;

给定一副图像,首先是不同方差的高斯滤波器进行滤波:

 

其中I(x,y)表示原始图像,G是高斯核,在三位空间中,G是三位函数:

 

通过选择不同的标准差,可以得到与原图像对应的许多高斯滤波后的图像。

综上两种操作,可得到LoG算子,将原始图像通过LoG算子后,即可得到一簇图像,如下:

 

判定:如上图右边的三幅图像,如果,中间图像的中心点处的像素值大于中间图像其周围8个点的像素值,且大于上下相邻图像对应的各自9个像素点的值,则说明该点是兴趣点。

1,  关键点定位:精确定位关键点的额位置,同时剔除伪关键点
2,  方向分配:基于关键点的局部梯度方向,给每个相应的关键点分配方向
3,  关键点描述:对于每个关键点,用一个高纬度的向量去描述关键点。

 

2、  R-CNN

R-CNN与传统的方式对比:采用CNN网络提取特征,采用大样本下有监督训练+小样本微调的方式解决小样本难以训练甚至过拟合等问题。

2.1 Selective search

首先说明一下目标检测与目标分类的区别,图像检测不仅仅需要认出目标是什么,还需要确定目标的位置,而且一张图片可能包含多个目标,而目标分类主要是识别出不同物种即可,但是本文中的图像细粒度分类虽然是分类任务,但是由于任务的特殊性,依然需要识别出图像中的关键点,而图像检测的第一步就是识别图片中可能存在的目标位置,因此,本部分首先介绍一下目标检测中挑选建议框的算法-selective search

 

 

算法流程:

输入:图片,三通道

输出:物体位置的可能结果L

(1)  使用 Efficient Graph-Based Image Segmentation 的方法获取原始分割区 域R ={r1,r2..rn}

经典的图像分割算法,基于图的贪心聚类算法。既然是聚类算法,应该指定一个规则判定何种情况下将其聚类在一起,对于两个孤立的像素点,所不同的是颜色,自然就用颜色的距离来衡量两点的相似性,本文使用的是RGB的距离 

 

当然也可以用perceptually uniform的Luv或者Lab色彩空间,对于灰度图像就只能使用亮度值了,此外,还可以先使用纹理特征滤波,再计算距离,比如,先做Census Transform再计算Hamming distance距离。

类内差异:

 

可以理解为区域内部最大的差异值,定义MST为一个区域。

类间差异:

 

判断两个区域是否可以合并的标准为:

 

(2) 初始化相似度集合S=

(3) 计算两两相邻区域之间的相似度(见第三部分),将其添加到相似度集合S中

(4) 从相似度集合S中找出,相似度最大的两个区域 ri 和rj,将其合并成为一个区域 rt,从相似度集合中除去原先与ri和rj相邻区域之间计算的相似度,计算rt与其相邻区域(原先与ri或rj相邻的区域)的相似度,将其结果添加的到相似度集合S中。同时将新区域 rt 添加到 区域集合R中。

(5)获取每个区域的Bounding Boxes,这个结果就是物体位置的可能结果L

 

原图像

选取的建议框

2.2 算法流程

  在对图像经过了建议框的选择之后,便将其大小统一输入CNN中,经过CNN网络提取特征之后对特征进行SVM分类器分类,最后根据标签进行回归便可以得到最终的目标位置。 

 

3、  YOLO v 1

YOLO(you only look once)v1 在 2016 年由 Redmon 等人提出[3],纵使在当年 没能掀起 Anchor-free 的热潮,YOLOv1 和 DenseBox[4]仍被视为 Anchor-free 方法重 要的两个起源。在这里本文将着重介绍 YOLOv1 所用的方法。 

在 YOLOv1 之前,目标检测的主要方法 都属于双阶段法。双阶段法的核心思路是 对图像提取出一些候选框,再基于这些候 选框内的 Region Proposal 信息,对这些 候选框做 Bbox Regression 修正并做分类。 纵使细节上有所不同,但双阶段法中 Region Proposal 始终是一个很重要的概 念。所谓双阶段即是在第一个阶段生成 Region Proposal,并在第二阶段对其进行 处 理 和 分 类 , 简 单 来 说 也 就 是 一 个 Proposal+C-lassifer 的思想。 

而 YOLOv1 中则舍弃了 Proposal+ Classifer 的模式。在 YOLOv1 中,图像首先被分为 × (原文中设置 = 7)个网格 (grid cell),并使每个要预测的 object 的中心所在的网格负责预测该目标。其网络中包含 24 个卷积层和 2 个全连接层,将最终全连接层的输出做尺度变换后,即可得到一个7 × 7 × 30的矩阵。其中7 × 7 即对应着 grid cell 的数量,也就是说对每一个 grid cell,我们输出了一个 30 维的向量,在这个 30 维向量之中,有 20 维用来表示该网格中内容分别属于 20 个目标

类别的概率(YOLOv1以PASCAL VOC 2007 数据集为演示样例,该数据集中包含 20 个 种类。)余下的 10 维分成两个 bbox,每个 bbox 中分别包含该 bbox 中内容为前景的 置信度和 x、y、w、h 四个代表其位置和尺寸的参数。 

基于此结构,也就很好理解 YOLOv1 的 工作流程,即先将图像分为 × 个 grid cell,再通过一个网络来同时对每个 grid cell 做分类,并各给出两个可能的 bbox。 这个通过网络直接给出可能的 bbox 的过 程即实现了 Anchor-free。

值得注意的是,在 YOLOv1 中虽然也将 图像分为了一定数量的 grid cell,但是 grid cell 和 Anchor-based 方法中的 Anchor 是完全不同的概念。每一个 grid cell 中给出的 bbox 并不以 grid cell 的 位置和尺寸为基础,而是直接通过神经网 络输出 bbox 的位置和尺寸信息。这和用于 对建议框进行微调的 Bbox Regression[8] 有些类似,都是通过图像的内容信息得到 bbox。不同的是 Bbox Regression 得到的 是一个从原建议框到修正建议框的映射关 系,而在 YOLOv1 中是根据图像内容直接得 到建议框。从某种角度上讲,这种方法可

以看做是一种将 Bbox Regression 发挥到了极致,以至于不需要提供先验的 anchor 或 Region Proposal 建议框即可直接得出 bbox 的方案。从 YOLOv1 的工作流程中我们可以看 到,YOLOv1 作为一种单阶段法,其中包括 bbox 的给出和分类都是通过神经网络完 成。观察 YOLOv1 的神经网络结构(图 1), 在接入全连接层之前,特征图尺寸就已经 为7 × 7,即与 grid cell 的数量相对应。 我们先通过卷积层来理解 YOLOv1 中神经 网络的工作原理。

在卷积神经网络中,感受野(Receptive Field)代表着神经网路的输出的特征图上每一个像素在输入图片上映射的区域大小。以常见的3 × 3大小的卷积核为例,如果通过一层卷积层,则在卷积核参数固定的情况下,输出特征图中一个像素的取值,仅与输入图的 9 个像素值有关,即这下一层中的每一个点在上一层中对应的 9 个点上各采样一次。而若通过两层卷积,则其将受到输入图中 25 个像素值的影响,且由于卷积核在滑动计算过程中会产生重叠,对这 25 个像素值的采样次数将会有所差别,且越靠近中心的点采样次数越多(如图所示),在这里我们称这个采样次数为感受野上的 Attention Value,即关注度值。网络中上一层 Attention Value 的计算方式为:网络下一层 Attention Value 矩阵加上⁄2的 padding 后,用同样尺寸、数值全用 1 填充的卷积核进行卷积。

 

在 YOLOv1 的网络中,设是第层的 感受野, 是第层的卷积步长, 是第层的卷积核尺寸,则根据公式  = (+1  1) ×  + 

我们可以算出该网络中卷积层部分的感受 野尺寸为314 × 314,约占输入图像尺寸 (448 × 448)的一半左右。计算其感受野 上的 Attention Value 的值,结果如图所示。

 

将该结果类比到输入图像,可得其在 我们“人”的眼中大概相当于如图 4 所示的效果。由此可知,基于 YOLOv1 的网络设 计,其卷积层网络所输出的每个grid cell 对应的特征向量中,并不仅仅包含该网格内的图像信息,其感受野范围要远远大于 grid cell 的尺寸。在确保主要注意力范围在 grid cell 内的同时,其中还包含了部分的周边区域信息,在 YOLOv1 要求由物体中心的 grid cell 负责输出 bbox 和分类的条件下,这也让该网络在结构上有能力输出更好的结果。即保证了 Anchor free 方法应用的合理性和有效性。从直观 上讲,如果仅给出如图中 grid cell 中 的图像,对“人”来讲,也很难猜测其中 物体的内容和完整物体的位置,但是如果 给出如图中 Receptive Field 的图像信息,则这个任务就变的容易很多。

除此之外,还不应当忽略在该神经网络中还存在全连接层。通过全连接层,特征图中每个像素在原本有限的感受野范围基础上,又引入了全局图像信息,从而进一步使得网络能够应付更多变的情况。但混合大量信息同时也可能产生一定的干扰,并影响网络收敛速度,因每个 grid cell的输入图像与其输出信息之间的对应关系可能被全连接层打乱以至于网络需要重新学习到合适的对应关系。

 

  从R-CNN到R-FCN,都是目标检测中居于候选区域的检测方法,需要两步,第一步选出候选区域,第二部,对每个候选区域进行定位,都属于两阶段法,虽然其检测精度较高,但是速度上和实时性仍有差距。 

  为了满足实时性的要求,提出了单阶段目标检测方法。在单阶段检测方法中,不再使用候选区域进行“粗检测+精修”的流程,而采用“锚点+修正”的方法,这类算法速度很快,可以满足实时性的效果。 

6) You Only Look Once (YOLO), YOLO 由 R. Joseph 等人于 2015 年提出。它是深度学习时代[20]的第一个单级检测器。YOLO 非常快:YOLO 的一个快速版本运行速度为 155fps, VOC07 mAP=52.7%,而它的增强版本运行速度为 45fps, VOC07 mAP=63.4%, VOC12 mAP=57.9%。

7) Single Shot MultiBox Detector (SSD), SSD由 W. Liu 等人于 2015 年提出。这是深度学习时代的第二款单级探测器。SSD 的主要贡献是引入了多参考和多分辨率检测技术,这大大提高了单级检测器的检测精度,特别是对于一些小目标。

(8)2018年,YOLO再次迎来改进版本,YOLOv3。YOLOv3用多个独立的分类器代替softmax函数,用类似特征金字塔的方法进行多尺度检测。

你可能感兴趣的:(目标检测,深度学习)