深度学习之目标检测

RCNN->SppNET->Fast-RCNN-&g

2018-07-10  本文已影响122人  MapleLuv

参考:RCNN介绍
参考:RCNN,Fast RCNN, Faster RCNN整理总结

一、 RCNN
【借助CNN良好的特征提取和分类性能,通过RegionProposal方法实现目标检测问题的转化】

20180527152957814.png

RCNN三个步骤:

1)候选区域选择

2)CNN特征提取
标准CNN过程,根据输入进行卷积或池化等操作,得到固定维度的输出。在特征提取之后,特征映射被卷积和汇集以获得输出(向量)。

3)分类与边界回归
两个步骤:
1.分类:对前一步的输出向量进行分类,分类器需要根据特征进行训练。(分类器的选择中有支持向量机SVM、Softmax等等)
2.边界回归:通过边界回归框(bounding-box regression)进行回归,获得精确的目标区域。其目的是准确定位和合并完成分类的预期目标,并避免多重检测。(边界回归有bbox回归、多任务损失函数边框回归等)

RCNN缺点

二、SPP-Net
克服CNN特征提取过程卷积计算资源的耗费,提取整体特征(而不是对每个候选区域独立计算),分类之前仅仅做一次Region截取。

SPP-Net.png
改进:
1)取消了crop/warp图像归一化过程,解决图像变形导致的信息丢失以及存储问题;
2)采用空间金字塔池化(SpatialPyramid Pooling)替换了全连接层之间的最优一个迟化层。

空间金字塔池化

使得任意大小的特征图都能够转换成固定大小的特征向量,这就是空间金字塔池化的意义(多尺度特征提取出固定大小的特征向量),送入全连接层。整体框架大致为:输入图像,卷积层提取特征,空间金字塔池化提取固定大小特征,全连接层。

SppNet缺点:

  1. 和RCNN一样,训练过程仍然是隔离的,提取候选框 | 计算CNN特征| SVM分类 | Bounding Box回归独立训练,大量的中间结果需要转存,无法整体训练参数;
  2. SPP-Net在无法同时Tuning在SPP-Layer两边的卷积层和全连接层,很大程度上限制了深度CNN的效果;
  3. 在整个过程中,Proposal Region仍然很耗时。

三、Fast RCNN

改进点:对RCNN进行加速。(更快、更准、更鲁棒——是我们一直追求的目标)

四、Faster RCNN
* 对于提取候选框最常用的SelectiveSearch方法,提取一副图像大概需要2s的时间,改进的EdgeBoxes算法将效率提高到了0.2s,但是这还不够。
* 选框提取不一定要在原图上做,特征图上同样可以,低分辨率特征图意味着更少的计算量,基于这个假设,MSRA的任少卿等人提出RPN(RegionProposal Network),完美解决了这个问题,我们先来看一下网络拓扑。

Faster-RCNN.png

RPN分支

RCNN网络的演进:


RCNN网络的演进.png

Faster实现了端到端的检测,并且几乎达到了效果上的最优,速度方向的改进仍有余地,于是YOLO诞生了。

五、YOLO
YOLO来自于“YouOnly Look Once”,你只需要看一次,不需要类似RPN的候选框提取,直接进行整图回归就可以了。

YOLO.png

算法描述

  1. 将图像划分为固定的网格(比如7*7),如果某个样本Object中心落在对应网格,该网格负责这个Object位置的回归;
  2. 每个网格预测包含Object位置与置信度信息,这些信息编码为一个向量;
  3. 网络输出层即为每个Grid的对应结果,由此实现端到端的训练。

存在的问题

  1. 7*7的网格回归特征丢失比较严重,缺乏多尺度回归依据;

  2. Loss计算方式无法有效平衡(不管是加权或者均差),Loss收敛变差,导致模型不稳定。

     Object(目标分类+回归)<=等价于=>背景(目标分类)
    

SSD
由于YOLO本身采用的SingleShot基于最后一个卷积层实现,对目标定位有一定偏差,也容易造成小目标的漏检。
借鉴Faster-RCNN的Anchor机制,SSD(Single Shot MultiBox Detector)在一定程度上解决了这个问题,我们先来看下SSD的结构对比图。

SSD.png

【上面都是理论,接下来去代码实践一下】

上一篇下一篇

猜你喜欢

热点阅读