R-CNN原理详解与代码超详细讲解(一)--训练与预测过程讲解

R-CNN原理详解与代码超详细讲解(一)–训练与预测过程讲解

强调文本 强调文本

R-CNN算法,就不用多说了,它的出现,改变了目标检测的总思路,所以也称之为:深度学习在目标检测领域的先行者!!

废话不多说,直接进入正题~~~
R-CNN是所有目标检测算法中最基础,但是其中所含的思想也是最重要的,我结合github以及自己的理解,整理出了一套源码实现,直接上干货~

一、R-CNN的训练过程

这里我就偷一下懒,直接借用该博主的一张图
R-CNN原理详解与代码超详细讲解(一)--训练与预测过程讲解_第1张图片

引自: https://blog.csdn.net/m0_37537898/article/details/81542889

训练过程详解及其中需要注意的问题

-1. 特征提取网络的训练
    -a. 模型:TensorFlow深度学习模型
    -b. 训练方式:在AlexNet的基础上进行fine tune微调训练(分类网络)
    -c. 训练数据:
        正样本:将所有Ground Truth(GT)以及和GT的IoU值在0.5以上的边框图形作为正样本(正样本中按照这个物体进行分类)
        负样本:讲和GT的IoU的值在0.5以下的边框图作为负样本
-2. SVM模型训练
    -a. 模型:sklearn的svm模型, 每个类别一个SVM模型(每个svm模型仅区分是否属于当前类别,还是属于背景)
    -b. 训练方式:基于AlexNet微调后的FC7层输出的特征(是因为预训练中模型学习的就是边框的类别信息)来训练SVM模型
    -c. 训练数据:
        NOTE: 使用FC7层输出的4096维高阶特征进行训练
        正样本: 所有GT实际边框的高阶特征作为正样本
        负样本:所有和GT的IoU值在0.3以下的边框作为负样本;而且由于正负样本的比例是比较悬殊的,所以最好在模型训练的时候使用一些比较难区分的负样本的数据,所以这里就采用一种hard negative mining来进行模型训练。
-3. 回归模型训练
    -a. 模型:TensorFlow深度学习模型
    -b. 训练方式:基于AlexNet微调后的Conv5层输出的特征(是因为预训练中模型学习的就是边框的类别信息, 而回归中实际上是需要基于位置信息来进行边框的微调)来训练回归模型
    -c. 训练数据:
        NOTE:使用Conv5卷积层后的输出特征,AlexNet中提出为9216维高阶向量
        训练数据:所有的GT以及和GT的IoU值在0.6以上的候选框全部作为训练数据。
-4. 额外需要的内容:
    -a. Selective Search的实现
    -b. NMS非极大值抑制的实现 

预测过程详解及其中需要注意的问题

-1. Selective Search产生候选框(候选框以及坐标)
-2. 使用训练好的特征提取网络提取候选框对应的高阶特征
    -a. 用于分类的SVM高阶特征一
        使用AlexNet的FC7层输出特征作为高阶特征
    -b. 用于回归的高阶特征二
        使用Conv5池化层输出特征作为高阶特征
-3. 使用训练好的SVM模型,对候选框提取的高阶特征一进行分类,得到当前候选框是否属于当前类别以及属于当前类别的概率值/置信度
    -a. 使用N个SVM模型分类进行预测
-4. 对于确定为物体的候选框,使用BBR对候选框进行微调。
-5. 对SVM和回归的输出结果: 候选框属于哪个类别、属于这个类别的概率值以及精修的边框位置来使用NMS非极大值抑制来确定最终的边框。

你可能感兴趣的:(目标检测,R-CNN,机器学习,深度学习,人工智能,python)