美文网首页
AI入门基础笔记- 5.6:Fastser-RCNN相关算法的原

AI入门基础笔记- 5.6:Fastser-RCNN相关算法的原

作者: 薛东弗斯 | 来源:发表于2023-04-26 06:35 被阅读0次

    2-stage 算法

    目标检测的算法与分类,IOU/NMS

    目标检测算法分为one-stage和two-stage 算法。1-stage以yolo代表,就是在锚框的基础上,直接回归产生目标的类别概率和位置信息。

    2-stage以faster-RCNN为代表,第一阶段 先从图像中将目标和背景进去区分,产生一些候选区域;第二阶段再对候选区域进行分类和位置精修。

    Faster-RCNN是在RCNN基础上发展而来的。2014年由Ross Girshick提出RCNN算法,该文章也是2014年发布在CVPR上面,打开当时目标检测发展的新思路,因此从2014年开始目标检测、行人检测的应用发展迅速,但是效率低、速度慢、花费时间长等一系列问题的产生导致RCNN算法并没有取得大范围的应用。

    2015年,作者提出了改进型的Fast-RCNN算法,使得图像检测时间大大减少。不过虽然和前面的RCNN算法相比速度提升了,但由于其中候选区域提取方式还是十分耗时,仍然无法满足实时应用的要求。

    2016年,Ross Girshick和Resnet网络的发明者何凯明一起合作,提出了Faster-RCNN算法,将目标检测的多个步骤全部由神经网络,端到端训练,大大缩短了目标检测推理时间,可以达到实时使用的级别。

    随着目标检测算法的发展,人脸识别、目标追踪、行人重识别等领域也随之快速发展。正是由于GPU硬件的发展,数据的大量增加以及算法的不断突破,AI进入了快速发展的黄金阶段。

    如果是图像分类任务,可以使用卷积神经网络 + Softmax方式,比如区分小狗、小猫、小猪以及背景四个类别的概率,所以这里softmax类别为4

    但是将图像分类变成目标检测,就需要执行两种任务。既要对目标进行定位,还有对定位出的目标区域进行分类。比如Yolo,就是在最后的输出层,既回归出目标的位置,又输出目标的类别。而RCNN系列算法的思想则不同,先找出图片上小狗的框,再对框进行分类。此时就涉及到目标检测一个非常关键的问题,如何高效的得到很多个目标框呢?因为有了框,才能进行第二步,高效的对目标进行分类

    再Yolo算法中,首先对图片进行网格划分,比如划分成13*13的网格。 先将模特的目标框画出来,就是红色框。

    每个网格都有3个不同的锚框,如模特的中心点位于第6行第8列这个网格中,对于这个网格 我们会对应三个不同形状的锚框,比如左边的大尺寸锚框、中间的中等尺寸锚框、右边的小尺寸锚框。在锚框机制的基础上,通过网络预测也会产生三个不同大小的预测框。这样预测框就有了,接着进行图像分类即可

    RCNN算法中则不同,比如对上图进行目标检测,首先选定一个特定大小的窗口,比如上图红色的框。我们可以将红框内的图像截取出来,输入前面提到的卷积神经网络以及softmax就可以判断红色框中是哪种目标了。这样一来一个框的信息就搞定了。

    下面采用滑动窗口目标检测的方法,一个个检测。我们先将红色的框往右滑动一步,这样就可以得到第二个图像区域,再次输入卷积神经网络中判断类别。

    接下来,依次滑动,不断的重复操作,不断滑动,直到经过图像中的每个角落。

    有可能会说,这里使用的滑动窗口的框还是比较小,如果是大一点的目标很难被定位到,比如图片上小狗。 很简单,如上中图,用更大的框截取更大的区域,然后输入卷积神经网络中进行类别的判断。同样采用滑动窗口的目标算法。如果此时的框不够大,还可以用更大的框去截取

    滑动窗口截取也有明显的缺点,就是计算成本。因为在图片中裁剪了很多小方框区域,让卷积网络一个个处理,如果滑动的窗口太大,移动的步幅也比较大,这样粗粒度的移动检测,很容易漏掉很多个目标;但窗口过小,移动的步幅也很小,太过于细粒度的检测会增加很多计算成本,检测一张图片花费的时间就会很多。此时如何进行改进?

    此时研究者提出了一个方法,region proposal,就是利用候选区域的方式,不用对图片中的每个区域进行分析,只需要找到一部分的候选区域,只对候选区域进行判断

    比如使用选择性搜索的算法,比如对最左边的图进行图像分割,得到中间的分割图像。然后对图片的纹理、形状、大小交叠等信息不断的合并相似的区域,最终可以道道右边图像的候选区域,比如图片上红色的框。这样操作起来要不滑动窗口检测的方法效果提高不少。但效率还是太低,一张图片操作时间好几秒,这样的方式根本无法在实际项目中使用。因此在slective serach的基础上2014年提出了RCNN算法。

    RCNN算法虽然过去一段时间,但仍然是目标检测领域非常有代表性的基础算法,现在很多新的算法都是在此基础上发展而来的。

    整体来说,RCNN算法分为三个部分。 第一步,先对输入的图像使用selective search等基础的算法生成2000个候选区域; 第二步 对这些候选区域分别使用卷积神经网络,提取特征信息; 第三步 再对这些特征信息进行SVM分类,判断是什么目标。 需要注意的是,在RCNN算法中分类方式采用的是SVM分类,不过在后面的Fast-RCNN当中就采用softmax分类。 

    除了分类之外,因为候选框并不一定很准,因此还需要将候选框进行回归修正。

    RCNN算法比较简单,但速度太慢。因为对这里的每个区域都使用卷积神经网络提取特征,2000个框就需要使用卷积神经网络提取2000次,这个过程非常耗时,速度非常慢。如何改进?

    2015年,作者提出Fast-RCNN算法。 第一步 还是使用selective serach的方式提取2000个候选区域; 第二步 与前面的RCNN不同,并不是使用卷积神经网络对各个候选区域提取特征,而是直接对原始图像进行卷积操作,这样可以得到一张大的特征图,还有一个好处 特征图和原始图像上的信息可以一一对应,因为二者的长宽比相同, 这样就可以在大的特征图上,直接找到原始图上2000个候选区域所对应的2000个候选区域,我们直接用小特征图的信息进行分类和回归,而不需要像前面的RCNN中做了2000次卷积操作之后,再做分类和回归,从而提升算法速度。通过特征图和原始图像上的映射之后,可以得到2000个小的局部特征图,按照之前的方式,后面就可以连接全连接层,并送入分类器进行分类。 

    全连接层的输入和输出都是固定大小,而这里是2000个不同形状的特征图,如果和全连接层直接相连,则意味着2000种不同的输入,所以无法直接相连。但是Fast-RCNN中采用了非常巧妙的一种方式,ROI pooling的方式,通过这种方式,输出得到的特征信息大小都是固定的,再送入后面的分类器中,我们就是固定的输入,而不用2000种固定输入。 这种方式再后面的Faster-RCNN中也有相应的应用。

    输入都是相同大小的情况下,再接上全连接层,再到最后的softmax分类和目标框回归。从右边的整体图可以看出,Faster-RCNN算法在RCNN的基础上做了很大的改动,大大提升了算法的效率。

    但是,这里的第一步,产生候选区域的方法还是使用selective search的方法,还是比较慢。有没有方法继续改进?

    2016年提出Faster-RCNN算法,左边是整体结构图。可以看到,和前面的Fast-RCNN算法相比,多了一个蓝色框的区域- Region Proposal Network,这就是Faster-RCNN算法的核心。取每个单词的开头字母在拼接起来,也可以称为RPN层,通过这个功能,我们不需要在原始的图像上筛选出2000个目标框,而是直接对特征图进行操作。使用RPN的方式对候选区域进行定位,找到一些我们后面需要中点发展的区域,从而代替我们前面提到的Selective Search的方法。

    但如果按照功能进行划分,我们可以划分为两个部分。一部分是利用卷积神经网络ConveNet+RPN层提取出候选框;而另外一部分利用候选框的位置 和这里卷积神经网络提取出的特征图进行结合,找出候选框的特征。但正如前面所讲,每个候选框的大小不同,因此再利用ROI Pooling方式将特征信息转换为同样大小,再进行到最后的分类和回归中,这样整个改进就完成了。

    通过这一系列的改进达到什么效果呢?右图为RCNN、Fast-RCNN、Faster-RCNN算法时间对比图,这里的时间是指对一张图片进行检测的时间。Faster-RCNN 1秒检测5张图片,基本满足项目应用需求。

    我们将Faster-RCNN拆解开,看看各个流程是怎么运作的。

    第一部分,先将原始图片送入卷积神经网络ConvNet中得到大的特征图

    第二部分,对特征图进行RPN操作,得到很多个小的候选区域

    第三部分,将候选区域与大的特征图进行比对,就可以得到各种不同形状的局部特征图的特征信息。但是为了便于后面的全连接层的操作,所以还需要在采用ROI polling的方式

    第四部分,对得到的各个候选区域信息进行分类和回归

    为了更形象的展示Faster-RCNN细节,将左边Faster-RCNN结构图转换为右边那样的流程图,这样就可以看到更多的算法细节。 

    首先看网络输入端,比如我们采集的图片,长为P,宽为Q。但因为网络的输入都是固定的,所以需要先缩放为固定的M*N大小才能送入网络中,所以我们首先需要对图片的尺寸进行缩放。

    一般采用两种方式对图片进行缩放,一种是将原图直接拉伸,缩放到M*N大小;另外一种是将原本P*Q图像进行等比例缩放,再放入M*N的黑色图像中、

    此处以直接缩放为例。

    这里用到卷积神经网络就是前面提到的vgg-16主干网络,总共包括13个卷积层、13个relu激活层、4个pooling池化层。13个卷积层卷积核大小都是3*3,而padding填充为1,步长为1

    带入卷积公式:卷积前后,大小相同。

    池化前后,特征图长宽都减半

    经过卷积层 和 Relu层,不会改变特征图尺寸;只有经过pooling层,长宽尺寸都减半

    37.5 向上取整为38

    最后一层,卷积核数量为256

    特征图与原始图片可以对应起来。特征图每个感受野,都对应原图16*16的大小。

    这样直接对特征图进行分析,而不是对原始信息。

    相关文章

      网友评论

          本文标题:AI入门基础笔记- 5.6:Fastser-RCNN相关算法的原

          本文链接:https://www.haomeiwen.com/subject/lztrkdtx.html