R-CNN(Region-CNN)理解

tech2022-07-15  147

R_CNN(Region-CNN):

本篇博客参考:https://blog.csdn.net/briblue/article/details/82012575                 

提出时间:2014

论文:《Rich feature hierarchies for accurate oject detection and semantic segmentation》

           针对精确目标检测和语义分割的多特征层级

作者:Ross Girshick,JeffDonahue,TrevorDarrell,Jitendra Malik

意义: Pascal VOC 2012 的数据集上,能够将目标检测的 mAP 提升到 53.3%,对之前最好的结果提升了整整 30%

          提出先训练再微调(fine-tune ),也就是迁移学习,解决了训练数据集样本量少的问题。

          提出自底向上的候选区域

          第一个将CNN应用到目标检测上的算法

想法来源:2012年Krizhevsky 等人用AlexNet在 ImageNet 举办的 ILSVRC 目标识别挑战大赛中一战成名,豪夺当年的第一名,Top5 错误率 15%,撼动了SIFT和HOG在机器学习的地位。CNN网络得到重视,VGGNet GoogleNet先后出现,受 AlexNet 启发,论文作者尝试将 AlexNet 在 ImageNet 目标识别(分类)的能力泛化到 PASCAL VOC 目标检测上面来。

面临问题:一:如何利用深度的神经网络去做目标的定位?

                 二 :如何在一个小规模的数据集上训练能力强劲的网络模型

解决方法:

一:利用候选区域(Region Proposal)与 CNN 结合做目标定位,借鉴滑动窗口思想,

给定一张输入图片,从图片中提取 2000 个类别独立的候选区域,这些候选区域包含了 R-CNN 最终定位的结果。特征提取:对于每个区域利用 CNN 抽取一个固定长度的特征向量。每个候选区域所提取的特征送入每一类的SVM 分类器进行分类,判别是否属于该类 。使用边框回归修正候选框位置

二:利用预训练与微调解决标注数据缺乏的问题

采用在 ImageNet 上已经训练好的模型,然后在 PASCAL VOC 数据集上进行 fine-tune,迁移学习的过程。因为 ImageNet 的图像高达几百万张,利用卷积神经网络充分学习浅层的特征,然后在小规模数据集做规模化训练,从而可以达到好的效果。

论文中的流程图

生成候选区域的方法:

objectness,selective search,category-independen object proposals,constrained parametric min-cuts(CPMC),multi-scale combinatorial grouping,Ciresan

R-CNN 采用的是 Selective Search 算法。

特征抽取方法:

R-CNN 抽取了一个 4096 维的特征向量,采用的是 Alexnet,基于 Caffe 进行代码开发。

Alextnet 的输入图像大小是 227x227,而通过 Selective Search 产生的候选区域大小不一,为了兼容AlexNet,每一个候选框进去AlexNet之前需要经过 warped ,统一到 227*227 的尺寸。

在对 Region 进行变换的时候,首先对这些区域进行膨胀处理,在其 box 周围附加了 p =16个像素,也就是人为添加了边框。

模型训练:

迁移学习:

提取在 ILSVRC 2012 的模型和权重,然后在 VOC 上进行 fine-tune。这里在 ImageNet 上训练的是模型识别物体类型(分类classfication)的能力,而不是预测 bbox 位置的能力。

ImageNet 的训练当中需要预测 1000 个类别,而 R-CNN 在 VOC 上进行迁移学习时,神经网络只需要识别 21 个类别。这是 VOC 规定的 20 个类别加上背景这个类别。

R-CNN 采用的是 IoU 的阈值,这个 threshold 取 0.3,如果一个区域与 Ground truth 的 IoU 值低于设定的阈值,那么可以讲它看成是 Negetive负样本,如果 IoU > 0.5,说明两个对象重叠的位置比较多,于是就可以认为这个候选区域是 Positive。IoU 的 threshold 它不是作者胡乱取值的,而是来自 {0,0.1,0.2,0.3,0.4,0.5} 的数值组合的。而且,这个数值至关重要,如果 threshold 取值为 0.5,mAP 指标直接下降 5 个点,如果取值为 0,mAP 下降 4 个点。

一旦特征抽取成功,R-CNN 会用 二分类SVM 去识别每个区域的类别。

因为训练的数据太大,不可能一下子填充到电脑内存当中,R-CNN 作者采取了一种叫做 Hard negetive mining 的手段。

 

R-CNN 的表现

R-CNN 是在 PASCAL VOC 2012 进行最终的 fine-tune,也是在 VOC 2012 的训练集上优化 SVM,然后,还与当时 4 个强劲的对手,也就是 4 个不同的目标检测算法进行了比较。

 UVA 检测系统也采取了相同的候选区域算法,但 R-CNN 的表现要好于它

模型可视化

CNN的第一层可以直接用来显示,而且肉眼可视,通常他们是为了捕捉物体边缘,及突出的颜色信息,但越往后的卷积层越抽象,这个时候进行可视化就是一个挑战了。

Zeiler 和 Fergus 提出了一种基于反卷积手段的可视化研究,但 R-CNN 的作者直接提供了一个没有参数的方法:挑选一个特征出来,把它直接当成一个物体分类器,然后计算它们处理不同的候选区域时,activation 的值,这个值代表了特征对这块区域的响应情况,然后将 activation 作为分数排名,取前几位,然后显示这些候选区域,自然也可以清楚明白,这个 feature 大概是什么。

R-CNN 作者将 pool5 作为可视化对象,它的 feature map 是 6x6x255 的规格,可以理解为有 256 个小方块,每个方块对应一个特征。

下面的图表中显示了这以可视化的效果,这里只显示了 256 个特征中的 6 个,每个特征取 activation 值最高的 16 个区域。

上图应该很明白了,对于同一类特征,activation 相差不大,这也是卷积神经网络能够准确识别物体的直观体现

框架精简

AlexNet 有 7 层,那么那些层是关键指标呢?哪些层可有可无呢?

pool5 在上一小节已经讨论过了,那么 fc6 和 f7 就成了研究的对象。

fc6 与 pool5 构成全连接,为了计算 feature 它会乘以一个 4096x9216 的权重矩阵,然后在与一组 bias 相加,所以它有 3700 多万的参数。

fc7 是最后一层,它的权重矩阵是 4096x409,它的参数有 1678 万多的参数。

但经过作者在 PASCAL 上不做 fine-tune 处理,直接测试,可以发现 fc7 的意义没有 fc6 大,甚至移除它之后,对于 mAP 结果指标没有影响。

移除 fc7 就表示可以减少将近 1800 万个参数。

更惊喜的事情是,同时移除 fc6 和 fc7 并没有多大的损失,甚至结果还要好一点点。

 所以,卷积层在CNN中是最重要的。

上面说的是没有 fine-tune 的情况,那么在 fine-tune 的情况是什么呢?

结果证明,fine-tune 后 fc6 与 fc7 提升的效果明显。

所以结论就是,pool5 从 ImageNet 训练集中学习了物体的泛化能力,而能力的提升则是通过特定领域的 fine-tune。

举个例子,神经网络在 ImageNet 数据集中学习到了 100 种猫的特征,而我自己的数据集只有两种猫,经过 fine-tune 训练后,这个神经网络可以更准确识别这两种猫了。

R-CNN 还与其他的特征方法进行了能力比较,作者选取了两种基于 DPM 的方法,DPM ST 和 DPM HSC,结果都证明,R-CNN 要好于它们。

bbox 回归

bbox 的值其实就是物体方框的位置,预测它就是回归问题,而不是分类问题。

参考   https://zhuanlan.zhihu.com/p/61576407    

CNN具有尺度不变性(也就是不管这个图片大小尺寸),只要是同一张,卷积神经网络提取的特征应该是相同的。

 

 

 

 

 

 

最新回复(0)