Bounding Box Regression

为什么要进行Bounding Box Regression?

Bounding Box Regression

    绿色的框表示Ground Truth, 红色的框为提取的Region Proposal。如果对红色的框进行微调,使得经过微调后的窗口跟Ground Truth 更接近, 这样定位会更准确。Bounding box regression 就是用来微调这个窗口的。

什么是Bounding Box Regression?

Bounding Box Regression

    一般使用四维向量(x,y,w,h) 表示窗口,分别表示窗口的中心点坐标、宽和高。红色的框 P 代表原始的Proposal,绿色的框 G 代表目标的 Ground Truth,我们的目标是寻找一种关系使得输入原始的窗口 P 经过映射得到一个跟真实窗口 G 更接近的回归窗口G^。即:给定(Px,Py,Pw,Ph)寻找一种映射f,使得f(Px,Py,Pw,Ph)=(Gx^,Gy^,Gw^,Gh^) 并且 (Gx^,Gy^,Gw^,Gh^)≈(Gx,Gy,Gw,Gh)

Bounding Box Regression是怎么做的?

经过何种变换才能窗口 P 变为窗口G^?比较简单的思路就是: 平移+尺度放缩

先做平移(Δx,Δy),Δx=Pw * dx(P),Δy=Ph * dy(P) :

    G^x=Pw * dx(P)+Px

    G^y=Ph * dy(P)+Py

再做尺度缩放(Sw,Sh), Sw=exp(dw(P)),Sh=exp(dh(P)):

    G^w=Pw * exp(dw(P))

    G^h=Ph * exp(dh(P))

    Bounding Box Regression学习的就是dx(P),dy(P),dw(P),dh(P)这四个变换。下一步就是设计算法得到这四个映射。

    线性回归就是给定输入的特征向量 X,学习一组参数 W,使得X经过线性回归后的值跟真实值 Y(Ground Truth)非常接近,即Y≈WX。那么 Bounding-box 中我们的输入以及输出分别是什么呢?

Input:

Region Proposal→P=(Px,Py,Pw,Ph),这个是什么? 输入就是这四个数值吗?其实真正的输入是这个窗口对应的 CNN 特征,也就是 R-CNN 中的 Pool5 feature(特征向量)。 (注:训练阶段输入还包括 Ground Truth,也就是下边提到的t∗=(tx,ty,tw,th))

Output:

需要进行的平移变换和尺度缩放 dx(P),dy(P),dw(P),dh(P),或者说是Δx,Δy,Sw,Sh。我们的最终输出不应该是 Ground Truth 吗? 是的,但是有了这四个变换我们就可以直接得到 Ground Truth, 这里还有个问题, 根据(1)~(4)我们可以知道, P 经过 dx(P),dy(P),dw(P),dh(P) 得到的并不是真实值 G, 而是预测值G^。 的确, 这四个值应该是经过 Ground Truth 和 Proposal 计算得到的真正需要的平移量(tx,ty) 和尺度缩放(tw,th) 。 

这也就是 R-CNN 中的: 

    tx=(Gx−Px)/Pw

    ty=(Gy−Py)/Ph

    tw=log(Gw/Pw)

    th=log(Gh/Ph)

那么目标函数可以表示为 d∗(P)=wT∗Φ5(P), Φ5(P)是输入 Proposal 的特征向量,w∗是要学习的参数(*表示 x,y,w,h, 也就是每一个变换对应一个目标函数) , d∗(P) 是得到的预测值。 我们要让预测值跟真实值t∗=(tx,ty,tw,th)差距最小, 得到损失函数为:
Loss=∑iN(ti∗−w^T∗ϕ5(Pi))2
函数优化目标为:
W∗=argminw∗∑iN(ti∗−w^T∗ϕ5(Pi))2+λ||w^∗||2
利用梯度下降法或者最小二乘法就可以得到 w∗。