RCNN
RCNN主要分为3个大部分
第一部分产生候选区域;
第二部分对每个候选区域使用CNN提取长度固定的特征;
第三个部分使用一系列的SVM进行分类;
第四个部分使用回归器精细修正候选框位置;
RCNN的检测流程:
(1)首先输入一张自然图像;
(2)使用Selective Search提取大约2000个候选区域(proposal);
(3)对每个候选区域的图像进行拉伸形变,使之成为固定大小的正方形图像;
(4)将步骤(3)得到的图像输入到CNN中提取特征;
(5)使用线性的SVM对提取的特征进行分类。
(6)使用根据特征图对先验框进行坐标回归(使用回归器精细修正候选框位置)。
第一部分产生候选区域
(1)首先输入一张自然图像;
(2)使用Selective Search提取大约2000个候选区域(proposal);
(3)对每个候选区域的图像进行拉伸形变,使之成为固定大小的正方形图像;
第二部分对每个候选区域使用CNN提取长度固定的特征;
第三个部分使用一系列的SVM进行分类;
第四个部分使用线性回归器精细修正候选框位置;
使用全连接进行回归,回归得到平移和缩放参数的结果为Px、Py、Pw、Ph
Bounding-box回归原理
作者在完成了前面提到的“生成候选区域——CNN提取特征——SVM进行分类”以后,为了进一步的提高定位效果,在文章的附录C中介绍了Bounding-box Regression的处理。Bounding-box Regression训练的过程中,输入数据为N个训练对{(Pi,Gi)},i=1,2,…,N,其中,Pi=(Pix,Piy,Piw,Pih)为proposal(先验框)的位置,前两个坐标表示proposal的中心坐标,后面两个坐标分别表示proposal的width和height,而 Gi=(Gix,Giy,Giw,Gih)表示groundtruth的位置,
regression的目标就是学会一种映射将P转换为G。
作者认为P到G的过程是通过平移变换和缩放变换得到的。设平移因子为dx(Pi),dy(Pi)缩放因子dw(Pi),dh(Pi)。在平移变换时添加一项平移系数Pw, Ph。
Gix = Pw dx(Pi)+ Pix
Giy = Phdy(Pi)+ Piy
Giw = Pwexp(dw(Pi))
Gih = Phexp(dh(Pi))
Gi = (Gix,Giy,Giw ,Gih)
在上面的公式中,我们唯一不知道的是 平移因子为dx(Pi),dy(Pi)缩放因子dw(Pi),dh(Pi)。因此我们要利用回归学习者四个参数。
在学习时,作者使用的是线性回归,假设学习出来的结果为d’x(Pi)、d’y(Pi)、d’w(Pi)、d’h(Pi),Φ(P)为第i个先验框的特征向量则
d’(Pi)={d’x(Pi),d’y(Pi),d’w(Pi),d’h(Pi)}=WTΦ(Pi)
在学习时我们使用的标签是根据上面的平移变换和缩放变换公式得到的
dx(Pi) = (Gix- Pix)/Pw
dy(Pi) = (Giy- Piy)/Ph
dw(Pi) = log(Giw /Pw)
dh(Pi) = log(Gih/Ph)
d(Pi) ={dx(Pi),dy(Pi),dw(Pi),dh(Pi)}
因此回归损失可以写成:
loss = sumNi=1( (d(Pi) - WTΦ(Pi))2)
即
loss = sumNi=1( (d(Pi) - d’(Pi))2)
优化目标函数可以写成:
W*=argminw(loss+λ||W||2)
最后解释一下使用用线性回归的原因,作者认为当先验框与真实框很接近时(二者的IOU值>0.6)他们之间的变换可以近似为一个线性变换
目标检测最主要的就是Bounding-box回归,不同算法的Bounding-box回归原理都类似,只是先验框的选取与设置不同。