https://blog.csdn.net/zijin0802034/article/details/77685438

Bounding-Box regression

最近一直看检测有关的Paper, 从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) 来表示, 分别表示窗口的中心点坐标和宽高。 对于图 2, 红色的框 P 代表原始的Proposal, 绿色的框 G 代表目标的 Ground Truth, 我们的目标是寻找一种关系使得输入原始的窗口 P 经过映射得到一个跟真实窗口 G 更接近的回归窗口G^G^。


边框回归的目的既是:给定(Px,Py,Pw,Ph)(Px,Py,Pw,Ph)寻找一种映射ff, 使得f(Px,Py,Pw,Ph)=(Gx^,Gy^,Gw^,Gh^)f(Px,Py,Pw,Ph)=(Gx^,Gy^,Gw^,Gh^) 并且(Gx^,Gy^,Gw^,Gh^)≈(Gx,Gy,Gw,Gh)

边框回归怎么做的?

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

  1. 先做平移(Δx,Δy)(Δx,Δy), Δx=Pwdx(P),Δy=Phdy(P)Δx=Pwdx(P),Δy=Phdy(P) 这是R-CNN论文的:

    G^x=Pwdx(P)+Px,(1)G^x=Pwdx(P)+Px,(1)
    G^y=Phdy(P)+Py,(2)G^y=Phdy(P)+Py,(2)
  2. 然后再做尺度缩放(Sw,Sh)(Sw,Sh), Sw=exp(dw(P)),Sh=exp(dh(P))Sw=exp(dw(P)),Sh=exp(dh(P)), 对应论文中:
    G^w=Pwexp(dw(P)),(3)G^w=Pwexp(dw(P)),(3)
    G^h=Phexp(dh(P)),(4)G^h=Phexp(dh(P)),(4)

观察(1)-(4)我们发现, 边框回归学习就是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 中我们的输入以及输出分别是什么呢?

Input:

RegionProposal→P=(Px,Py,Pw,Ph)RegionProposal→P=(Px,Py,Pw,Ph),这个是什么? 输入就是这四个数值吗?其实真正的输入是这个窗口对应的 CNN 特征,也就是 R-CNN 中的 Pool5 feature(特征向量)。 (注:训练阶段输入还包括 Ground Truth, 也就是下边提到的t∗=(tx,ty,tw,th)t∗=(tx,ty,tw,th))

Output:

需要进行的平移变换和尺度缩放 dx(P),dy(P),dw(P),dh(P)dx(P),dy(P),dw(P),dh(P), 或者说是Δx,Δy,Sw,ShΔx,Δy,Sw,Sh 。 我们的最终输出不应该是 Ground Truth 吗? 是的, 但是有了这四个变换我们就可以直接得到 Ground Truth, 这里还有个问题, 根据(1)~(4)我们可以知道, P 经过 dx(P),dy(P),dw(P),dh(P)dx(P),dy(P),dw(P),dh(P) 得到的并不是真实值 G, 而是预测值G^G^。 的确, 这四个值应该是经过 Ground Truth 和 Proposal 计算得到的真正需要的平移量(tx,ty)(tx,ty) 和尺度缩放(tw,th)(tw,th) 。 
这也就是 R-CNN 中的(6)~(9):

tx=(Gx−Px)/Pw,(6)tx=(Gx−Px)/Pw,(6)
ty=(Gy−Py)/Ph,(7)ty=(Gy−Py)/Ph,(7)
tw=log(Gw/Pw),(8)tw=log⁡(Gw/Pw),(8)
th=log(Gh/Ph),(9)th=log⁡(Gh/Ph),(9)

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

Loss=∑iN(ti∗−w^T∗ϕ5(Pi))2Loss=∑iN(t∗i−w^∗Tϕ5(Pi))2

函数优化目标为:

W∗=argminw∗∑iN(ti∗−w^T∗ϕ5(Pi))2+λ||w^∗||2W∗=argminw∗∑iN(t∗i−w^∗Tϕ5(Pi))2+λ||w^∗||2

利用梯度下降法或者最小二乘法就可以得到 w∗w∗。

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

这边我重点解释一下为什么设计的tx,tytx,ty为什么除以宽高,为什么tw,thtw,th会有log形式!!!

首先CNN具有尺度不变性, 以图3为例:


x,y 坐标除以宽高

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

宽高坐标Log形式

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

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

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

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

limx=0log(1+x)=xlimx=0log(1+x)=x

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

tw=log(Gw/Pw)=log(Gw+Pw−PwPw)=log(1+Gw−PwPw)tw=log⁡(Gw/Pw)=log(Gw+Pw−PwPw)=log(1+Gw−PwPw)

当且仅当Gw−PwGw−Pw=0的时候,才会是线性函数,也就是宽度和高度必须近似相等。

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

总结

里面很多都是参考师兄在caffe社区的回答,本来不想重复打字的,但是美观的强迫症,让我手动把latex公式巴拉巴拉敲完,当然也为了让大家看起来顺眼。后面还有一些公式那块资料很少,是我在阅读paper+个人总结,不对的地方还请大家留言多多指正。

转载于:https://www.cnblogs.com/wlzy/p/9432842.html

[转]边框回归(Bounding Box Regression)详解相关推荐

  1. 边框回归(Bounding Box Regression)详解

    Bounding-Box regression 最近一直在看目标检测有关的Paper, 从rcnn, fast rcnn, faster rcnn, yolo, r-fcn, ssd,到今年cvpr最 ...

  2. Bounding box regression详解

    Bounding box regression详解 转载 http://blog.csdn.net/u011534057/article/details/51235964 Reference link ...

  3. 边框回归(Bounding Box Regression)算法解释

    文章目录 一.为什么需要边框回归 二.边框回归的调整策略 三.论文里怎么说 3.1 平移量与缩放量定义 3.2 损失函数 3.3 为什么是线性回归 四.论文中为什么这样定义平移量和缩放量 4.1 平移 ...

  4. MNS、IOU、bounding box regression详解

    IOU 非极大值抑制(MNS) 边框回归(bounding box regression)

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

    从rcnn, fast rcnn, faster rcnn, yolo, r-fcn, ssd,到cvpr的yolo9000.这些paper中损失函数都包含了边框回归,除了rcnn详细介绍了,其他的p ...

  6. 【目标检测】Bounding Box Regression

    Bounding Box是目标检测中一个重要概念.常见格式是边界框左上角坐标.右下角坐标,即[xmin,ymin,xmax,ymax]:或者边界框中心坐标,宽高,即[x_center,y_center ...

  7. softer-nms论文学习详解(Bounding Box Regression with Uncertainty for Accurate Object Detection)

    <Bounding Box Regression with Uncertainty for Accurate Object Detection> 论文地址: https://arxiv.o ...

  8. 感知算法论文(八):Generalized Intersection over Union:A Metric and A Loss for Bounding Box Regression(2019)

    文章目录 摘要 引言 2. 相关工作 3. Generalized Intersection over Union 3.1 GIoU as Loss for Bounding Box Regressi ...

  9. DeepLearning tutorial(1)Softmax回归原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43157801 DeepLearning tutorial(1)Softmax回归原理简介 ...

最新文章

  1. GO!自制一款【不丑】的名片
  2. Processing 编程学习指南 (丹尼尔·希夫曼 著)
  3. Jenkins项目迁移
  4. 设计模式:解释器模式(Interpreter)
  5. MOVSX和MOVZX
  6. 23 SD配置-主数据-定义销售地区
  7. idea 报错is already defined as class
  8. 客户端与服务站《Socket》
  9. 代数学笔记1: 域扩张(一)
  10. 发光二极管pcb封装图画法_【干货】LED封装形式分类解析
  11. java奖学金课设系统_java毕业设计_springboot框架的基于奖学金评定系统
  12. 小米笔记本pro版bios经常找不到硬盘
  13. 一生之书《悉达多》接受这个世界,爱它,属于它
  14. B站顶流何同学对话苹果CEO库克,iPhone某些设计想法源自中国
  15. Web前端 | HTML | 基础
  16. dnw linux 内核,神器DNW2 FOR LINUX!
  17. arduino esp32 读福申甲醛传感器
  18. Oracle 数据库中的多种SCN汇总
  19. 2021年12月27日多载波NOMA论文阅读
  20. cad指北针lisp_用CAD里的LISP画图,题目如图片,编写一程序,可在任意位置任意方向绘制指定大小的指北针。...

热门文章

  1. Python 查看服务器磁盘信息
  2. Druid 分析报表中的实战(一)
  3. mysql group_concat时间用法
  4. 逆元+费马小定理+扩展欧几里得
  5. tomcat配置https以及http强制跳转https(如何生成证书)
  6. 使用node.js检查js语法错误
  7. 引用dll动态库,动态库中弹出对话框输入,将输入参数,作为变量继续调用。...
  8. magento 报错及解决方法
  9. button-xml 中android:clickable=false 属性
  10. Oracle数据库 ORA-01555 快照过旧 (undo表空间:撤销表空间)