RCNN家族的详解(RCNN,FAST RCNN, FASTER RCNN)

目标检测

在目标检测中,一类是基于Region Proposal的R-CNN系算法(R-CNN,Fast R-CNN, Faster R-CNN),它们是two-stage的,需要先使用启发式方法(selective search)或者CNN网络(RPN)产生Region Proposal,然后再在Region Proposal上做分类与回归。

而另一类是Yolo,SSD这类one-stage算法,其仅仅使用一个CNN网络直接预测不同目标的类别与位置。第一类方法是准确度高一些,但是速度慢,但是第二类算法是速度快,但是准确性要低一些。

RCNN

在这里插入图片描述

在RCNN中,与传统的目标检测方法不同,它不再是通过这个网络在一张大图sliding windows,就能确定存在物体的区域,再根据回归,来使得bounding box框得到优化。

它是利用选择性搜索在图像中提取了2000个左右的候选框,然后将这些候选框缩放到227*227进入卷积神经网络中,然后再使用卷积神经网络提取其中的特征到SVM进行分类,SVM分类完成后就做边框的回归,根据回归值预测窗口的坐标。

选择性搜索思想:

  1. 假设现在图像上有n个预分割的区域(Efficient Graph-Based Image Segmentation),表示为R={R1, R2, …, Rn}。
  2. 计算每个region与它相邻region(注意是相邻的区域)的相似度,这样会得到一个n*n的相似度矩阵(同一个区域之间和一个区域与不相邻区域之间的相似度可设为NaN),从矩阵中找出最大相似度值对应的两个区域(R1,R2),将这两个区域合二为一,并添置到R中,并移除R2的相关子集,这时候图像上还剩下n-1个区域。
  3. 重复上面的过程(只需要计算新的区域与它相邻区域的新相似度,其他的不用重复计算),重复一次,区域的总数目就少1,直到最后所有的区域都合并称为了同一个区域

RCNN训练分为多个阶段:微调网络+训练SVM+训练边框回归器,因此也十分耗时。
在这里插入图片描述

Fast RCNN

在这里插入图片描述
在Fast-RCNN中,也是利用选择性搜索,提取2000个左右的RPN,但是与RCNN不同的是,这里是直接将这幅图输入到CNN中,进行特征提取,通过ROI pooling将每个建议窗口固定成相同的尺寸,然后再把这些候选框映射到最后一层的卷积层中,最后利用softmax loss 和smoth loss对分类的概率和边框的回归进行联合训练。
在这里插入图片描述

与RCNN的对比:

(1) 测试时速度加快:RCNN把一张图像分解成大量的建议框,每个建议框拉伸形成的图像都会单独通过CNN提取特征.实际上这些建议框之间大量重叠,特征值之间完全可以共享,造成了运算能力的浪费。将整张图像归一化后直接送入CNN,在最后的卷积层输出的feature map上,加入建议框信息,使得在此之前的CNN运算得以共享.

(2) 训练速度加快,在RCNN中,RCNN在训练时,是在采用SVM分类之前,把通过CNN提取的特征存储在硬盘上。这种方法造成了训练性能低下,因为在硬盘上大量的读写数据会造成训练速度缓慢。
Fast RCNN在训练时,只需要将一张图像送入网络,每张图像一次性地提取CNN特征和建议区域,训练数据在GPU内存里直接进Loss层,这样候选区域的前几层特征不需要再重复计算且不再需要把大量数据存储在硬盘上。

(3) 训练所需空间改善:R-CNN中独立的SVM分类器和回归器需要大量特征作为训练样本,需要大量的硬盘空间.Fast RCNN把类别判断和位置回归统一用深度网络实现,不再需要额外存储。

(4)新加了ROI pooling方法,这里介绍一下ROI池化。

因为之前深度网络中,需要固定输入层尺寸,如果固定网络输入的话,要么选择crop策略,要么选择warp策略,crop就是从一个大图扣出网络输入大小的patch(比如227×227),而warp则是把一个bounding box的内容resize成227×227 。无论是那种策略,都能很明显看出有影响网络训练的不利因素,比如crop就有可能crop出object的一个部分,而无法准确训练出类别,而warp则会改变object的正常宽高比,使得训练效果变差。而ROI池化就是为了解决这一问题。

ROI是利用特征采样,将不同空间大小的特征变成空间大小一致的特征。

首先,我们输入一张图片,将ROI(感兴趣的区域)映射到相应的位置,映射关系根据图像的大小来确定。并且将ROI Pooling输出的坐标,映射到上一步的特征区域中,同时会生成多个边界作于池化。 之后我们将不同大小的边框变成固定大小的特征区域,值得一提的是,输出的feature maps的大小不取决于ROI和卷积feature maps大小,而是取决于该层设置的pooled_h与pooled_w。ROI pooling 最大的好处就在于极大地提高了处理速度。这样不管给定feature map输入的大小,使得输出的数据维度统一,
在这里插入图片描述

Faster RCNN

Faster RCNN 对输入的整张图像进CNN中,作特征处理,然后利用RPN生成大约300个候选框,之后就将这些RPN映射到最后一层卷积中,通过ROI pooling生成固定大小的特征区域,利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练。

Faster RCNN中最大的亮点是RPN。和RCNN,Fast RCNN不同的,这里使用了RPN代替了选择性搜索,数量上也从2000减少到300,并且产生建议窗口的CNN和目标检测的CNN共享,大大加快了速度。在RPN中,会随机选择正负样本,最后将正负样本的比例调整至1:1。

在RPN匹配中,也用到了IOU公式,IOU也叫做交并比区域。在IOU中,我们利用生成的两个矩形计算它们的重叠区域和并集区域,来计算它们之间的重叠度。使用了这个IOU,相当于对回归框进行微调。

计算预测框和真实框的IOU,如果大于0.7则为正样本,如果小于0.3则为负样本。首先每个预测框都去匹配最佳的真实框,但可能有的真实框会匹配不到,如果允许低质量匹配,那么会为每个真实框分配一个匹配度最高的预测框,可能低于0.7,但也视为真实框。
在这里插入图片描述

在Faster R-CNN中,为我们默认使用的anchor size为128,256,512,anchor aspect_ratio为0.5,1.0,2.0。(一个正方形,两个长方形)我们使用9个anchor送进去RPN中,之后输出了9个anchor中两个概率值和四个坐标。每个anchor经过回归后对应到原图,然后再对应到feature map经过ROI池化后输出77大小的map 最后对这个77的map进行分类和再次回归。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值