Bounding Box Regression超详解(全站最全汇总版)综合各个途径文档 看这一篇就够了解决你所有疑惑
首先介绍一下RCNN
RCNN算法流程可分为4步
1.一整图像生成1K~2K个候选区域(使用Selective Search方法)
2.对每个候选框区域使用深度网络提取特征
3.特征送入每一类的SVM分类器,判别是否属于该类
4.使用回归器精细修正候选框位置
这里我要说的就是RCNN的第四步,即“边界框回归”
- 1.为什么要边框回归?
- 2.什么是边框回归?
- 3.边框回归细节
- 4.为什么使用相对坐标差?
- 5.为什么宽高比只能取对数?
- 6.为什么IoU较大时边界框回归可视为线性变换?
1.为什么要边框回归?
对于上图,绿色的框表示Ground Truth, 红色的框为Selective Search提取的Region Proposal。那么即便红色的框被分类器识别为飞机,但是由于红色的框定位不准(IoU<0.5), 那么这张图相当于没有正确的检测出飞机。 如果我们能对红色的框进行微调, 使得经过微调后的窗口跟Ground Truth 更接近, 这样岂不是定位会更准确。 确实,Bounding-box regression 就是用来微调这个窗口的。
2.边框回归是什么?
对于窗口一般使用四维向量 (x,y,w,h)(x,y,w,h)(x,y,w,h)来表示, 分别表示窗口的中心点坐标和宽高。 对于图 2, 红色的框 P 代表原始的Proposal, 绿色的框 G 代表目标的 Ground Truth, 我们的目标是寻找一种关系使得输入原始的窗口 P 经过映射得到一个跟真实窗口 G 更接近的回归窗口G^\widehat{G}G。
边框回归的目的是:给定(Px,Py,Pw,Ph)寻找一种映射f,使得f(Px,Py,Pw,Ph)=(G^x,G^y,G^w,G^h)边框回归的目的是:给定(P_x,P_y,P_w,P_h)寻找一种映射f,使得f(P_x,P_y,P_w,P_h)=(\widehat{G}_x,\widehat{G}_y,\widehat{G}_w,\widehat{G}_h) 边框回归的目的是:给定(Px,Py,Pw,Ph)寻找一种映射f,使得f(Px,Py,Pw,Ph)=(Gx,Gy,Gw,Gh)并且(G^x,G^y,G^w,G^h)≈(Gx,Gy,Gw,Gh)并且(\widehat{G}_x,\widehat{G}_y,\widehat{G}_w,\widehat{G}_h)≈(G_x,G_y,G_w,G_h)并且(Gx,Gy,Gw,Gh)≈(Gx,Gy,Gw,Gh)
3.边框回归细节
RCNN论文里指出,边界框回归是利用平移变换和尺度变换来实现映射 。
平移变换(Δx,Δy)的计算公式如下:平移变换(Δx,Δy) 的计算公式如下:平移变换(Δx,Δy)的计算公式如下:
Δx=Pwdx(P),Δy=Phdy(P)Δx=P_wd_x(P),Δy=P_hd_y(P)Δx=Pwdx(P),Δy=Phdy(P)
G^x=Px+Δx\widehat{G}_x=P_x+ΔxGx=Px+Δx
G^y=Py+Δy\widehat{G}_y=P_y+ΔyGy=Py+Δy
尺度变换(Δw,Δh)的计算公式如下:尺度变换(Δ_w,Δ_h)的计算公式如下:尺度变换(Δw,Δh)的计算公式如下:
Δw=e(dw(P)),Δh=e(dh(P)),Δ_w=e^{(d_w(P))},Δ_h=e^{(d_h(P))},Δw=e(dw(P)),Δh=e(dh(P)),
G^w=Pw∗Δw\widehat{G}_w=P_w∗ΔwGw=Pw∗Δw
G^h=Ph∗Δh\widehat{G}_h=P_h∗ΔhGh=Ph∗Δh
这样我们就得到了变换的一般形式:
G^x=Px+Pwdx(P)\widehat{G}_x=P_x+P_wd_x(P)Gx=Px+Pwdx(P)
G^y=Py+Phdy(P)\widehat{G}_y=P_y+P_hd_y(P)Gy=Py+Phdy(P)
G^w=Pw∗edw(P)\widehat{G}_w=P_w∗e^{dw(P)}Gw=Pw∗edw(P)
G^h=Ph∗edh(P)\widehat{G}_h=P_h∗e^{dh(P)}Gh=Ph∗edh(P)
−−−−−−−−−−−−−−−−−−−-------------------−−−−−−−−−−−−−−−−−−−
Gx=Px+Pwtx(P)G_x=P_x+P_wt_x(P)Gx=Px+Pwtx(P)
Gy=Py+Phty(P)G_y=P_y+P_ht_y(P)Gy=Py+Phty(P)
Gw=Pw∗etw(P)G_w=P_w∗e^{tw(P)}Gw=Pw∗etw(P)
Gh=Ph∗eth(P)G_h=P_h∗e^{th(P)}Gh=Ph∗eth(P)
也就是说,一个d对应着一个t,用i表示一张图片的序号:也就是说,一个d对应着一个t,用i表示一张图片的序号:也就是说,一个d对应着一个t,用i表示一张图片的序号:
di→tid_i→t_idi→ti
下一步就是设计算法得到这个映射→使d无限接近t下一步就是设计算法得到这个映射→使d无限接近t下一步就是设计算法得到这个映射→使d无限接近t
根据上述公式可以推导出t∗根据上述公式可以推导出t*根据上述公式可以推导出t∗
注意:当输入的Proposal 与 Ground Truth 相差较小时(RCNN设置的是IOU>0.6)可以认为这种变换是一种线性变换,那么我们就可以用线性回归模型对窗口进行微调,只有当Proposal和Ground Truth比较接近时(线性问题),我们才能将其作为训练样本训练我们的线性回归模型,否则会导致训练的回归模型不work(当Proposal跟Ground Truth离得较远,就是复杂的非线性问题了,此时用线性回归建模显然不合理)。这个也是G-CNN: an Iterative Grid Based Object Detector多次迭代实现目标准确定位的关键。
那么什么是线性回归?
线性回归就是给定输入的特征向量 X, 学习一组参数 W, 使得经过线性回归后的值跟真实值 Y(Ground Truth)非常接近.,即Y≈WX
那么这个映射关系中我们的输入以及输出分别是什么呢?
输入:RegionProposal的→P=(Px,Py,Pw,Ph)Region Proposal的→P=(P_x,P_y,P_w,P_h)RegionProposal的→P=(Px,Py,Pw,Ph)
输入的就是这四个数值吗?不!其实真正输入的是这个窗口对应的CNN特征,也就是R−CNN中的第五个池化层得到的特征向量Φ5(P),我们还要定义一个权重矩阵w∗(∗表示x,y,w,h,也就是每一个变换对应一个目标函数)来表示这个目标函数d∗(P)=w∗TΦ5(P)输入的就是这四个数值吗?不!其实真正输入的是这个窗口对应的CNN特征,也就是R-CNN中的第五个池化层得到的特征向量 Φ_5(P),我们还要定义一个权重矩阵w*(*表示x,y,w,h,也就是每一个变换对应一个目标函数)来表示这个目标函数d*(P) = w*^TΦ_5(P)输入的就是这四个数值吗?不!其实真正输入的是这个窗口对应的CNN特征,也就是R−CNN中的第五个池化层得到的特征向量Φ5(P),我们还要定义一个权重矩阵w∗(∗表示x,y,w,h,也就是每一个变换对应一个目标函数)来表示这个目标函数d∗(P)=w∗TΦ5(P)
d∗(P)是得到的预测值。我们要让预测值跟真实值t∗=(tx,ty,tw,th)差距最小,得到损失函数为:d*(P)是得到的预测值。我们要让预测值跟真实值t* =(t_x,t_y,t_w,t_h)差距最小,得到损失函数为:d∗(P)是得到的预测值。我们要让预测值跟真实值t∗=(tx,ty,tw,th)差距最小,得到损失函数为:
接下来就是找到这个参数w使损失函数最小:接下来就是找到这个参数w使损失函数最小:接下来就是找到这个参数w使损失函数最小:
利用梯度下降法或者最小二乘法就可以得到W∗利用梯度下降法或者最小二乘法就可以得到W*利用梯度下降法或者最小二乘法就可以得到W∗
最后一项是一个惩罚项,为了防止过拟合最后一项是一个惩罚项,为了防止过拟合最后一项是一个惩罚项,为了防止过拟合
在RCNN中,边界框回归要设计4个不同的Ridge回归模型分别求解Wx,Wy,Ww,Wh。在RCNN中,边界框回归要设计4个不同的Ridge回归模型分别求解 W_x,W_y,W_w,W_h 。在RCNN中,边界框回归要设计4个不同的Ridge回归模型分别求解Wx,Wy,Ww,Wh。
输出:dx(P),dy(P),dw(P),dh(P)d_x(P),d_y(P),d_w(P),d_h(P)dx(P),dy(P),dw(P),dh(P)
有了这四个变换我们就可以通过上面的公式得到GroundTruth,有了这四个变换我们就可以通过上面的公式得到Ground Truth,有了这四个变换我们就可以通过上面的公式得到GroundTruth,
注意,根据上面4个公式我们可以知道,P经过dx(P),dy(P),dw(P),dh(P),得到的并不是真实值G,注意,根据上面4个公式我们可以知道,P经过d_x(P),d_y(P),d_w(P),d_h(P),得到的并不是真实值G,注意,根据上面4个公式我们可以知道,P经过dx(P),dy(P),dw(P),dh(P),得到的并不是真实值G,
而是预测的而是预测的而是预测的G^\hat{G}G^
测试阶段
根据3我们学习到回归参数,对于测试图像,我们首先经过CNN提取特征Φ5(P),根据3我们学习到回归参数,对于测试图像,我们首先经过 CNN 提取特征Φ_5(P) ,根据3我们学习到回归参数,对于测试图像,我们首先经过CNN提取特征Φ5(P),
预测的变化就是d∗(P)=W∗TΦ5(P),最后根据公式对窗口进行回归预测的变化就是 d*(P) = W*^TΦ_5(P),最后根据公式对窗口进行回归预测的变化就是d∗(P)=W∗TΦ5(P),最后根据公式对窗口进行回归
4.为什么使用相对坐标差?
一句话概括:进行尺度归一化。一句话概括:进行尺度归一化。一句话概括:进行尺度归一化。
5.式(4)为什么宽高比要取对数(为什么不直接使用宽高比值来作为目标进行学习)?
一句话概括:保证缩放尺度的非负性。一句话概括:保证缩放尺度的非负性。一句话概括:保证缩放尺度的非负性。
要得到一个放缩的尺度,这里必须限制尺度大于0。那么,我们学习的tw,th怎么保证满足大0呢?要得到一个放缩的尺度,这里必须限制尺度大于0。那么,我们学习的 t_w , t_h 怎么保证满足大0呢?要得到一个放缩的尺度,这里必须限制尺度大于0。那么,我们学习的tw,th怎么保证满足大0呢?
最直观的想法就是引入EXP函数,如公式(4)所示,那么反过来推导就是Log函数的来源了。最直观的想法就是引入EXP函数,如公式(4)所示,那么反过来推导就是Log函数的来源了。最直观的想法就是引入EXP函数,如公式(4)所示,那么反过来推导就是Log函数的来源了。
6.为什么IoU较大时边界框回归可视为线性变换?
*本文参考多篇文章、视频、论文、汇总而成
关于RCNN中Bounding-box regression的个人理解
CSDN
CSDn
知乎
BiliBili
有帮助的话,请大家点赞评论支持以下!谢谢!