目标检测算法-rcnn

版权声明:本文由@yyf7329081 出品(整理),转载请注明出处。 https://blog.csdn.net/u014796085/article/details/83352821

前言

在经历了一段时间的胡碰乱撞之后,对基于深度学习的目标检测有了初步的认识,决定开始系统地学习目标检测算法,品读论文,研究算法,编程实现。作为小白,还是从早期经典的RCNN开始入手。

RCNN详解

1.摘要

RCNN(region with CNN features),区域卷积神经网络。主要有以下两个创新点:
(1) 通过图像分割和选择搜索(selective search)得到候选框(region proposal),然后在候选框上使用CNN提取特征,用于定位和识别物体。
在这里插入图片描述
在这里插入图片描述
(2) 当带标签的训练数据不足时,对辅助任务的大训练集进行有监督训练,然后在小数据集上进行微调(fine-tune)。

2.训练过程

(1) 预训练卷积网络

  • 在ILSVRC2013训练集上图片resize到227x227,有监督预训练alexnet。

(2) 卷积网络参数微调

  • 首先,根据特定任务修改alexnet最后几层结构
  • 在小数据集中,对每张图片通过选择搜索得到的约2000个候选框,与groundtruth的iou>=0.5的为正样本,其他为负样本,resize到227x227,迭代训练alexnet 200~500步,微调alexnet参数。

(3) 训练svm分类器

  • 在小数据集中,对每张图片通过选择搜索得到的候选框,与groundtruth的iou>0.6的为正样本、iou<0.1的为负样本,resize后经过alexnet全连接层输出的4096维特征向量,放入训练集(防止正负样本数量相差太多,分类器偏向负分类),训练svm分类器。剩下的resize后经过alexnet全连接层得到特征向量,作为待定的测试样本。
  • 由于这样训练集负样本比较单一,没有部分包含目标的候选框,所以用难负例挖掘(hard negative mining method)。用训练好的svm分类器在测试样本中预测,对于预测结果为正的测试样本,将其中得分前百分之10的作为负样本加入训练集,重新训练,直到svm分类器在训练集上正确率不再提高,或者训练集数量不足10个,停止迭代。

(4) 训练boundingbox回归

  • 在小数据集中,对每张图片通过选择搜索得到的候选框,与groundtruth的iou>0.6的resize后经过alexnet全连接层输出的特征向量加入训练集,对应搜索框的[x,y,w,h]与groundtruth的[gx,gy,gw,gh]变换得到[tx,ty,tw,th],作为输出加入训练集。
  • boundingbox回归作为线性回归问题,把训练集中特征向量作为输入,[tx,ty,tw,th]作为输出,训练该线性回归模型。

3.测试过程

(1) 测试图片选择搜索得到候选框,筛选,并且resize到227x227。
(2) 所有候选框经过alexnet,提取全连接层输出的4096维特征向量。
(3) 特征向量通过svm分类,保留其中包含目标的。
(4) 包含目标的特征向量,boundingbox回归后范围处理得到精确位置。
(5) 剩下的特征向量进行非极大抑制,得到最终结果。

参考

1.RCNN(regions with CNN features)论文

论文翻译参考以下网址,第一个博客更贴近原论文,第二个条理更清晰,更详细,细节更到位:
https://blog.csdn.net/v1_vivian/article/details/78599229
https://blog.csdn.net/wopawn/article/details/52133338

2.知识点1:边框回归(bounding box)

在论文第一章Introduction中,作者使用了边框回归(boundingbox)的方法有效减少了定位偏差(mislocation)。边框回归的介绍可以参见:https://blog.csdn.net/zijin0802034/article/details/77685438

3.知识点2:选择搜索(selective search)

论文第二章用RCNN目标检测中,在产生候选框(region proposal)时采用了选择搜索(selective search)的方法,该方法的介绍,可以参考:https://blog.csdn.net/mao_kun/article/details/50576003

  • 知识点2.1:图像分割算法(Effective graph-based image segmentation)

在选择搜索(selective search)产生候选框(region proposal)时,在图像分割部分采用了基于图的图像分割算法(Effective graph-based image segmentation),参考:https://blog.csdn.net/surgewong/article/details/39008861

4.知识点3:难负例挖掘(hard negative mining method)

论文在2.3训练时采用了难负例挖掘算法(hard negative mining method),主要是因为负例过多,正例只有ground-truth,所以在分类时容易把部分包含目标的候选框(region proposal)误判为正例,此时把这些误判的样本作为负例加入负样本集,重新训练,直到成绩不再提升为止。

编程实现

文中关于图像分割算法(Effective graph-based image segmentation)的python实现,在我的另一篇博客中有详细描述:
https://blog.csdn.net/u014796085/article/details/83449972
关于选择搜索(selective search)的python实现:
https://blog.csdn.net/u014796085/article/details/83478583
RCNN训练及测试过程的python实现,已经完成,博客很快会写,到时补充。

总结

暂时先写这么多,研究后会继续补充,不对之处欢迎指正。

猜你喜欢

转载自blog.csdn.net/u014796085/article/details/83352821