R-CNN小结

  最近在面试腾讯优图的实习生,需要复习一下常用的目标检测的模型,于是准备写一些博客,梳理一下思路。

  R-CNN是目标检测的领域我接触到的第一个网络,其地位在业界也是很重要的。

  R-CNN主要分四步:

  1.输入图片 2.用某种方法在图片上标记出2000个目标候选框 3.将这些目标候选框调整大小后送入CNN网络中提取特征 4.用SVM分类器进行分类和bbox回归

  下面开始逐一介绍

  第一步,输入图片,这个没有什么可以说的,注意在输入图片时要减去像素平均值,有两种减去像素平均值的方法,选择AlexNet的那一种。

  第二步,在图像上选择出2000个感兴趣的区域,这里不是随机选择,而是有方法的去进行选择,这里不细说了,可以参考selective search的方法。选取完之后将这2000个区域送入CNN网络中进行训练。这里论文中提到了因为AlexNet网络中有全连接层,所以必须对这些区域大小调整到一个定值,文中是先放大区域,再进行缩放,放大区域是为了将区域扩大一下,可以将周围的背景也吸收到区域中。

  第三步,将这些目标候选框调整大小后送入fine-tune的AlexNet网络中去训练,提取特征。论文中在这里介绍了一些细节。首先是使用AlexNet做预训练网络。论文中指出,因为用来做目标检测的标记图片很少,所以使用预训练模型来解决由于训练集过少造成的过拟合现象。然后是对模型进行fine-tune,就是改一下softmax层,改成需要检测的种类+1(背景),其余不变,训练时采用的batch_size是128,32个正样本(N类)和96的负样本。


正样本是和Ground-truth重合IOU>0.5的样本,负样本是IOU<0.5的样本

  第四步是用SVM进行分类和bbox的回归,首先是在AlexNet网络的FC7层的特征上训练线性SVM分类器,每一个类别对应一个SVM分类器,正样本是所有Groundtruth区域,负样本是Groundtruth重合IOU<0.3的选择区域(这里的0.3是实验数据,论文中作者说试了0.5,0.4,0.2之类的值,发现0.3是最好的)


  然后就是bbox回归。网上有不少介绍R-CNN的文章,但是在这里是怎么进行回归的基本上都是避开不谈,我的理解是这样的,论文中介绍是在提取第五层卷积层上的特征进行回归用,即在Conv5特征上训练Bounding box回归,每个类别训练一个回归模型,目的是通过训练,找到一个矩阵,使得选择区域提供的bbox可以正确映射到groundtruth上。


  测试和训练的过程差不多



致谢小象学院的ppt

以上为我对rcnn的总结



猜你喜欢

转载自blog.csdn.net/opencv_857310866/article/details/79793085