您的位置:首页 > 理论基础 > 计算机网络

深度学习在目标检测中的应用及其tensorflowAPI实践(二)

2017-09-22 09:46 573 查看
这系列文章的内容目录如下:

目标检测的任务

深度学习在目标检测中的应用

RCNN

fast RCNN

faster RCNN

RFCN

yolo

yolo V2

SSD

tensorflow目标检测API的使用

第一篇里说完了RCNN和fast RCNN,接下来继续说faster RCNN,建议不了解RCNN和fast RCNN的读者先回头了解了RCNN和fast RCNN在继续读下去。

faster RCNN的流程如下:



faster RCNN首先通过一个RPN网络生成一堆候选框ROI,后面的操作和fast RCNN基本一致。

我们可以先看看RPN网络是个什么样的结构。

首先明确RPN网络的输入输出,RPN网络输入是一张图片,输出是这张图片上有可能是物体的一堆候选框,并对这些框做第一次的bbox-rg。

下图是一个RPN网络原理的示意图,我没有去画具体的CNN结构,因为这部分是可变的,可以用VGG,也可以用inceptionnet,只要知道一张图片经过一个CNN后会生成一堆feature map。



下面依次解释上图的每一步都做了什么:

图片经过CNN输出一堆feature map,每个feature map相较原始图片是变小了的,取决于你使用的CNN结构,这时候作者基于这堆feature map为其上的每个点设定了一系列anchors(原文是9个),如下图所示:



假设最后得到的feature map形状如上图左侧所示,为7x7,那么就会在整张图片上产生7x7x9个候选框,每个候选框的大小由不同的宽高比来设定。

这样对应到上图的RPN结构,左侧的分支softmax就负责预测这些候选框里是否有物体,可以看到作者设置了18个1x1的卷积,正好对应每个候选框是否有物体。

那么上面为什么还要接一个3x3的卷积呢?是为了能让feature map更好的结合周围的像素信息。

所以RPN网络的作用就是预测这7x7x9个候选框里是否有物体,并且对所有候选框做第一次的bbox-rg。

最后的proposal是对上面RPN的输出做一个整理的步骤,做了以下几件事:

对上面RPN输出的bbox-rg参数(宽高缩放比和横竖偏移量)对候选框进行修正

根据softmax输出的每个框里是否有物体的概率值对所有的框做一个排序,取出最有可能是物体的n个候选框

删除根据bbox-rg的结果修正后的候选框里严重超出边界的候选框

这时候仍然有很多框,所以做一个nms(非极大抑制),再对剩下的框执行步骤2,保留m个框(m小于n)

综合以上,我们经过RPN网络,得到了m个有可能是物体的候选框,和fast RCNN里的selective search步骤的结果一致,只不过现在由深度学习来完成这件事。

ok,绕了一大圈终于得到了我们要的候选框,接下来针对这些候选框的操作就和fast RCNN很类似了。需要注意的是在RPN的最后也是一个多任务的学习任务所以也设置了多任务的损失函数。

几乎所有的目标检测方法都会设置一个多任务的损失函数,分为两部分,一部分用来对分类做softmax损失,另一部分用来对bbox-rg做损失,学习平移量和缩放量,只是具体的损失函数需要对着各个方法的论文去看。

得到了RPN输出的候选框之后,我们首先对这些候选框进行ROIpooling,把他们做到相同大小,然后送入一个小网络做分类和再一次的bbox-rg,流程如下:



上面这个过程的细节不做过多说明,结构很简单,最后的损失函数也是分两部分,分类的softmax损失和回归的学习平移缩放的损失。

细心的读者一定会发现,faster RCNN竟然涉及到了两个独立的网络,而且有一部分卷积层其实是共享的,但最后接的损失函数是不一样的,就像下面这样:



上图中蓝色部分为RPN,红色部分为第二步类似fast RCNN中的处理,前面的卷积层部分其实是共享的。但两部分的训练目标是不一样的,于是作者提出了以下训练方法,这个方法在后续的RFCN中也用到了:

训练RPN,注意一般训练网络都不会从头开始训练,这里是用在ImageNet预训练的vgg权重初始化的(tensorflowAPI里用的不是VGG)

训练独立的fastRCNN检测网络,使用第一步中生成的ROI,初始化也是用ImageNet预训练的权重,此时两个网络是不共享卷积层的。

使用2中训练的fast r-cnn检测网络重新初始化RPN网络,然后固定共享卷积层不训练,只对RPN后面的几层进行微调。

保持3中共享卷积层不训练,由3训练后得到的ROI,再训练fast r-cnn中的全连接层,这样一个完整的网络训练完毕。

这种两个网络交替统一训练的方法很有开创的意义,在后续的RFCN中也参考了这里的训练方法。

faster RCNN提出了anchors的概念,提出了两个网络共同训练的方法,对后续的发展起到了很大的推动作用。

下一篇继续介绍RFCN。戳这里>>>

持续更新中~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息