1、什么是边框回归
目标检测过程中对产生的候选框以标注好的真实框为目标进行逼近的过程。由于一幅图像上的框可以由中心点坐标(Xc, Yc)和宽W高H唯一确定,所以这种逼近的过程可以建模为回归问题。
2、为什么要做边框回归
通过对候选框做边框回归,可以使最终检测到的目标定位更加接近真实值,提高定位准确率。
3、怎么做边框回归
(1)确定学习目标
![b5a2f2ba4937a827b64a7c488ac72c20.png](https://i-blog.csdnimg.cn/blog_migrate/a54c83ff374f33da2c3a30331454ad94.jpeg)
如上图所示,候选框 P 没有很好地定位到目标,与标注框 G 存在位置和大小比例的差异。为了能使 P 逼近 G,需要寻找一种变换方法,直观的方式是对 P 先平移,再缩放。假设存在变换 t*(.),使得
![7911f338a0ceb819d05de2187954c1a9.png](https://i-blog.csdnimg.cn/blog_migrate/0c4d790182cb771ac1b7f4989291da08.jpeg)
其中,坐标乘以宽高是为了以平移的比例来计算,而宽高使用指数形式是为了保证缩放比例为正数。那么可以求出目标变换t*(.)为:
![b339d4811ca8749a478f02d918e48dc5.png](https://i-blog.csdnimg.cn/blog_migrate/b0365452e11e03bc6caa10140b2a49af.jpeg)
(2)确定损失函数
如下图所示,边框回归的输入是CNN在候选框所提取的feature map,当候选框与标注框的IoU较大时,从候选框到预测框的变换 d*(.) 可以认为是一种近似的线性变换,所以可以建立线性回归模型。
![a74c2481b7575798526333f79b3598e4.png](https://i-blog.csdnimg.cn/blog_migrate/23e8dfd579a1526286828b04b5cfe10f.jpeg)
![f3bee07a5ff26c31c2231706d89bb62c.png](https://i-blog.csdnimg.cn/blog_migrate/ad207c7d2b1cafd8c1a9611770b3535a.jpeg)
4、代码示例
这里以 https://github.com/tensorpack/tensorpack/tree/master/examples/FasterRCNN 的实现为例描述实现的过程。
与边框回归相关的代码集中在 modeling/generalized_rcnn.py和modeling/model_box.py两个文件中,在generalized_rcnn.py中
![6796d2704fe482e71907cfbd5982b8ac.png](https://i-blog.csdnimg.cn/blog_migrate/8bf2f23f791589be71550de98dcd3346.jpeg)
代码中有两个转换函数anchors.decode_logits()和anchors.encoded_gt_boxes(),在modeling/model_box.py文件中,实际调用的是以下两个函数:
![062c84a097d1e922d4084e4b07af49be.png](https://i-blog.csdnimg.cn/blog_migrate/35d522fa8d2ac8600e82d5b9bdca356c.jpeg)
![054ccd5e6342639731f763c627e8fd6c.png](https://i-blog.csdnimg.cn/blog_migrate/25a4d28faf226ce5e1179a3f09e2dd1d.jpeg)