Faster-RCNN目标检测算法执行思路
Posted 钟良堂的学习笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Faster-RCNN目标检测算法执行思路相关的知识,希望对你有一定的参考价值。
我们一起来了解一下,Faster-RCNN目标检测算法执行思路是怎么样的。Faster-RCNN执行思路主要就是看懂这幅图,这幅图里面包含了非常非常多的内容,然后我们一起来梳理一下,这么多内容,它是怎么样进行连接的。
我们首先来看,左上角的这幅图就是我们输入到Faster-RCNN的P×Q的原始图:
这就是我们Faster-RCNN的一个输入,当这样一张图片输入到我们这个Faster-RCNN的时候,首先要进行一个resize,把它的最小边固定到600,然后它的长宽比是保持不变的,这样的话,我们输入到Faster-RCNN的图片其形状就不会失真,接着我们会把这样一张图片传入到Backbone里面:
Backbone就是我们的Faster-RCNN的主干特征提取网络。
一般来说这个Backbone可以选择的范围有很多,常见的就是VGG、Resnet、Xception等等,这些都是非常优秀的主干特征提取网络。
然后我们这篇文章是以Resnet50来演示Faster-RCNN的执行过程,这个Backbone也就是Resnet50,我们输入进来的图片经过这个Backbone之后,它的长和宽就会被压缩四次,假设我们输入进来的图片它的长和宽是600×600的时候,它的输出就是一个38×38×1024这样一个特征层。也就是我们在这幅图上的就是这个Feature Map:
它是38×38×1024这样一个特征层,这个特征层,我们可以把它叫做共享特征层,因为我们在后面的操作里面的操作里面会多次使用到这个特征层,大家可以看到这个Feature Map,它有两个不同的前进方向,我们首先来看一下,这个Feature Map往左走,都经过了什么样的操作。
首先,它进行了一个3×3的卷积,然后再进行了两次1×1的卷积。这两个1×1的卷积它是分开的,其中一个1×1的卷积它的通道数是9,另外一个1×1的卷积它的通道数是36:
那么我们要怎么样理解这个9和36呢,我们要回到这个共享特征层来看一下,当我们输入进来的图片,它的shape是600×600的时候,我们的共享特征层它的shape就是38×38×1024。
这个38×38就相当于把我们输入进来的图片,也就是这个图片:
划分成了38×38的网格,然后每个网格上面,又存在着若干个先验框,对于我们的Faster-RCNN的网络来讲,每个网格上默认的先验框的数量是9,然后这个先验框是我们事先标定好的,它在我们的图片上的具有一定的shape。
当我们入进来的图片是600×600的时候,我们先验筐的总数量就是38×38×9,也就是12996个先验框。
然后我们在这个地方的预测结果:
也就是这个图片的预测结果,事实上也就是对我们的先验框进行调整。
然后这个9就是判断我们每一个网格上每一个先验框的内部它是否包含了物体。然后这个36,就可以拆分成四4×9,这个4呢就是我们先验框的调整参数,所以这个36,就是我们每一个网格上每一个先验框的调整情况,通过左边这一部分的网络,我们就可以获得了我们原始的先验框内是否包含物体,而且还有它的一个调整参数,这个先验框调整完的结果也就是我们的建议框:
这个建议框它的作用事实上是对我们输入进来的图片进行区域的粗略筛选,然后尽可能的找到包含目标的区域,然后这样一个区域,就会传入到我们的ROIpooling层中:
所以我们的ROIpooling层有两个输入,其中一个是我们的共享特征特征层,另外一个就是我们的建议框:
之后,这个ROIpooling层就会利用我们的建议框,在我们的共享特征层上进行截取,为什么不是从原图中进行截取,而是在我们的共享特征层从中进行截取,事实上我们的共享特征层就是把我们的原图,划分成了不同大小的网格,然后我们的共享特征层上的每一个点,事实上,就是我们原图上某一个区域的特征的集合。
所以我们的建议框只需要在我们的共享特征层上进行截取就可以了,如果我们在原图上进行截取的话,我们还需要把我们的原图穿过我们这个主干特征提取网络进行特征提取,这样就多此一举了。
然后我们利用这个建议框获得的局部共享特征层,它的shape可能是不一样的,所以我们这个ROIpooling层会把我们获得了局部共享层都resize到同一个shape上,也就是14×14这样的shape上:
然后我们会获得非常非常多同样shape的局部共享特征层,这样一个局部共享特征层,会经过下一步的操作。
下一步的操作分为两步,其中一步是获得我们这个建议框的调整参数,事实上,这个建议框就是我们后面这个部分它的先验框:
我们的预测结果就会对我们的建议框进行调整,然后获得最终的预测结果,还有一部分呢,它会经过我们这一个softmax,获得我们这个建议框里面它所包含的种类到底是什么。
然后通过这么多的操作,我们就可以获得了我们建议框的调整参数,还有它内部包含的种类是什么。
我再来给大家简要理一下整个Faster-RCNN目标检测网络的执行思路是怎么样,一张图片输入进这个Faster-RCNN网络的时候:
它会进行resize,resize的结果会穿过我们的resnet50,也就是我们的主干特征提取网络:
然后我们会获得它的共享特征层,共享特征层会往左走,获得我们的建议框:
然后这个建议框是对我们原始的图片也就是我们输进来的图片,它的区域进行一个粗略的筛选,然后尽可能的找出包含目标的区域。
然后会传入到我们这个ROIpooling层中,ROIpooling层会利用这个建议框在我们的共享程层上进行截取:
由于我们获取的局部共享层它的shape是不一样的,所以我们的ROIpooling层会把我们的局部共享特征层进行resize,把它们resize到同一个特征层上。
然后我们在这个地方就获得了比较多的局部共享层,然后他们的shape是一样的。
这个局部共享特征层,会经过两步的操作,其中一步就是Bbox_pred,这个Bbox_pred可以获得我们建议框的调整参数,这个建议框事实上是我们后半部分的一个先验框。Bbox_pred它会对我们的建议框进行调整。
然后还有一部分就是cls_pred,它首先会进行一个softmax,事实上它就是我们建议框内包含的物体的种类,然后经过这么多的操作之后,我们就可以获得一个Faster-RCNN目标检测网络的结果了。
因此,Faster-RCNN预测思路是先进行粗略的筛选,然后再进行一个精细的调整,希望大家可以理解。
以上是关于Faster-RCNN目标检测算法执行思路的主要内容,如果未能解决你的问题,请参考以下文章
目标检测SSD相对于YOLO与faster-RCNN做了哪些改进?效果如何
目标检测SSD相对于YOLO与faster-RCNN做了哪些改进?效果如何
[Python图像识别] 四十八.Pytorch构建Faster-RCNN模型实现小麦目标检测
【目标检测】YOLO论文详解(You Only Look Once: Unified, Real-Time Object Detection)