学习前言
提示:!作为计算机视觉中的基本视觉识别问题,目标检测在过去的几十年中得到了广泛地研究。目标检测旨在给定图像中找到具有准 确 定 位 的 特 定 对 象,并为每个对象分配一个对应的标签。近 年 来,深度卷积神经网络 凭借其特征学习和迁移学习的强大能力在图像分类方面取得了一系列突破,在目标检测方面,它越来越受到人们的重视。因此,如何将 CNN应用于目标检测并获得更好的性能是一项重要的研究。
一、R-CNN
- 首先通过selective search方法从一张图片中产生候选框(大概2000个);
- 对于每一个候选框分别进行卷积网络的操作,得到特征(慢);
- 做Bbox回归,让它离ground truth真实框越来越近,再根据特征判断它是什么类别。
RCNN的问题:
- 大小不一的候选框没有共享卷积网络,这是因为对大小不一的图片提取特征仍得到尺寸大小不一的特征,而卷积网络里面有全连接层FC,无法处理。
- 分类用SVM,这样有些麻烦了。
二、Fast R-CNN
在介绍Fast R-CNN之前,先概述SPP Net(Spatial Pyramid Pooling,空间金字塔池化)原理:
先把每个特征图分割成多个不同尺寸的网格,比如网格分别为4x4、2x2、1x1,然后每个网格做max pooling,这样256层特征图就形成了16x256,4x256,1x256维特征,他们连起来就形成了一个固定长度的特征向量,将这个向量输入到后面的全连接层。CNN原本只能固定输入、固定输出,CNN加上SSP之后,便能任意输入、固定输出。
解决了不同卷积大小,对最终结果与全连接层怎么连的问题?
- 只有一个卷积网络,可以共享卷积。(速度变快了)通过卷积网络得到共享特征层。
- 在共享特征层上找ROIs(Regions of Internet)感兴趣区域候选框。
- 通过ROI Pooling layer 得到固定的特征大小(此操作与SPP功能一样,可以理解为SPP特例),这样就可以连接全连接层FCs.
- 再分类、回归。
Fast R-CNN的问题:
- 必须要有ROI,ROI还是用传统方法再原始图像上找,因此只能再CPU上算,无法迭代到神经网络中(论文中selection search 大概花费在2s左右)。
三 、 Faster R-CNN
想: 在神经网络当中边迭代边自动的产生候选框,然后再对候选框执行一些操作。
设计思想:
- 把所有操作都放在神经网络中,实现 end to end 便于训练与计算。
- 卷积共享
- RPN----输入任意大小的一张图,输出一系列框。
RPN是全卷积网络,做了两件事:第一,看框内是不是物体;第二:是物体的前提下,看框是什么位置,不是物体则直接过滤掉。
简要概述: 当一张图片被传输到Faster R-CNN时,它会把图片resize成最小边600,为了防止失真,长宽比保持不变。这张图片会传入主干特征提取网络中,当我们输入的图片是600x800时,我们会获得一个38x50的特征层,相当于将图片分成38x50的网格,每个网格存在9个先验框。利用RPN区域建议网络,就会获得先验框的调整参数以及先验框内是否包含物体,此时我们就获得了建议框,利用这些建议框就能在特征图上进行截取,截取到的不同特征层就能反映原图上的不同位置。截取到的内容此时会传入ROI pooling成中,为了满足对不同大小图片的检测,ROI pooling成会把截取到的不同大小的特征层区域resize到一样大小,然后利用分类与回归网络判断截取到的图片中是否包含目标,并对建议框进行调整。建议框调整后的结果就是我们整体的预测结果啦。
简单来说,Faster R-CNN就是将预测过程分成了两步,一步是初略的筛选,另一步是精细的调整。
(核心)RPN网络:
得到:当前框,以及框是不是物体的得分,而不是属于哪个类的得分
上图展示了RPN网络的具体结构。可以看到RPN网络实际分为2条线,上面一条通过softmax分类anchors获得positive和negative分类,下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。
anchor:
简单地说,RPN依靠一个在共享特征图上滑动的窗口,为每个位置生成9种预先设置好长宽比与面积的目标框(即anchor)。这9种初始anchor包含三种面积(128×128,256×256,512×512),每种面积又包含三种长宽比(1:1,1:2,2:1)。
其实RPN最终就是在原图尺度上,设置了密密麻麻的候选anchor。进而去判断anchor到底是前景还是背景,意思就是判断这个anchor到底有没有覆盖目标,以及为属于前景的anchor进行第一次坐标修正。
整体执行流程
几个小tip:
1、共包含了两次解码过程。
2、先进行粗略的筛选再细调。
3、第一次获得的建议框解码后的结果是对共享特征层featuremap进行截取。