bounding box regression简介

R-CNN系列中bbox regression

线性回归:

给定anchor \(A = (A_x, A_y, A_w, A_h)\) , 目标瞄框 \(G = (G_x,G_y,G_w,G_h)\)

寻找一种变换\(F\) ,使得:$F(A_x,A_y,A_w,A_h) = (_x,_y,_w,_h) $ ,其中 \((\hat{G}_x,\hat{G}_y,\hat{G}_w,\hat{G}_h) \approx (G_x,G_y,G_w,G_h)\)

具体的做法:

先做平移

  • \(\hat{G}_x = A_w * d_x(A) + A_x\)
  • \(\hat{G}_y = A_h * d_y(A) + A_y\)

在做缩放

  • \(\hat{G}_w = A_w * exp (d_w(A))\)
  • \(\hat{G}_h = A_h * exp(d_h(A))\)

所以要学习的就是 \(d_x(A),d_y(A),d_w(A),d_h(A)\) , 而目标值为:

  • \(t_x = (G_x - A_x)/(A_w)\) (就是上边\(d_x(A)\)的方向运算)
  • \(t_y = (G_y - A_y)/(A_h)\)
  • \(t_w = ln(G_w/A_w)\)
  • \(t_h = ln(G_h/A_h)\)

loss就是 \(d\)\(t\) 的差值 ,而 $d_(A) = WA $ (论文中图像A是经过卷积网络后的特征图)

Loss

R-CNN使用的是L2 loss

Faster R-CNN使用的是smooth L1 loss,相对于 L2 loss 对异常值不敏感,一定情况下可以防止梯度爆炸。

回归实现

  • nn.linear()
  • 1*1 conv

参考

smooth L1 loss