[深度学习入门]两阶段目标检测算法到Faster RCNN

目标检测

一、两阶段法

1、概述:

计算机视觉:

  • 三大热点方向:计算机视觉、自然语言处理、语音识别
  • 四类任务:图像分类(label)、目标检测(what+where)、图像语义分割(what+where)、图像实例分割(what+where)
    目标检测:位置+类别
    问题:尺寸范围大,物体角度、姿态不定,可以出现在图片任何地方,多类别

数据集:

  • PASCAL VOC(VOC2007/VOC2012)
  • MS COCO(MSCOCO2014/MSCOCO2017 训练集:118287/验证集:5000)
  • Object365密集标注(63W)

2、传统目标检测:

  • 人工设计特征,机器根据人工设计的特征检测(更关注单类别)

(1)基于滑动窗的目标检测
困难:计算量大、很难基于特定的特征去适应多类别

(2)VJ Detector:实时目标检测(人脸)
将图像表示为积分图像,eg: 人脸明暗变化
使用Adaboost,构建多个弱分类器
采用Cascade级联多个强分类器,快速过滤大量不相关窗口

(3)HoG 行人检测
使用物体检测特征描述子,在人脸检测上有效

(4)DPM:
基于HoG行人检测衍生出来的,基于组件的检测特征及算法网络,在HoG特征的基础上提取了更具辨识力的特征

传统目标检测的问题:

  1. 人工特征设计局限性
  2. 计算复杂
  3. 后面依赖分类器

3、两阶段目标检测:

**(1)深度学习下的目标检测:**图像->网络->输出类别、框

边界框回归:通过学习一种映射关系,对目标候选的位置进行精化
IOU(交并比):用来衡量真实标注和预测结果的重合程度
NMS(非极大值抑制):消除冗余的检测框

两阶段法: 判断有无目标后回归,后将目标分类后回归
一阶段法:直接对框判断分类,同时对位置进行回归

(2)两阶段法
1)RCNN

  • 提取候选框:
    方法:Selective Serach选择性搜索:根据相似度融合的方法

问题:
每张图需要额外步骤提取region proposal候选框
存储和重复提取每个region proposal的特征花费大量存储和计算资源

  • 特征提取:
    方法:CNN
    问题:保存所有数据候选区域的特征,浪费资源

  • 区域分类
    方法:为每一个类训练SVM分类器
    问题:每个SVM需要单独训练,网络复杂、空间消耗大

  • 边界框回归
    方法:最小二乘法线性回归(输入:特征、真是位置;输出:修正位置)
    问题:比较笨???

2)SPP-Net

  • 不再对每个候选区做扭曲
  • 不再对每个候选区提取CNN特征
  • 直接提取整个图像特征,将图像的扭曲变成特征上的变化

作用:减少了提取特征的时间和用来存储特征的空间
做法:空间金字塔池化

特征划分成多个固定网格(16*16、 4 * 4 、 1 * 1)取pooling
优势:无论特征维度大小,输出维度都统一,提升了CNN提取特征的质量

3)Fast RCNN

  • 分类回归方法更新:ROI pooling :不固定输入特征大小,改变max pooling大小使最终输出特征图都为6*6

与SPP-Net的异同:
a. 都是特征而不是图像的warp
b. SPP-Net是空间金字塔池化
c. Fast R-CNN是ROI Pooling

  • 直接提取整幅图像特征,在特征上进行wrap
  • 多任务损失:将分类损失和回归损失统一在同一个网络框架内

4)Faster R-CNN

  • 更新:提取候选框
    VGG提取特征
    RPN网络(子网络):提取候选区域——替代了selective sreach
    全连接:确定目标,做回归

a. region proposal候选框
b. Anchor Box : 用于预测的特征图上的每个点叫anchor,根据就每个点生成的区域叫anchor box
每个点取一个anchor box ,则K=1,通过3*3大小的卷积核滑动,得到与原来特征图相同的6通道大小的特征图:
1:特征图该位置是目标的概率
2:特征图该位置不是目标的概率
3:中心点X坐标
4:中心点Y坐标
5:边框宽度偏移量
6:边框高度偏移量

(1)整体架构

[深度学习入门]两阶段目标检测算法到Faster RCNN_第1张图片

 

Faster RCNN是一个端到端的网络——输入图片,得到检测框

BackBone部分由16层的VGG网络提取图片特征,其中CNN网络如图所示,黄色是conv层,蓝色是relu激活函数,绿色是pooling

Backbone输入是一张图片,输出是图片的特征图

之后通过RPN网络得到Anchor。这种方法相较于RCNN中Selective Serach选择性搜索方法,不需要额外步骤提取候选框,且降低了存储和重复提取每个region proposal的特征花费大量存储和计算资源;相较于Fast RCNN分类时为每个类训练相应的SVM分类器,减少了空间消耗和不必要的资源浪费,同时优化了原来的边界框回归方法,从原来的最小二乘法变成了现在的Smooth L1,可以处理数据中的异常值,相较于最小二乘法和L1更加具有鲁棒性。

然后选择包含物体的Anchor输入到ROI Pooling,ROI pooling所有候选框共享一张特征图,且保持最终输出大小一致,提高了提取特征的速度

最后ROI提取的特征输入BBox Header中,进行分类和回归,将结果解码,去除相似的框,得到最终的预测结果,实现端到端的图片特征提取。

(2)BackBone

VGG16优点:

1、结构简洁

2、小卷积核和连续的卷积层

3、小池化核,使用的是2×2

4、通道数更多,特征度更宽

5、层数更深

6、全连接转卷积

[深度学习入门]两阶段目标检测算法到Faster RCNN_第2张图片

(3)FPN[深度学习入门]两阶段目标检测算法到Faster RCNN_第3张图片 

 

RPN网络首先根据得到的特征图,提取Anchor。每个像素点根据大小和比例不同生成不同大小和长宽比的Anchor

另外,通过一个3*3的卷积核,得到与原来特征图相同的6通道大小的特征图:

其中两维为分类模块,判断提取的框中是否存在目标;

另外四维为回归模块,判断框与真实框的中心位置(两维)、框的宽、高(两维)的偏移量;

decode:将RPN和Anchor输出解码

(4)ROI Pooling

目的:所有候选框共享一张特征图,且保持最终输出大小一致

做法:

1、输入的固定大小的feature map

2、获取Region proposal 投影之后位置

3、将其划分为(2*2)个sections(因为输出大小为2*2)

4、对每个section做max pooling,最终可以得到右下角所示ROI feature

[深度学习入门]两阶段目标检测算法到Faster RCNN_第4张图片[深度学习入门]两阶段目标检测算法到Faster RCNN_第5张图片

 

 (5)Back Head

[深度学习入门]两阶段目标检测算法到Faster RCNN_第6张图片

 

ROI Feature 经过Pooling将特征图压缩,然后这个特征经过两个全连接层作为分类分支和和回归分支的预测,最后再计算LOSS

预测阶段和RPN阶段相似,先将head部分的输出和RPN输出的ROI解码得到预测框,再

filter:  过滤面积过小的

top_k:分数排序,过滤分数较低的

NMS:去掉十分接近的目标框

top_k: 排序,过滤分数低的

5)FPN:

  • 特征融合,多层预测提升精度:通过将深层次特征与浅层次特征相融合,加强浅层特征图的语义信息,提高检测精度
  • 相较于Faster RCNN,FPN在在特征金字塔上使用RPN提取候选框,并在特征金字塔多个尺度上进行预测

6)R-FCN:

  • Detection部分不再使用全连接层,整个网络由卷积层组成
  • Score Maps层
  • ROI Pooling层

7)Mask R-CNN:

  • 基础网络:ResNet-101+FPN
  • 采用ROI Align,解决misalignment
  • 处理分割任务的分支使用全卷积网络

 

你可能感兴趣的:(深度学习,深度学习)