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