目标检测(RCNN,Fast R-CNN,Faster R-CNN)

一、写在之前

1.两类目标检测算法

  • 一类是基于Region Proposal(区域推荐)的R-CNN系算法(R-CNN,Fast R-CNN, Faster R-CNN等),这些算法需要two-stage,即需要先算法产生目标候选框,也就是目标位置,然后再对候选框做分类与回归。

  • 而另一类是Yolo,SSD这类one-stage算法,其仅仅使用一个卷积神经网络CNN直接预测不同目标的类别与位置。

  1. 交并比and非极大值抑制

(1)交并比
(2)非极大值抑制(NMS)

(1)将所有框的得分排序,选中最高分及其对应的框

(2)遍历其余的框,如果和当前最高分框的重叠面积(IOU)大于一定阈值,我们就将框删除。(为什么要删除,是因为超过设定阈值,认为两个框的里面的物体属于同一个类别,比如都属于狗这个类别。我们只需要留下一个类别的可能性框图即可。)

(3)从未处理的框中继续选一个得分最高的,重复上述过程。

原文链接:https://blog.csdn.net/zouxiaolv/article/details/107400193

2.两个核心任务:分类+定位

  • 将定位视为目标框的回归问题

  • 分类

  • 实施步骤

(1)训练(或下载)一个分类网络(VGG, GoogLeNet,ResNet )

(2)在网络末端增加一个新的全连接“回归分支”

(3)训练定位的“回归分支”(或两个分支联合训练)

(4)测试时,两个分支均进行预测

二、RCNN、Fast R-CNN、Faster R-CNN

  1. RCNN

(1)Region Proposals(候选区域)

• 首先找到或设定图像中可能存在物体的所有区域

• 再对这些区域进行检测、分类

(2)Selective Search (SS)算法

利用图像分割产生初始分割区域 -> 利用相似度进行区域合并

步骤:

  • 使用一种分割手段,将图像分割成小区域 (1k~2k 个)

  • 计算所有邻近区域之间的相似性,包括颜色、纹理、尺度等

  • 将相似度比较高的区域合并到一起

  • 计算合并区域和临近区域的相似度

  • 重复3、4过程,直到整个图片变成一个区域

在每次迭代中,形成更大的区域并将其添加到区域提议列表中。这种自下而上的方式可以创建从小到大的不同scale的Region Proposal,如图所示:

》》如何计算两个区域的相似度?

--计算颜色、纹理、大小和形状交叠的差异,用不同的权重相加

(3)R-CNN算法步骤

1.候选区域的生成

原图上使用Selective Search算法产生一些感兴趣的区域,也就是可能含有目标的区域(region proposals)。

2.将产生的候选区域resize到一个固定大小(因为神经网络的输入是固定的,其实卷积操作的输入可以不固定,全连接层的输入大小才是固定的,这也是后面几个模型会改进的)

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

将resize后的图像输入到一个CNN网络(这个网络可以是现成的模型,然后微调即可),CNN网络会提取出固定维度的特征向量(原文中使用了AlexNet,去掉最后一个输出层,提取出4096维的特征,也远比传统方式的少了很多)

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

再将提取到的特征输入给预先训练好的一组SVM分类器(一共有k个,k即是类别总数,每个都是二分类器),识别出区域中的目标是什么(同时也就大致定位了目标的位置)

4.使用回归器精细修正候选框位置

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

具体过程可以看看以下两篇文章:https://blog.csdn.net/STATEABC/article/details/123881710

https://blog.csdn.net/muye_IT/article/details/124309145

缺点

• 使用Selective Search生成候选区域非常耗时

• 一张图像~2K个候选区域,需~2K次CNN提取特征,存在大量重复计算

• 特征提取、图像分类、边框回归是三个独立步骤,需分别训练,测试效率低

  1. Fast R-CNN算法

(1)ROI pooling

利用特征采样,把不同空间大小的特征,变成空间大小一致的特征

1.根据输入image,将ROI映射到feature map对应位置;

2.将映射后的区域划分为指定数量的的sections(sections数量与输出的维度相同);

3.对每个sections进行max pooling操作;

这样我们就可以从不同大小的方框得到固定大小的相应 的feature maps。值得一提的是,输出feature maps的大小不取决于ROI和卷积feature maps大小。

ROI pooling example

我们有一个8*8大小的feature map,一个ROI,以及输出大小为2*2.

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

2.region proposal 投影之后位置(左上角,右下角坐标):(0,3),(7,8)。

3.将其划分为(2*2)个sections(因为输出大小为2*2),我们可以得到:

(2)算法流程

1.一张图片生成1k~2k个候选区域(使用Selective Search方法);

2.将整幅图像输入到CNN网络中,得到相应的特征图,再将SS算法生成的候选框投影到特征图上获得相应的特征矩阵;

3.将每个特征矩阵通过ROI(Region of Interest) pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。

敲重点:

Fast-RCNN将整张图像(不限制输入图像的尺寸)输入网络,紧接着从输入图像上提取相应的候选区域。再根据每个候选区域原图与特征图的映射关系,就能在特征图中直接获取特征矩阵,这些候选区域的特征不需要再重复计算。

  1. Faster R-CNN

具体内容看这篇文章,写的非常好,以下内容基本为搬运:https://blog.csdn.net/qq_47233366/article/details/125579620

(1)概览

那么Faster R-CNN相较于Fast R-CNN有什么要的改进呢?其实最主要的就是在Fast R-CNN中我们依旧是和R-CNN一样采用SS算法来生成候选框,而在Faster R-CNN中我们采用的是一种称为RPN(Region Proposal Network)的网络结构来生成候选框。其它部分基本和Fast R-CNN一致,所以我们可以将Faster R-CNN的网络看成两部分,一部分是RPN获取候选框网络结构,另一部分是Fast R-CNN网络结构。

  • 对于一个P*Q大小的图片,我们先将其resize到特定的M*N大小,之后再送入特征提取网络。

  • 此外,可以看到图中的特征提取网络有13个卷积层,4个池化层,其实这个特征提取网络用到就是大名鼎鼎的VGG。值得一提的是在VGG网络中,卷积采用的都是3*3的卷积核,卷积后特征图尺寸不变;而池化采用的是2*2的池化核,池化后特征图尺寸减半。也就是说,在上图的特征提取网络中,含有四个池化层,因此我们最终得到的特征图的尺寸是原来的1/16,即为{M/16)*(N/16)

(2) RPN网络结构

对特征图分别进行路径①和路径②上的操作,其中路径①上的操作即为RPN网络结构。下面我们就来重点谈谈这个RPN网络结构,RPN就是来提取候选框的

  • 用一个3*3的滑动窗口遍历刚刚得到的特征图,其实这就对应了图4.1路径①中的第一个3*3的卷积,卷积过程padding=1,stride=1。之后计算出滑动窗口中心点对应原始图像上的中点, 最后在原始图像每个中心点绘制9种anchor boxes 。【注:怎么由特征图的中心点坐标得到原图的中心点呢?——我们采用的是VGG骨干网络,原图和特征图尺寸相差16倍,因此只需要将特征图中心点坐标乘16即可;或者我们可以计算出中心点在特征图中的相对位置,进一步得到原图中心点位置】

接下来我们看看经过3*3卷积后特征图的变化,因为采用的是卷积核k=3*3,p=1,s=1的卷积,所以卷积后特征图尺寸没有发生变化,这里说一下这个channel=512是由于VGG网络最后一层的输出通道数为512。

3*3卷积后由分别走路径③和路径④进行相关操作。其实路径③就是对刚刚得到的anchor进行分类(前景和背景),而路径④则是对anchor进行回归微调。

  • 首先先来谈谈路径③。首先进行一个1*1的卷积,卷积核个数为18。首先我们要知道的是路径③我们要做的是区分每个anchor是前景还是背景,即分成两个类别,而对于每个小方格都会在原图上生成9个anchor。这样2*9=18,得到的结果中每个小方块就代表原始图像中某个位置每个anchor是否为前景或背景的概率。1*1的卷积后,就进行了softmax层进行分类。【注:在softmax层前后都有一个reshape的操作,这是因为在编写代码时会对输入的格式有要求】 softmax层分类后我们会得到所有的正类的anchor(positive anchors)和负类的anchor(negative anchors)。

  • 接着就来谈谈路径④,同样的,先是一个1*1的卷积,卷积核个数为36。因为在进行回归微调anchor的时候每个anchor需要四个参数,4*9=36,得到的结果中每个小方块就代表原始图像中某个位置每个anchor四个需要调整的参数。

  • 接下来路径③和路径④在Proposal这步结合,这步是干什么的呢?其实呀,这一步就是综合了路径③和路径④中的信息,即分类结果和anchor框的回归参数,目的是得到更加精确的候选框(Region Proposal)。细心的同学可能还发现了proposal这步还有一个输入,即im_info,这个参数保存了一些图片尺寸变换的信息,像开始的resize,后面的池化等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值