R-CNN网络结构讲解

  • 结构

第一步 : 生成候选区域 -- Selective Search

(不理解可以看这里Selective Search)

  • 输入500x500的图片
  • 数量:2000

alt tag

第二步:CNN提取区域特征

  • 图像处理
    • 将候选框scale到227x227的大小
    • 对区域进行些许扩大以包含少量上下文信息(将获得区域框向四周扩大一些)
  • 训练:
    • 有监督预训练:训练网络参数
      • 样本:ImageNet
      • 这里只训练和分类有关的参数,因为ImageNet数据只有分类,没有位置标注
      • 图片尺寸调整为227x227
      • 最后一层:4097-> 1000的映射。
    • 特定样本下的微调 :训练网络参数
      • 样本

      • 采用训练好的AlexNet CNN网络进行PASCAL VOC 2007样本集下的微调,学习率=0.001
        PASCAL VOC 2007样本集上既有图像中物体类别标签,也有图像中物体位置标签;
        • mini-batch为32个正样本和96个负样本【由于正样本太少】
        • 修改了原来的1000为类别输出,改为21维【20类+背景】输出。
    •  如果不针对特定样本的训练会怎么样?

不针对特定任务进行微调,而将CNN当成特征提取器,pool5层得到的特征是基础特征,类似于HOG、SIFT,类似于只学习到了人脸共性特征;从fc6和fc7等全连接层中所学习到的特征是针对特征任务特定样本的特征,类似于学习到了分类性别分类年龄的个性特征

  • SVM训练
    • 样本

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


      输入数据为某类型样本对N个:AlexNet CNN网络Pool5层特征ϕ5(Pi)i,输出回归后的建议框Bounding-box,训练的是dx(P),dy(P),dw(P),dh(P)四种变换操作的权重向量。

第三步:SVM分类

  • 用于训练多个SVM的数据集是用pretrain的ImageNet数据
  • 将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘【20种分类,SVM是二分类器,则有20个SVM】,获得2000×20维矩阵表示每个建议框是某个物体类别的得分;
  • 分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框;

第四步:边框回归

  • 每次分类完之后,都要对边界框的进行调整,利用一个ringe regression实现
  • 回归器的设计


    d*(P)是关于pool5的一个线性函数,所以可以通过pool5的数据训练d(P)的模型。
    G:ground truth
    P: 输入模型的边界框,也就是选择性搜索的结果
    G^:调整之后的结果​​​

思考

  • 为什么微调时和训练SVM时所采用的正负样本阈值【0.5和0.3】不一致?
    • 微调阶段是由于CNN对小样本容易过拟合,需要大量训练数据,故对IoU限制宽松:Ground Truth+与Ground Truth相交IoU>0.5的建议框为正样本,否则为负样本;
    • SVM这种机制是由于其适用于小样本训练,故对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本
  • 为什么不直接采用微调后的AlexNet CNN网络最后一层SoftMax进行21分类而是用了SVM?
    • 发现有时候,SVM分类的精度确实比softmax高,但是加入了SVM就导致了失去了端到端的训练,得不偿失
  • RCNN作为使用卷积神经网络应用于目标检测的开山之作,创新点很多,后面的很多目标检测算法都是通过一点点改进RCNN的模型来实现的。

猜你喜欢

转载自blog.csdn.net/Tomxiaodai/article/details/81749845