深度学习之边框回归(Bounding Box Regression)

从rcnn, fast rcnn, faster rcnn, yolo, r-fcn, ssd,到cvpr的yolo9000。这些paper中损失函数都包含了边框回归,除了rcnn详细介绍了,其他的paper都是一笔带过,或者直接引用rcnn就把损失函数写出来了。前三条网上解释比较多,后面的两条我看了很多paper,才得出这些结论。

  • 为什么要边框回归?
  • 什么是边框回归?
  • 边框回归怎么做的?
  • 边框回归为什么宽高,坐标会设计这种形式?
  • 为什么边框回归只能微调,在离Ground Truth近的时候才能生效?

为什么要边框回归?

这里引用王斌师兄的理解,如下图所示:
在这里插入图片描述

对于上图,绿色的框表示 Ground Truth, 红色的框为 Selective Search 提取的 Region Proposal。那么即便红色的框被分类器识别为飞机,但是由于红色的框定位不准(IoU<0.5), 那么这张图相当于没有正确的检测出飞机。 如果我们能对红色的框进行微调, 使得经过微调后的窗口跟 Ground Truth 更接近, 这样岂不是定位会更准确。 确实,Bounding-box regression 就是用来微调这个窗口的。

边框回归是什么?

对于窗口一般使用四维向量 ( x , y , w , h ) (x,y,w,h) (x,y,w,h) 来表示, 分别表示窗口的中心点坐标和宽高。 对于下图, 红色的框 P 代表原始的 Proposal, 绿色的框 G 代表目标的 Ground Truth, 我们的目标是寻找一种关系使得输入原始的窗口 P 经过映射得到一个跟真实窗口 G 更接近的回归窗口 G ^ \hat{G} G^


边框回归的目的既是:给定 ( P x , P y , P w , P h ) (P_{x},P_{y},P_{w},P_{h}) (Px,Py,Pw,Ph) 寻找一种映射 f f f, 使得 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}) = (\hat{G_x},\hat{G_y},\hat{G_w},\hat{G_h}) f(Px,Py,Pw,Ph)=(Gx^,Gy^,Gw^,Gh^) 并且 ( G x ^ , G y ^ , G w ^ , G h ^ ) ≈ ( G x , G y , G w , G h ) (\hat{G_x},\hat{G_y},\hat{G_w},\hat{G_h}) \approx (G_{x},G_{y},G_{w},G_{h}) (Gx^,Gy^,Gw^,Gh^)(Gx,Gy,Gw,Gh)

边框回归怎么做的?

RCNN论文:Region-based Convolution Networks for Accurate Object detection and Segmentation

作者在完成了的生成候选区域——CNN提取特征——SVM进行分类以后,为了进一步的提高定位效果,在文章的附录C中介绍了 Bounding-box Regression 的处理。Bounding-box Regression 训练的过程中,输入数据为N个训练对 ( P i , G i ) , i = 1 , 2 , . . . , N {(P^{i},G^{i})},i=1,2,...,N (Pi,Gi),i=1,2,...,N,其中 p i = ( p x i , p y i , p w i , p h i ) p^i=(p^i_x,p^i_y,p^i_w,p^i_h) pi=(pxi,pyi,pwi,phi) 为proposal的位置,前两个坐标表示proposal的中心坐标,后面两个坐标分别表示proposal的width和height,而 G i = ( G x , G y , G w , G h ) G^i=(G_x,G_y,G_w,G_h) Gi=(Gx,Gy,Gw,Gh) 表示groundtruth的位置, regression的目标就是学会一种映射将P转换为G。

那么经过何种变换才能从上图中的窗口 P 变为窗口 G ^ \hat{G} G^ 呢? 比较简单的思路就是: 平移+尺度放缩

作者设计了四种坐标映射方法,其中前两个表示对 proposal 中心坐标的尺度不变的平移变换,后面两个则是对 proposal 的 width 和 height 的对数空间的变换,

  1. 先做平移 ( Δ x , Δ y ) (\Delta x,\Delta y) (Δx,Δy) Δ x = P w d x ( P ) , Δ y = P h d y ( P ) \Delta x = P_{w}d_{x}(P),\Delta y = P_{h}d_{y}(P) Δx=Pwdx(P),Δy=Phdy(P) 这是R-CNN论文的:( d ∗ ( P ) = w ∗ T Φ 5 ( P ) = t ∗ d_{ \ast }(P) = w_{ \ast }^{T}\Phi _{5}(P)=t_{ \ast } d(P)=wTΦ5(P)=t)

G ^ x = P w d x ( P ) + P x , (1) \hat{G}_{x} = P_{w}d_{x}(P) + P_{x},\text{(1)} G^x=Pwdx(P)+Px,(1)

G ^ y = P h d y ( P ) + P y , (2) \hat{G}_{y} = P_{h}d_{y}(P) + P_{y},\text{(2)} G^y=Phdy(P)+Py,(2)

  1. 然后再做尺度缩放 ( S w , S h ) (S_{w},S_{h}) (Sw,Sh), S w = e x p ( d w ( P ) ) , S h = e x p ( d h ( P ) ) S_{w} = exp(d_{w}(P)),S_{h} = exp(d_{h}(P)) Sw=exp(dw(P)),Sh=exp(dh(P)), 对应论文中:

G ^ w = P w e x p ( d w ( P ) ) , (3) \hat{G}_{w} = P_{w}exp(d_{w}(P)),\text{(3)} G^w=Pwexp(dw(P)),(3)

G ^ h = P h e x p ( d h ( P ) ) , (4) \hat{G}_{h} = P_{h}exp(d_{h}(P)),\text{(4)} G^h=Phexp(dh(P)),(4)

观察(1)-(4)我们发现, 边框回归学习就是 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, 学习一组参数 W, 使得经过线性回归后的值跟真实值 Y(Ground Truth)非常接近. 即 Y ≈ W X Y \approx WX YWX 。 那么 Bounding-box 中我们的输入以及输出分别是什么呢?

Input:

R e g i o n P r o p o s a l → P = ( P x , P y , P w , P h ) RegionProposal\rightarrow P = (P_{x},P_{y},P_{w},P_{h}) RegionProposalP=(Px,Py,Pw,Ph),这个是什么? 输入就是这四个数值吗?不是,其实真正的输入是这个窗口对应的 CNN 特征,也就是 R-CNN 中的 Pool5 feature(特征向量)。 (注:训练阶段输入还包括 Ground Truth, 也就是下边提到的 t ∗ = ( t x , t y , t w , t h ) t_{ \ast } = (t_{x},t_{y},t_{w},t_{h}) t=(tx,ty,tw,th)

Output:

outpue 为:需要进行的平移变换和尺度缩放 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 吗? 是的, 但是有了这四个变换我们就可以直接得到 Ground Truth。

这里有个问题需要注意, 根据(1)~(4)我们可以知道, 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) 得到的并不是真实值 G, 而是预测值 G ^ \hat{G} G^

在训练时这四个值 Δ x , Δ y , S w , S h \Delta x,\Delta y,S_{w},S_{h} Δx,Δy,Sw,Sh 的真实值应该是经过 Ground Truth 和 Proposal 计算得到的真正需要的平移量 ( t x , t y ) (t_{x},t_{y}) (tx,ty) 和尺度缩放 ( t w , t h ) (t_{w},t_{h}) (tw,th) 。 这也就是 R-CNN 论文中的(6)~(9):

t x = ( G x − P x ) / P w , ( 6 ) t_{x} = (G_{x}−P_{x})/ P_{w},(6) tx=(GxPx)/Pw,(6)

t y = ( G y − P y ) / P h , ( 7 ) t_{y} = (G_{y}−P_{y})/ P_{h},(7) ty=(GyPy)/Ph,(7)

t w = log ⁡ ⁡ ( G w / P w ) , ( 8 ) t_{w} = \log ⁡(G_{w}/ P_{w}),(8) tw=log(Gw/Pw),(8)

t h = log ⁡ ⁡ ( G h / P h ) , ( 9 ) t_{h} = \log ⁡(G_{h}/ P_{h}),(9) th=log(Gh/Ph),(9)

目标函数

目标函数可以表示为 d ∗ ( P ) = w ∗ T Φ 5 ( P ) d_{ \ast }(P) = w_{ \ast }^{T}\Phi _{5}(P) d(P)=wTΦ5(P) Φ 5 ( P ) \Phi _{5}(P) Φ5(P) 是输入 Proposal 的特征向量, w ∗ w_{ \ast } w是要学习的参数(*表示 x,y,w,h, 也就是每一个变换对应一个目标函数) , d ∗ ( P ) d_{ \ast }(P) d(P) 是得到的预测值。 我们要让预测值跟真实值 t ∗ = ( t x , t y , t w , t h ) t_{ \ast } = (t_{x},t_{y},t_{w},t_{h}) t=(tx,ty,tw,th)差距最小, 得到损失函数为:

L o s s = ∑ i N ( t ∗ i − w ^ ∗ T ϕ 5 ( P i ) ) 2 . Loss = \sum \limits_{i}^{N}(t_{ \ast }^{i}−\hat{w}_{ \ast }^{T}\phi _{5}(P^{i}))^2. Loss=iN(tiw^Tϕ5(Pi))2.

函数优化目标为:

W ∗ = a r g m i n w ∗ ∑ i N ( t ∗ i − w ^ ∗ T ϕ 5 ( P i ) ) 2 + λ ∣ ∣ w ^ ∗ ∣ ∣ 2 . W_{ \ast } = argmin_{w_{ \ast }} \sum \limits_{i}^{N}(t_{ \ast }^{i}−\hat{w}_{ \ast }^{T}\phi _{5}(P^{i}))^2 + \lambda ||\hat{w}_{ \ast }||^2. W=argminwiN(tiw^Tϕ5(Pi))2+λw^2.

利用梯度下降法或者最小二乘法就可以得到 w ∗ w_{ \ast } w

最终在进行实验时,lambda = 1000, 同时作者发现同一对中P和G相距过远时通过上面的变换是不能完成的,而相距过远实际上也基本不会是同一物体,因此作者在进行实验室,对于 pair(P,G) 的选择是选择离P较近的G进行配对,这里表示较近的方法是需要P和一个G的最大的IoU要大于0.6,否则则抛弃该P。

为什么宽高尺度会设计这种形式?

重点解释一下为什么设计的 t x , t y t_{x},t_{y} tx,ty为什么除以宽高,为什么 t w , t h t_{w},t_{h} tw,th会有log形式!!!

首先CNN具有尺度不变性, 以下图为例:
在这里插入图片描述

x,y 坐标除以宽高

上图的两个人具有不同的尺度,因为他都是人,我们得到的特征相同。假设我们得到的特征为 ϕ 1 , ϕ 2 \phi _{1},\phi _{2} ϕ1,ϕ2,那么一个完好的特征应该具备 ϕ 1 = ϕ \phi _{1} = \phi ϕ1=ϕ。ok,如果我们直接学习坐标差值,以x坐标为例, x i , p i x_{i},p_{i} xi,pi 分别代表第i个框的x坐标,学习到的映射为 f f f, f ( ϕ 1 ) = x 1 − p 1 f(\phi _{1}) = x_{1}−p_{1} f(ϕ1)=x1p1,同理 f ( ϕ 2 ) = x 2 − p 2 f(\phi _{2}) = x_{2}−p_{2} f(ϕ2)=x2p2。从上图显而易见, x 1 − p 1 ≠ x 2 − p 1 x_{1}−p_{1} \neq x_{2}−p_{1} x1p1=x2p1。也就是说同一个x对应多个y,这明显不满足函数的定义。边框回归学习的是回归函数,然而你的目标却不满足函数定义,当然学习不到什么。

宽高坐标Log形式

我们想要得到一个放缩的尺度,也就是说这里限制尺度必须大于0。我们学习的 t w , t h t_{w},t_{h} tw,th怎么保证满足大于0呢?直观的想法就是EXP函数,如公式(3), (4)所示,那么反过来推导就是Log函数的来源了。

为什么IoU较大,认为是线性变换?

当输入的 Proposal 与 Ground Truth 相差较小时(RCNN 设置的是 IoU>0.6), 可以认为这种变换是一种线性变换, 那么我们就可以用线性回归来建模对窗口进行微调, 否则会导致训练的回归模型不 work(当 Proposal跟 GT 离得较远,就是复杂的非线性问题了,此时用线性回归建模显然不合理)。这里我来解释:

Log函数明显不满足线性函数,但是为什么当Proposal 和Ground Truth相差较小的时候,就可以认为是一种线性变换呢?大家还记得这个公式不?参看高数1。

l i m x = 0 l o g ( 1 + x ) = x lim_{x = 0}log(1 + x) = x limx=0log(1+x)=x

现在回过来看公式(8):

t w = log ⁡ ⁡ ( G w / P w ) = l o g ( G w + P w − P w P w ) = l o g ( 1 + G w − P w P w ) t_{w} = \log ⁡(G_{w}/ P_{w}) = log(\frac{G_{w} + P_{w}−P_{w}}{P_{w}}) = log(1 + \frac{G_{w}−P_{w}}{P_{w}}) tw=log(Gw/Pw)=log(PwGw+PwPw)=log(1+PwGwPw)

当且仅当 G w − P w = 0 G_{w}−P_{w}=0 GwPw=0的时候,才会是线性函数,也就是宽度和高度必须近似相等。

对于IoU大于指定值这块,我并不认同作者的说法。我个人理解,只保证Region Proposal和Ground Truth的宽高相差不多就能满足回归条件。x,y位置到没有太多限制,这点我们从YOLOv2可以看出,原始的边框回归其实x,y的位置相对来说对很大的。这也是YOLOv2的改进地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值