目标检测之---从R-CNN到Fast R-CNN再到Faster R-CNN

一、R-CNN

1.R-CNN简介

R-CNN可以说是利用深度学习进行目标检测的开山之作。作者Ross Girshick 多次在PASCAL VOC 的目标检测竞赛中折A桂,曾在2010年带领团队获得终身成就奖。

 2.R-CNN算法流程

R-CNN算法流程可以分为4个步骤

---一张图像生成1K~2K个候选区域(使用Selective Search方法)

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

---特征送入每一类的SVM分类器,判别是否属于该类

---使用回归器惊喜修正候选框位置

1)候选区域的生成

利用Selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。

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

将2000个候选区域缩放到227*227pixel,接着将候选区域输入事先训练好的AlexNet CNN 网络获取4096维的特征得到2000X4096维矩阵。

3)特征送入每一类的SVM分类器,判定类别

将2000X4096维矩阵与20个SVM组成的权值矩阵4096X20相乘,得到2000X20维矩阵表示每个建议框是某个目标类别的得分。分别对上述2000X20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。

矩阵运算如下图

非极大值抑制剔除重叠建议框概念图

4)使用回归器惊喜修正候选框位置

对NMS处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。

如下图,黄色框P表示建议框Region Proposal,绿色框G表示实际框Ground Truth,红色框G*表示Region Proposal进行回归后的预测框,可以用最小二乘法解决的线性回归问题。

 3.R-CNN存在的问题

1)测试速度慢:

测试一张图片约53(CPU)。用Selective Search算法提选候选框用时约2秒,一张图像内候选框之间存在大量重叠,提取特征操作冗余。

2)训练速度慢:

过程极其繁琐。

3)训练所需空间大:

对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,从VOCO7训练集上的5K图像上提取的特征需要数百GB的存储空间。

二、Fast R-CNN

1、Fast R-CNN简介

Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。同样使用VGG16作为网络的backbone,与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66%(在PascalVOC数据集上)

2、Fast R-CNN算法流程

Fast R-CNN算法流程可分为3个步骤

--- 一张图像生成1K~2K个候选区域(使用Selective Search方法)

--- 将图像输入深度网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵

---将每个特征矩阵通过ROI pooling层缩放到7X7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果

3、Fast R-CNN怎样进行特征提取?

4、训练数据的采样(正样本、负样本)

在训练过程中并不是直接使用SS算法提供的所有候选框,只是从中随机采样了一部分进行训练

 5、RoI Pooling Layer

如下图,对于不同size的RoI(object proposal),我们都把它划分成(7* 7)的网格,然后对每个网格(bin)内的全部像素点求一个max pooling,即选取一个最大值作为输出,所有最后对不同size的RoI,我们都得到7* 7的feature map。这点其实是借鉴SPPnet的,它相当于是SPP layer的一个特例,就是只使用了一个尺度(7* 7)。

6、分类器与边界框回归器

1)分类器

输出N+1个类别的概率(N为检测目标的种类, 1为背景)共N+1个节点。

其中的第0个节点表示的背景的概率。剩下的20个是其他所需检测的类别概率。这个概率是经过softmax处理之后的,是满足一个概率分布的,其和为1.而既然现在是需要预测21个类别的概率,所以目标概率预测的全连接层为21个节点。

2)边界框回归器

输出对应N+1个类别的候选边界框回归参数(d x , d y , d w , d h )。需要注意,这是每一个类别都有这4个参数。所以共(N+1)x4个节点。

也就是44个为一组,一组为一个边界框回归参数。那么如何根据回归参数得到最后的预测边界框?

对应着每个类别的候选边界框回归参数(d x , d y , d w , d h

PxPyPwPh 分别为候选框的中心xy坐标,以及宽高
GxGyGwGh 分别为最终预测的边界框中心xy坐标,以及宽高

7、多任务损失函数

1)分类损失

 2)边界框回归损失

 8、Fast R-CNN缺点

候选框的提议通过SS算法得到,达到了速度瓶颈。

三、Faster R-CNN

1、Faster R-CNN简介

Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。同样使用VGG16作为网络的backbone,推理速度在GPU上达到了5fps(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及COCO竞赛中获得多个项目的第一名。

2、Faster R-CNN算法流程

---将图像输入到网络得到相应的特征图

---使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵 

---将每个特征矩阵通过ROI pooling层缩放到7*7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果

3、RPN结构详解

RPN可以使用ZF和VGG16作为backbone,上图使用ZF作为backbone(intermediate layer通道深度为256).。anchor boxes通过原图和特征图对应的点进行计算,对于特征图的每个像素点,可以通过 原图的宽与高分别除以特征图的宽与高,对应得到原图上anchor的中心点,并以此为中心框出K个不同的anchor(通过框的大小和宽高比例调整出不同框)。

对于k个anchor,经过RPN层之后得到2K个scores(即输出是背景的概率和是前景的概率)和4K个coordinates(x,y,w,h分别为起始坐标,宽和高)。

计算Faster RCNN中ZF网络feature map中3*3滑动窗口在原图中感受野的大小。

产生数量巨大的候选框

4.RPN损失函数

1)RPN的分类损失

2)RPN的边界框回归损失

5、Faster R-CNN损失

6、Faster R-CNN训练

直接采用RPN Loss + Fast R-CNN Loss的联合训练方法

原论文中采用分别训练RPN以及Fast R-CNN的方法

1)利用ImageNet预训练分类模型初始化前置卷积网络层参数,并开始单独训练RPN网络参数;

2)固定RPN网络独有的卷积层以及全连接层参数,再利用ImageNet 预训练分类模型初始化前置卷积网络层参数,并利用RPN网络生成的目标建议框去训练Fast R-CNN网络参数

3)固定利用FastR-CNN训练好的前置卷积网络层参数,去微调RPN网络独有的卷积层以及全连接层参数

4)同样保持固定前置卷积网络层参数,去微调Fast R-CNN网络的全连接层参数。最后,RPN网络与Fast R-CNN网络共享前置卷积网络层参数,构成一个统一网格 

四、回顾三种网络架构

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值