热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

详解边框回归(BoundingBoxRegression)

原文链接:https:blog.csdn.netzijin0802034articledetails77685438Bounding-Boxregression最近一

原文链接: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近的时候才能生效?

为什么要边框回归?

这里引用王斌师兄的理解,如下图所示:


这里写图片描述

对于上图&#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;尺度放缩

  1. 先做平移(Δ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)非常接近. 即YWXY≈WX 。 那么 Bounding-box 中我们的输入以及输出分别是什么呢&#xff1f;

Input:

RegionProposalP&#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(tiw^Tϕ5(Pi))2Loss&#61;∑iN(t∗i−w^∗Tϕ5(Pi))2

函数优化目标为&#xff1a;



W&#61;argminwiN(tiw^Tϕ5(Pi))2&#43;λ||w^||2W∗&#61;argminw∗∑iN(t∗i−w^∗Tϕ5(Pi))2&#43;λ||w^∗||2

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

为什么宽高尺度会设计这种形式&#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;PwPwPw)&#61;log(1&#43;GwP

推荐阅读
author-avatar
亚璨的秘密
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有