R-CNN学习笔记

目标检测

reference:https://www.cnblogs.com/zf-blog/p/6740736.html

技术路线:selective search -> CNN -> SVMs -> BBR

                          R-CNN学习笔记_第1张图片


具体步骤:

  1. 输入一张多目标图像,采用selective search算法提取约2000个建议框

  2. 先在每个建议框周围加上16个像素值为建议框像素平均值的边框,再直接resize变形为227×227的大小,采用padding=16的各向异性变形的resize效果最好;

  3. 先将所有建议框像素减去该建议框像素平均值后【预处理操作】,再依次将每个227×227的建议框输入AlexNet CNN网络获取4096维的特征【比以前的人工经验特征低两个数量级】,2000个建议框的CNN特征组合成2000×4096维矩阵;

  4. 将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘【20种分类,SVM是二分类器,则有20个SVM】,获得2000×20维矩阵表示每个建议框是某个物体类别的得分;

  5. 分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制(NMS)剔除重叠建议框,得到该列即该类中得分最高的一些建议框;

  6. 分别用20个回归器对上述20个类别中剩余的建议框进行回归操作(BBR),最终得到每个类别的修正后的得分最高的bounding box。


Selective Search:

  1. 使用一种过分割手段,将图像分割成小区域 ;
  2. 查看现有小区域,合并可能性最高的两个区域。通过颜色直方图,梯度直方图相近等规则进行合并重复直到整张图像合并成一个区域位置 ;
  3. 输出所有曾经存在过的区域,所谓候选区域;

IoU:

IoU即表示(A∩B)/(A∪B)

                                                           R-CNN学习笔记_第2张图片


NMS:

同一个目标会被多个建议框包围,这时需要非极大值抑制操作去除得分较低的候选框以减少重叠框。 

                                                          R-CNN学习笔记_第3张图片

  1. 对2000×20维矩阵中每列按从大到小排序; 

  2. 从每列最大的得分建议框开始,分别与该列后面的得分建议框进行IoU计算,若IoU>阈值,则剔除得分较小的建议框,否则认为图像中存在多个同一类物体; 
  3. 从每列次大的得分建议框开始,重复步骤2; 
  4. 重复步骤3直到遍历完该列所有建议框; 
  5. 遍历完2000×20维矩阵所有列,即所有物体种类都做一遍非极大值抑制; 

BBR(bounding-box regression)

                                                           R-CNN学习笔记_第4张图片

绿色框为实际标准的卡宴车辆框,即Ground Truth黄色框为selective search算法得出的建议框,即Region Proposal。即使黄色框中物体被分类器识别为卡宴车辆,但是由于绿色框和黄色框IoU值并不大,所以最后的目标检测精度并不高。

采用回归器是为了对建议框进行校正,使得校正后的Region Proposal与selective search更接近, 以提高最终的检测精度。

                               R-CNN学习笔记_第5张图片

如何变换:

                               R-CNN学习笔记_第6张图片

                               R-CNN学习笔记_第7张图片

所谓线性回归:给定输入特征向量X,学习一组w,使得经过线性回归后的值跟真实值Y(Ground Truth)非常接近。

输入

其实真正的输入是这个窗口对应的CNN特征,也就是R-CNN中的Pool5feature(特征向量)。(注:训练阶段输入还包括 Ground Truth,也就是下边提到的)

输出

需要进行的平移变换和尺度缩放,或者说是。我们的最终输出不应该是Ground Truth吗?是的,但是有了这四个变换我们就可以直接得到Ground Truth。这里还有个问题,根据上面4个公式我们可以知道,P经过,得到的并不是真实值G,而是预测值。的确,这四个值应该是经过 Ground Truth 和Proposal计算得到的真正需要的平移量和尺度缩放。这也就是R-CNN中的:

                                                                                           


 

那么目标函数可以表示为是输入Proposal的特征向量,是要学习的参数(*表示,也就是每一个变换对应一个目标函数),是得到的预测值。我们要让预测值跟真实值差距最小,得到损失函数为:

                                                                                 

函数优化目标为:

                                                               

利用梯度下降法或者最小二乘法就可以得到,入取1000。

注意:

  • 对每类样本都仅仅采集与Ground Truth相交IoU最大的Region Proposal,并且IoU>0.6的Region Proposal作为样本对(Pi,Gi),一共产生20对样本对【20个类别】
  • 每种类型的回归器单独训练。

训练过程:

  1. 有监督预训练

    样本 来源
    正样本 ILSVRC2012
    负样本 ILSVRC2012


    ILSVRC样本集上仅有图像类别标签,没有图像物体位置标注; 
    采用AlexNet CNN网络进行有监督预训练,学习率=0.01; 
    该网络输入为227×227的ILSVRC训练集图像,输出最后一层为4096维特征->1000类的映射,训练的是网络参数。

  2. 特定样本下的微调

    样本 来源
    正样本 Ground Truth+与Ground Truth相交IoU>0.5的建议框【由于Ground Truth太少了】
    负样本 与Ground Truth相交IoU≤0.5的建议框


    PASCAL VOC 2007样本集上既有图像中物体类别标签,也有图像中物体位置标签; 
    采用训练好的AlexNet CNN网络进行PASCAL VOC 2007样本集下的微调,学习率=0.001【0.01/10为了在学习新东西时不至于忘记之前的记忆】; 
    mini-batch为32个正样本和96个负样本【由于正样本太少】; 
    该网络输入为建议框【由selective search而来】变形后的227×227的图像,修改了原来的1000为类别输出,改为21维【20类+背景】输出,训练的是网络参数。

  3. SVM训练

    样本 来源
    正样本 Ground Truth
    负样本 与Ground Truth相交IoU<0.3的建议框


    由于SVM是二分类器,需要为每个类别训练单独的SVM; 
    SVM训练时输入正负样本在AlexNet CNN网络计算下的4096维特征,输出为该类的得分,训练的是SVM权重向量; 
    由于负样本太多,采用hard negative mining的方法在负样本中选取有代表性的负样本,该方法具体见。

  4. Bounding-box regression训练

    样本 来源
    正样本 与Ground Truth相交IoU最大的Region Proposal,并且IoU>0.6的Region Proposal


    输入数据为某类型样本对N个:{(Pi,Gi)}i=1⋯N以及Pii=1⋯N所对应的AlexNet CNN网络Pool5层特征ϕ5(Pi)i=1⋯N,输出回归后的建议框Bounding-box,训练的是dx(P),dy(P),dw(P),dh(P)四种变换操作的权重向量。具体见前面分析。


Q&A:

  1. 什么叫有监督预训练?为什么要进行有监督预训练?

    有监督预训练也称之为迁移学习,举例说明:若有大量标注信息的人脸年龄分类的正负样本图片,利用样本训练了CNN网络用于人脸年龄识别;现在要通过人脸进行性别识别,那么就可以去掉已经训练好的人脸年龄识别网络CNN的最后一层或几层,换成所需要的分类层,前面层的网络参数直接使用为初始化参数,修改层的网络参数随机初始化,再利用人脸性别分类的正负样本图片进行训练,得到人脸性别识别网络,这种方法就叫做有监督预训练。这种方式可以很好地解决小样本数据无法训练深层CNN网络的问题,我们都知道小样本数据训练很容易造成网络过拟合,但是在大样本训练后利用其参数初始化网络可以很好地训练小样本,这解决了小样本训练的难题。 
    这篇文章最大的亮点就是采用了这种思想,ILSVRC样本集上用于图片分类的含标注类别的训练集有1millon之多,总共含有1000类;而PASCAL VOC 2007样本集上用于物体检测的含标注类别和位置信息的训练集只有10k,总共含有20类,直接用这部分数据训练容易造成过拟合,因此文中利用ILSVRC2012的训练集先进行有监督预训练。

  2. ILSVRC 2012与PASCAL VOC 2007数据集有冗余吗?

    即使图像分类与目标检测任务本质上是不同的,理论上应该不会出现数据集冗余问题,但是作者还是通过两种方式测试了PASCAL 2007测试集和ILSVRC 2012训练集、验证集的重合度:第一种方式是检查网络相册IDs,4952个PASCAL 2007测试集一共出现了31张重复图片,0.63%重复率;第二种方式是用GIST描述器匹配的方法,4952个PASCAL 2007测试集一共出现了38张重复图片【包含前面31张图片】,0.77%重复率,这说明PASCAL 2007测试集和ILSVRC 2012训练集、验证集基本上不重合,没有数据冗余问题存在。

  3. 可以不进行特定样本下的微调吗?可以直接采用AlexNet CNN网络的特征进行SVM训练吗?

    文中设计了没有进行微调的对比实验,分别就AlexNet CNN网络的pool5、fc6、fc7层进行特征提取,输入SVM进行训练,这相当于把AlexNet CNN网络当做万精油使用,类似HOG、SIFT等做特征提取一样,不针对特征任务。实验结果发现f6层提取的特征比f7层的mAP还高,pool5层提取的特征与f6、f7层相比mAP差不多; 
    在PASCAL VOC 2007数据集上采取了微调后fc6、fc7层特征较pool5层特征用于SVM训练提升mAP十分明显; 
    由此作者得出结论:不针对特定任务进行微调,而将CNN当成特征提取器,pool5层得到的特征是基础特征,类似于HOG、SIFT,类似于只学习到了人脸共性特征;从fc6和fc7等全连接层中所学习到的特征是针对特征任务特定样本的特征,类似于学习到了分类性别分类年龄的个性特征。

  4. 为什么微调时和训练SVM时所采用的正负样本阈值【0.5和0.3】不一致?

    微调阶段是由于CNN对小样本容易过拟合,需要大量训练数据,故对IoU限制宽松:Ground Truth+与Ground Truth相交IoU>0.5的建议框为正样本,否则为负样本; 
    SVM这种机制是由于其适用于小样本训练,故对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本。

  5. 为什么不直接采用微调后的AlexNet CNN网络最后一层SoftMax进行21分类【20类+背景】?

    因为微调时和训练SVM时所采用的正负样本阈值不同,微调阶段正样本定义并不强调精准的位置,而SVM正样本只有Ground Truth;并且微调阶段的负样本是随机抽样的,而SVM的负样本是经过hard negative mining方法筛选的;导致在采用SoftMax会使PSACAL VOC 2007测试集上mAP从54.2%降低到50.9%。

 

 

你可能感兴趣的:(R-CNN学习笔记)