R-CNN
R-CNN 是基于卷积神经网络(CNN),线性回归和支持向量机(SVM)等算法实现目标检测技术的算法。
什么是目标检测
对象识别,给定一张图片可以识别出类别,而目标检测除了识别类别之外,还要找到对象的位置。
R-CNN 的提出
R-CNN 论文的作者受到 AlexNet 的启发,尝试将 AlexNet 在 ImageNet 目标识别的能力泛化到目标检测上面来,但需要解决两个主要的问题
- 如何利用深度的神经网络做目标的定位。
- 如何在一个小规模的数据集上训练能力强大的神经网络。
利用候选区域与 CNN 结合做目标定位
R-CNN 采用对区域进行识别的具体方案为:
- 给定一张图片,从图片中提取 2000 个类别独立的候选区域
- 对于每个区域利用 CNN 抽取一个固定长度的特征向量
- 再对每个区域利用 SVM 进行目标分类
利用预训练的模型和微调解决数据集缺乏的问题
使用迁移学习的方式,采用 ImageNet 上已经训练好的模型,然后在用于目标识别的数据集上进行微调(fine_tune)。
由于 ImageNet 的图像包含几百万张,利用 CNN 能充分学到浅层的特征,然后在小规模的数据集上做规模化训练,从而可以达到好的效果。
R-CNN 的模块划分
一、生成候选区域
能够生成候选区域的方式很多,如:
- objectness
- selective search
- category-independen object proposals
- constrained parametric min-cuts(CPMC)
- multi-scale combinatorial grouping
- Ciresan
R-CNN 采用的是 Selective Search 选择性搜索算法,通过 Selective Search 可以产生一定数量的候选区域。
二、区域预处理
R-CNN 抽取了一个 4096 维的特征向量,使用的是 AlexNet,但 AlexNet 的输入图像大小是 227 * 227,而候选区域是大小不一的,为了与 AlexNet 兼容,R-CNN 无视候选区域的大小和形状,统一变换到 227*227 的尺寸。
这里有一个区域预处理的细节,就是在对候选区域进行变换的时候,首先对这些区域进行膨胀处理,在其周围附加 p 个像素,也就是人为的添加边框,这里 p=16。
三、使用 AlexNet 特征提取
R-CNN 在每张图片上抽取近 2000 个候选区域,将所有区域通过 AlexNet 前向传播计算出特征,得到 4096 维的特征向量。
在使用 AlexNet 进行 fine-tune 时,正样本和负样本的划分方式为根据候选区域和 Ground-truth 的重合度 IoU 来划分, I o U = ( A ∩ B ) / ( A ∪ B ) IoU=(A\cap B)/(A\cup B) IoU=(A∩B)/(A∪B)
- 正样本 (N 类):跟 Ground-truth 重合 IoU >= 0.5
- 负样本 (1 类):IoU < 0.5
另外,网络最后的 Softmax 层改成 (N + 1) 维,R-CNN 使用在1000个类别的数据集中预训练得到的模型和权重,然后在 VOC 20个类别的数据集中进行 fine-tune,此时神经网络只需识别 21 个类别
四、线性 SVMs 分类器
使用 SVM 的目的是将卷积网络得到的特征输入 SVM 进行分类,看看这个特征向量对应的候选区域是需要的物体还是无关的实物。
在 AlexNet 的 Fc7 特征上训练线性 SVMs 分类器 (这里是一对多的 SVM)
- 每个类别(N 类)对应一个 SVM 分类器
- 正样本:所有 Ground-truth 区域
- 负样本:跟 Ground-truth 重合 IoU < 0.3 的候选区域
如下图训练一个 Cat SVM 分类器
- SVM 训练完成后,如果完全分类正确,所有样本的输出概率都大于 0.5,而所有负样本的输出概率都小于 0.5
- 但常见的情况是有一部分的负样本的输出概率也大于 0.5 的,这些样本就称为"False Positives"假正例
- 如果将这些假正例收集起来,对 SVM 进行二次训练,经过二次训练的 SVM 的分类准确度一般都会有一定的提升。
五、Bounding box 回归
R-CNN 测试
R-CNN 测试分为如下几个阶段:
1.使用 Selective Search 提取 2000 个候选区域
2.将所有区域膨胀+缩放到 227 x 227
3.使用微调后的 AlexNet 计算两套特征
- 对于 Fc7 特征
->
SVM 分类器->
类别分支- 使用非极大值抑制 (IoU>=0.5) 获取无冗余的区域子集
- 所有区域按 SVM 的分值从大到小排序
- 剔除冗余:即剔除与最大分值区域重合度 IoU>=0.5 的所有区域,来减少重复
- 保留该最大分值区域,剩余区域作为新候选集
- 使用非极大值抑制 (IoU>=0.5) 获取无冗余的区域子集
- 对于 Conv5 特征
->
Bounding box 回归模型->
Bbox 误差- 使用Bbox偏差修正区域子集
R-CNN 性能评价
- 计算准确率 precision:P = TP/(TP+FP)
- 计算召回率 recall:R = TP/(TP+FN)
计算目标类别第 C 类的平均精度(AP):PR 曲线之下的面积,即 Precision 对于 Recall 的积分
计算 mAP:即所有类别的平均精度求和除以所有类别,即数据集中所有类的平均精度的平均值。
R-CNN 在 PASCAL VOC 2010 和 ILSVRC 数据集上的性能大幅提升,但也存在问题:
- 训练时间长(84 小时)
- Fine-tune(18) + 特征提取 (63) + SVM/Bbox训练 (3),用于 SVM、b-box 回归的特征需要存储到磁盘中,这将需要占用大量的磁盘空间,而且提取这些特征也会耗费很多时间。
- 测试阶段很慢:VGG16 一张图片 47s
- 复杂的多阶段训练,卷积特征重复计算量大。