目标检测算法(一):R-CNN详解

参考博文:https://blog.csdn.net/hjimce/article/details/50187029

R-CNN(Regions with CNN features)--2014年提出

算法流程

  1.输入一张图片,通过selective search算法找出2000个可能包括检测目标的region proposal(候选框)

  2.采用CNN提取候选框中的图片特征(AlexNet输出特征向量维度为4096)

  3.使用SVM对特征向量分类

  4.bounding-box regression修正候选框位置

(一)候选框搜索

  通过selective search算法可以搜索出2000个大小不同的矩形框,得到对应的坐标

  遍历候选框:

    对候选框进行筛选,去掉重复的、太小的方框等,假设剩余1500个。截取剩余的方框对应的图片,得到了1500张图片

    由于CNN对输入图片的大小有要求,需要对以上图片进行缩放处理,方法有:各向异性缩放、各向同性缩放。缩放到CNN要求的大小

    根据IOU对每一张图片进行标注,如IOU>0.5标注为目标类别(正样本),否则为背景类别(负样本)

  我的理解:每一张原始图片都会生成1500个训练样本

(二)CNN提取特征

  可选网络结构:AlexNet,Vgg-16

  预训练:有监督预训练

    物体检测的一个难点在于,物体标签训练数据少,如果要直接采用随机初始化CNN参数的方法,那么目前的训练数据量是远远不够的。

    这种情况下,最好的是采用某些方法,把参数初始化了,然后在进行有监督的参数微调,文献采用的是有监督的预训练

    有监督预训练,我们也可以把它称之为迁移学习。比如你已经有一大堆标注好的人脸年龄分类的图片数据,训练了一个CNN,

    用于人脸的年龄识别。然后当你遇到新的项目任务是:人脸性别识别,那么这个时候你可以利用已经训练好的年龄识别CNN模型,

    去掉最后一层,然后其它的网络层参数就直接复制过来,继续进行训练。这就是所谓的迁移学习,说的简单一点就是把一个任务训练好的参数,

    拿到另外一个任务,作为神经网络的初始参数值,这样相比于你直接采用随机初始化的方法,精度可以有很大的提高。

    图片分类标注好的训练数据非常多,但是物体检测的标注数据却很少,如何用少量的标注数据,训练高质量的模型,这就是文献最大的特点,

    这篇paper采用了迁移学习的思想。文献就先用了ILSVRC2012这个训练数据库(这是一个图片分类训练数据库),先进行网络的图片分类训练。

    这个数据库有大量的标注数据,共包含了1000种类别物体,因此预训练阶段cnn模型的输出是1000个神经元,

    或者我们也直接可以采用Alexnet训练好的模型参数。

  fine-tuning

    将最后一层的输出层单元数修改为目标检测的类别数+1,多出的一类为背景。输出层参数采用随机初始化,之前的参数不变。继续对网络进行训练。

(三)训练SVM

  CNN最后的softmax层可以做分类,在论文中为什么要把softmax层换成SVM进行分类?

    因为SVM和CNN分类时的正负样本定义不同,导致CNN+softmax输出比SVM精度要低。由于CNN容易过拟合,需要大量的训练样本,

    所以CNN的样本标注比较宽松,IOU>0.5即标记为正样本。SVM适用于小样本训练,对样本的IOU要求较高,在训练时,IOU>0.7时标记为正样本。

  由于SVM是二分类器,因此对每一个类别都需要训练一个SVM

(四)Bounding Box Regression--边框回归

  详解

  

  任务描述:G为目标边框(人为标注),P为网络计算得到的边框。边框回归的任务是计算从P到G^的映射f,使P经过映射以后得到与真实窗口G

      更接近的G^

  思路:平移+尺度缩放

  输入:(训练时)CNN提取到的该边框的特征+Ground Truth即G的坐标

     (预测时)CNN提取到的该边框的特征

  输出:需要进行的平移量和尺度缩放量,即P到G^的映射,包括4个值:Δx,Δy,Sw,Sh

  通过计算得到新的回归框

  

    

 

  

 

  

 

posted @ 2018-08-28 14:30  Dreamens  阅读(1609)  评论(0编辑  收藏  举报