R-CNN系列的目标检测算法,对以后的目标检测算法有着深远的影响,因此非常有必要了解R-CNN系列算法的基本思想。首先要了解的就是R-CNN目标检测算法,该算法的基本流程如下:

        1、对输入图片,采用Selective Search算法,以产生候选框

        2、将提取到的候选框输入到卷积神经网络中,提取特征,得到特征图

        3、对提取到的特征图,分别做分类和回归,分类得到候选框中物体的类别,回归得到预测框的位置

目标检测 NMS IoU如何计算 目标检测算法流程_神经网络


        可以看到R-CNN目标检测算法的思路非常的简单,但是它存在着很多的问题,下面一个一个的进行介绍:

        1、候选框

        首先为什么要产生候选框,传统的目标检测算法是通过滑动窗口法来提取候选框,但是这种方式由于提取到的候选框数量太多,且存在大量的冗余,导致目标检测算法的效率低下。而Selective Search算法,通过图片的纹理、梯度等特征,我们可以产生可能包含物体的候选框,这样相比于滑动窗口法,提取到的候选框的数量就要少很多了,从而提高了算法的效率。之所以产生候选框,是因为在候选框中找到物体的效率要比在一张图片当中寻找物体的效率,要高的多。

        此外,通过Selective Search算法产生的候选框,大小不一,从而导致了一个非常麻烦的事情,就是卷积神经网络的权值无法共享

        2、卷积神经网络权值不共享

        由于卷积神经网络中存在全连接层,导致对于不同大小的输入候选框,无法公用同一个卷积神经网络,这也是R-CNN目标检测算法速度非常慢的一个重要原因。

        3、R-CNN目标检测算法不是一个end2end的结构

        从上图中我们可以看到,输入的图片需要先做一个Selective Search,然后传入神经网络,之后还需要分别训练一个分类器和回归器,因此它并不是一个端到端的结构,故模型非常复杂。此外,R-CNN采用的分类器为SVM支持向量机,我们都知道这是一个比较复杂的分类器。

        总结,R-CNN的检测思路很简单,但是效率很低,主要存在以下问题:神经网络权重不共享、不是端到端的结构、是用来复杂的分类器SVM。之后我们看到的Fast R-CNN就是在R-CNN的基础上进行改进。