为了账号安全,请及时绑定邮箱和手机立即绑定

卷积神经网络物体检测---边框回归(Bounding Box Regression)详解

标签:
人工智能

Bounding-Box regression

最近一直看检测有关的Paper, 从rcnnfast rcnn, faster rcnn, yolo, r-fcn, ssd,到今年cvpr最新的yolo9000。这些paper中损失函数都包含了边框回归,除了rcnn详细介绍了,其他的paper都是一笔带过,或者直接引用rcnn就把损失函数写出来了。前三条网上解释比较多,后面的两条我看了很多paper,才得出这些结论。

  • 为什么要边框回归?

  • 什么是边框回归?

  • 边框回归怎么做的?

  • 边框回归为什么宽高,坐标会设计这种形式?

  • 为什么边框回归只能微调,在离Ground Truth近的时候才能生效?

为什么要边框回归?

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


这里写图片描述

如图红色框和绿色框所示,红色框是我们生成的Region Proposal(具体怎么生成的不说明了)记为R,而绿色是我们的实际要达到的检测框(Ground Truth)记为G。那么IOU就是(R∩G)/(R∪G) 。定义这个的目的就是为了在训练时为已标定的Bounding-Box寻找一个能够扩张为该Bounding-Box的Region Proposal,当IOU小于某个值得时候就必须被丢弃,这样的具体原因是因为能够进行Bounding-Box regression的两个框的是差异比较小的,这样才能进行线性模拟(下面会讲述的)。

边框回归是什么?


边框回归怎么做的?

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


观察(1)-(4)我们发现, 边框回归学习就是这四个变换。下一步就是设计算法那得到这四个映射。

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

Input:

,这个是什么? 输入就是这四个数值吗?其实真正的输入是这个窗口对应的 CNN 特征,也就是 R-CNN 中的 Pool5 feature(特征向量)。 (注:训练阶段输入还包括 Ground Truth, 也就是下边提到的

Output:

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


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


函数优化目标为:


利用梯度下降法或者最小二乘法就可以得到 。所以根据这个loss学到是输入是pool5的feature map 输出是近似于真实的t∗=(tx,ty,tw,th)的值,所对应的w。所以应用时需要在转到(Gx^,Gy^,Gw^,Gh^)


应用:

   根据3我们学习到回归参数,对于测试图像,我们首先经过 CNN 提取特征,预测的变化就是,最后根据以下4个公式对窗口进行回归:



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

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

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


这里写图片描述


x,y 坐标除以宽高

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

宽高坐标Log形式

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

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

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

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


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

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

参考:

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

https://blog.csdn.net/bixiwen_liu/article/details/53840913

       

原文出处

       

       

           

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消