R-cnn目标检测系列阅读笔记

了解下R-CNN

R-CNN:区域CNN。主要论文:

  1. R-CNN: https://arxiv.org/abs/1311.2524

  2. Fast R-CNN: https://arxiv.org/abs/1504.08083

  3. Faster R-CNN: https://arxiv.org/abs/1506.01497

  4. Mask R-CNN: https://arxiv.org/abs/1703.06870

目标检测是一种找到图像中的不同目标并进行分类的任务。通过在PASCAL VOC测试(类似于ImageNet)

理解R-CNN

输入:图像 输出:边界框+图像中每个目标的标注
区域提案,判断目标
R-CNN通过在图像中假设了一些列边界,再利用卷积神经网络和分类器识别是否可以真的对应一个目标。创造这些边界框的方法叫做区域提案(region proposal)。一旦创建了这些提案,R-CNN简单的将该区域卷曲到一个标准的平方尺寸,并将其传递给修改版的AlexNet,在CNN的最后一层,R-CNN添加了一个支持向量机(SVM),可以简单的界定物体是否为目标,什么事目标。
提升边界框
题目意思是找到了目标后,收紧边框适应目标的真实尺寸。这是R-CNN的最后一步。R-CNN在区域提案上运行简单的线性回归,以生成更紧密的边界框坐标从而获得最终结果。(怎么运行线性回归?)
所以概括起来,R-CNN只是以下简单的步骤:
1.为边界框生成一组提案;
2.通过预训练的ALexNet运行的边界框中的图像,最后通过SVM来查看框中图像的目标是什么;
3.通过线性回归模型运行边框,一旦目标完成分类,输出边框的更紧密的坐标

缺点:R-CNN准确度很棒,但是运行很慢,原因如下:
1,需要CNN模型针对每个图像的每个提案区域进行前向传递
2,必须分别训练三个不同的模型–1.CNN生成图像特征,2,分类器3,收紧边界框的回归模型。使得传递难以训练

FAST R-CNN

R-CNN的第一作者解决了R-CNN的主要两个问题,创造了第二个算法–Fast R-CNN.解决方法的主要思想包括:
1.ROI(兴趣区域)池化
对于每个图像的每个提案,都要进行CNN计算,大约2000次。ROI Pool(兴趣区域池化)对每个图像只运行一次CNN,然后在2000个提案中共享计算的方法。
原理:CNN卷积计算能够保留了空间信息。
过程:创建了图像的完整前向传递,并从获得的前向传递中提取每个兴趣区域的转换特征。通过从从 CNN 的特征映射选择相应的区域来获取每个区域的 CNN 特征。然后,每个区域的特征简单地池化(通常使用最大池化(Max Pooling))。所以我们所需要的是原始图像的一次传递,而非大约 2000 次!
2.将所有模型并入一个网络
Faster R-CNN将卷积神经网络,分类器和边界框回归器组合为一个简单的网络。
在这里插入图片描述
在上述图像中,你可以看到这些工作是如何完成的。Fast R-CNN 在 CNN 顶部用简单的 softmax 层代替了支持向量机分类器(SVM classfier)以输出分类。它还添加了与 softmax 层平行的线性回归层以输出边界框坐标。这样,所有需要的输出均来自一个单一网络!下面是整个模型的输入和输出:
输入:带有区域提案的图像
输出:带有更紧密边界框的每个区域的目标分类

Faster R-CNN-加速区域提案

降低提案区域生成的成本,几乎降为0;
整体过程:输入:一张图片 输出:一个边框列表,每个边框会被分配一个标签,还有每对标签和边框所对应的概率。
主要内容:
1,卷积层:作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
2,Region Proposal Networks(区域提案网络)。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。
3,Roi Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps(提案区域的特征向量),送入后续全连接层判定目标类别。
4,Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置
在这里插入图片描述
python中的VGG16模型中标的Faster R-cnn的网络结构:
在这里插入图片描述
首先将任意大小的图像缩放至标准大小MxN,经过卷积层的特征提取,其中包括13个卷积层和4个池化层;RPN网络首先经过3x3的卷积,再分别生成positive anchors 和对应的 bounding box regression偏移量,然后计算出proposals;而Roi Pooling层则利用proposals从feature maps中提取proposal feature送入后续全连接和softmax网络作classification(即分类proposal到底是什么object)。
1.基础网络 卷积
在图像分类中ResNet优于VGG
ResNet 在使用残差连接和批归一化的方法后更加易于训练,这些方法在 VGG 发布的时候还没有出现。
**2.RPN **
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 box锚点

为了选择合适的锚点,定义一组固定的尺寸:64px或者128px和长宽比例(0.5,1,1.5等)的边框,使得最后的变量所有的可能组合得到候选边框。在论文中作者根据上面的比例生成了下面的9个anchors
在这里插入图片描述
注:关于上面的anchors size,其实是根据检测图像设置的。在python demo中,会把任意大小的输入图像reshape成800x600(即图2中的M=800,N=600)。再回头来看anchors的大小,anchors中长宽1:2中最大为352x704,长宽2:1中最大736x384,基本是cover了800x600的各个尺度和形状。
这9个anchors怎么用?
对原图像经过卷积层的特征图中的每一个点,都配备这9种anchors作为初始检测框。后边再进行回归拟合出更准确地边框位置。其实RPN最终就是在原图尺度上,设置了密密麻麻的候选Anchor。然后用cnn去判断哪些Anchor是里面有目标的positive anchor,哪些是没目标的negative anchor。所以,仅仅是个二分类而已!下面看下论文中图片的过程:
在这里插入图片描述
多少个卷积核,多少个特征。1.经过卷积层,共有256个特征图,即一个位置256维度;
2,特征图上每个点有k个anchor(默认k=9),每个anchor判断是不是目标,所以每个点由256维的特征转换为2k的判断值,而每个人anchor都有(x,y,w,h)对应4个偏移量,所以reg=4k coordinates;
3,补充一点,全部anchors拿去训练太多了,训练程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练(选择标准?)

因为我们只用到了卷积和池化层,所以特征图的最终维度与原始图片是呈比例的。数学上,如果图片的尺寸是 w×h,那么特征图最终会缩小到尺寸为 w/r 和 h/r,其中 r 是次级采样率。如果我们在特征图上每个空间位置上都定义一个锚点,那么最终图片的锚点会相隔 r 个像素,在 VGG 中,r=16。下图是原始图片的锚点对应的中心
原始图片的锚点中心
1.softmax判定出positive anchor作为候选区域,完成了区域提案
在这里插入图片描述
过程如下:
MxN的图像经过特征提取到RPN网络前变(M/16)x(N/16),不妨设 W=M/16,H=N/16。在进入reshape与softmax之前,先做了1x1卷积,经过卷积输出图像为WxHx18大小(18个卷积核),softmax的前面做reshape是为了方便分类,变为[1,2,9xH,W]大小,之后再reshape回去。

2,回归网络原理
在这里插入图片描述
对于窗口一般使用四维向量(x,y,w,h)表示,分别表示窗口的中心坐标和宽高。对于上图,红色的框A表示原始的positive Anchors,绿色的框G 表示目标的GT,我们的目标是寻找一种关系,使得输入原始的anchor A经过映射得到一个跟真实窗口G更接近的回归窗口G’,即:
寻找一种变化F,使得F( A x A_{x} Ax, A y A_{y} Ay, A w A_{w} Aw, A h A_{h} Ah)=( G x , G_{x}^, Gx,, G y , G_{y}^, Gy,, G w , G_{w}^, Gw,, G h , G_{h}^, Gh,),其中( G x , G_{x}^, Gx,, G y , G_{y}^, Gy,, G w , G_{w}^, Gw,, G h , G_{h}^, Gh,) ≈ \approx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值