Faster R-CNN理解

一.简介

在R-CNN中的roi都是独自传入到通过与训练的CNN的分类器和box-regression中去形成了对应每一个roi都要通过独自的卷积操做十分耗时,Fast-RCNN解决了没有共享卷积层的问题,可是他们共同使用的selective search的边框生成方法过于复杂,成为了计算时间的一个瓶颈,由于Fast-RCNN在肯定ROI后能够在GPU上运行,可是selective rearch是不能够的,它只能在cpu上运行,所以这大大制约了系统的时间提高,那么做者提出将roi的选择也置于GPU上就能够大大加快Fast-Rcnn的预测。所以做者又提出了Faster-RCNN使用RPN的边框生成算法而完全的抛弃了selective的算法。
所以在这篇文章中做者提出了在特征图上对ROI进行选择,这样就可使用GPU和共享fast-Rcnn的主要结构,在Fast-RCNN的最后一层特征图上咱们构造一个RPN,经过添加一个额外的用来同时进行物体识别和边框回归的卷积层,所以这是一个全链接网络,由于咱们须要进行边框的回归就必须输出四个偏移量,外加判断是否为背景的边框识别,这都是依靠全链接层的将为操做才能实现的。
同时为了统一Fast-Rcnn和RPN做者提出了一个训练方案,使用fine-tuning在训练区域判断任务和已肯定区域的Fast-RCNN中进行交替迭代,这个方法的收敛效果很好,而且产生了卷积层共享的统一结构,置于RPN为什么要和Fast-Rcnn要在卷积层保持结构的不变性,主要的缘由在于这幅图算法

clipboard.png
在实现的时候,proposals的生成网络须要从最后的卷积层中提取一个256d的特征来肯定原始的ROIs同时判断值是否为背景只有在肯定了这两项后才能送入到Fast-Rcnn中进行boxing-regression和判断物体的种类。为了避免从新构建后续的网络也不必从新构建最后的网络,共享卷积层是最好的选择。网络

二.相关工做

1.proposals生成
2物体检测的深度网络
在R-Cnn中我端到端的对物体进行分类来判断它属于物体的哪一类或者背景,同时对于每一个类都会生成所对应的边框回归的参数,在判断好哪一类后就能够选择对应的边框回归参数!R-CNN仅仅至关于一种分类器,他的准确率极大的取决于他的边框区域生成模型,在 OverFeat 方法中,一个全链接层被训练来预测边框的坐标,注意是坐标不是回归量,而后被送到一层用来检测类肯定的物体的回归。在 MultiBoxs方法中,该链接层在肯定原始坐标后,它产生的是多种类不肯定的边框回归,也就是说这两个方法中,第一种是在肯定了类别后使用特定类的参数来进行边框回归的,可是第二种是将边框回归和物体分类独立起来了,须要产生更多的参数,在做者的模型中采用的是第一种方法函数

三.Faster-Rcnn

clipboard.png
Faster-Rcnn的结构如上,由两个部分组成,一个是深度全卷积网络来产生proposals信息,第二个是使用proposals的Fast-Rcnn detector,RPN来告诉Fast-Rcnn须要看那个区域优化

1.Region Proposal Networks(RPN)

RPN网络将一整幅图片(大小无所谓)做为输入,输出一些矩形框,且每个都有非背景得分,为了产生位置区域,咱们在输出特征图的最后一层使用n*n的子框从最后一层的卷积特征图上提取特征,以后将特征隐射到256d的区域中(个人理解就好在是颜色的三基色同样,经过映射,就能够判断这是背景与否),而后将这256d的数据送入的两个全连层中分别用来判断这是否为背景的(cls)与边框回归(reg)在本文中咱们设置n=3,由于接收域太大了过程以下
clipboard.pngspa

2.Anchors

在窗口滑动的过程当中,咱们同时预测了多个区域 proposals,对于每一个边框最大可能的形状有k种,所以CLS有2k个输出(即该形状的参考边框是不是背景),reg有4k个输出(及对该边框如何进行回归),同一个location的k种proposals咱们称之为anchor,而它能够经过中心点已经缩放度和长宽比来定义,咱们一般使用3种缩放比例和3种长宽比来默认初始化一个anchor,那么整个特征图就有MHK个anchor了设计

3.Translation-Invariant Anchors

若是一个物体被翻转了,那么咱们的proposal也应该可以翻转而且使用相同的函数能够预测它,这样翻转不变性在咱们的anchor中能够获得保障对比之下MultiBox方法使用k均值算法来产生800,并不具有翻转不变性,也就是说在一个objection在翻转后咱们的方法在相同的参数下都能准确的预测到它的proposal,这就是那4k数量的做用了,若是是在肯定了使用某个类型的anchor就会损失这样的性质。同时也减小了咱们的输出的数量也就致使了参数的减小。索引

4.Multi-Scale Anchors as Regression References

对于不一样大小的图片输入状况,传统的作法有两种
1.对图像进行多尺度的缩放后独自计算各自的特征图,可是这太耗时间了
2.使用不一样的大小的bounding-boxing来对objection进行判别,而所谓的不一样大小就是金字塔型的图片

咱们的anchors的方法就参考了金字塔滤波,为何要这么说尼?由于咱们同一个特征图区域对应9种proposals,很明显就是金字塔滤波。正是这种相似于金字塔滤波的设计,咱们可以在没有添加其余损失项的状况下解决不一样大小的目标问题!ip

5.Loss Function

在训练RPNs的时候咱们对每一个anchor指定了一个二值标签,咱们对如下两种anchor断定为正的
1.与 ground-truth box有着最高的iou的那些anchor
2.iou高于0.7的那些anchorit

clipboard.png

那么咱们的损失函数如上,其中i是mini-batch中第i个索引pi是i个anchor为物体的几率 p i∗为正标签(1)若是该anchor知足上面的条件1,2,后面一项如Fast-Rcnn的定义相同

2.Training RPNs

RPN能够经过反向传播或者SGD来进行训练每一个mini-batch都来源于一幅图且包含了多个正的和负的案例anchors,优化这样的loss是可能的,可是这回会出现一个问题,会趋向于将全部的anchors都训练为负样本,所以咱们选择从一幅图中选取出256幅anchors其中正负样本的比例是1:1,若是一幅图中正样本的数量少于128,就使用负样本补上

1.Sharing Features for RPN and Fast R-CNN

到如今为止咱们已经说明了RPN是产生区域proposals的,当时还未说明如何使用CNN进行识别,对于其中的目标识别咱们采用R-CNN,而且咱们使用共享卷积层的由RPN和F-Rcnn组成的联合结构,因为RPN和F-RCNN分开训练会产生不同的卷积层参数,所以须要一项技术来让这两个网络共享卷积层,而不是独立的训练两个分离的网络,在这里咱们有三种训练方法:
1.交替训练
咱们首先训练RPN,而后使用这些proposals来训练F-RCNN ,以后再使用参数初始化RPN,如此迭代
2.近似联合训练

clipboard.png

在SGD的过程当中,在训练的时候先前向传播,产生proposals后就认为proposals是固定的,预训练好的,接着训练FRCNN,损失函数是他们共同的损失函数,这种方法同时迭代两个网络的参数,做者认为效果不是很好

四:总结

faster rcnn 在fast rcnn 的基础上消除了ss的过程,缩短了时间,具体的解释在后续的代码部分解释

相关文章
相关标签/搜索