边框回归(Bounding Box Regression)详解

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)” role=”presentation”>(x,y,w,h)(x,y,w,h)


这里写图片描述

边框回归的目的既是:给定(Px,Py,Pw,Ph)” role=”presentation”>(Px,Py,Pw,Ph)(Px,Py,Pw,Ph)

边框回归怎么做的?

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

  1. 先做平移(Δx,Δy)” role=”presentation”>(Δx,Δy)(Δx,Δy)
  2. 然后再做尺度缩放(Sw,Sh)” role=”presentation”>(Sw,Sh)(Sw,Sh)

观察(1)-(4)我们发现, 边框回归学习就是dx(P),dy(P),dw(P),dh(P)” role=”presentation”>dx(P),dy(P),dw(P),dh(P)dx(P),dy(P),dw(P),dh(P)这四个变换。下一步就是设计算法那得到这四个映射。

线性回归就是给定输入的特征向量 X, 学习一组参数 W, 使得经过线性回归后的值跟真实值 Y(Ground Truth)非常接近. 即Y≈WX” role=”presentation”>YWXY≈WX 。 那么 Bounding-box 中我们的输入以及输出分别是什么呢?

Input:

RegionProposal→P=(Px,Py,Pw,Ph)” role=”presentation”>RegionProposalP=(Px,Py,Pw,Ph)RegionProposal→P=(Px,Py,Pw,Ph))

Output:

需要进行的平移变换和尺度缩放 dx(P),dy(P),dw(P),dh(P)” role=”presentation”>dx(P),dy(P),dw(P),dh(P)dx(P),dy(P),dw(P),dh(P)
这也就是 R-CNN 中的(6)~(9):

tx=(Gx−Px)/Pw,(6)” role=”presentation”>tx=(GxPx)/Pw,(6)tx=(Gx−Px)/Pw,(6)

ty=(Gy−Py)/Ph,(7)” role=”presentation”>ty=(GyPy)/Ph,(7)ty=(Gy−Py)/Ph,(7)

tw=log⁡(Gw/Pw),(8)” role=”presentation”>tw=log(Gw/Pw),(8)tw=log⁡(Gw/Pw),(8)

th=log⁡(Gh/Ph),(9)” role=”presentation”>th=log(Gh/Ph),(9)th=log⁡(Gh/Ph),(9)

那么目标函数可以表示为 d∗(P)=w∗TΦ5(P)” role=”presentation”>d(P)=wTΦ5(P)d∗(P)=w∗TΦ5(P)差距最小, 得到损失函数为:

Loss=∑iN(t∗i−w^∗Tϕ5(Pi))2” role=”presentation”>Loss=iN(tiw^Tϕ5(Pi))2Loss=∑iN(t∗i−w^∗Tϕ5(Pi))2

函数优化目标为:

W∗=argminw∗∑iN(t∗i−w^∗Tϕ5(Pi))2+λ||w^∗||2” role=”presentation”>W=argminwiN(tiw^Tϕ5(Pi))2+λ||w^||2W∗=argminw∗∑iN(t∗i−w^∗Tϕ5(Pi))2+λ||w^∗||2

利用梯度下降法或者最小二乘法就可以得到 w∗” role=”presentation”>ww∗

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

这边我重点解释一下为什么设计的tx,ty” role=”presentation”>tx,tytx,ty会有log形式!!!

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


这里写图片描述

x,y 坐标除以宽高

上图的两个人具有不同的尺度,因为他都是人,我们得到的特征相同。假设我们得到的特征为ϕ1,ϕ2” role=”presentation”>ϕ1,ϕ2ϕ1,ϕ2。也就是说同一个x对应多个y,这明显不满足函数的定义。边框回归学习的是回归函数,然而你的目标却不满足函数定义,当然学习不到什么。

宽高坐标Log形式

我们想要得到一个放缩的尺度,也就是说这里限制尺度必须大于0。我们学习的tw,th” role=”presentation”>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)=x” role=”presentation”>limx=0log(1+x)=xlimx=0log(1+x)=x

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

tw=log⁡(Gw/Pw)=log(Gw+Pw−PwPw)=log(1+Gw−PwPw)” role=”presentation”>tw=log(Gw/Pw)=log(Gw+PwPwPw)=log(1+GwPwPw)tw=log⁡(Gw/Pw)=log(Gw+Pw−PwPw)=log(1+Gw−PwPw)

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

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

总结

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

阅读更多
文章标签: 目标检测算法
个人分类: 目标检测
(".MathJax").remove();




    MathJax.Hub.Config({
            "HTML-CSS": {
                    linebreaks: { automatic: true, width: "94%container" },
                    imageFont: null
            },
            tex2jax: {
                preview: "none"
            },
            mml2jax: {
                preview: 'none'
            }
    });


    (function(){
        var btnReadmore =
(".MathJax").remove();    MathJax.Hub.Config({            "HTML-CSS": {                    linebreaks: { automatic: true, width: "94%container" },                    imageFont: null            },            tex2jax: {                preview: "none"            },            mml2jax: {                preview: 'none'            }    });    (function(){        var btnReadmore =
("#btn-readmore"); if(btnReadmore.length>0){ var winH = (window).height();vararticleBox= ( w i n d o w ) . h e i g h t ( ) ; v a r a r t i c l e B o x = ("div.article_content"); var artH = articleBox.height(); if(artH > winH*2){ articleBox.css({ 'height':winH*2+'px', 'overflow':'hidden' }) btnReadmore.click(function(){ articleBox.removeAttr("style"); $(this).parent().remove(); }) }else{ btnReadmore.parent().remove(); } } })()
想对作者说点什么? 我来说一句
  • wfxueyuan
    nathansader 2018-07-04 10:55:52 #15楼
    谢谢博主,有心了赞!
    举报 回复
  • fab_4
    fab_4 2018-06-14 14:09:59 #14楼
    谢谢博主,受教了~
    举报 回复
  • qq_39835472
    Rulen9987 2018-06-11 14:21:14 #13楼
    写的很好!!!回归的的意义一开始我也没有想到
    举报 回复
  • drifter1026
    drifter1026 2018-05-02 20:27:44 #12楼
    谢谢楼主,看完清楚了很多
    举报 回复
  • qq_29271691
    qq_29271691 2018-04-08 10:06:18 #11楼
    解释的真好,原本就是关于Bouding-Box regression中坐标变换和尺度缩放的形式没搞懂,经过这么以解释全明白了
    举报 回复 查看回复(1)
    • SugarAnnie
      SugarAnnie回复 qq_29271691 2018-04-12 13:40:34
      请问一下,到底网络怎么设计,pool5层后接什么(4096维的特征向量输入到什么里面能得到x,y,w,h)?求解答
      举报 回复
  • 上一页
  • 1
  • 2
  • 3
  • 下一页
查看 20 条热评

bounding box回归的原理学习——yoloV1

参考: https://zhuanlan.zhihu.com/p/25236464 http://blog.csdn.net/williamyi96/article/details/7753094…

brightming brightming

2017-09-23 17:15:01

阅读数:2307

人脸检测中的bounding box regression详解

在人脸检测算法如R-CNN、Fast RCNN中都用到了bounding box回归,回归的目标是使得预测的物体窗口向groundtruth窗口相接近。我一开始没理解如何能回归出一个框来,看完下文就理…

elaine_bao elaine_bao

2017-03-05 17:17:16

阅读数:11206

BoundingBox工具及其使用方法 - CSDN博客

BoundingBox工具下载地址: Windows1.3.1下载地址; Windows1.5.2下载地址 Linux下载地址 自己的百度云盘和移动硬盘中都有 原博主下载地址 项目地址:LabelImg …

2018-6-23

Bounding-box Regression深度解析 - CSDN博客

ex_boxes Input bounding boxes % % Outputs % pred_boxes Modified (hopefully better) ex_boxes % AUTO…

2017-11-30

男人性时间短咋办?教你1个技巧轻松达到30分钟! 京法航 · 顶新
var width = $("div.recommend-box").outerWidth() - 48; NEWS_FEED({ w: width, h : 90, showid : 'GNKXx7', placeholderId: "ad1", inject : 'define', define : { imagePosition : 'left', imageBorderRadius : 0, imageWidth: 120, imageHeight: 90, imageFill : 'clip', displayImage : true, displayTitle : true, titleFontSize: 20, titleFontColor: '#333', titleFontFamily : 'Microsoft Yahei', titleFontWeight: 'bold', titlePaddingTop : 0, titlePaddingRight : 0, titlePaddingBottom : 10, titlePaddingLeft : 16, displayDesc : true, descFontSize: 14, descPaddingLeft: 14, descFontColor: '#6b6b6b', descFontFamily : 'Microsoft Yahei', paddingTop : 0, paddingRight : 0, paddingBottom : 0, paddingLeft : 0, backgroundColor: '#fff', hoverColor: '#ca0c16' } })

RCNN:Bounding-Box(BB)regression

本博客主要介绍RCNN中的Bounding-box的回归问题,这个是RCNN定准确定位的关键。本文是转载自博客:Faster-RCNN详解,从中截取有关RCNN的bounding-box的回归部分。原…

Bixiwen_liu Bixiwen_liu

2016-12-23 15:55:44

阅读数:8114

RCNN中的bounding box regression详解 - CSDN博客

(两者iou>0.6)如果相差太远是无法得到boundingbox regression的,所以在公式1~2中相当于将dx和dy regularize 在一定的数值范围内,即dx = (Gx-Px)/Pw 这里Gx…

2018-6-7

tf.image.draw_bounding_boxes - CSDN博客

___tz_zs 在一批图像上绘制边框。 draw_bounding_boxes( images, boxes, name=None )images:是 [batch, height, width, depth] 形状的四维矩阵,数据类型为…

2018-7-3

bounding box回归原理学习——yoloV2

yolov2 box

brightming brightming

2017-09-25 15:20:46

阅读数:1893

Faster RCNN详解:从region proposal到bounding box回归

转载自Faster RCNN解析 。 网上很多关于Faster RCNN的介绍,不过这一片算是比较全的了,不仅包括整体流程、思想的介绍,也包括各个实现较为深入的介绍。大概内容记录如下(仅记录目前我感兴…

u013832707 u013832707

2016-12-14 16:07:47

阅读数:22785

方向包围盒OBB(oriented bounding box) - CSDN博客

1)沿坐标轴的包围盒AABB(axis-aligned bounding boxes)在碰撞检测的研究历史中使用得最久最广, 一个给定对象的AABB被定义为包含该对象且各边平行于坐标轴的最小…

2018-6-8

关于RCNN中Bounding-box regression的个人理解 - CSDN博客

最近看了RNN的文章,对里面的Bounding-box regression回归不甚理解,google一番,把学到的东西写在这里。 参考的文章。 为啥要回归 鉴于bounding box太长,下面简写…

2018-3-3

Bounding box regression详解

Reference link: http://caffecn.cn/?/question/160 Question: 我只知道,输入检测到的box,回归的是检测到box中心点,以及box长和宽到标记…

u011534057 u011534057

2016-04-24 21:26:57

阅读数:20385

深圳新出的赚钱方式,第一批人已经赚嗨翻了!! 四平众合 · 顶新

论文笔记 | BoxSup: Exploiting Bounding Boxes to Sup…_CSDN博客

论文笔记 | BoxSup: Exploiting Bounding Boxes to Supervise Convolutional Networks for Semantic Segmentati2016年08月08日 23:20:11 阅读数:2000 Authors Jifeng…

2018-6-15

如何生成OBB(OrientedboundingBox)方向包围盒 - CSDN博客

一种快速收敛的自适应算法求解最小包围盒(OBB) 最小包围盒沿坐标轴向包围盒AABB(Axis-Aligned Bounding Boxes)算法简单,适用场合有限。沿任意方向的包围盒OBB(Ori…

2018-5-23

var width = $("div.recommend-box").outerWidth() - 48; NEWS_FEED({ w: width, h: 90, showid: 'Afihld', placeholderId: 'a_d_feed_0', inject: 'define', define: { imagePosition: 'left', imageBorderRadius: 0, imageWidth: 120, imageHeight: 90, imageFill: 'clip', displayImage: true, displayTitle: true, titleFontSize: 20, titleFontColor: '#333', titleFontFamily: 'Microsoft Yahei', titleFontWeight: 'bold', titlePaddingTop: 0, titlePaddingRight: 0, titlePaddingBottom: 10, titlePaddingLeft: 16, displayDesc: true, descFontSize: 14, descPaddingLeft: 14, descFontColor: '#6b6b6b', descFontFamily: 'Microsoft Yahei', paddingTop: 0, paddingRight: 0, paddingBottom: 0, paddingLeft: 0, backgroundColor: '#fff', hoverColor: '#ca0c16' } })

BoundingBox工具及其使用方法

BoundingBox工具下载地址: Windows下载地址 Linux下载地址 自己的百度云盘和移动硬盘中都有 前言 我们知道,图片标注主要是用来创建自己的数据集,方便进行深度学习训练。…

zhangtong11111 zhangtong11111

2017-12-19 16:58:12

阅读数:793

以线框的方式画一个节点的最小BoundingBox

以线框的方式画一个节点的最小BoundingBoxvoid BoxLine::Set(osg::BoundingBox &box){     float lengthX=box.xMax()-box….

zhuqinglu zhuqinglu

2007-12-06 16:18:00

阅读数:3512

bounding box回归的原理学习——yoloV1 - CSDN博客

A single convolutional network simultaneously predicts multiple bounding boxes and class probabilities for those boxes. 对于输入的图片,resize到网络的输入所需要的…

2018-6-13

Edge Boxes:Bounding box 评分的方法 - CSDN博客

举报内容: Edge Boxes:Bounding box 评分的方法 举报原因: 色情 政治 抄袭 广告 招聘 骂人 其他 原文地址: 原因补充: 最多只允许输入30个字加入…

2018-5-18

Single Bounding Box Regression

Single Bounding Box Regression: L2 Loss and SmoothL1Loss

weixin_35653315 weixin_35653315

2017-01-16 10:23:33

阅读数:5750

RCNN中的bounding box regression详解

RCNN bounding box

CV_adventurer CV_adventurer

2017-06-19 16:53:44

阅读数:1647

YOLO下一步:输出预测boundingbox做进一步处理

对于我们使用yolo做一下research中的其他应用而言,最终目的肯定不是看看预测boundingbox就ok了。 具体对于我而言,就需要在得到boundingbox后再找出目标的局部信息。下面简…

NNNNNNNNNNNNY NNNNNNNNNNNNY

2017-01-15 14:46:45

阅读数:4038

关于BoundingBox区域的点击检测问题:

关于BoundingBox的坐标获取问题: 问题:      在一个CCSprite的父类经过旋转、缩放之后,再判断点击的点是否在BoundingBox之内会出现问题,当点击该Sprite原来的位…

Dekiven Dekiven

2014-04-24 10:05:36

阅读数:2975

【目标检测】RCNN算法详解

深度学习用于目标检测的RCNN算法

shenxiaolu1984 shenxiaolu1984

2016-04-05 23:10:36

阅读数:109067

scrolling="no">

【cocos2dx】成员精灵(组合)的getboundingbox问题

首先,我设定读者们都对cocos2dx的坐标系有一定的了解了。 没有的话,给个官方文档的链接,讲得比较明白 http://www.cocos.com/doc/article/index?type=c…

hqq39 hqq39

2015-09-12 17:41:44

阅读数:4245

python : 修改boundingbox , 修改jpg

一 标注的xml文件中boundingbox都是扁长形的,ssd网络的default box 都是1:1 1:2 1:3的比例。为了利于训练将标注xml的bounding box 在水平方向上均…

xxiaozr xxiaozr

2017-08-18 15:18:55

阅读数:424

Bounding Box label code

在进行yolo和faster R-CNN的模型计算前,做自己的数据集,需要对物体进行手动标注,作为训练集。…

qq_30401249 qq_30401249

2016-05-26 10:14:53

阅读数:4151

BoundingBox标注工具

2015年04月20日 229KB 下载

Bounding box regression详细解答

Reference link:http://caffecn.cn/?/question/160Question:我只知道,输入检测到的box,回归的是检测到box中心点,以及box长和宽到标记的box…

l297969586 l297969586

2017-05-27 15:44:37

阅读数:706

Bounding-box_regression详解

2017年08月18日 180KB 下载

目标检测算法中的bounding box regression

原文转载于:http://blog.csdn.net/elaine_bao/article/details/60469036 一、前言        一些目标检测算法如R-CNN、Fast RCNN中…

AP1005834 AP1005834

2017-09-09 17:03:47

阅读数:1292

没有更多推荐了,返回首页



个人分类






  • opencv 1篇



  • C++ 4篇



  • 视频处理 3篇



  • linux 13篇



  • 论文总结 21篇



  • torch 2篇



  • lua 1篇



  • GAN 2篇



  • 目标检测 10篇



  • deep hash 5篇



  • Action Recognition 1篇



  • 深度学习 1篇



  • vim 2篇




展开




归档







  • 2017年9月 1篇




  • 2017年8月 4篇




  • 2017年5月 1篇




  • 2017年3月 1篇




  • 2017年2月 2篇




  • 2017年1月 6篇




  • 2016年12月 5篇




  • 2016年11月 8篇




  • 2016年10月 6篇




  • 2016年9月 8篇




  • 2016年8月 1篇




  • 2016年6月 4篇




展开




热门文章





  • 边框回归(Bounding Box Regression)详解

    阅读量:16414



  • YOLO 论文解读

    阅读量:11005



  • DEEP COMPRESSION(深度学习网络参数压缩)

    阅读量:5616



  • Torch教程(1)-Tensor

    阅读量:4014



  • Vim一键编译运行

    阅读量:3991






最新评论





  • 边框回归(Bounding Box…


    wfxueyuan:谢谢博主,有心了赞!



  • 边框回归(Bounding Box…


    fab_4:[reply]AaronYKing[/reply]
    第二点我的理解,除以宽和高就把一个绝对的中心点…



  • 边框回归(Bounding Box…


    fab_4:谢谢博主,受教了~



  • 边框回归(Bounding Box…


    qq_39835472:写的很好!!!回归的的意义一开始我也没有想到



  • SSD: Single Shot …


    T_maker:感谢博主,想提一个问题,预测是如何知道每一个盒子的概率的?





("a.flexible-btn").click(function(){ ("a.flexible-btn").click(function(){ (this).parents('div.aside-box').removeClass('flexible-box'); $(this).remove(); })

你可能感兴趣的:(机器学习,目标检测算法,目标检测)