本文总结了近十多年来物体检测(object detection)方面的进展,对每个里程碑式的成果都做了介绍,自己在读过程中也了解了很多,希望能把自己的体会和学习过程记录下来吧。

总体介绍

问题描述

   物体检测目标:给定一张任意的图像,检测其中是否含有给定类别的物体,如果含有,则返回其位置和大小。
  发展历程: Image level object classification -> single object localization -> generic object detection -> pixel-wise object segmantation

图片挂了QAQ

  • 物体分类(object classification) 给定一幅图像,输出其中含有物体的标签,并不需要定位
    如图中(a)所示
    
  • 物体检测(object detection) 给定一幅图像,不仅需要检测出其中含有的物体,并且需要对其进行定位,用边界框将所有物体标记出来,如图中(b)所示
  • 语义分割(Semantic Segmentation) 将一幅图像中的每个像素都分配一个物体类别标签,如图中(c)所示
  • 实例分割(Instance Segmentation 不同于语义分割,实例分割中,对于每个相同类别的实例也会进行分割,如图中(d)所示

难点&挑战

  • 准确率
    1. the vast range of intraclass variation 大量的类内变化
      同样的子类有着不同颜色、材质、形状等,同样的物体有着不同的姿态,不同的拍摄时间、地点、天气状况、背景等等。
    2. huge number of object categories 大量的物体类别
      一共$10^4-10^5$种、有些类别之间只有细微的差别

图片挂了QAQ

  • 高效性
    移动设备、可穿戴设备只有有限的存储空间和计算能力,需要降低算法总体的运算复杂度。

过去20年来的发展

图片挂了QAQ

  在1990年以前,典型的物体检测方法是基于 geometric representations,之后物体检测的方法像统计分类的方向发展(神经网络、SVM、Adaboost等)。
  在20世纪晚期和21世纪早期,物体检测领域取得了突破性的进展,正如图中所示,SIFT 和 DCNN 开启了新的纪元。Handcrafted local invariant feature(人工提取图像特征) 变得流行起来,比如Scale Invariant Feature Transform(SIFT)、Histogram of Gradients(HOG)、Local Binary Patterns(LBP)等都是特征提取的方法。
  2012年当深度神经网络(DCNN)在图像分类上取得了突破性进展时,这个巨大的成功也被用到了物体检测上。Girshick提出了里程碑式的物体检测模型Region based CNN(RCNN),在此之后物体检测领域飞速发展、并且提出了许多基于深度学习的方法……

物体检测框架

图片挂了QAQ

  物体检测框架发展如上图所示。上面的框架可以分为下面两个类别:

  • Two stage detection framework,包括生成 region proposal 的预处理步骤,以及之后的物体分类以及bounding box 回归。
  • One stage detection framework ,不需要region proposal的生成,直接通过一遍前向运算就能完成物体检测的任务。

Region Based(Two Stage Framework)

RCNN

  Region based CNN 是 Girshick 受到 CNN 在图像分类上的巨大成功,以及selective search(用于生成 region proposal)等人工特征提取方法的成功鼓舞而提出来的,这是一个里程碑式的物体检测框架,后续的框架或多或少都参考了RCNN,训练和测试具体步骤如下图所示:

图片挂了QAQ

训练过程

  1. 首先采用selective search 方法生成2000个region proposal(目标区域)。
  2. 将生成的目标区域通过warp操作(缩放)到统一尺寸(为了以后的全连接层),作为提前训练好的CNN模型的输入数据(finetune)。
  3. 用CNN提取出 feature map,并训练一系列线性SVM分类器,用这些分类器取代最后一层的softmax层。
  4. 对每个类别都会用CNN提取的特征训练一个bounding box regression 模型,用于边界框的回归预测。

缺点

  • 训练过程是muti-stage,每一个部分都必须单独进行训练、复杂、低效
  • 训练SVM和回归器需要大量的时间和空间
  • 测试速度非常慢,每个候选窗口都要输入到CNN中进行特征提取

SPPNet

  由于CNN的特征提取是RCNN的一个主要瓶颈,SPPNet中提出了Spatial Pyramid Pooling Layer(空间金字塔池化层 )。由于存在FC(全连接)层,所以RCNN输入的图像需要固定尺寸,并且需要进行warp操作,SPPNet中在最后一层卷积层后加入了SPP层,经过SPP层后可以获得固定长度的特征向量。
  通过这种方式,可以让网络输入任意尺寸的图片,并且最终会输出固定尺寸的特征。
步骤

  1. 首先采用selective search 方法生成2000个region proposal(目标区域)。和RCNN一样
  2. _特征提取阶段_。这一步是和RCNN最大的不同,先把整张图片输入CNN进行特征提取,得到feature map,然后在feature map 中找到各个候选框区域,再对各个候选框进行金字塔池化,从而最后可以提取出固定长度的特征向量。由于SPPNet中只需要对整张图片用CNN进行一次特征提取,于是相比于RCNN速度大大提高。
  3. 最后一步也和RCNN一样,采用SVM算法进行特征向量的分类识别,以及boundingbox 的回归。

    Fast-RCNN

      改进了RCNN以及SPPNet的缺点,实现了end-to-end的训练。并提出了RoI pooling层,用于对特征图的池化从而得到固定大小的特征向量。
    创新
  4. 定义了一个多任务的损失函数,同时包括softmax、BBRs等训练目标。
  5. 采用了共享卷积计算的思想
  6. 在最后一层卷积层上对每个RoI求映射关系,并用一个RoI pooling Layer 来统一到相同大小。

具体步骤和RCNN相似。

图片挂了QAQ

Faster-RCNN

创新点

  1. 用RPN(Region Proposal Network)取代selective search,大大提升了整体运行速度。
  2. 通过RPN来生成目标候选框,之后在最后一层卷积层得到的feature map上进行RoI pooling从而得到固定大小的特征图,最后进行分类和回归。

图片挂了QAQ

未完待续……………………