目录
R-CNN
论文链接:R-CNN
R-CNN由伯克利大学的学者提出,作者将卷积神经网络应用在目标检测领域上,mAP指标达到了新高度,整个目标检测过程可以分为四个步骤。分别是①候选区域的获取;②图像特征提取;③对候选区域进行分类识别;④对候选框做进一步的调整校正。
1、Selective Search(ss算法)
通过这个算法可以获得大约2000个候选区域(region-proposal),这些候选区域将作为后续的训练样本来训练特征提取模型(CNN)与目标分类模型(SVM)。ss算法具体的实现大家可以自行去搜索论文细读。
2、特征提取步骤(CNN)
特征提取模型由卷积神经网络构造,最终输出的特征向量是4096维的,因为这里卷积网络直接是以AlexNet作为backbone。这个网络的任务是分类,但是作者发现如果再单独训练 k(目标类别的个数) 个SVM二分类器来分类的话准确率会更高,这里就放弃用CNN来分类,所以这个CNN就仅充当了特征提取的作用。
3、目标分类(SVM)
由CNN得到特征向量后,将特征向量作为训练样本,用来训练k个SVM二分类器。
4、Bounding-Box regression
作者认为由ss算法得到的候选框并不能很好的框选出目标区域,所以设计了一个简单的线性回归模型对候选框的位置进行调整。
下面具体讲解2,3,4步骤是如何实现的
CNN网络,SVM分类器训练
1、voc数据集介绍,以及构建训练集
这个数据集里包含了每张图片中目标物体的矩形框信息(矩形框的左上角坐标与右下角坐标),以及对应的目标物体的类别,需要知道的是每张图片上可能会有多个目标物体。将数据集中的图片可视化后如下图所示
然后通过ss算法可以得到大约2000个region-proposal,每个region-proposal与 ground-truth(真实矩形框label) 之间可能会有重叠,重叠的程度可以由***IoU(交并比)***这个指标来度量。
①卷积神经网络训练样本的构建:
当IoU>=0.5时作者将其分为正样本,并将对应的目标物体的类别附在上面。所以一个被视为正样本的region-proposal应该包含矩形框的位置信息(由ss算法得到)与类别标签。当IoU<0.5时,将这个region-proposal视为负样本(即背景)。
对每张图的每个region-proposal都做上面的操作就可以构建出训练CNN的数据集了。训练时,设置的batch-size为128,因为正样本是远小于负样本的,所以每个batch中包含32个正样本,96个负样本。另外本篇论文的网络结构与AlexNet有稍微的差别,本篇网络最后一层全连接层包含21和神经元(20个目标 + 背景),前面层的权重通过预训练的模型进行初始化。训练好卷积神经网络后,这个网络就充当region-proposal的特征提取器了。
②SVM二分类器训练样本构建:
当IoU<=0.3时,将这个region-proposal视为SVM样本集中的负样本,0.3这个值是通过对比实验效果选出来的;只将ground-truth视为SVM样本集中的正样本。也就是说,当我们通过ss算法得到region-proposal后,将IoU<0.3的当作训练SVM模型中样本集的负样本。
CNN与SVM是如何联系起来的?
首先由CNN的样本集进行训练,得到了训练好的CNN后,将region-proposal输入到CNN中,得到了一系列特征向量,然后将这些特征向量中IoU<=0.3的特征向量当作SVM中的负样本,正样本则由ground-truth输入CNN中获得,然后将这些特征向量用来训练k个二分类器。
以上就是训练过程,下面介绍test步骤(inference)。
2、bounding-box regression
先上公式:
G
∗
^
\hat{G_*}
G∗^表示通过线性模型更新后的信息,
P
∗
P_*
P∗表示更新前的bounding-box位置信息,
G
∗
G_*
G∗则是bounding-box的ground-truth信息。
d
∗
(
P
)
=
w
∗
T
ϕ
5
(
P
)
d_*(P)=w_*^T\phi_5(P)
d∗(P)=w∗Tϕ5(P),
w
∗
T
w_*^T
w∗T是这个线性模型需要求解的参数,
ϕ
5
(
P
)
\phi_5(P)
ϕ5(P)是由卷积神经网络的第五层输出的特征向量,通过最小化代价函数可以得到线性模型的参数。需要注意的是,我们采用的bounding-box应该是一个正样本(这里将IoU>=0.6的视作正样本),这样才能得到一个有意义的模型。通过实验表明,利用bounding-box regression调整后,在VOC2010测试集上,mAP提升了3.5%。
测试阶段(inference)
①通过ss算法在一张图片上提取2000(大约)个region-proposal
②将每个region-proposal输入到CNN中,得到了2000×4096的特征矩阵。
③将特征矩阵输入SVM分类器中,论文中一共训练了20个类别,所以会得到一个2000×20的矩阵
④将2000×4096的特征矩阵输入bounding-box regression中得到了更新后的矩形框位置信息。
⑤因为这2000个region-proposal之间很多重叠度非常高,所以对2000×20的矩阵实施非极大值抑制(NMS),可以大大减少冗余,最终得到了要保留的region-proposal。