原文链接:https://blog.csdn.net/zijin0802034/article/details/77685438/
最近一直看检测有关的Paper, 从rcnn, fast rcnn, faster rcnn, yolo, r-fcn, ssd,到今年cvpr最新的yolo9000。这些paper中损失函数都包含了边框回归,除了rcnn详细介绍了,其他的paper都是一笔带过,或者直接引用rcnn就把损失函数写出来了。前三条网上解释比较多,后面的两条我看了很多paper,才得出这些结论。
- 为什么要边框回归?
- 什么是边框回归?
- 边框回归怎么做的?
- 边框回归为什么宽高,坐标会设计这种形式?
- 为什么边框回归只能微调,在离Ground Truth近的时候才能生效?
为什么要边框回归?
这里引用王斌师兄的理解,如下图所示:
对于上图&#xff0c;绿色的框表示Ground Truth, 红色的框为Selective Search提取的Region Proposal。那么即便红色的框被分类器识别为飞机&#xff0c;但是由于红色的框定位不准(IoU<0.5)&#xff0c; 那么这张图相当于没有正确的检测出飞机。 如果我们能对红色的框进行微调&#xff0c; 使得经过微调后的窗口跟Ground Truth 更接近&#xff0c; 这样岂不是定位会更准确。 确实&#xff0c;Bounding-box regression 就是用来微调这个窗口的。
边框回归是什么&#xff1f;
继续借用师兄的理解&#xff1a;对于窗口一般使用四维向量(x,y,w,h)(x,y,w,h)。
边框回归的目的既是&#xff1a;给定(Px,Py,Pw,Ph)(Px,Py,Pw,Ph)
边框回归怎么做的&#xff1f;
那么经过何种变换才能从图 2 中的窗口 P 变为窗口G^G^呢&#xff1f; 比较简单的思路就是: 平移&#43;尺度放缩
- 先做平移(Δx,Δy)(Δx,Δy)
观察(1)-(4)我们发现&#xff0c; 边框回归学习就是dx(P),dy(P),dw(P),dh(P)dx(P),dy(P),dw(P),dh(P)这四个变换。下一步就是设计算法那得到这四个映射。
线性回归就是给定输入的特征向量 X, 学习一组参数 W, 使得经过线性回归后的值跟真实值 Y(Ground Truth)非常接近. 即Y≈WXY≈WX 。 那么 Bounding-box 中我们的输入以及输出分别是什么呢&#xff1f;
RegionProposal→P&#61;(Px,Py,Pw,Ph)RegionProposal→P&#61;(Px,Py,Pw,Ph))
Output:
需要进行的平移变换和尺度缩放 dx(P),dy(P),dw(P),dh(P)dx(P),dy(P),dw(P),dh(P)
那么目标函数可以表示为 d∗(P)&#61;wT∗Φ5(P)d∗(P)&#61;w∗TΦ5(P)差距最小&#xff0c; 得到损失函数为&#xff1a;
Loss&#61;∑iN(ti∗−w^T∗ϕ5(Pi))2Loss&#61;∑iN(t∗i−w^∗Tϕ5(Pi))2
函数优化目标为&#xff1a;
W∗&#61;argminw∗∑iN(ti∗−w^T∗ϕ5(Pi))2&#43;λ||w^∗||2W∗&#61;argminw∗∑iN(t∗i−w^∗Tϕ5(Pi))2&#43;λ||w^∗||2
利用梯度下降法或者最小二乘法就可以得到 w∗w∗。
为什么宽高尺度会设计这种形式&#xff1f;
这边我重点解释一下为什么设计的tx,tytx,ty会有log形式&#xff01;&#xff01;&#xff01;
首先CNN具有尺度不变性&#xff0c; 以图3为例&#xff1a;
x,y 坐标除以宽高
上图的两个人具有不同的尺度&#xff0c;因为他都是人&#xff0c;我们得到的特征相同。假设我们得到的特征为ϕ1,ϕ2ϕ1,ϕ2。也就是说同一个x对应多个y&#xff0c;这明显不满足函数的定义。边框回归学习的是回归函数&#xff0c;然而你的目标却不满足函数定义&#xff0c;当然学习不到什么。
宽高坐标Log形式
我们想要得到一个放缩的尺度&#xff0c;也就是说这里限制尺度必须大于0。我们学习的tw,thtw,th怎么保证满足大于0呢&#xff1f;直观的想法就是EXP函数&#xff0c;如公式(3), (4)所示&#xff0c;那么反过来推导就是Log函数的来源了。
为什么IoU较大&#xff0c;认为是线性变换&#xff1f;
当输入的 Proposal 与 Ground Truth 相差较小时(RCNN 设置的是 IoU>0.6)&#xff0c; 可以认为这种变换是一种线性变换&#xff0c; 那么我们就可以用线性回归来建模对窗口进行微调&#xff0c; 否则会导致训练的回归模型不 work&#xff08;当 Proposal跟 GT 离得较远&#xff0c;就是复杂的非线性问题了&#xff0c;此时用线性回归建模显然不合理&#xff09;。这里我来解释&#xff1a;
Log函数明显不满足线性函数&#xff0c;但是为什么当Proposal 和Ground Truth相差较小的时候&#xff0c;就可以认为是一种线性变换呢&#xff1f;大家还记得这个公式不&#xff1f;参看高数1。
limx&#61;0log(1&#43;x)&#61;xlimx&#61;0log(1&#43;x)&#61;x
现在回过来看公式(8):
tw&#61;log(Gw/Pw)&#61;log(Gw&#43;Pw−PwPw)&#61;log(1&#43;Gw−P