0. 摘要
作者提出了一种简单并且可度量(scalable)的目标检测算法。提升了将近30%的精确度——在VOC2012数据集上的mAP的值为53.3%。主要的创新点有两点:
- 使用CNN模型**定位(localize)和切割(segment)**底层局部特征。
- 当训练样本标签不足时,通过有监督预训练的CNN模型经过微调后,能够较好的提升性能。
作者称该模型为R-CNN:Regions with CNN features.
1. Introduction
CNN在ImageNet上的分类结果在多大程度上可泛化为PASCAL VOC比赛的目标检测结果?
To what extent do the CNN classification results on ImageNet generalize to object detection results on the PASCAL VOC Challenge?
作者主要考虑了一下两点内容:
- 通过深度学习对目标进行定位
- 通过少量的标注数据去训练一个高性能的模型
1.1 对目标进行定位
目标检测的特点:需要标注对象的位置。对于位置的标注:有两种主要的方法:
- One approach frames localization as a regression problem
- .Analternativeistobuilda sliding-window detector
- 看成回归模型,但是在实际情况中效果并不好(they report a mAP of 30.5% on VOC 2007 compared to the 58.5% achieved by our method)
- 使用滑动窗口。本来我们想用这个方法来着,但是计算成本太高了,这要求我们的网络具有 195 × 195 195 \times 195 195×195的感知野和 32 × 32 32 \times 32 32×32的stride。
所以,我们采用的办法是:recognition using regions,这种方法在语义分析与目标检测中取得优良的性能。在模型测试阶段,输入的图片在模型中产生了2000个类别独立的区域,针对这些区域,我们首先使用CNN提取向量特征,然后使用SVM分类器对其进行分类。
我们忽略了区域的形状大小,在固定大小的CNN input到region的过程中,加入了affine image warping操作,如下图所示。
1.2 数据量小的问题
借助迁移学习的方法,先在大数据集(ILSVRC)上进行训练,然后在迁移到小数据集上(PASCAL),在实验中效果提升了8个点。
1.3 model总结
The only class-specific computations are a reasonably small matrix-vector product and greedy non-maximum suppression.This computational property follows from features that are shared across all categories and that are also two orders of magnitude lowerdimensional than previously used region features
在类别的识别中,使用了很小的矩阵点乘和greedy non-maximum suppression(这里的意思应该是使用小卷积核,并没有贪心的覆盖整个物体,)
2. Object dectection with R-CNN
Object dectection system 由三个部分组成:
- generates category-independent region proposals:主要是为了定义需要检测的数据集范围。也就是生成框的过程:基于一些规则,图片的变化情况之类的
- large convolutional neural network:从每个区域提取固定长度的特征。
- linearSVM:用于分类
2.1 Module design
2.1.1 region proposal
selective search to enable a controlled comparison with prior detection work.也就是说,作者是针对物体进行分析的,说明可能框住物体的框形态大小都不一样
2.1.2 Feature extraction
从每个region中提取了4096个特征,特征提取的方式为:使用5个卷积层和2个全连接层,前向计算 227 × 227 227 \times 227 227×227的RGB图像,为了把图像变成CNN能够处理的大小,对其大小做了处理。
2.2 Test-time detection
- 把CNN的结果扔到SVM中进行评分和分类,如果区域A与区域B重叠了,如果区域B的得分高于阈值(0.3)那么就把区域A舍弃掉。
- 假设有2000个region,经过CNN之后得到的特征向量为2000* 4096,然后把这些向量扔到一个权重大小为4096*N的支持向量机中(N代表分类的数量)
2.3.Training
2.3.1 Supervised pre-training
自己模型的base是从caffe中的模型pertrain得来的。
2.3.2 Domain-specific fine-tuning
使用SGD去训练CNN部分,把ImageNet中指定的1000-way分类层换成了随机初始化的(N+1)-way 分类层(N是类别的数量,1是背景数量)。在VOC数据集中,N=20,;ILSVRC2013数据集中,N=200,We start SGD at a learning rate of 0.001。在每一批iteration中,batch_size 的大小为128,其中32个类别的窗口以及96个背景窗口
2.3.3 Object category classifiers
使用IoU overlap threshold来定义阈值。
3 流程总结
R-CNN首先选取若干提议区域,标注他们的类别和边界框,然后用CNN抽取整个区域的特征,用每个提议区域的特征预测类别和边界框。具体步骤如下:
- 对输入图像进行选择搜索,得到多个提议区域(生成锚框也是一种方法)这些区域在多个尺度下选择,故而大小不一样。
- 选取一个预训练过的网络,将最后的输出层替换为指定的层,这个指定的层用于格式化输入尺寸。
- 将每个提议区的特征和标注的类别作为一个样本,训练多个支持向量机进行分类,每一个类别对应一个支持向量机
- 将每个提议区域和边界框作为一个样本,训练回归模型预测真实边界框
4 Appendix
A. Object proposal transformations
CNN中要求的图像大小为 227 × 227 227 \times 227 227×227,作者对比了两种方法。
tightest square with context
encloses each object proposal inside the tightest square:紧紧的把目标给框住,下图中A是目标,B是用 tightest square with context的结果。
tightest square without context
把缺少的部分padding补全了。C部分
warp
作者在论文中用的是该方法:也就是对应的D,把图片拉伸了。
在每个对比组中,shows p = 0 pixels in the top row of each example and p = 16 pixels in the bottom row.
实验结果证明,p=16的效果要好一些。
B.Positivevs. negative examples and softmax
作者在这里提出了一个问题: Why are positive and negative examples defined differently for fine-tuning the CNN versus training the object detection SVMs?
在CNN中,分类的阈值需要设置为0.5,如果使用SVM,则分类的阈值为0.3。为什么会这样呢?
在训练SVM的时候,仅仅使用了CNN的输出特征,并没有实时的考虑fine-tuning的结果。作者给出的假设是:定义类别的差异并不是十分重要,而是fine-tuning的数据限制了。在使用fine-tunning之后再使用SVM, It would be cleaner to simply apply the last layer of the fine-tuned network, which is a 21-way softmax regression classifier, as the object detector
C.Bounding-box regression
输入是N个pairs
{
(
P
i
,
G
i
)
}
i
=
1
,
.
.
,
N
\{(P^i, G^i)\}_{i=1,..,N}
{(Pi,Gi)}i=1,..,N。其中,
P
i
=
(
P
x
i
,
P
y
i
,
P
w
i
,
P
h
i
,
)
P^i=(P^i_x,P^i_y,P^i_w,P^i_h,)
Pi=(Pxi,Pyi,Pwi,Phi,)。
其中
P
x
i
,
P
y
i
P^i_x,P^i_y
Pxi,Pyi代表锚框中心点的坐标,
P
w
i
,
P
h
i
P^i_w,P^i_h
Pwi,Phi代表锚框的宽和高。
G
=
(
G
x
,
G
y
,
G
w
,
G
h
)
G=(G_x,G_y,G_w,G_h)
G=(Gx,Gy,Gw,Gh)。我们的目标是尽可能的让P去贴近G。
首先,使用4个函数去描述
P
P
P:
d
x
(
P
)
,
d
y
(
P
)
,
d
w
(
P
)
,
d
h
(
P
)
d_x(P), d_y(P), d_w(P),d_h(P)
dx(P),dy(P),dw(P),dh(P)使用的公式为:
然后
d
∗
(
P
)
d_{*}(P)
d∗(P)这里的
∗
*
∗指代
(
x
,
y
,
h
,
w
)
(x,y,h,w)
(x,y,h,w)。计算公式为:
而
W
∗
W_*
W∗又是一个可以学习的参数,它的表达式为:
其中
t
∗
t_*
t∗被定义为: