目标检测的基本概念
目标检测是计算机视觉中的一个重要任务,和通常的图像分类问题具有一定的差异性,相比于基于深度学习的图像分类任务,目标检测任务更具难度。
在图像分类任务里,假设图像里只有一个主体目标,我们重点关注的是如何识别该目标的类别。然而,很多时候图像里有多个我们感兴趣的目标,我们不仅想知道它们的类别,还想知道它们在图像中的具体位置。此类任务称之为目标检测(object detection)或物体检测。
在目标检测中,通常使用边界框(bounding box)来描述目标的位置。边界框是一个矩形框,可以由矩形左上角的x和y轴坐标与右下角的x和y轴坐标来确定,如下图所示:
目标检测思路的发展脉络
卷积神经网络(CNN)由于其参数共享、连接稀疏性和平移不变性等优点已经广泛应用到了计算机视觉应用当中。因此,有研究人员考虑基于CNN的目标检测,但是CNN并不善于直接预测识别目标的位置信息。并且在一幅图像中可能出现的物体个数也是不确定的,在这种情况下,如何实现目标检测,即不仅需要识别出物体的类别,还需要确定物体的具体位置信息。
最初的基于深度学习的解决思路:
整体的思想是,首先需要知道图像中某个位置存在物体,再将对应的局部区域送入到分类网络中去进行识别,就可以知道图像中每个物体的位置和类别了。其中可以通过滑窗的方式,罗列图像中各种可能的区域,一个个去试,分别送入到分类网络中进行分类得到其类别,同时算法会对当前的边界框进行微调,这样对于图像中每个区域都能得到(class,x1,y1,x2,y2)五个属性,汇总后即可得到图像中物体的类别和位置信息。
其中上面所说的局部区域就是通过边界框来确定(在待识别图上预设一个边界框,然后进行滑窗操作,即可得到大量的候选框,将每个框送入到分类网络中进行分类都会有一个分类得分,得分越高,识别的越准确)。但这种原始思路似乎有些耗时了,因此有系列目标检测模型横空出世,它们均是在原始目标检测思路上进行了改进。
RCNN:
RCNN是将CNN方法引入目标检测领域,大大提高了目标检测效果,经典的目标检测算法是使用滑动窗口方法依次判断所有可能的区域,RCNN则是使用selective search方法预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上使用CNN来提取特征,进行分类判断。
其主要包括四个步骤:
- 候选区域的生成;
- 特征提取:对每个候选区域,使用深度卷积神经网络提取特征;
- 类别判断:将数据特征送入每一类的SVM分类器,判别是否属于该类别;
- 位置精调:使用回归器精调并修正候选框的位置。
论文地址:添加链接描述
YOLO:
YOLO算法的全称是You Only Look Once:Unified,Real-Time Object Detection。Unified指的是这是一个统一的框架,提供端到端的预测,而real-time体现的是Yolo算法速度之快。
YOLO主要有两点改进:
- 它的训练和检测均是在一个单独的网络中进行,它没有显示地求取候选框的过程,而前面所说的RCNN是采用独立于网络之外的selective search方法获取候选框ÿ