论文题目《Rich feature hierarchies for accurate oject detection and semantic segmentation》即针对高准确度的目标检测与语义分割的多特征层级。
作者:Ross Girshick JeffDonahue,TrevorDarrell,Jitendra Malik发布于2014年
重要意义
1、在 Pascal VOC 2012 的数据集上,能够将目标检测的验证指标 mAP 提升到 53.3%,这相对于之前最好的结果提升了整整 30%.
2、证明了可以将神经网络应用在自底向上的候选区域,进行目标分类和目标定位。
3、神经网络的迁移学习,即在其他大型数据集上训练后的神经网络,然后在小规模的数据集中进行微调。
目标检测
定位+分类
R-CNN
传统的机器视觉领域,通常采用特征描述子来应对目标识别任务,最常见的特征描述子有SIFT和HOG。
2012 年 Krizhevsky 等人在 ImageNet 举办的 ILSVRC 目标识别挑战大赛中一战成名,豪夺当年的第一名,Top5 错误率 15%,而他们团队提出来的网络结构以他们的导师名字命名,它就是 AlexNet。
5层卷积层+2层池化层
因为 AlexNet 的出现,世人的目光重回神经网络领域,以此为契机,不断涌出各种各样的网络比如 VGG、GoogleNet、ResNet 等等。受 AlexNet 启发,论文作者尝试将 AlexNet 在 ImageNet 目标识别的能力泛化到 PASCAL VOC 目标检测上面来。
开始之前,需要解决两个问题:
1、如何利用深度神经网络去做目标的定位?
2、如何在一个小规模数据集上训练能力强劲的网络模型?
论文中作者给出了他的解答。
利用候选区域和CNN结合做目标定位
借鉴了滑动窗口思想,R-CNN 采用对区域进行识别的方案。
具体做法:
—给定一张输入图片,从图片中提取2000个类别独立的候选区域;
—对于每个区域利用CNN抽取一个固定长度的特征向量;
—再对每个区域利用SVM进行目标分类。
引自论文中的图片
利用预训练与微调解决标注数据缺乏的问题
采用在 ImageNet 上已经训练好的模型,然后在 PASCAL VOC 数据集上进行 fine-tune。称之为迁移学习,是必不可少的一种技能。
R-CNN 的目标识别
R-CNN系统分为3个阶段:
1.生产类别独立的候选区域,这些候选区域其中包含了R-CNN最终定位的结果;
2.神经网络去针对每个候选区域提取固定长度的特征向量;
3、一系列SVM分类器。
候选区域
能够生成候选区域的方法很多,R-CNN 采用的是 Selective Search 算法
特征提取
R-CNN 抽取了一个 4096 维的特征向量,采用的是 Alexnet,基于 Caffe 进行代码开发。需要注意的是 Alextnet 的输入图像大小是 227x227。
而通过 Selective Search 产生的候选区域大小不一,为了与 Alexnet 兼容,R-CNN 采用了非常暴力的手段,那就是无视候选区域的大小和形状,统一变换到 227*227 的尺寸。
在对 Region 进行变换的时候,首先对这些区域进行膨胀处理,在其 box 周围附加了 p 个像素,也就是人为添加了边框,在这里 p=16。
测试阶段目标检测
测试阶段,R-CNN 在每张图片上抽取近 2000 个候选区域。
然后将每个候选区域进行尺寸的修整变换,送进神经网络以读取特征,然后用 SVM 进行类别的识别,并产生分数。
候选区域有 2000 个,所以很多会进行重叠。针对每个类,通过计算 IoU 指标,采取非极大性抑制,以最高分的区域为基础,剔除掉那些重叠位置的区域。
运行阶段分析
两个因素可以让目标识别变高效:
1、CNN的参数类别共享;
2、R-CNN生成的特征向量维度较少,4K多。
训练
迁移学习
提取在 ILSVRC 2012 的模型和权重,然后在 VOC 上进行 fine-tune。注意的是,这里在 ImageNet 上训练的是模型识别物体类型的能力,而不是预测 bbox 位置的能力。
ImageNet 的训练当中需要预测 1000 个类别,而 R-CNN 在 VOC 上进行迁移学习时,神经网络只需要识别 21 个类别。这是 VOC 规定的 20 个类别加上背景这个类别。
R-CNN 将候选区域与 GroundTrue 中的 box 标签相比较,如果 IoU > 0.5,说明两个对象重叠的位置比较多,于是就可以认为这个候选区域是 Positive,否则就是 Negetive.
训练策略是:采用 SGD 训练,初始学习率为 0.001,mini-batch 大小为 128.
候选区域的选择
通常对待一个二值化的分类器,它的结果只有Positive 和 Negetive。比如,有一个汽车分类器,它可以轻松地确认,一个方框里面包含了一辆汽车,那么它肯定就是 Positive。
但是,如果一个方框,只有一部分与汽车重叠,那么如何标注这个方框呢?
R-CNN 采用的是 IoU 的阈值,这个 threshold 取 0.3,如果一个区域与 Ground tureth 的 IoU 值低于设定的阈值,那么可以讲它看成是 Negetive.
IoU 的 threshold 它不是作者胡乱取值的,而是来自 {0,0.1,0.2,0.3,0.4,0.5} 的数值组合的。
一旦特征抽取成功,R-CNN 会用 SVM 去识别每个区域的类别,但这需要优化。
R-CNN 的在 PASCAL-VOC 2010-12 的表现
R-CNN 是在 PASCAL VOC 2012 进行最终的 fine-tune,也是在 VOC 2012 的训练集上优化 SVM.
上面表格中 UVA 检测系统也采取了相同的候选区域算法,但 R-CNN 的表现要好于它。
可视化
在卷积神经网络中,第一层可以直接用来显示,而且肉眼可视,通常他们是为了捕捉物体边缘,及突出的颜色信息,但越往后的卷积层越抽象,这个时候进行可视化就是一个挑战了。R-CNN 的作者直接提供了一个没有参数的方法,简单直接。
思路:挑选一个特征出来,把它直接当成一个物体分类器,然后计算它们处理不同的候选区域时,activation 的值,这个值代表了特征对这块区域的响应情况,然后将 activation 作为分数排名,取前几位,然后显示这些候选区域,自然也可以清楚明白,这个 feature 大概是什么。
R-CNN 作者将 pool5 作为可视化对象,它的 feature map 是 6x6x255 的规格,可以理解为有 256 个小方块,每个方块对应一个特征。
下面的图表中显示了这以可视化的效果,这里只显示了 256 个特征中的 6 个,每个特征取 activation 值最高的 16 个区域。
对于同一类特征,activation 相差不大,这也是卷积神经网络能够准确识别物体的直观体现。
框架精简
pool5 在上一小节已经讨论过了,那么 fc6 和 f7 就成了研究的对象。
c6 与 pool5 构成全连接,为了计算 feature 它会乘以一个 4096x9216 的权重矩阵,然后在与一组 bias 相加,所以它有 3700 多万的参数。
fc7 是最后一层,它的权重矩阵是 4096x409,它的参数有 1678 万多的参数。
但经过作者在 PASCAL 上不做 fine-tune 处理,直接测试,可以发现 fc7 的意义没有 fc6 大,甚至移除它之后,对于 mAP 结果指标没有影响。移除 fc7 就表示可以减少将近 1800 万个参数。更惊喜的事情是,同时移除 fc6 和 fc7 并没有多大的损失,甚至结果还要好一点点。
所以,神经网络最神奇的力量来自卷积层,而不是全连接层。
上面说的是没有 fine-tune 的情况,那么在 fine-tune 的情况是什么呢?
结果证明,fine-tune 后 fc6 与 fc7 提升的效果明显。
所以结论就是,pool5 从 ImageNet 训练集中学习了物体的泛化能力,而能力的提升则是通过特定领域的 fine-tune。
举个例子,神经网络在 ImageNet 数据集中学习到了 100 种猫的特征,而我自己的数据集只有两种猫,经过 fine-tune 训练后,这个神经网络可以更准确识别这两种猫了。
目标检测错误分析
R-CNN 作者采用了 Hoiem 提出的目标检测分析工具,能够直观地揭露错误的模型,作者通过这个工具针对性地进行 fine-tune。