文章目录

  • 背景
  • R-CNN的工作流程
  • R-CNN模型
  • 预训练
  • 使用Selective Search找出候选区域核心
  • 将候选区域resize成CNN输入的尺寸
  • fine-tuning
  • 训练二元分类器
  • 回归模型



网上看了很多关于R-CNN的理解,讲的都非常细致,但是读者很容易就抓不住论文所介绍的方法核心和思路。我觉得一种新技术最好的方法是先抓住方法的框架,然后再去深究方法里面的细节,或许这才可以不失主次之分。

背景

本文参考论文:R-CNN 论文的创新点主要有两个,第一个是由底层向上的图像分割和检测,然后在不同尺度上对候选框进行合并。第二个是可以在只拥有少量监督数据的情况下实现fine-tuning微调就能够满足模型的训练要求。

R-CNN的工作流程

R-CNN模型

r语言 多层网络_特征向量

R-CNN的结构概述如上图所示

首先,输入原图。

其次,通过区域选择的方法提取2000个提取框。

然后,利用CNN提取每个提取框的特征。

最后,利用CNN或者SVM等分类器进行分类。

看到这里,有细心地读者会注意到,为什么没有对坐标位置的回归呢,别急,后面会介绍。

预训练

在ImageNet上训练一个分类神经网络;因为后面要对物体进行分类,注意这里不一定是自己需要分类的物体,什么意思呢?比如你最终要分类的是牛和马进行分类,但是因为你没有那么多的标签数据,那么在这里你可以训练一个猫和狗的分类模型。

使用Selective Search找出候选区域核心

自底向上的图像分割,在不同尺度上合并区域

更详细的介绍见文章:目标检测之选择性搜索-Selective Search

工作原理
1.使用传统图像分割算法创建候选框区域
2.使用贪心算法合并候选框区域:
计算所有相邻区域的相似度
将最相似的两个区域合并为一个区域
3.重复迭代第二步直到达到某个设定的停止条件

将候选区域resize成CNN输入的尺寸

因为CNN要求输入图片的大小必须是一致的,这里就有了一个缺点,就是resize的时候图片可能会变形、失真。

fine-tuning

在自己的训练集中fine-tune CNN,做为一个识别K+1类别的分类问题,K为感兴趣的样本类别,1为背景类别,Fine-tuning使用比较小的学习率,因为数据不均衡,所以要在正样本上做数据增强处理。
fine-tuning讲解

去掉Fine-tune之后的CNN的最后分类层,将每一个候选区域通过CNN输出一个特征向量。

训练二元分类器

在输出特征向量之后,我们需要利用特征向量为每个类别训练一个二元SVM分类器。

回归模型

使用Regression模型预测新的定位。

一个是手工标注的真实的位置,另一种是候选框的标注的位置,这两个位置做损失函数。类似于我们平时做的损失函数,真实值和预测值的误差,我们要去拟合的就是这个相误差。

下面图中所用到的全部都是百分比,为什么要这么做呢?这么做的好处就是当图片进行缩放之后图片的相对比例并不会发生改变,也就是并没有改变图片的中心相对整张图片的位置。

r语言 多层网络_数据_02