RCNN原文理解与代码分析

原论文地址:Rich feature hierarchies for accurate object detection and semantic segmentation.

文章目录

前言

一、RCNN的步骤

二、各个步骤详解

1.Extract region proposals

2.Compute CNN features

3.Classify regions

三、代码


前言

RCNN是比较老的行人检测算法,用到的各项技术也都是很古老的方法,对于算法急速更新的现状来看,它的作用不大,但是却可以帮助我们入门行人检测算法。充分理解它的每个过程可以帮助我们对行人检测有个大概了解,在以后学习其它行人检测算法时不至于毫无头绪。

一、RCNN的步骤

  1. Input image:顾名思义,即输入数据集的图片。
  2. Extract region proposals:使用selective search生成约2000个候选框
  3. Compute CNN features:将候选框转换成同意大小输入AlexNet,提取特征向量(此处使用AlexNet(可以选择其它网络结构,如VGG16)网络的五个卷积层和两个全连接层,输出2048维的特征向量)
  4. Classify regions:分别训练svm分类器和bounding box回归器 

    RCNN原文理解与代码分析_第1张图片

 论文原图

二、各个步骤详解

看了前面的过程可能不是很理解,那么以下开始详细介绍每个过程:

1.Extract region proposals

selective search产生候选框可以参考选择性搜索(Selective Search)算法 - 知乎 (zhihu.com)。读者可以详细看完该篇文章再返回来接着看下去。

2.Compute CNN features

  1. selective search产生的候选框大小不一,需要对图片进行处理,使其变成统一的大小,原文使用了最简单的处理方式,即将图片铺张或压缩到227×227大小
  2. 对网络进行预训练,学习提取特征的能力。原文在数据集ILSVRC2012 classification上进行预训练
  3. 网络微调。由于前面学习到的特征提取针对的数据集不一定是我们要检测的数据集,其特征提取能力在更换了数据集之后会不稳定,因此要在检测数据集上对网络进行微调训练。在微调时,将网络最后一层全连接层的1000维输出修改为n+1维(n为检测数据集的物品种类,1为背景background)。在训练过程中,使用IOU>=0.5(IOU参考深度学习中的IoU概念理解_鬼 | 刀的博客-CSDN博客_iou是什么意思)的候选框作为正样本,其余为负样本。
  4. 在微调后,正式训练时,不要全连接层的最后一层,输出2048维的特征向量供后面的分类器和回归器训练。

3.Classify regions

  1. svm分类器的训练:训练n个分类器(n为检测数据集的类别数),每个类别一个分类器。那么问题来了,在训练分类器时什么样本为正样本,什么样本为负样本呢?原文作者使用IOU来区分正样本和负样本。原文特意提到了IOU的门槛值将在很大程度上影响分类结果的准确性。假设设置门槛值为0.5,那么IOU>=0.5的被认定为该类别的正样本,其余被认定为背景。
  2. Bounding box回归器训练。原文是在论文附件中说明回归过程的。具体可以参见边框回归(Bounding Box Regression)详解_南有乔木NTU的博客-CSDN博客_bounding box regression

三、代码

Rcnn代码地址:GitHub - yangxue0827/RCNN at 4530523c6ae1108db622bd4f9ea76e0ae10fd6a5

参考博客RCNN算法(github代码复现理解)--学习记录2 - 知乎 (zhihu.com)

你可能感兴趣的:(RCNN,目标检测,深度学习,人工智能)