目标检测算法总结(R-CNN,SPPNet,Fast R-CNN, Faster R-CNN, Yolo, SSD等算法 )持续更新

目前主流的目标检测算法分为两大类(两阶段检测和一阶段检测)

   两阶段检测:第一步:生成可能包含物体的候选区域(专业术语:Region Proposal)第二步:对候选区域做进一步分类和校准,得到最终的检测结果。代表:R-CNN,SPPNet,Fast R-CNN, Faster R-CNN

   一阶段检测:直接给出最终的结果,没有显示地生成候选区域的步骤。代表: Yolo, SSD

下面详细介绍这几种算法的原理:

R-CNN:

     目标检测算法总结(R-CNN,SPPNet,Fast R-CNN, Faster R-CNN, Yolo, SSD等算法 )持续更新

      第一步:先通过Selective Search算法生成候选区域(Proposal),这个算法的思想是:认为可能存在物体的区域应该是有某种相似性或连续性的区域。所以,它首先是用分割算法在图像上生成很多小的区域,这些区域为最基础的子区域,然后根据这些区域之间的相似性进行区域合并,衡量相似性的标准可以是颜色,纹理和大小等。不断叠加这种小区域,直到全部合并到一块,然后给每个区域做一个外切的矩形,就得到了许许多多的可能是物体的区域方框。 候选区域搞定好,找了一张图,感受一下这个算法的执行

目标检测算法总结(R-CNN,SPPNet,Fast R-CNN, Faster R-CNN, Yolo, SSD等算法 )持续更新

                    简要说明,左边是根据分割算法生成小的候选区域,接着往上合并(相似度高)。 反应到图中,就是中间那个图。 

      第二步:强行将这些图形放大到一个尺寸,因为在卷积网络之后,我们要对图片进行分类,R-CNN采用的是多个SVM进行分类。所以对于卷积网络,我们必须要求输出的向量维度一样,这样SVM才可以分类,为了保证输出维度一样,那你就必须保证卷积网络的输入的图片大小一致。所以这就是我们强行放大的原因。

      第三步:将图片送进卷积网络,后面还必须有个全连接层。。输入一个高维向量,我们在通过SVM进行物体的分类,这样就检测出物体,并会预测出这个物体属于这个类型的概率。。

      第四步:检测出以后,必须画框,我们第一步已经有了边框,这里直接画出就行了?  不行,因为你的框可能不够好,我们还要根据训练数据中标记的框去校正第一步生成的框。。见下图:(网上随便找的)

目标检测算法总结(R-CNN,SPPNet,Fast R-CNN, Faster R-CNN, Yolo, SSD等算法 )持续更新

                假设红色框使我们标记的框,而蓝色框使我们Selective Search生成的宽,我们还需根据红框去校正蓝色框。。具体校正方法:不就是回归那四个点嘛。。让他们对应点的欧式距离减小。。

SPPNet:

     为什么会提出SSPNet,我们的R-CNN有什么不好的? 其实,在R-CNN中,为了让所有候选区域生成一个维度相等的向量,对候选区域进行了强行放缩,这样会破坏图像的比例关系,对特征的提取不利,而且,这个放缩还是相当耗时的,R-CNN论文中显示生成候选区域和 放缩的时间大概都在两秒。所以,SPPnet就在这里进行了优化。

     SPPNet采用了空间金字塔池化。怎么做的呢?  在R-CNN中对候选区域进行缩放,而在SPPNet中不对图片进行缩放,直接送进卷积,然后将卷积网络中最后的几个全连接层去掉,采用空间金字塔池化,什么是空间金字塔池化?  见下图

目标检测算法总结(R-CNN,SPPNet,Fast R-CNN, Faster R-CNN, Yolo, SSD等算法 )持续更新

      从下往上看,黑色的东西就是最后一次卷积完输出的东西,厚度很厚,我们先找一个4x4的网格盖在每张特征图上,那么总共有十六个格子,每个格子中的像素肯定有多个,我们选其最大的像素,组成一个向量,然后,再找一个2x2的网格盖在特征图上,选出对应格子中的最大像素,最后用1x1的格子(也就是找出每张特征图中的最大像素值)。 

     举个例子: 假设最后一个卷积卷完后,生成的是(高度不定) x(宽度不定)x 256。。为什么不确定?因为我们给卷积网络喂的候选区域大小不同,那他输出肯定也就不同,但厚度肯定是相同的。厚度跟卷积核个数有关。。那我们开始计算:①:先通过4x4的网格,则生成的就是16x256 = 4096维向量。②:接着用2x2的网格,生成的就是4x256=1024维向量。③:最后通过1x1的网格,生成的是256维向量。接着将这三步生成的向量拼接起来,那就是4096+1024+256 = 5376维向量。很显然,不同大小的图片,我们却得到了相同大小的向量,这就是空间金字塔池化的优点。。

     最后,用这些向量进行分类,然后再校正这些框。和R-CNN一样,主要是空间金字塔池化。。

Fast R-CNN:

        善于思考的同学应该发现了一个问题,那就是为什么要将候选区域逐个送进网络? 我们可以直接将整张图送进卷积网络中,然后再找出当初候选区域对应的边界,这样速度就会有质的提升。因为每张图片在卷积网络中运算的时间是很长的。 这就是Fast R-CNN的一个改进,同时,它还汲取了SPPnet中空间金字塔池化的优点,还有一个最重要的改进,就是引入了多任务的学习,在卷积网络出来一个,接了两个输出,一个搞图片的分类,一个搞边框的回归。 结构见下图:

目标检测算法总结(R-CNN,SPPNet,Fast R-CNN, Faster R-CNN, Yolo, SSD等算法 )持续更新

        这里多啰嗦一句:候选区域对应卷积出来的那个区域,我们通常把那个区域成为ROI (region of interest 感兴趣的区域)

Faster R-CNN:

      Fast R-CNN 依然还有一个耗时操作,那就是候选框的生成(依然采用的是Selective Search算法),faster-RCNN创造性的提出了RPN(region proposal network),在卷积神经网络之后加入RPN,作为分支网络,可以实现候选框的提取。从而实现了将候选框提取这一环节合并到深度网络中。RPN的提出也是faster-RCNN最大创新点。

目标检测算法总结(R-CNN,SPPNet,Fast R-CNN, Faster R-CNN, Yolo, SSD等算法 )持续更新

      接下来,我们详细说一下RPN网络结构:

      等会更新。。。

  

 

 

 

 

 

 

 

上一篇:FMDB事务的使用


下一篇:目标检测算法RCNN,Fast RCNN,Faster RCNN