目标检测之faster Rcnn算法原理解读(faster Rcnn网络细节)02

faster Rcnn原理:


(注:本图是论文作者的图)

faster Rcnn相比前一代fast Rcnn算法,比较重点的多了一个RPN层,而其他的结构和fast Rcnn是一模一样的。

使用RPN(region proposals network)代替了传统的selective search算法提取候选框方法,从而达到了真正意义上的end to end结构。

详细工作流程如下:

1. 一张图片的输入,将一整张图片通过VGG16网络提取特征图,假设提取的特征图大小为40*60。

2. 提取的特征图40*60,每一个特征点对应原图16*16的视野眼,上篇有讲过。

3. 现在不再使用selective search产生候选框了,改用了一种新方法,提出了一个叫anchors(锚)的方法,对于每一个特征图的点映射到原图上都产生3种尺寸大小(8,16,32),3种长宽比例大小(0.5, 1, 2),3*3=9种尺寸框,每一个特征点产生了9种映射到原图的候选框,那么40X60的特征图,共产生40X60X9=21600个候选框,在这里候选框是不是有点太多了?selective search也才产生2000个候选框,没关系,RPN就是用来对这2万个候选框进行筛选的,最终留下的只有256个或者128个候选框(这里的256或者128是可以作为代码的参数调整的),如下图:


图上有一个sliding window滑动窗口,conv feature map指的是将特征图再经过一次3*3的卷积网络(这里为啥要再卷积一次不太明白),sliding window为3*3的,滑动窗口依次从左到右,从上到下,把整个特征图全部滑动完,每次滑动,得到9个特征点,分别对每个特征点映射到原图上去,产生k框(k在源代码里为9,上图的k anchor boxes就是这个意思),由于之前说了每个特征点对应到原图的视野眼为16*16,源代码里也会用到16尺寸进行缩放到原图再产生9个框的。

4. 共产生了20000多个框,然后将这些框对应的特征点,经过1*1*X的全卷积网络,这里用的1*1全卷积网络代替全连接层,可以接受任意尺寸大小,依次对其做一个二分类(判断该框是前景还是背景,及是物体或不是物体,图上标的2k scores就是),和一个候选框回归任务,使它们微调更接近至真是物体的框的位置。

对于分类任务:

按照上图的流程来看,经过1*1*18卷积网络,特征图shape变为(40,60,18),然后Reshape成(21600,2)的形状,其中2表示为2分类,再经过softmax层,算出每个特征点对应的所有候选框为前景或背景的概率值,然后再Reshape回去成(40,60,18)。

对于回归任务:

按照上图的流程来看,经过1*1*36卷积网络,特征图shape变为(40,60,36),36=4*9,表示每个特征点有9个框,每个框的有4个值表示坐标。

再将以上分类任务和回归任务的数据输入到Proposal层,Proposal层在代码里写的比较复杂,大概做了以下事情:对候选框进行筛选,对于越界的超过原图边界的直接淘汰掉,然后通过NMS非极大值抑制算法,对于IOU大于0.7的会有好多框,对于IOU重叠比例大于0.7的进行分值排序,判定为前景分或背景分值高的留下,低的去掉,经过筛选最终得到256个最合适的候选框,128个前景框,128个背景框,对于有些图片没有128个前景框,就拿背景框去填充。

5. 经过proposal筛选后,得到256个框具体坐标和是否为物体,由于候选框大小尺寸不同,再经过ROI Pooling层,将尺寸统一最后输入到全连接层,下图为整个网络的细节图:


经过ROIPolling后,再经过2个全连接层,再分别各自通过一个全连接,一个全连接用来做框的回归任务,微调坐标到最接近真是物体框,另一个通过softmax层进行21分类任务,20个前景和一个背景,以上就为faster Rcnn的整个网络结构和工作流程了。


三代算法的性能对比:



以上是三代算法分别训练时间和测试时间的对比


结尾

    由于本人对论文理解有限,对于Proposal和ROIPooling层解释还不够全面,后续会继续改进,把流程写得更细致,欢迎从事AI的各位大神们指点下,其实自己对于faster Rcnn也没有达到很深的理解,只是使用了该算法的源码做了一些自己数据集的训练,代码算是跑通了,后续等我研究完代码,做完项目,把代码详细细节流程拿过来讲一讲。




猜你喜欢

转载自blog.csdn.net/qinchao315/article/details/80951088
今日推荐