关于RCNN中Bounding-box regression的个人理解

前言

RCNN可以说是深度学习应用到目标检测领域一个不小的贡献。最近看了RNN的文章,对里面的Bounding-box regression回归不甚理解,google一番,把学到的东西写在这里。
参考的文章

为啥要回归

鉴于bounding box太长,下面简写为bb,bounding box regression 简写为bbr

首先,原始的bb是用selective research选出来的,这相当于是外部的算法,硬加到了CNN中。当然,经过一大堆的过滤和NMS(非最大值抑制),我们可以认为一张图就得到了一个“暂时最优”的bb。也就是detection暂时的工作结果。
但是,这样就可以了吗?以下图为例:

关于RCNN中Bounding-box regression的个人理解

红色框是我们预先propose出来的。绿色的框是Ground truce,也就是label,是最优的。这两个框显然不太重合。那么问题来了,如果有一种办法,能够让我们在经过了一大堆CNN计算之后,得到的这个“暂时最优” 的框“挪动” 那么一下,更接近Ground truce,岂不是美滋滋。

怎么“挪动”

挪动这个词只是形象的说法。其实就是平移+缩放

P={Px,Py,Pw,Ph} 表示我们的“暂时最优” 框。x、y表示框中心的坐标,w、h表示宽和高。

G={Gx,Gy,Gw,Gh} 表示Ground truth。

G^={G^x,G^y,G^w,G^h} 表示我们 变换后 得到的框。

那么平移我们可以表示为:

G^x=Px+Δx
G^y=Py+Δy

缩放我们可以表示为:

G^w=PwΔw
G^h=PhΔh

论文中对那些Δ 是这样表示的:

Δx=Pwdx(P)
Δy=Phdy(P)
Δw=edw(P)
Δh=edh(P)

这样我们就得到了变换的一般形式:

G^x=Px+Pwdx(P)
G^y=Py+Phdy(P)
G^w=Pwedw(P)
G^h=Phedh(P)

最优化变换,也就是回归

按照上面的逻辑,每一张图片都有一个最优的变换

Gx=Px+Pwtx(P)
Gy=Py+Phty(P)
Gw=Pwetw(P)
Gh=Pheth(P)

也就是说,一个d对应着一个t,用i表示一张图片的序号:

diti

看到这里就清楚了,如果我们把d换成我们一般问题里的x,把t换成一般问题 里的y。现在就是要找一个x→y的关系,使得新来的x经过这个关系的一顿操作之后得到的结果,和最优的结果“差不多”。

需要说明的是,得到d的输入并不是P这四个数,而是CNN pool5层的features,记为Φ5。这样,才不是“硬”拟合,如果只是输入P代表的四个数的话,那就是一个CNN外部的统计问题了,CNN在这个bbr里面一点作用也没起到,但是仔细想的话,bb的位置确实应该由CNN计算得到的features来fine-tune。所以,我们定义一个权重矩阵 wi 来表示这个关系:

di=wTiΦ5i

换成这里的逻辑,就是要找到一个权重矩阵w,使得下面的loss最小:

loss=iN(tiwTiΦ5i)2+λ||wi||2

最优一项是一个惩罚项,可能是为了防止过拟合。这就简单了,用最小二乘法解就可以了。

这样的话,如果在test模型的时候,经过一堆CNN和其他的计算,我们得到了一个“暂时最优”的bb。经过我们在训练时候bbr得到的那个变换w,对pool5得到的feature操作一下,就得到了一个变换d,再用这个d对我们测试用图propose出来的那个bb操作一下,就将bb“优化”了。而论文中的数据显示,bbr确实是有用的。