RCNN学习笔记

fine-tuning:把已经训练过的模型应用到新的数据集上,相当于继续训练

例子:

fine-tuning: 先拿CNN在cifar100上训练,然后仅仅修改最后一层softmax的输出节点个数(100改为10),再放到cifar10上训练。

训练过程:

第一步,fine-tuning训练过程:

    CNN神经网络Alexnet的基础上进行训练,我们从原始图片中生成出2000个proposal框,然后将每个框归一化成227*227大小,如果proposal框GroundTruth的重叠区域IoU大于0.5,那么我们就把这个proposal框标注成物体类别,否则我们就把它当做背景类别,物体类别一共有20种,加上背景最后总共有21种类别,这样,可以生成proposal框的图像分类训练样本集。

然后将Alexnet神经网络softmax分类输出层由1000类变成21类,然后再进行训练,相当于用新的图片分类的样本集在之前训练好的Alexnet神经网络的基础上进行再次训练。

第二步,经过fine-tuning将网络训练好了之后,对于20种物体类别训练出各自的二分类SVM分类器,对于某一类物体,proposal框与这个物体的proposal的重叠区域IoU大于0.3,就将这个物体视为正样本,否则视为负样本,针对这个类别将所有proposal框都给标注好了之后,便进行训练。

     训练的时候每个proposal框输入到前面fine-tuning后的Alexnet网络,然后输出一个4096维的特征向量X, 接着这个特征向量作为SVM的输入,训练出这个类别下的SVM分类器的权值W,b,其中W也是4096维的,对于一张图片的训练过程,相当于是把这张图中的2000个proposal框作为训练样本,然后对于这一类进行训练,20个类别就相当于是生成了20个SVM,相当于输入样本是2000*4096的矩阵,2000个样本,每个样本对应4096个特征,训练出的4096*20的SVM分类器参数W矩阵,参数矩阵每一列代表的是每个类别的SVM分类器对应的W向量,应该还有一个1*20的SVM分类器参数b的矩阵

测试过程:

  输入一张多目标图像,采用selective search算法提取约2000个proposal框,并把每个proposal框变为227×227的大小,将每个proposal框输入到训练好的Alexnet网络,提取出4096维的特征,2000个proposal框提取完特征后形成2000×4096维特征矩阵,将2000×4096维特征矩阵与20个SVM组成的权值矩阵4096×20相乘,获得2000×20维矩阵表示每个proposal框是某个物体类别的得分,然后将2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些proposal框,最后20个类别中各自得分最高的一些proposal框,最后用20个回归器对上述20个类别中的一些proposal框进行回归操作,最终得到每个类别的修正后的得分最高的那个proposal框。

 

 

非极大值抑制:

非极大值抑制顾名思义就是抑制不是极大值的元素,搜索局部的极大值。

比如定位一个车辆,从下面这张图片中找出n多个可能是车辆的矩形框,每个矩形框有对应的分类概率,我们需要判别哪些矩形框是没用的:

 

先假设有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是我们保留下来的第二个矩形框。

就这样一直重复,找到所有被保留下来的矩形框。

 

回归过程如下:

    得到了对应类别得分最高的proposal框之后,这个proposal框与ground truth之间还是会有误差,如下图所示,绿色框为ground truth,黄色框为得分最高的proposal 框,绿色框与黄色框的IOU值并不大,所以为了使得最后的目标检测精度变得更高,采用了回归器对proposal框进行校正

 

 

校正示意图:(红框是回归校正后的框)

 

 

 

 

 

 

 

    

 

posted @ 2017-07-24 21:56  YYYYQQQQ  阅读(267)  评论(0编辑  收藏  举报