目录
一.简介
R-CNN(region with CNN features)的重要贡献在于将深度学习引入目标检测,并将 Pascal VOC 2007 数据集上的 mAP 由之前最好的 35.1% 提升到 66.0 %。在 R-CNN 之后,提出了 Fast R-CNN、Faster R-CNN 等改进模型,形成了 R-CNN 系列模型。
二.算法流程
如下图所示,R-CNN在一幅图像上进行目标检测时,它首先通过选择性搜索算法(selective search)提取一组目标作为建议框(也叫候选框、边界框),然后将这些建议框选定的图像区域重新调整成统一大小,再输入到一个在ImageNet上训练得到的CNN模型来提取特征。最后利用线性SVM分类器对每个建议框进行预测。
1.建议框(Region Proposal)的确定
R-CNN 首先使用选择性搜索算法,在图像中选取2000个建议框,它们的大小不一样。选择性搜索算法的流程如下:
(1).使用过分割手段,将图像分割成很多个小区域(1000~2000)
(2).计算所有邻近区域之间的相似性,包含纹理、颜色、尺度等
(3).将相似度比较高的区域合并
(4).计算合并区域和临近区域之间的相似度
(5).重复(3)、(4)直到整个图片变成一个区域,此时已经积累了很多个建议框了
(6).根据相似度从大到小,筛选出2000个建议框。
2.CNN模型提取特征–预训练和微调
CNN网络经过预训练与微调以后,就固定不变了,只是单纯作为一个提取特征的工具。
(1).CNN模型预训练
CNN模型需要提取建议框中的特征,但是物体标签训练数据少,所以采用有监督的预训练。R-CNN选择AlexNet作为特征提取模型,ImageNet数据集为训练数据进行预训练。AlexNet 的输入为 227 x 227 的图像,输出的最后一层是1000个分类的4096 维特征向量。
(2).CNN模型微调
AlexNet的输入是固定的,而候选框的大小却各不相同。预训练完成以后,还需要在 Pascal VOC 数据集上进行参数的调优。在调优阶段,AlexNet 的输入不再是完整的图像,而是被调整到 227x227的建议框,所以要把上一步得到的建议框都调整为227x227大小。此时将2000个建议框输入到AlenNet网络提取特征,得到输出为:2000x4096维矩阵。
3.SVM分类训练
在R-CNN中,CNN用于提取特征,在对目标进行分类时采用的是SVM分类器。因为SVM是二分类,所以对于每个类别,都要训练一个SVM分类器,共有N+1个分类器(N代表类数,1代表背景)。SVM分类器的输入是经过CNN提取的4096维的特征向量,输出的是属于该类别的得分。在SVM训练过程中,建议框和真值边界框的IOU>0.7的被视为正样本, IOU<0.3的被视为负样本,其余的建议框则全部丢弃。
由于负样本的数量非常多,会出现样本不平衡的情况,所以应采用难负样本挖掘的方法选取有代表性的负样本,即把每次检测结果为错误的情况作为难负样本送回去继续训练,直到模型的成绩不再提升。
对于 Pascal VOC 数据集,N = 20,将(2000,4096)维矩阵输入进SVM分类器中,最终得到(2000,21)维矩阵。
扩展:为什么要用SVM分类,而不在CNN模型后面添加softmax层进行分类?
如果要使用CNN模型对(2000,4096)矩阵进行分类,具体做法如下为:AlexNet模型的输出是 1000 个神经元的分类层替,只要将该层换成一个随机初始化的包含 N + 1 个神经元的分类层(N代表类数,1代表背景)即可。提取特征以后,然后计算每个建议框的和真值边界框GT 的IOU,对于IOU>0.5的建议框l被视为正样本,否则为负样本(即背景)。由于一张图片的建议框中,负样本远远大于正样本数,所以需要将正样本进行上采样来保证样本分布均衡。在每次迭代的过程中,选择层次采样,随机选取32个正样本和96个负样本组成一个mini-batch。
可以看到对于IOU阈值的选择,CNN和SVM中的并不相同,这是因为以IOU为0.5为界限区分数据会得到所有的数据,而以0.3,0.7为界限只会得到少量数据。对于CNN的训练,需要大量的数据,不然容易过拟合,所以设置的阈值较为宽松,比如一个bbox可能只包含物体的一部分,那也把它标注为正样本;然而svm适用于少样本训练,所以对于训练样本数据的IOU要求比较严格,我们只有当bounding box把整个物体都包含进去了(IOU>0.7),才把它标注为物体类别,IOU<0.3的标注为负样本,然后训练svm。就因为这个特点,只能用宽松IOU来softmax分类,那么很可能导致最后的bbox框位置不准确,类识别精度也会降低,因此选择了SVM完成分类,CNN只用来提取特征。最后实验证明,在将SVM作为分类器时,mAP为54.2%,而使用softmax函数作为分类器时,mAP为50.9%。
4.剔除部分边界框
对于一个目标来说,会存在很多的建议框bbox,其中大部分的bbox都是无用的,通过**非极大抑制(NMS)**方法可以去掉多余的bbox,最后每个类只保留一个得分最高的建议框。对于每一类,主要流程如下:
-
(1).首先把所有概率score得分小于某个阈值的bbox全部剔除
-
(2).之后,将所有的bbox按照得分排序,选中最高的分对应的bbox作为当前bbox
-
(3).遍历其余的bbox,如果和当前bbox的IOU大于某个阈值,便将这个bbox剔除
-
(4).从剩下的bbox中继续选择一个最高分的bbox,重复上述步骤
-
(5).当处理完某一类时,继续处理下一类即可
加入最后只剩下了m个边界框,那么(2000,4096)矩阵就变为了(m,4096)
5.边界框回归训练
(1).设计回归
下图所示,绿色的
G
G
G框是真实框,红色的
P
P
P框是原始建议框。边界框回归的目的就是就是寻找一种映射关系,使红框经过映射变成一个接近绿框的蓝框
G
^
\hat G
G^。
一个矩形框通常可以用x、y、w、h四个参数表示,分别为窗口中心坐标以及窗口的宽高,因此这个映射关系可以表示为:
f
(
P
x
,
P
y
,
P
w
,
P
h
)
=
(
G
^
x
,
G
^
y
,
G
^
w
,
G
^
h
)
≈
(
G
x
,
G
y
,
G
w
,
G
h
)
f(P_x,P_y,P_w,P_h)=(\widehat G_x,\widehat G_y,\widehat G_w,\widehat G_h)\thickapprox(G_x,G_y,G_w,G_h)
f(Px,Py,Pw,Ph)=(G
x,G
y,G
w,G
h)≈(Gx,Gy,Gw,Gh)
其中:
G
^
x
=
Δ
x
+
P
x
=
P
w
d
x
(
P
)
+
P
x
G
^
y
=
Δ
y
+
P
y
=
P
h
d
y
(
P
)
+
P
y
G
^
w
=
S
w
P
w
=
e
d
w
(
P
)
P
w
G
^
h
=
S
h
P
h
=
e
d
h
(
P
)
P
h
\widehat G_x=\Delta x+P_x=P_wd_x(P)+P_x\\ \widehat G_y=\Delta y+P_y=P_hd_y(P)+P_y\\ \widehat G_w=S_wP_w=e^{d_w(P)}P_w\\ \widehat G_h=S_hP_h=e^{d_h(P)}P_h\\
G
x=Δx+Px=Pwdx(P)+PxG
y=Δy+Py=Phdy(P)+PyG
w=SwPw=edw(P)PwG
h=ShPh=edh(P)Ph
(2).训练
四个函数
d
∗
(
P
)
d_*(P)
d∗(P)通过建议框在CNN的最高层特征图上建模,因此可表示为
d
∗
(
P
)
=
w
∗
T
Φ
5
(
P
)
d_*(P)=w^T_*\Phi_5(P)
d∗(P)=w∗TΦ5(P)。
Φ
5
(
P
)
\Phi_5(P)
Φ5(P)表示建议框P的最高层特征图,
w
∗
w_*
w∗是参数向量,通过岭回归固定:
w
∗
=
a
r
g
m
i
n
∑
i
N
(
t
∗
i
−
w
^
∗
T
Φ
5
(
P
i
)
)
2
+
λ
∣
∣
w
^
∗
∣
∣
2
w_*=argmin\sum_{i}^{N}(t_*^i-\widehat w^T_*\Phi_5(P^i))^2+\lambda||\widehat w_*||^2
w∗=argmini∑N(t∗i−w
∗TΦ5(Pi))2+λ∣∣w
∗∣∣2
t
∗
t_*
t∗的定义如下:
t
x
=
(
G
x
−
P
x
)
/
P
w
t
y
=
(
G
y
−
P
y
)
/
P
h
t
w
=
l
o
g
(
G
w
/
P
w
)
t
h
=
l
o
g
(
G
h
/
P
h
)
t_x=(G_x-P_x)/P_w\\ t_y=(G_y-P_y)/P_h\\ t_w=log(G_w/P_w)\\ t_h=log(G_h/P_h)\\
tx=(Gx−Px)/Pwty=(Gy−Py)/Phtw=log(Gw/Pw)th=log(Gh/Ph)
其损失函数为:
l
o
s
s
=
∑
i
N
(
t
∗
i
−
w
^
∗
T
Φ
5
(
P
i
)
)
2
+
λ
∣
∣
w
^
∗
∣
∣
2
loss=\sum_{i}^{N}(t_*^i-\widehat w^T_*\Phi_5(P^i))^2+\lambda||\widehat w_*||^2
loss=i∑N(t∗i−w
∗TΦ5(Pi))2+λ∣∣w
∗∣∣2
然后根据梯度下降法或最小二乘法就可以求得W。当模型训练完成后,就能通过建议框在CNN的顶层特征
Φ
5
(
P
)
\Phi_5(P)
Φ5(P)中预测出
d
∗
(
P
)
d_*(P)
d∗(P),进而计算出
G
^
∗
\widehat G_*
G
∗。
此时将第4步中得到的矩阵(m,4096)输入训练好的回归矩阵(4096,4)中,得出(m,4)偏移矩阵。
三.R-CNN缺点
-
训练阶段多:微调网络、训练SVM、边界框回归,并且训练相互独立,整体缺乏联动
-
训练耗时:分阶段多次训练导致整体时间较长
-
测试处理速度慢:由于不共享计算,每测试一张图片都要单独进行特征提取
-
图像形状变化:建议框发生形变,会导致输入到CNN的信息丢失