边框回归(Bounding Box Regression)详解
来源:互联网 发布:淘宝二手ps4主机能买吗 编辑:程序博客网 时间:2024/06/06 20:10
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 就是用来微调这个窗口的。
边框回归是什么?
继续借用师兄的理解:对于窗口一般使用四维向量
边框回归的目的既是:给定
边框回归怎么做的?
那么经过何种变换才能从图 2 中的窗口 P 变为窗口
- 先做平移
(Δx,Δy) ,Δx=Pwdx(P),Δy=Phdy(P) 这是R-CNN论文的:G^x=Pwdx(P)+Px,(1) G^y=Phdy(P)+Py,(2) - 然后再做尺度缩放
(Sw,Sh) ,Sw=exp(dw(P)),Sh=exp(dh(P)) , 对应论文中:G^w=Pwexp(dw(P)),(3) G^h=Phexp(dh(P)),(4)
观察(1)-(4)我们发现, 边框回归学习就是
线性回归就是给定输入的特征向量 X, 学习一组参数 W, 使得经过线性回归后的值跟真实值 Y(Ground Truth)非常接近. 即
Input:
Output:
需要进行的平移变换和尺度缩放
这也就是 R-CNN 中的(6)~(9):
那么目标函数可以表示为
函数优化目标为:
利用梯度下降法或者最小二乘法就可以得到
为什么宽高尺度会设计这种形式?
这边我重点解释一下为什么设计的
首先CNN具有尺度不变性, 以图3为例:
x,y 坐标除以宽高
上图的两个人具有不同的尺度,因为他都是人,我们得到的特征相同。假设我们得到的特征为
宽高坐标Log形式
我们想要得到一个放缩的尺度,也就是说这里限制尺度必须大于0。我们学习的
为什么IoU较大,认为是线性变换?
当输入的 Proposal 与 Ground Truth 相差较小时(RCNN 设置的是 IoU>0.6), 可以认为这种变换是一种线性变换, 那么我们就可以用线性回归来建模对窗口进行微调, 否则会导致训练的回归模型不 work(当 Proposal跟 GT 离得较远,就是复杂的非线性问题了,此时用线性回归建模显然不合理)。这里我来解释:
Log函数明显不满足线性函数,但是为什么当Proposal 和Ground Truth相差较小的时候,就可以认为是一种线性变换呢?大家还记得这个公式不?参看高数1。
现在回过来看公式(8):
当且仅当
对于IoU大于指定值这块,我并不认同作者的说法。我个人理解,只保证Region Proposal和Ground Truth的宽高相差不多就能满足回归条件。x,y位置到没有太多限制,这点我们从YOLOv2可以看出,原始的边框回归其实x,y的位置相对来说对很大的。这也是YOLOv2的改进地方。详情请参考我的博客YOLOv2。
总结
里面很多都是参考师兄在caffe社区的回答,本来不想重复打字的,但是美观的强迫症,让我手动把latex公式巴拉巴拉敲完,当然也为了让大家看起来顺眼。后面还有一些公式那块资料很少,是我在阅读paper+个人总结,不对的地方还请大家留言多多指正。
- 边框回归(Bounding Box Regression)详解
- Bounding box regression详解
- Bounding box regression详解
- Bounding box regression详解
- Bounding box Regression详解
- Bounding box regression详解
- Bounding box regression详解
- Bounding box regression(回归)
- RCNN中的bounding box regression详解
- Bounding-box Regression
- Single Bounding Box Regression
- bounding box regression
- Bounding-box Regression
- bounding-box regression
- Bounding box 回归
- 人脸检测中的bounding box regression详解
- Bounding box regression详细解答
- Bounding-box Regression深度解析
- Ubuntu 中一些包的安装
- UML建模之
- OKHTTP和Retrofit
- libvirt api 虚拟机动态迁移代码示例(非共享存储)
- ORACLE索引原理
- 边框回归(Bounding Box Regression)详解
- js得到连两个时间段之间所有的年-月 获取当前日期 格式化日期 根据指定日期得到该日期该月份的最后一天
- 隐马尔科夫模型(二)
- C++实现WEB功能方法总结
- cookie和session的区别
- 发现了一个好用的WEB项目打印控件--四方打印
- 阿里、百度等多家公司Java面试记录与总结
- C++调用Python模块
- Hadoop MapReduce执行过程中map和reduce执行过程