R-CNN—目标检测论文理解

背景: 虽然在R-CNN之前Overfeat已经在用深度学习的方法在做目标检测了,但R-CNN是第一个真正意义上工业级应用的解决方案,可以说其改变了在深度学习领域目标检测的研究思路,其之后的fast R-CNN和faster R-CNN都沿袭了R-CNN的思路。
所以R-CNN系列论文(R-CNN,fast-RCNN,faster-RCNN)可以说是使用深度学习进行物体检测的鼻祖论文。
这里再来简单介绍一下图像的分类、定位和检测要解决的问题的区别。
分类(classify):是什么?
定位(localization):在哪里?是什么?(单目标)
检测(detection):是什么?在哪里?(多目标)
所以说,检测可以说是分类和定位的结合。
由于考虑到目标检测中有很多基础的概念性知识,因此在这里汇总以便后面对各论文的理解。

1、常用的数据集
Pascal VOC 2012、PascalVOC 2007、ILSVRC 2012;
ILSVRC 2012样本集上仅有图像类别标签,没有图像物体位置标注;
PASCAL VOC 2007样本集上既有图像中物体类别标签,也有图像中物体位置标签;
2、有监督预训练
也称之为迁移学习
这里举例来说明:
若有大量标注信息的人脸年龄分类的正负样本图片,利用样本训练了CNN网络用语人脸年龄识别;现在要通过人脸进行性别,那么就可以去掉已经训练好的人脸年龄识别网络CNN的最后一层或几层,换成所需要的分类层,前面层的网络参数直接使用为初始化参数,修改层的网络参数随机初始化,再利用人脸性别分类的政府样本图片进行训练,得到人脸性别识别网络,这种方法就叫做有监督预训练,也叫迁移学习。
这样的方式可以很好地解决小样本数据无法训练深层CNN网路的问题,我们都知道小样本数据训练很容易造成网络过拟合,但是在大样本数据训练后利用其参数初始化网络可以很好的训练小样本,这样就解决了小样本训练难的问题。
3、产生候选区域的算法
能够生成候选区域的方法很多,比如:
(1)objectness
(2)selective search
(3)category-independen object proposals
(4)constrained parametric min-cuts(CPMC)
(5)multi-scale combinatorial grouping
(6)Ciresan
这里就简单介绍一下R-CNN 采用的 Selective Search 算法的原理:
其首先利用图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着我们可能需要的物体。
4、感受野
在CNN中,决定某一层输出结果中一个元素对应的输入层的区域大小,被称作感受野(receptivefield)。
感受野是CNN中Feature Map上的一个点对应输入图上的区域。
5、模型的评价指标
FN:False Negative,被判定为负样本,但事实上是正样本。
FP:False Positive,被判定为正样本,但事实上是负样本。
TN:True Negative,被判定为负样本,事实上也是负样本。
TP:True Positive,被判定为正样本,事实上也是正样本。
在这里插入图片描述
(1)acc(准确率,accuracy)
准确率是所有样本分类正确的概率。
acc = (TP+TN)/ N
(2)Recall(召回率、查全率)
召回率是从数据集的同一标签的样本抽样概率。
R = TP /(TP+FN)=所有真正类样本中正类的概率。
(3)Precision(精确率,查准率)
精确率是从已经预测为同一类别的样本抽样概率。
P = TP /(TP / FP)=所有预测为正类样本中正类的概率。
(4)mAP(平均多个类别的平均精度)
用于评价多目标的检测器性能,衡量检测器在所有类别上的性能好坏,即得到每个类别的AP值后再取所有类别的平均值
mAP = 所有类别的AP之和 / 类别数量
P = (一张图片类别C识别正确数量) / (一张图片类别C的总数量)
AP = 每张图片的P之和 / 图片数量
(5)Anchors(锚)
共享卷积层的最后一层大小为W×H特征图上,每个3x3滑动窗口对应于原图上k种不同长宽比例、不同面积区域的卷积与池化。
这k种原图区域中心点和滑动窗口的中心点是一样的。也就是说,通过滑动窗口和k个不同长宽比例、不同面积的 anchor,可以逆向推导出 W * H * k 在原始图片上的 proposal。reg 层具有W * H * 4 * k个输出,即W * H * k个框的坐标,并且cls层输出W * H * 2 * k个预测得分,其估计每个建议框是目标或不是的概率。
在这里插入图片描述
(6) Intersection of Union(IoU)
IoU=(A∩B)/(A∪B)
在这里插入图片描述
(7)非极大值抑制(NonMaximumSuppression,NMS)
使用极大概率的候选框抑制其它位置相近的候选框。如果有两个框重叠的部分比较多,就把概率低的剔除掉。
a)从最大概率矩形框F开始,分别判断A~E与F的重叠度IOU是否大于某个设定的阈值
b)假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,保留下来
c)从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是保留下来的第二个矩形框
d)一直重复这个过程,直到所有被保留下来的候选框(有可能存在同一类别的多个目标)
比如说下面的图:
一个小猫有多个红框标定:
在这里插入图片描述
使用非极大值抑制算法后:
在这里插入图片描述

(8)BoundingBox(边框修正)
框的表示使用四维向量表示(x,y,w,h),基于预测框和真实框而通过所学习的关系,使预测框经过映射得到一个跟真实框更加接近的回归窗口。在这里插入图片描述

基础网络AlexNet

2012 年 Krizhevsky 等人在 ImageNet 举办的 ILSVRC 目标识别挑战大赛中一战成名,豪夺当年的第一名,Top5 错误率 15%,而他们团队提出来的网络结构以他们的导师名字命名,它就是 AlexNet。
它有 5 层卷积层,2 层全连接层。
在这里插入图片描述
因为 AlexNet 的出现,世人的目光重新从SIFT 和 HOG 两种目标识别的方法转移到神经网络领域,以此为契机,不断涌出各种各样的网络比如 VGG、GoogleNet、ResNet 等等。
受 AlexNet 启发,论文作者尝试将 AlexNet 在 ImageNet 目标识别的能力泛化到 PASCAL VOC 目标检测上面来。

论文需要解决的两个问题以及面对的两个挑战

问题:
1、如何利用深度的神经网络去做目标的定位?
2、如何在一个小规模的数据集上训练能力强劲的网络模型?
挑战:
1、滑动窗口——于网络层次更深,输入图片有非常大的感受野(195×195)and 步长(32×32),这使得采用滑动窗口的方法充满挑战。
测试时,对这每张图片,产生了接近2000个与类别无关的region proposal,对每个CNN抽取了一个固定长度的特征向量,然后借助专门针对特定类别数据的线性SVM对每个区域进行分类。我们不考虑region的大小,使用放射图像变形的方法来对每个不同形状的region proposal产生一个固定长度的作为CNN输入的特征向量。
2、数据太少——标签数据太少,现在可获得的数据远远不够用来训练一个大型卷积网络。
传统方法多是采用无监督与训练,再进行有监督调优。

论文采用的方法

借鉴滑动窗口的思想,R-CNN 采用对区域进行识别的方案。
步骤分别为:
1、给定一张输入图片,从图片中提取 2000 个类别独立的候选区域。
2、对于每个区域利用 CNN 抽取一个固定长度的特征向量。
3、再对每个区域利用 SVM 进行目标分类。
在这里插入图片描述
在这里插入图片描述

候选区域的提取

对于候选区域的提取,R-CNN 采用的是 Selective Search 算法。R-CNN 抽取了一个 4096 维的特征向量,采用的是 Alexnet,基于 Caffe 框架(虽然现在Caffee框架现在差不多被淘汰了)进行代码开发。
需要注意的是 Alextnet 的输入图像大小是 227x227。通过 Selective Search 产生的候选区域大小不一,为了与 Alexnet 兼容,R-CNN 采用了非常暴力的手段,那就是无视候选区域的大小和形状,统一变换到 227*227 的尺寸。有一个细节,在对 Region 进行变换的时候,首先对这些区域进行膨胀处理,在其 box 周围附加了 p 个像素,也就是人为添加了边框,在这里 p=16。

测试阶段的目标检测

在测试阶段,R-CNN 在每张图片上抽取近 2000 个候选区域。
然后将每个候选区域进行尺寸的修整变换,送进神经网络以读取特征,然后用 SVM 进行类别的识别,并产生分数。
候选区域有 2000 个,所以很多会进行重叠。
针对每个类,通过计算 IoU 指标,采取非极大性抑制,以最高分的区域为基础,剔除掉那些重叠位置的区域。

R-CNN训练过程

1、在大型数据集(ImageNet,即ILSVRC竞赛)上预训练用于图像分类的CNN。
2、在小型目标数据集(PASAC VOC)上微调(fine-tuning)CNN。
3、利用Selective Search提取2k多个region proposals并warp到同一size,然后输入训练好的CNN网络中,最后对每类训练SVM(因为SVM本身是二分类,如何通过对每类训练SVM而实现多分类呢?这个后面我再详细介绍。
过程图解:
在这里插入图片描述
在这里插入图片描述

R-CNN测试过程

1、输入一张多目标图像,采用selective search算法提取约2000个建议框;
在这里插入图片描述
2、先在每个建议框周围加上16个像素值,然后裁剪(crop),再直接 scale 为227×227的大小(AlexNet网络输入图像大小:227x227);将所有建议框像素减去该建议框像素平均值后【预处理操作】,再依次将每个227×227的建议框输入AlexNet CNN网络获取4096维的特征【比以前的人工经验特征低两个数量级】,2000个建议框的CNN特征组合成2000×4096维矩阵;
在这里插入图片描述
在这里插入图片描述
3、将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘【20种分类,SVM是二分类器,则有20个SVM】,获得2000×20维矩阵表示每个建议框是某个物体类别的得分;分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框;
4、分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。
在这里插入图片描述

R-CNN 的在 PASCAL-VOC 2010-12 的表现

R-CNN 是在 PASCAL VOC 2012 进行最终的 fine-tune,也是在 VOC 2012 的训练集上优化 SVM.
在这里插入图片描述
值得关注的是,上面表格中 DPM(多尺度形变部件模型),其主要原理就是把物体看着多个部件组成,然后分别检测,但缺点就是相对复杂、检测速度也慢。另外,UVA 检测系统也采取了相同的候选区域算法,但 R-CNN 的表现要好于它。

R-CNN的贡献和问题

贡献:
(1)使用了卷积神经网络进行特征提取
(2)使用bounding box regression进行目标包围框的修正
问题:
(1)耗时的selective search,对一张图像,需要花费2s
(2)耗时的串行式CNN前向传播,对于每一个候选框,都需经过一个AlexNet提取特征,为所有的候选框提取特征大约花费47s
(3)三个模块(CNN特征提取、SVM分类和边框修正)是分别训练的,并且在训练的时候,对于存储空间的消耗很大。卷积出来的特征数据还要保持至本地磁盘。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值