文章目录
一、为什么需要边框回归
假设有如下一种情况,红框为模型预测的检测框region proposal
,蓝框为真实的检测框ground truth
。
可以看见,尽管红框正确地从图像中识别到了飞机,但是却并没有很好地标识出检测框的位置(预测框与真实框IoU
过低)。此时,便可以通过边框回归Bounding Box Regression
实现一种“微调”的策略,将预测框尽量调整到与真实框近似,以提高模型预测的效果。
二、边框回归的调整策略
边框回归的调整策略总结一下就是两个词:平移与缩放。
假设模型输出的预测框信息可以如下表示:
P = [Px, Py, Pw, Ph]
# Px: 中心点横坐标
# Py: 中心点纵坐标
# Pw: 宽度
# Ph: 高度
那么所谓平移,就是针对Px, Py
进行一定程度的加减,使之更加接近于真实框的中心点坐标Tx, Ty
。所谓缩放,也就是针对Pw, Ph
进行一定比例的乘除,使之更加接近于真实框的宽度Tw
和高度Th
。即:
T = [Tx, Ty, Tw, Th]
# Tx = Px + dx
# Ty = Py + dy
# Tw = Pw * dw
# Th = Ph * dh
三、论文里怎么说
3.1 平移量与缩放量定义
在论文中,对于中心点坐标的平移量和宽度高度的缩放量都有着更为详细的定义:
{
T
x
=
P
x
+
Δ
x
T
y
=
P
y
+
Δ
y
,
{
T
w
=
P
w
S
w
T
h
=
P
h
S
h
\begin{cases} T_x=P_x+\Delta_x\\ T_y=P_y+\Delta_y \end{cases},\qquad \begin{cases} T_w=P_wS_w\\ T_h=P_hS_h \end{cases}
{Tx=Px+ΔxTy=Py+Δy,{Tw=PwSwTh=PhSh
其中,
Δ
x
=
P
w
d
x
(
P
)
,
Δ
y
=
P
h
d
y
(
P
)
,
S
w
=
e
d
w
(
P
)
,
S
h
=
e
d
h
(
P
)
\Delta_x=P_wd_x(P),\ \Delta_y=P_hd_y(P),\ S_w=e^{d_w(P)},\ S_h=e^{d_h(P)}
Δx=Pwdx(P), Δy=Phdy(P), Sw=edw(P), Sh=edh(P)。那么,所谓的边框回归,其实也就是让模型学习四个参数
d
x
(
P
)
,
d
y
(
P
)
,
d
w
(
P
)
,
d
h
(
P
)
d_x(P),d_y(P),d_w(P),d_h(P)
dx(P),dy(P),dw(P),dh(P),使预测框能够在输出前进行如上变换,从而更接近于真实值。
3.2 损失函数
根据预测框与真实框的坐标大小信息,我们可以计算出预测框经过平移缩放变换到真实框所需要的真实平移量参数与缩放量参数:
{
t
x
=
T
x
−
P
x
P
w
t
y
=
T
y
−
P
y
P
h
t
w
=
log
T
w
P
w
t
h
=
log
T
h
P
h
\begin{cases} t_x=\frac{T_x-P_x}{P_w}\\t_y=\frac{T_y-P_y}{P_h}\\t_w=\log{\frac{T_w}{P_w}}\\t_h=\log{\frac{T_h}{P_h}} \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧tx=PwTx−Pxty=PhTy−Pytw=logPwTwth=logPhTh
将需要学习的目标函数
d
(
P
)
d(P)
d(P)改写为
w
T
ϕ
P
w^T\phi_P
wTϕP(
ϕ
P
\phi_P
ϕP是特征向量),再结合上面计算的真实参数量即可得到边框回归的损失函数如下:
L
=
∑
i
(
x
,
y
,
w
,
h
)
(
w
i
T
ϕ
P
−
t
i
)
2
L=\sum^{(x,y,w,h)}_i(w^T_i\phi_P-t_i)^2
L=i∑(x,y,w,h)(wiTϕP−ti)2
加入正则化参数,则可得模型的目标函数如下:
w
=
arg min
w
∑
i
(
x
,
y
,
w
,
h
)
(
w
i
T
ϕ
P
−
t
i
)
2
+
λ
∥
w
∥
w=\argmin_{w}{\sum^{(x,y,w,h)}_i(w^T_i\phi_P-t_i)^2+\lambda\|w\|}
w=wargmini∑(x,y,w,h)(wiTϕP−ti)2+λ∥w∥
使用梯度下降算法等优化算法即可对上述目标函数进行求解。
3.3 为什么是线性回归
根据论文描述,边框回归算法只适用于对预测框进行微调,即当IoU
不低于某个阙值时才可发挥作用。而当IoU
足够高时,缩放变换可视为线性变换,从而可以考虑使用线性回归模型对参数进行求解。
那么为什么当IoU
足够高时缩放可视为线性变换呢?
如上图所示,当
x
→
0
x\to 0
x→0时,有
x
=
log
(
x
+
1
)
x=\log(x+1)
x=log(x+1)。对缩放变换公式进行变形可得:
d
w
(
P
)
=
log
T
w
P
w
=
log
P
w
+
T
w
−
P
w
P
w
=
log
(
1
+
T
w
−
P
w
P
w
)
d
h
(
P
)
=
log
T
h
P
h
=
log
P
h
+
T
h
−
P
h
P
h
=
log
(
1
+
T
h
−
P
h
P
h
)
\begin{aligned} d_w(P)=\log{\frac{T_w}{P_w}}&=\log{\frac{P_w+T_w-P_w}{P_w}}\\&=\log(1+\frac{T_w-P_w}{P_w}) \end{aligned}\\ \begin{aligned} d_h(P)=\log{\frac{T_h}{P_h}}&=\log{\frac{P_h+T_h-P_h}{P_h}}\\&=\log(1+\frac{T_h-P_h}{P_h}) \end{aligned}
dw(P)=logPwTw=logPwPw+Tw−Pw=log(1+PwTw−Pw)dh(P)=logPhTh=logPhPh+Th−Ph=log(1+PhTh−Ph)
可见,当IoU
足够高时,也就是
T
w
T_w
Tw与
P
w
P_w
Pw近似、
T
h
T_h
Th与
P
h
P_h
Ph近似时,有:
d
w
(
P
)
=
T
w
−
P
w
P
w
,
d
h
(
P
)
=
T
h
−
P
h
P
h
d_w(P)=\frac{T_w-P_w}{P_w},\quad d_h(P)=\frac{T_h-P_h}{P_h}
dw(P)=PwTw−Pw,dh(P)=PhTh−Ph
近似于一个线性变换,因此可以使用线性回归进行求解。
四、论文中为什么这样定义平移量和缩放量
4.1 平移量中为什么加入宽和高
平移量中加入宽和高是基于卷积神经网络的尺度不变性,即相同的物体在不同尺度的图像中通过CNN
提取出的特征图应该一致。至于CNN
尺度不变性的解释,学术界似乎尚存争议,此处不作过多解释。
假设有如下两种尺度不同的图像:
根据CNN
的尺度不变性,两张图片通过CNN
提取出的特征图
ϕ
P
\phi_P
ϕP应当相等,带入同一个模型
d
x
(
P
)
=
w
x
ϕ
P
,
d
y
(
P
)
=
w
y
ϕ
P
d_x(P)=w_x\phi_P,\ d_y(P)=w_y\phi_P
dx(P)=wxϕP, dy(P)=wyϕP,则可以知道两张图的平移量也应当相等。然后根据如上图像展示,可以发现两图预测框到真实框的平移量显然不等,为了保证函数值的唯一性,平移量的定义才考虑加入了检测框的宽度和高度。
4.2 缩放量为什么采用e
的幂
缩放量采用e
的幂次方主要有两个考虑:
1)保证缩放的倍率恒大于0
2)采用e
的幂才能依靠
lim
x
→
0
log
(
x
+
1
)
=
x
\lim_{x\to 0}\log(x+1)=x
limx→0log(x+1)=x的性质,将缩放近似为一个线性变换