DeepLearning-L09-目标检测:RCNN成长记

计算机视觉简介

计算机视觉诞生于1966年MIT AI Group的"the summer vision project",旨在识别和理解图像/视频中的内容。计算机视觉的难点在于语义鸿沟(Semantic gap),莫拉维克悖论(Moravec’s paradox)发现,高级推理只需要非常少的计算资源,而低级的对外界的感知却需要极大的计算资源,要让电脑如成人般地下棋是相对容易的,但是要让电脑有如一岁小孩般的感知和行动能力却是相当困难甚至是不可能的。

目前深度学习在计算机视觉领域的基本任务中主要包括分类(Classification)、定位(localization)、检测(Object detection)、语义分割(Semantic segmentation)、和实例分割(Instance segmentation)。

(1) 图像分类(Classification)
给定一张输入图像,图像分类任务旨在判断该图像所属类别。

常用数据集:

  • MNIST: 60k训练图像、10k测试图像、10个类别、图像大小1×28×28、内容是0-9手写数字。
  • CIFAR-10: 50k训练图像、10k测试图像、10个类别、图像大小3×32×32。
  • CIFAR-100: 50k训练图像、10k测试图像、100个类别、图像大小3×32×32。
  • ImageNet: 1.2M训练图像、50k验证图像、1k个类别。

主要算法:

  • LeNet-5:60k参数
  • AlexNet:60M参数,ILSVRC 2012的冠军。
  • VGG-16/VGG-19:138M参数,ILSVRC 2014的亚军
  • GoogLeNet: 5M参数,ILSVRC 2014的冠军
  • ResNet:25.5M参数, ILSVRC 2015的冠军

(2)目标定位(Object localization) & 目标检测(Object detection)

  • 目标定位(object localization):在图像分类的基础上,找到具体位置,通常是以包围盒的(bounding box)形式

  • 目标检测(object detection):目标定位中通常只有一个或固定数目的目标,而目标检测更一般化,其图像中出现的目标种类和数目都不定

常用数据集:

扫描二维码关注公众号,回复: 11346480 查看本文章
  • PASCAL VOC(Pascal Visual Object Classes):1.5k训练图像,1.5k验证图像,20个类别(包含背景)。
  • MS COCO(Common Objects in COntext):80k训练图像、40k验证图像、和20k没有公开标记的测试图像(test-dev),80个类别,平均每张图7.2个目标。

主要算法:

  • 基于候选区域(regin proposal)的,比如R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN、R-FCN,准确率较高。又称为两阶段(2-stage)检测模型。
  • 基于端到端(end to end)的,无需候选区域,如YOLO(输入整张图片,输出层回归bounding box位置和bounding box类别)、SSD,速度较快。

(3) 语义分割(Semantic segmentation)、和实例分割(Instance segmentation)

语义分割在目标检测的基础上,进一步判断图像中哪些像素属于哪个目标。语义分割不区分属于相同类别的不同实例。例如,当图像中有多只猫时,语义分割会将两只猫整体的所有像素预测为“猫”这个类别。与此不同的是,实例分割需要区分出哪些像素属于第一只猫、哪些像素属于第二只猫。一般先用目标检测方法将图像中的不同实例框出,再用语义分割方法在不同包围盒内进行逐像素标记,常用算法为Mask R-CNN。

目标检测

在这里插入图片描述
(1)传统目标检测

步骤

  • 区域选择:用不同尺寸的滑动窗口框住图中的某一部分作为候选区域
  • 特征提取:取候选区域相关的视觉特征,例如人脸检测常用的Harr特征;行人检测和普通目标检测常用的HOG特征。
  • 分类器分类:SVM、Adaboost

缺点

  • 窗口区域选择策略没有针对性,时间复杂度高,窗口冗余太多
  • 设计的特征对与多样性的变化没有很好的鲁棒性,比如形态变化和光照影响等

(2)基于卷积神经网络的的目标检测算法
卷积神经网络本身具有特征提取、特征选择和特征分类的功能,可直接利用卷积神经网络对每个滑动窗口产生的候选区进行二分类,判断其是否为待检测目标。包括**基于候选区域(regin proposal)基于端到端(end to end)**的两类方法。

基于候选区域(regin proposal)的目标检测又称基于分类的卷积神经网络目标检测,一般包括窗口滑动、产生候选区域(region proposals)、对候选区域图像分类及后处理三个步骤,而且窗口滑动和后处理都是固定的方法,因此该类方法重点研究如何提升卷积神经网络的特征提取能力、特征选择能力以及特征分类能力,以提高图像识别的准确度。

这类算法的典型代表是基于region proposal的R-CNN系算法,如R-CNN,Fast R-CNN,Faster R-CNN等。

1. RCNN

R-CNN( Regions with CNN features)由在《Rich feature hierarchies for accurate object detection and semantic segmentation》中提出,该方法在ILSVRC 2013数据集上的mAP由Overfeat的24.3%提 升到了31.4%,第一次有了质的改变。

R-CNN使用Region proposal+CNN代替传统目标检测使用的滑动窗口+手工设计特征,将检测问题转换称为Region proposal的分类问题。
region proposal(候选区域)利用图像中的纹理、边缘、颜色等信息,选取较少窗口保持较高的召回率。可以降低时间复杂度,并且比滑动窗口的质量更高(固定长宽比)。

1.1 算法步骤

  • Input image
  • Extract region proposals:通过Selective Search从原始图片提取2000个左右区域候选框,并进行区域归一化:把所有侯选框缩放成固定大小(227×227)Warp
  • Compute CNN features:通过CNN网络提取特征(在特征层的基础上添加两个全连接层),得到一个4096维的特征向量;
  • Classify regions:使用SVM结合非极大值抑制(NMS,Non-Max Suppression)获得区域边框(BBox,Bounding Box),最后用DPM中类似的线性回归方法对边框进行位置精修(Refine)

1.2 相关概念

(1)IoU

IoU(Interset Over Union):使用两个区域的交集区域除以两个区域的并集区域。目标检测中表示bounding box 与ground truth的重叠度,一般通过IoU来进行精准度评价的,IoU的值越大,表示物体预测越准确。

(2)Selective Search

Selective Search是一种启发式搜索算法,对一张图像生成约2000-3000个候选区域,基本思路如下:

  • 输入图像:

  • 使用一种过分割手段,将图像分割成小区域

  • 基于颜色、结构、尺寸、形状,将相似的区域合并成更大的区域,重复直到整张图像合并成一个区域位置。合并时须保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其它小区域,保证合并后形状规则。优先合并以下区域:

    • 颜色(颜色直方图)相近的
    • 纹理(梯度直方图)相近的
    • 合并后总面积小的
    • 合并后,总面积在其BBox中所占比例大的
  • 输出目标物体位置,即所谓候选区域(ROI,Region of Interest)

(3)NMS

非极大值抑制(NMS,Non-Max Superssion)

例如:定位一个车辆,算法找出了若干方框,需要判别哪些矩形框是无用的。
先假设有6个矩形框,根据分类器分类概率做排序,从小到大分别属于车辆的概率分别为A、B、C、D、E、F。

  • 从最大概率矩形框F开始,分别判断A~E与F的重叠度IoU是否大于某个设定的阈值
  • 假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,保留下来
  • 从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;标记E,成为保留下来的第二个矩形框

就这样一直重复,找到所有被保留下来的矩形框。

(4)位置精修

目标检测的衡量标准是重叠面积:许多看似准确的检测结果,往往因为候选框不够准确,重叠面积很小,需要一个位置精修步骤。对于每一个类,训练一个线性回归模型去判定这个框是否框得完美。

算法缺点

  • 重复计算:R-CNN虽然不再是穷举,但依然有两千个左右的候选框,这些候选框都需要进行CNN操作,计算量依然很大,其中有不少是重复计算
  • SVM模型:还是线性模型,在标注数据不缺的时候显然不是最好的选择
  • 训练测试分为多步:区域提名、特征提取、分类、回归都是断开的训练的过程,并不是一个端到端的训练模型
  • 计算速度较慢:GPU上处理一张图片需要13秒,CPU上则需要53秒

2. Fast RCNN

继2014年的R-CNN推出之后,2015年Ross Girshick在《Fast R-CNN》推出Fast R-CNN,构思精巧,流程更为紧凑,大幅提升了目标检测的速度。

算法步骤

(1)特征提取阶段

在Fast R-CNN中通过ROI Pooling的网络层,把不同大小的输入映射到一个固定尺度的特征向量。ROI Pooling层将每个候选区域均匀分成M×N块,对每块进行max pooling。将特征图上大小不一的候选区域转变为大小统一的数据,送入下一层。这样虽然输入的图片尺寸不同,得到的feature map(特征图)尺寸也不同,但是可以加入这个神奇的ROI Pooling层,对每个region都提取一个固定维度的特征表示,就可再通过正常的softmax进行类型识别。

(2)分类回归阶段

Fast R-CNN中,把最后的bbox regression也放进了神经网络内部,使用softmax分类器,并与区域分类合并成为了一个multi-task模型。实验表明,这两个任务能够共享卷积特征,并且相互促进。

算法缺点

  • Region proposal耗时(提region proposal 2~3s,而提特征分类只需0.32s),大部分时间用来提Region proposal
  • 伪端到端训练(region proposal使用selective search先提取出来,占用磁盘存储)

3. Faster RCNN

Faster RCNN是Fast RCNN的优化版本,二者主要的不同在于感兴趣区域的生成方法,Fast RCNN使用的是选择性搜索,而Faster RCNN引入RPN(Region Proposal Network),将图像特征映射作为输入,直接产生候选区域,每个都带有相应的分数。

Faster-RCNN可以看成是RPN和Fast RCNN模型的组合体,即Faster-RCNN = RPN + Fast-RCNN

3.1 算法步骤

  • 输入图像到卷积网络中,生成该图像的特征映射。
  • 在特征映射上应用RPN,返回object proposals和相应分数。
  • 应用Rol池化层,将所有proposals修正到同样尺寸。
  • 将proposals传递到完全连接层,生成目标物体的边界框。

3.2 RPN

RPN先采用一个CNN模型(一般称为特征提取器)接收整张图片并提取特征图,然后在这个特征图上采用一个N×N(文中是3×3)的滑动窗口,对于每个滑窗位置都映射一个低维度的特征(如256-d)。

将这个特征分别送入两个全连接层,一个用于分类预测,另外一个用于回归。对于每个窗口位置一般设置 k k 个不同大小或比例的先验框(anchors,default bounding boxes),这意味着每个位置预测 k k 个候选区域(region proposals)。对于分类层,其输出大小是 2 k 2k ,表示各个候选区域包含物体或者是背景的概率值,而回归层输出 4 k 4k 个坐标值,表示各个候选区域的位置(相对各个先验框)。对于每个滑窗位置,这两个全连接层是共享的。因此,RPN可以采用卷积层来实现:首先是一个 n × n n \times n 卷积得到低维特征,然后是两个 1 × 1 1 \times 1 的卷积,分别用于分类与回归。

算法缺点

预先获取候选区域,在对每个proposal分类计算量比较大;有多个步骤嵌套,系统的表现常常取决于前面步骤的表现水平,仍然无法达到实时。

小结

(1) 演进路线

(2)效率比较

猜你喜欢

转载自blog.csdn.net/apr15/article/details/106886533
今日推荐