1. 介绍
本篇论文的题目是 《Rich feature hierarchies for accurate oject detection and semantic segmentation》,翻译过来就是针对高准确度的目标检测与语义分割的多特征层级,通俗地来讲就是一个用来做目标检测和语义分割的神经网络。这篇论文发布时间是 2014 年,它具有很多比较重要的意义。
1 在 Pascal VOC 2012 的数据集上,能够将目标检测的验证指标 mAP 提升到 53.3%,这相对于之前最好的结果提升了整整 30%.
2 这篇论文证明了可以讲神经网络应用在自底向上的候选区域,这样就可以进行目标分类和目标定位。
- 这篇论文也带来了一个观点,那就是当你缺乏大量的标注数据时,比较好的可行的手段是,进行神经网络的迁移学习,采用在其他大型数据集训练过后的神经网络,然后在小规模特定的数据集中进行 fine-tune 微调。
2. 基本概念
在RCNN之前,overfeat已经是用深度学习的方法做目标检测,但RCNN是第一个可以真正可以工业级应用的解决方案。可以说改变了目标检测领域的主要研究思路,紧随其后的系列文章:Fast-RCNN ,Faster-RCNN都沿袭R-CNN的思路。
再放一张经典的图,区分一下各类计算机视觉的任务。简单来说,分类、定位和检测的区别如下:
classify:是什么?
localization:在哪里?是什么?(单个目标)
detection:在哪里?分别是什么?(多个目标)
![](https://img.haomeiwen.com/i2884841/9c6d11a5434aee86.png)
2. 背景
在过去的十多年时间里,传统的机器视觉领域,通常采用特征描述子来应对目标识别任务,这些特征描述子最常见的就是 SIFT 和 HOG.而 OpenCV 有现成的 API 可供大家实现相关的操作。
SIFT 和 HOG 的王者地位最近被卷积神经网络撼动。2012 年 Krizhevsky 等人在 ImageNet 举办的 ILSVRC 目标识别挑战大赛中一战成名,豪夺当年的第一名,Top5 错误率 15%,而他们团队提出来的网络结构以他们的导师名字命名,它就是 AlexNet。
![](https://img.haomeiwen.com/i2884841/1d95642ee3433286.png)
它有 5 层卷积层,2 层全连接层。
因为 AlexNet 的出现,世人的目光重回神经网络领域,以此为契机,不断涌出各种各样的网络比如 VGG、GoogleNet、ResNet 等等。.受 AlexNet 启发,论文作者尝试将 AlexNet 在 ImageNet 目标识别的能力泛化到 PASCAL VOC 目标检测上面来。
但一切开始之前,需要解决两个主要的问题。
- 如何利用深度的神经网络去做目标的定位?
- 如何在一个小规模的数据集上训练能力强劲的网络模型?
3. 算法流程
RCNN算法分为4个步骤
-
一张图像生成1K~2K个候选区域
-
对每个候选区域,使用深度网络提取特征
-
特征送入每一类的SVM 分类器,判别是否属于该类
-
使用回归器精细修正候选框位置
3.1 候选区域生成
使用了Selective Search1方法从一张图像生成约2000-3000个候选区域。基本思路如下:
- 使用一种过分割手段,将图像分割成小区域
- 查看现有小区域,合并可能性最高的两个区域。重复直到整张图像合并成一个区域位置
- 输出所有曾经存在过的区域,所谓候选区域
候选区域生成和后续步骤相对独立,实际可以使用任意算法进行。
合并规则
优先合并以下四种区域:
1.颜色(颜色直方图)相近的
2.纹理(梯度直方图)相近的
3.合并后总面积小的
4.合并后,总面积在其BBOX中所占比例大的
其中第三条:保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域。
例:设有区域a-b-c-d-e-f-g-h。较好的合并方式是:ab-cd-ef-gh -> abcd-efgh -> abcdefgh。 不好的合并方法是:ab-c-d-e-f-g-h ->abcd-e-f-g-h ->abcdef-gh -> abcdefgh。
其中第四条:保证合并后形状规则。例:左图适于合并,右图不适于合并。
![](https://img.haomeiwen.com/i2884841/598d90ea57be7659.png)
上述四条规则只涉及区域的颜色直方图、纹理直方图、面积和位置。合并后的区域特征可以直接由子区域特征计算而来,速度较快。
多样化与后处理
为尽可能不遗漏候选区域,上述操作在多个颜色空间中同时进行(RGB,HSV,Lab等)。在一个颜色空间中,使用上述四条规则的不同组合进行合并。所有颜色空间与所有规则的全部结果,在去除重复后,都作为候选区域输出。
3.2 特征提取
预处理数据
使用深度网络提取特征之前,首先把候选区域归一化成同一尺寸227×227。
此处有一些细节可做变化:外扩的尺寸大小,形变时是否保持原比例,对框外区域直接截取还是补灰。会轻微影响性能。
网络结构
基本借鉴Hinton 2012年在Image Net上的分类网络2,略作简化3。
测试阶段的目标检测
在测试阶段,R-CNN 在每张图片上抽取近 2000 个候选区域。
然后将每个候选区域进行尺寸的修整变换,送进神经网络以读取特征,然后用 SVM 进行类别的识别,并产生分数。候区域有 2000 个,所以很多会进行重叠。
针对每个类,通过计算 IoU 指标(如果其和真实标注的框的IoU>= 0.5就认为是正例,否则就是负例。),采取非极大性抑制,以最高分的区域为基础,剔除掉那些重叠位置的区域。
【非极大性抑制:顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小。NMS算法(参考论文《Efficient Non-Maximum Suppression》对1维和2维数据的NMS实现】
运行时分析
两个因素可以让目标识别变得高效。
- CNN 的参数是所有类别共享的。
- R-CNN 生成的特征向量维度较少。
论文拿应用在 UVA 采用的空间金字塔技术相比,它们生成的特征维度是 360k,而 R-cnn 就 4K 多。也就是运行过程中,参数变少了,所以比传统的高效。体现在提取特征的时间,如果用 GPU ,13s/张,CPU 53s/张。R-cnn 能够处理 100k 种类别,在一个多核的 CPU 上只要花费 10 多秒。与 UVA 相比,如果处理 100k 个预测,需要 134GB 内存空间,而 R-CNN 只要 1.5GB。
3.3 训练
调优训练
- 网络结构:
为了让我们的CNN适应新的任务(即检测任务)和新的领域(变形后的推荐窗口)。我们只使用变形后的推荐区域对CNN参数进行SGD训练。我们替换掉了ImageNet专用的1000-way分类层,换成了一个随机初始化的21-way分类层,(其中20是VOC的类别数,1代表背景)而卷积部分都没有改变 - 超参:
我们对待所有的推荐区域,如果其和真实标注的框的IoU>= 0.5就认为是正例,否则就是负例。SGD开始的learning_rate为0.001(是初始化预训练时的十分之一),这使得调优得以有效进行而不会破坏初始化的成果。每轮SGD迭代,我们统一使用32个正例窗口(跨所有类别)和96个背景窗口,即每个mini-batch的大小是128。另外我们倾向于采样正例窗口,因为和背景相比他们很稀少。 - 训练数据
使用PASCAL VOC 2007的训练集,输入一张图片,输出21维的类别标号,表示20类+背景。 考察一个候选框和当前图像上所有标定框重叠面积最大的一个。如果重叠比例大于0.5,则认为此候选框为此标定的类别;否则认为此候选框为背景。
3.4位置修正
目标检测问题的衡量标准是重叠面积:许多看似准确的检测结果,往往因为候选框不够准确,重叠面积很小。故需要一个位置精修步骤。 回归器对每一类目标,使用一个线性脊回归器进行精修。正则项。
输入为深度网络pool5层的4096维特征,输出为xy方向的缩放和平移。 训练样本判定为本类的候选框中,和真值重叠面积大于0.6的候选框。
3.5 识别
对象识别相关通常对待一个二值化的分类器,它的结果只要 2 中,Positive 和 Negetive。
比如,有一个汽车分类器,它可以轻松地确认,一个方框里面包含了一辆汽车,那么它肯定就是 Positive。也可以很清楚地确认,如果一个背景方框中没有包含汽车,那么它就是 Negetive。
但是,比较难确认的是,如果一个方框,只有一部分与汽车重叠,那么如何标注这个方框呢?
R-CNN 采用的是 IoU 的阈值,这个 threshold 取 0.3,如果一个区域与 Ground tureth 的 IoU 值低于设定的阈值,那么可以讲它看成是 Negetive.
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 的手段。
4 结果
论文发表的2014年,DPM已经进入瓶颈期,即使使用复杂的特征和结构得到的提升也十分有限。本文将深度学习引入检测领域,一举将PASCAL VOC上的检测率从35.1%提升到53.7%。
本文的前两个步骤(候选区域提取+特征提取)与待检测类别无关,可以在不同类之间共用。这两步在GPU上约需13秒。 同时检测多类时,需要倍增的只有后两步骤(判别+精修),都是简单的线性运算,速度很快。这两步对于100K类别只需10秒。
![](https://img.haomeiwen.com/i2884841/c500a4cea3536226.png)
网友评论