【目标检测(Object Detection)】R-CNN

文章目录

    • (一)什么是目标检测
      • (1)目标检测的应用:
      • (2)其任务可以概括为:
      • (3)目标检测算法的两种类型
      • (4)概念:边缘框(bounding box)
      • (5)目标检测数据集
    • (二)R-CNN(区域卷积神经网络,Region with CNN future)
      • (1)候选区的生成
      • (2)对每个候选区域,使用深度网络提取特征
      • (3)将提取的特征送入SVM分类器判定类别
        • 什么是非极大值抑制?
      • (4) 使用回归精细修正选框的位置
      • 什么是锚框(anchor box)
      • 锚框是如何确定边缘框的?
      • 计算锚框和真实框(label)的相似度:IoU-交并比
      • 训练锚框
      • 使用NMS(非极大值抑制)去掉冗余的预测出的anchor box
      • (5)小结:R-CNN框架
    • (三)R-CNN存在的问题

(一)什么是目标检测

给定一张图片要精确的定位到物体所在位置,并完成对物体类别的识别

(1)目标检测的应用:

  • 无人驾驶
    【目标检测(Object Detection)】R-CNN_第1张图片
  • 无人售货

(2)其任务可以概括为:

input image/vedio
output 类别标签(Category label);位置(最小外接矩形 / Bounding Box)

(3)目标检测算法的两种类型

Object Decection
Two-Stage
Faster-RCNN
One-Stage
SSD YOLO

【目标检测(Object Detection)】R-CNN_第2张图片

【目标检测(Object Detection)】R-CNN_第3张图片

(4)概念:边缘框(bounding box)

边缘框的定义方法:
【目标检测(Object Detection)】R-CNN_第4张图片

(5)目标检测数据集

目标检测领域的COCO数据集(80个常见类别、330K张图片、1.5M物体)相当于ImageNet数据集(1000类)在图像分类领域的地位。
【目标检测(Object Detection)】R-CNN_第5张图片

目标检测的数据集组织起来比图像分类的数据集更加复杂,无法在一个文件夹下创建多个子文件夹来表示不同的类别,因为可能一张图像里面含有多个类别。
如果用文本文件来存储数据集的话,文本文件里应该有很多行,每一行包含:图片文件名、物体类别、边缘框(4个值),一共有6个数据。

(二)R-CNN(区域卷积神经网络,Region with CNN future)

R-CNN是第一个将深度学习应用到目标检测的算法。

其步骤如下:

  • 一张图像生成1K-2K个候选区域(selective search方法)
  • 对于每个候选区,使用深度网络提取特征
  • 特征送入每一类的SVM分类器,判断是否属于该类
  • 使用回归器精细修正候选框的位置

【目标检测(Object Detection)】R-CNN_第6张图片

(1)候选区的生成

【目标检测(Object Detection)】R-CNN_第7张图片

通过SS算法生成候选边界框。

(2)对每个候选区域,使用深度网络提取特征

【目标检测(Object Detection)】R-CNN_第8张图片

AlexNet首先用一张227×227×3的图片作为输入,实际上原文中使用的图像是224×224×3,但是如果你尝试去推导一下,你会发现227×227这个尺寸更好一些。
第一层我们使用96个11×11的过滤器,步幅为4,由于步幅是4,因此尺寸缩小到55×55,缩小了4倍左右,输出为55×55×96。
然后用一个3×3的过滤器构建最大池化层,f=3 ,步幅s 为2,卷积层尺寸缩小为27×27×96。
接着再执行一个5×5的same卷积,padding之后,输出是27×27×276。

来自:https://blog.51cto.com/u_15351425/3727304

这块不知道这些数据是什么含义参考AlexNet

(3)将提取的特征送入SVM分类器判定类别

【目标检测(Object Detection)】R-CNN_第9张图片

  • 矩阵相乘得到概率矩阵(2000*20):
    2000:2000个矩形框
    20:每个矩形框属于某一类(一共20类)的概率
    这里的分类器用的是SVM分类器,SVM分类器是一个二分类器,这里一共有20类,要用20个SVM分类器,每个SVM分类器输出属于某一类的概率值。

  • 对每一类(即每一列)进行非极大值抑制剔除重叠建议框,得到检测为该类概率最大的建议框。

什么是非极大值抑制?

前置知识:IoU(Intersection over Union)
【目标检测(Object Detection)】R-CNN_第10张图片
非极大值抑制(Non-maximum suppression,NMS)是一种去除非极大值的算法,常用于计算机视觉中的边缘检测、物体识别等。

步骤:

  • 对每个类别寻找得分最高的目标(边界框)
  • 计算其他每个边界框与该边界框的IoU值
  • 如果IoU值大于某个阈值,则说明这两个边界框框出的是同一个物体
  • 删除所有IoU值大于给定阈值的边界框(即除了得分最高的边界框外所有大于阈值的边界框,因为这些边界框是冗余的)。剩余的边界框就是得分最高的那个边界框和IoU值没有达到阈值的边界框,前者是这一类框出的目标,后者可能是其他类别的目标,都在我们的检测任务之内,所以保留。
  • 对剩余框重复上述操作。

算法流程:
【目标检测(Object Detection)】R-CNN_第11张图片
算法流程参考:https://blog.csdn.net/weicao1990/article/details/103857298

(4) 使用回归精细修正选框的位置

【目标检测(Object Detection)】R-CNN_第12张图片

【目标检测(Object Detection)】R-CNN_第13张图片
2000 * 4096 --> 100 * 4096(假设)
对剩余候选框所对应的4096维向量进行回归预测

什么是锚框(anchor box)

一大部分的目标检测算法是基于锚框的。
在目标检测中,我们要预测边界框,这给我们的预测带来了很大的问题
锚框是计算机视觉算法生成的一些框,用来预测边界框。具体的每一个目标检测算法生成锚框的算法各异。

bounding box anchor box
真实的位置(label) 算法对边框位置的猜测

锚框是如何确定边缘框的?

  • 生成一系列锚框,通常是一个位置9个锚框(3种尺寸,3种比例)
  • 预测每个锚框里是否含有关注的物体
  • 如果是,预测从这个锚框(anchor box)到真实边缘框(bounding box)的偏移

计算锚框和真实框(label)的相似度:IoU-交并比

【目标检测(Object Detection)】R-CNN_第14张图片
给定两个集合A和B
Jacquard指数: J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ J(A,B)=\frac{|A\cap B|}{|A\cup B|} J(A,B)=ABAB
可以用这个指数来衡量两个集合(这里集合里的元素是像素)之间的重合度

训练锚框

  • 训练样本:每一个锚框是一个训练样本
  • 标签(label):背景/真实边缘框(grounding bounding box)框出的那个物体的标签以及锚框和该真实边缘框的偏移

使用NMS(非极大值抑制)去掉冗余的预测出的anchor box

【目标检测(Object Detection)】R-CNN_第15张图片

这么做的结果就是,用锚框预测出来的边缘框和所有grounding bounding box一一对应。这样会使我们的目标检测算法的输出更加简洁干净。

(5)小结:R-CNN框架

【目标检测(Object Detection)】R-CNN_第16张图片

(三)R-CNN存在的问题

【目标检测(Object Detection)】R-CNN_第17张图片

  • 对所有候选框进行卷积操作过程中,针对每一个重叠的候选框,都会对公共的重叠区域进行卷积操作(提取每个候选框的特征),这个操作其实是冗余的。这将在Fast RCNN中进行优化。
  • 训练图像分类网络,训练SVM分类器,训练回归器,每个过程都是独立的,过程繁琐
  • 对于边界框SVM分类器是如何训练的?图像分类器(CNN操作)训练好之后,我们需要将每个图像的每个候选框的目标特征信息提取出来并保存到电脑的硬盘中(从每个图像中的每个边界框提取特征,并写入磁盘。)。然再再利用这些信息去单独地训练我们的SVM分类器以及bounding box 回归器。

你可能感兴趣的:(目标检测,r语言,cnn)