RCNN目标检测的开山篇(尽可能的详细)

     现在开始学习有关深度学习的东西,同学推荐我看计算机视觉目标检测方面,看完论文后还有很多细节不是很懂,网上找也有

很多模棱两可的,经过几天的查阅资料,总结出一篇较详细的关于RCNN的细节的实现,以此来证明我学习过。

计算机视觉(目标检测的兴起)

      自从12年某大神用CNN(卷积神经网络)在imageNet的比赛上取得较好的成绩后,将CNN重新带到大家的视野下,计算机视觉便在这几年发展的如火如荼。

    计算机视觉领域有三大顶会和N多核心期刊:

         计算机视觉领域的三大顶会:ICCV,ECCV,CPVR.

         还有很多的核心期刊: TIP, CVIU, TPAMI, IJCV

   目标检测与识别的研究方法主要分两类:

     1.基于传统图像处理和机器学习算法的目标检测与识别方法            

         1).目标特征提取

         2).目标识别

         3).目标定位

扫描二维码关注公众号,回复: 2419544 查看本文章

   与深度学习提取特征不同的是,这个特征都是人为设计的。

     2.基于深度学习的目标检测与识别方法

        1).基于图像的深度特征提取

        2).基于深度神经网络的目标识别与定位

       主要用到的是深度神经网络模型CNN做特征提取      

        基于深度学习的目标识别与定位算法分为三类:

              1).基于区域建议的目标检测与识别算法,如R-CNN, Fast-R-CNN, Faster-R-CNN;

              2).基于回归的目标检测与识别算法,如YOLO, SSD;

              3).基于搜索的目标检测与识别算法,如基于视觉注意的AttentionNet,基于强化学习的算法

 

RCNN论文所使用的数据库:

     一个较大的识别库(ImageNet ILSVC 2012):标定每张图片中物体的类别。一千万图像,1000类。 
      一个较小的检测库(PASCAL VOC 2007):标定每张图片中,物体的类别和位置。一万图像,20类。 
        本文使用识别库进行预训练,而后用检测库调优参数。最后在检测库上评测。

本文重点RCNN的理解和RCNN实现的具体过程

     重要概念:

              region proposal:此方法的重点(基于区域的卷积神经网络做目标检测),是从一张图片中提取多个候选框

             mAP(mean average precision):用来评估object detection 的准确性,在PASCAL VOC的数据集中有20类,对每个类的分类的准确性的综合评价。

              RCNN:将检测问题转换成为基于region proposal的分类问题

                          (好处:1是网络参数数量较少,2是网络的生成特征维度较少 4096vs360k)

              selective search:生成region proposal 的方法。(具体下面会说)

              Warp:region  proposal resize (由于CNN)中只接受227*227大小的图片,需要对其进行resize

           Supervised pre-training:监督预训练,在训练CNN网络时,由于需要大量的数据,可以采用已经做好的数据集ILSVRC2012先对神经网络CNN进行预训练,也可以直接采用别人训练的AlexNet,就是需要把最后一层的输出改为我们数据集中的类别数+1(背景)

               fine-tuning:利用我们的小的训练集对CNN进行微调(SGD(0.001) 正负样本判别判别)

               IOU交并比:计算两个矩形框的重叠度

              NMS(非极大值抑制):从算法找出的几个矩形框判断哪些是没用的

              canny边缘检测:用来从几个有用的矩形框中生成bounding-box

              svm分类器:(正负样本判别)为什么需要

              bb-regression:refine bounding 线性回归模型对目标框进行精修

  主要流程: 

                   

               1. 从一张图片生成1k~2k的候选框(region proposal)

               2.对每个候选区域,使用深度卷积神经网络提取特征(生成特征向量)

               3.将特征送入每一类的SVM的分类器,判断是否属于该类(会输出一个打分矩阵2000*N+1)

               4.用这些判断类别并生成bounding-box

               5.利用回归器对bounding-box进行精修

   生成候选框

          使用了Selective Search1方法从一张图像生成约2000-3000个候选区域。基本思路如下: 
             - 使用一种过分割手段,将图像分割成小区域 
             - 查看现有小区域,合并可能性最高的两个区域。重复直到整张图像合并成一个区域位置 
             - 输出所有曾经存在过的区域,所谓候选区域

         合并规则:
            1.颜色(颜色直方图)相近的 
            2.纹理(梯度直方图)相近的 
            3.合并后总面积小的 
            4.合并后,总面积在其BBOX中所占比例大的
            其中第三条:保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域。

   Warp对region proposal进行resize:

          (1)各向异性缩放
    这种方法很简单,就是不管图片的长宽比例,管它是否扭曲,进行缩放就是了,全部缩放到CNN输入的大小227*227,如下图(D)所示

  (2)各向同性缩放
  因为图片扭曲后,估计会对后续CNN的训练精度有影响,于是作者也测试了“各向同性缩放”方案。这个有两种办法

  A、直接在原始图片中,把bounding box的边界进行扩展延伸成正方形,然后再进行裁剪;如果已经延伸到了原始图片的外边界,那么就用bounding box中的颜色均值填充;如下图(B)所示;

  B、先把bounding box图片裁剪出来,然后用固定的背景颜色填充成正方形图片(背景颜色也是采用bounding box的像素颜色均值),如下图(C)所示;

  对于上面的异性、同性缩放,文献还有个padding处理,上面的示意图中第1、3行就是结合了padding=0,第2、4行结果图采用padding=16的结果。经过最后的试验,作者发现采用各向异性缩放、padding=16的精度最高

  训练CNN(用来提取region proposal的特征)

        这里的训练分为两部分一是预训练,二是调优训练

        预训练:

            要提出一个概念就是迁移学习(Supervised pre-training) :网络结构就是借鉴某大神在2012的Image Net的分类网络Alex Net ,进行简化,这样直接避免从随机初始化参数进行训练。在Alexnet中p5层神经元个数为9216, f6、f7的神经元个数都是4096,提取的特征为4096维,然后送到一个4096->1000的fc进行分类。(softmax)

        使用ILSVRC2012的全部数据进行训练,输入一张图片,输出1000维的类别标号,学习率为0.01         

      调优训练:

      网络结构同样使用上述网络,最后一层换成4096->21的全连接网络。因为RBG大神说了,通过他们的实验得出,一般的CNN网络(eg,S1-S5,F6,F7),前5层是用于特征提取的,卷积层所学到的特征其实就是基础的共享特征提取层,就类似于SIFT算法一样,可以用于提取各种图片的特征,而f6、f7所学习到的特征是用于针对特定任务的特征。所以这里可以将后面的层修改用于对象检测。 学习率0.001,每一个batch包含32个正样本(属于20类)和96个背景的负样本。

     训练数据为使用PASCAL VOC 2007的训练集,输入一张图片,输出21维的类别标号,表示20类+背景。 
     考察一个候选框和当前图像上所有标定框(人工标注的候选框)重叠面积最大的一个。如果重叠比例大于0.5,则认为此候选框为此标定的类别;否则认为此候选框为背景。(或者这样说:在前一步的区域提出中产生的2K+的候选框将作为后面的CNN训练数据和SVM的训练数据,将selective search挑选出来的候选框与物体的人工标注矩形框的重叠区域IoU大于0.5,那么我们就把这个候选框标注成positive,否则我们就把它当做negative。训练的每一次迭代中都使用32个正样本(包括所有类别)和96个背景样本组成的128张图片的batch进行训练(这么做的主要原因还是正样本图片太少了)>这样训练样本的答案就标出来了,构成训练数据,直接用于训练,反复迭代几次,CNN就训练好了) 这里的0.5是给出的阈值,作者经过多次训练选出来的值

       IOU 计算公式:

          

      使用cnn提取每个region的特征:

              经过上面的region proposal的提取,生成约2000张region proposal,经过训练好的CNN提取对应的特征网络架构我们有两个可选方案:第一选择经典的Alexnet;第二选择VGG16。经过测试Alexnet精度为58.5%,VGG16精度为66%。VGG这个模型的特点是选择比较小的卷积核、选择较小的跨步,这个网络的精度高,不过计算量是Alexnet的7倍。后面为了简单起见,我们就直接选用Alexnet,并进行讲解;Alexnet特征提取部分包含了5个卷积层、2个全连接层,在Alexnet中p5层神经元个数为9216、 f6、f7的神经元个数都是4096,通过这个网络训练完毕后,最后提取特征每个输入候选框图片都能得到一个4096维的特征向量。

      SVM 分类器的训练:

           训练一个SVM分类器需要正负样本,正样本就是原图中真正标定bounding box的样本,而负样本是通过考察每一个候选框,如果和本类所有标定框的重叠都小于0.3,认定其为负样本,其余的丢弃。由于负样本远远大于正样本的数量,所以采用hard negative mining的方法。

      SVM类别判断:

           测试阶段,使用selective search的方法在测试图片上提取2000个region propasals ,将每个region proposals归一化到227x227,然后再CNN中正向传播,将最后一层得到的特征提取出来。然后对于每一个类别,使用为这一类训练的SVM分类器对提取的特征向量进行打分,得到测试图片中对于所有region proposals的对于这一类的分数,再使用贪心的非极大值抑制去除相交的多余的框。非极大值抑制(NMS)先计算出每一个bounding box的面积,然后根据score进行排序,把score最大的bounding box作为选定的框,计算其余bounding box与当前最大score与box的IoU,去除IoU大于设定的阈值的bounding box。然后重复上面的过程,直至候选bounding box为空,然后再将score小于一定阈值的选定框删除得到一类的结果。

      获取bounding-box 是依据候选框和标准检测框的iou大小,取最大值,且阈值要大于0.6,太小训练验证没有意义。

 

        回归器进行位置精修:

             对上面得到的bounding-box进行位置精修(refine)利用已经训练好的线性回归模型(linear regression model)对已有的bounding-box 进行精修,以期得到更接近ground-truth。

        黑科技(NMS):

     非极大值抑制:先假设有6个矩形框,根据分类器类别分类概率做排序,从小到大分别属于车辆的概率分别为A、B、C、D、E、F。

(1)从最大概率矩形框F开始,分别判断A~E与F的重叠度IOU是否大于某个设定的阈值;

(2)假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的。

(3)从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。

    

 问题:

      1.CNN网络中存在softmax层用来分类,作者为什么还要训练出svm?     

       因为svm训练(0.3)和cnn训练(0.5)过程的正负样本定义方式各有不同,导致最后采用CNN softmax输出比采用svm精度还低。事情是这样的,cnn在训练的时候,对训练数据做了比较宽松的标注,比如一个bounding box可能只包含物体的一部分,那么我也把它标注为正样本,用于训练cnn;采用这个方法的主要原因在于因为CNN容易过拟合,所以需要大量的训练数据,所以在CNN训练阶段我们是对Bounding box的位置限制条件限制的比较松(IOU只要大于0.5都被标注为正样本了);然而svm训练的时候,因为svm适用于少样本训练,所以对于训练样本数据的IOU要求比较严格,我们只有当bounding box把整个物体都包含进去了,我们才把它标注为物体类别,然后训练svm。加上svm分类器使得分类精度变高了。

   

猜你喜欢

转载自blog.csdn.net/wait_butterfly/article/details/81103979
今日推荐