Fast R-CNN中的边框回归

前面对R-CNN系的目标检测方法进行了个总结,其中对目标的定位使用了边框回归,当时对这部分内容不是很理解,这里单独学习下。

R-CNN中最后的边框回归层,以候选区域(Region proposal)为输入,来对Region proposal中包含的目标进行准将的定位。但是,这个输入的候选区域通常不会正确的包含目标区域,如下图:
Fast R-CNN中的边框回归_第1张图片

绿色边框是飞机的Ground Truth边框,绿色的是Region proposal边框,虽然Region proposal中包含了目标飞机,但是其定位却不是很准确,这就需要对候选区域的边框进行修正,调整其位置和大小,以使其能够更为接近绿色的Ground Truth边框。

边框回归的方法

无论是Ground Truth边框还是Region proposal边框,可以使用一个四元组 ( x , y , w , h ) (x,y,w,h) (x,y,w,h)来表示。其中, ( x , y ) (x,y) (x,y)表示边框的中心位置, ( w , h ) (w,h) (w,h)表示边框的宽和高。
在边框回归时,实际就是找到一种变换,使修正的后的Region proposal边框位置和Ground Truth边框尽可能的接近,公式表示如下:
f ( P x , P y , P w , P h ) ≈ ( G x , G y , G w , G h ) f(P_x,P_y,P_w,P_h) \approx (G_x,G_y,G_w,G_h) f(Px,Py,Pw,Ph)(Gx,Gy,Gw,Gh)
其中, ( P x , P y , P w , P h ) (P_x,P_y,P_w,P_h) (Px,Py,Pw,Ph)输入的候选区域的边框, ( G x , G y , G w , G h ) (G_x,G_y,G_w,G_h) (Gx,Gy,Gw,Gh)是Ground Truth边框。

那么这种变换 f f f怎么进行呢?

观察边框的四元组表示 ( x , y ) (x,y) (x,y)表示中心位置,对于位置的修正通常使用平移; ( w , h ) (w,h) (w,h)表示边框的宽和高,则可以使用缩放进行修正。也就是对边框的回归修正,

  • 对边框的中心位置进行平移 ( Δ x , Δ y ) (\Delta x,\Delta y) (Δx,Δy)
    KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \Delta x &= P_…
    则修正的中心位置就是
    KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \hat{G_x} &= …

  • 对边框的宽和高进行缩放 ( S w , S h ) (S_w,S_h) (Sw,Sh),
    KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ S_w &= exp(d_w…
    修正后的边框的宽和高为
    KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \hat{G_w} &= …

修正后的边框 ( G x ^ , G y ^ , G w ^ , G h ^ ) (\hat{G_x},\hat{G_y},\hat{G_w},\hat{G_h} ) (Gx^,Gy^,Gw^,Gh^)要近似等于Ground Truth的边框。

通过上述公式可以知道,边框回归实际上就是学习 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)这4个变换。在边框回归的全连接层,输入的是候选区域的特征信息 X X X以及其边框信息 P P P,要学习的是全连接层的权值矩阵 W W W,也就说回归的全连接层就实现了上述变换,输出的是 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),经过上述公式的可以得到平移和缩放 ( Δ x , Δ y , S w , S h ) (\Delta x,\Delta y,S_w,S_h) (Δx,Δy,Sw,Sh)。 对候选区域的边框进行该平移和缩放得到的边框尽可能的和Ground Truth相近。

学习得到的 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)通过数码的公式可以很容易得到 ( Δ x , Δ y , S w , S h ) (\Delta x,\Delta y,S_w,S_h) (Δx,Δy,Sw,Sh),也可以说学习得到的是 ( Δ x , Δ y , S w , S h ) (\Delta x,\Delta y,S_w,S_h) (Δx,Δy,Sw,Sh)。 这两者没有区别,不用做区分。 但是在计算预测边框位置的时候,需要注意。

损失函数

R-CNN使用一个全连接网络实现边框的回归,

  • 其输入的是候选区域的特征及其边框 ( P x , P y , P w , P h ) (P_x,P_y,P_w,P_h) (Px,Py,Pw,Ph)
  • 输出的该候选框要进行的平移和缩放 ( Δ x , Δ y , S w , S h ) (\Delta x,\Delta y,S_w,S_h) (Δx,Δy,Sw,Sh)
  • 要学习的是权值矩阵 W W W,以使候选框进行 ( Δ x , Δ y , S w , S h ) (\Delta x,\Delta y,S_w,S_h) (Δx,Δy,Sw,Sh)变换后,尽可能和Ground Truth接近。

有了以上认识,来看下损失函数的设计
L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L I o c ( t u , v ) L(p,u,t^u,v) = L_{cls}(p,u) + \lambda [u \ge 1]L_{Ioc}(t^u,v) L(p,u,tu,v)=Lcls(p,u)+λ[u1]LIoc(tu,v)
其中, L c l s ( p , u ) L_{cls}(p,u) Lcls(p,u)是分类的损失函数, p u p_u pu是class u的真实分类的概率。这里,约定 u = 0 u = 0 u=0表示背景,不参与边框回归的损失计算。上面是Fast R-CNN将分类的损失和边框回归的损失放到了一起,这里这关注边框回归的损失
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ L_{Ioc}(t^u,v)…
其中, u u u表示类别, t u t^u tu表示预测边框的偏移量(也就是预测边框进行 t u t^u tu偏移后,能够和真实边框最接近), v v v表示预测边框和实际边框之间真正的偏移量。
也就是 t u = ( Δ x , Δ y , S w , S h ) t^u = (\Delta x,\Delta y,S_w,S_h) tu=(Δx,Δy,Sw,Sh)为学习得到的偏移量,而 v v v则是输入的候选区域的边框和Ground Truth的真正偏移。

训练样本偏移 v v v的构造

我们使用下面的公式描述了边框修正的过程
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \hat{G_x} &= …
P P P为输入的边框, G ^ \hat{G} G^为修正后的边框,修正使用的平移和缩放为 ( Δ x , Δ y , S w , S h ) (\Delta x,\Delta y,S_w,S_h) (Δx,Δy,Sw,Sh)。通过上述的公司,就可以得到训练样本 P = ( P x , P y , P w , P h ) P = (P_x,P_y,P_w,P_h) P=(Px,Py,Pw,Ph)相对于Ground Truth G = ( G x , G y , G w , G h ) G = (G_x,G_y,G_w,G_h) G=(Gx,Gy,Gw,Gh)边框的真实偏移量 v v v
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ v_x &= (G_x - …

偏移量的构造

边框回归的偏移量使如下公式表示
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \Delta x &= 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)并没有直接用于平移和缩放,而是加了一步处理:对于平移,添加了比例宽高比例因子;宽和高的缩放,使用其比例的 l o g log log形式。

对于中心点平移,学习到的值需要添加宽和高的因子。这是由于,CNN具有尺度不变性,对于不同尺度的同一个目标,在最后的特征输出层学习到的特征是相同。如下图
Fast R-CNN中的边框回归_第2张图片

两个不同尺度的人,CNN提取的特征分别为 σ 1 , σ 2 \sigma_1,\sigma_2 σ1,σ2,这两个特征应该是相同的。 假如边框回归学习到的映射为 f f f,且 f ( σ ) f(\sigma) f(σ)学习到的量。 以 x x x为例, x 1 , x 2 x1,x2 x1,x2分别为两个人的Ground Truth, P 1 x , P 2 x P_{1x},P_{2x} P1x,P2x为两个候选区域的 x x x坐标。假如, f ( σ ) f(\sigma) f(σ)直接表示平移的差值,则有 x 1 − P 1 x = f ( σ 1 ) , x 2 − P 2 x = f ( σ 2 ) x_1 - P_{1x} = f(\sigma_1),x2-P_{2x}=f(\sigma_2) x1P1x=f(σ1),x2P2x=f(σ2)。而 σ 1 , σ 2 \sigma_1,\sigma_2 σ1,σ2,这两个特征是相同的,则有 f ( σ 1 ) = f ( σ 2 ) f(\sigma_1) = f(\sigma_2) f(σ1)=f(σ2)。故有 x 1 − P 1 x = x 2 − P 2 x x_1 - P_{1x} = x2-P_{2x} x1P1x=x2P2x。从,上图看,这两个不同尺度的人的平移量,显然是不相同的。 所以,将学习到的量作为坐标偏移显然是不可行的,R-CNN中给其添加了个尺度因子,也就是目标的宽和高。 如下:
f ( σ 1 ) = x 1 − P 1 w P 1 x f ( σ 2 ) = x 2 − P 2 w P 2 x f(\sigma_1) = x_1 - P_{1w}P_{1x} \\ f(\sigma_2) = x_2 - P_{2w}P_{2x} f(σ1)=x1P1wP1xf(σ2)=x2P2wP2x

尺度(宽和高)的缩放,取其 l o g log log形式。
需要学习得到宽和高的缩放因子,就需要将学习到的值限制为大于0,这里就取其 e x p ( d w ( P ) exp(d_w(P) exp(dw(P),来保证缩放因子都大于0.

总结

边框回归输入的是CNN学习到的候选区域的特征,以及候选区域的边框信息 ( x , y , w , y ) (x,y,w,y) (x,y,w,y)。通过学习得到映射 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) P w d x ( P ) , P h d y ( P ) P_wd_x(P),P_hd_y(P) Pwdx(P),Phdy(P)添加尺度因子后,作为坐标的平移; e x p ( d w ( P ) ) , e x p ( d h ( P ) ) exp(d_w(P)),exp(d_h(P)) exp(dw(P)),exp(dh(P))取作为宽和高的缩放。

你可能感兴趣的:(深度学习与计算机视觉,R-CNN,目标检测)