R-CNN系列均训练了Bounding-box回归器来对窗口进行校正,其目标是学习一种转换关系将预测得到的窗口P映射为真实窗口G(Ground truth).

变换方式

可以通过简单的仿射变换以及指数变换将当前预测出的Bounding-box P向Ground truth纠正:
\[
\begin{cases}
\widehat{G_x}=P_wd_x(P)+P_x \\
\widehat{G_y}=P_hd_y(P)+P_y
\end{cases} \tag{仿射}
\]

\[
\begin{cases}
\widehat{G_w}=P_we^{d_w(P)} \\
\widehat{G_h}=P_he^{d_h(P)}
\end{cases}\tag{尺度缩放}
\]

其中(x,y)是区域的中心点坐标,(w,h)是宽和高.
注意:只有当Proposal和Ground Truth比较接近时(线性问题),我们才能将其作为训练样本训练我们的线性回归模型.RCNN计算预测的Proposal与多个Ground Truth的IoU,如果没有任何重叠(IoU=0),则忽略这个Proposal不加入训练;将最大IoU对应的窗口作为Proposal"最近"的Ground Truth,如果此最大的IoU小于阈值(如0.6)也忽略掉.

通过上述\(\widehat G - P\)公式可计算出需要学习的目标target:
\[
\begin{cases}
t_x = (G_x− P_x)/P_w \\
t_y = (G_y− P_y)/P_h \\
t_w = \log(G_w/P_w) \\
t_h = \log(G_h/P_h)
\end{cases}
\]
带L2正则项的(ridge regression)目标函数为:
\[
w_*= \text{argmin}_{\hat w_*}\sum_i^N(t^i_*-s^i_*)^2+\lambda\|\hat w_*\|^2
\]
其中\(s^i_*=\hat w_*^T\phi(P^i)\) ,而\(w_*\)是可学习的参数,\(\phi\)是CNN中某一层的特征.
目标函数除了计算差方和的方式还可以是smooth L1.

加旋转角度

对于船只等目标,通常是长条形且在图片中呈倾斜状态,对其进行一定程度的旋转可能能取得更好的效果。因此可以同时在训练集、预测值、损失函数中加入旋转角度。参考论文"A High Resolution Optical Satellite Image Dataset for Ship Recognition and Some New Baselines" (ICPRAM 2017,Zikun Liu,Yiping Yang),"Rotated Region Based CNN for Ship Detection"(Zikun Liu,ICIP 2017)

在预测的proposal中加入旋转角度\(\theta=P_a\),得到:
\[
\begin{cases}
t_x = (G_x− P_x)/(P_w\cosθ+P_h\sin|θ|) \\
t_y = (G_y− P_y)/(P_w\sin|θ|+P_h\cosθ) \\
t_w = \log(G_w/P_w) \\
t_h = \log(G_h/P_h) \\
ta= (G_a−P_a)/(λ180)
\end{cases}
\]
λ是个常数(λ = 0.5)。
在上式中求\(t_x,t_y\)时旋转映射不稳定,可以替换为如下方式,先映射再直接对宽和高进行normalize。
\[
\begin{cases}
t_x = (\cosα(G_x− P_x) + \sinα(G_y− P_y))/P_w \\
t_y = (−\sinα(G_x− P_x) + \cosα(G_y− P_y))/P_h
\end{cases}
\]

scale-invariant translation (SIT)的示例图:

Bounding-box 回归的更多相关文章

  1. Bounding Box回归

    简介 Bounding Box非常重要,在rcnn, fast rcnn, faster rcnn, yolo, r-fcn, ssd,到今年cvpr最新的yolo9000都会用到. 先看图 对于上图 ...

  2. [转载]边框回归(Bounding Box Regression)

    [转载]边框回归(Bounding Box Regression) 许多模型中都应用到了这种方法来调整piror使其和ground truth尽量接近,例如之前自己看过的SSD模型 这篇文章写的很好, ...

  3. bounding box的简单理解

    1. 小吐槽 OverFeat是我看的第一篇深度学习目标检测paper,因为它是第一次用深度学习来做定位.目标检测问题.可是,很难懂...那个bounding box写得也太简单了吧.虽然,很努力地想 ...

  4. 论文阅读笔记四十七:Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression(CVPR2019)

    论文原址:https://arxiv.org/pdf/1902.09630.pdf github:https://github.com/generalized-iou 摘要 在目标检测的评测体系中,I ...

  5. 目标检测中bounding box regression

    https://zhuanlan.zhihu.com/p/26938549 RCNN实际包含两个子步骤,一是对上一步的输出向量进行分类(需要根据特征训练分类器):二是通过边界回归(bounding-b ...

  6. 目标检测中的bounding box regression

    目标检测中的bounding box regression 理解:与传统算法的最大不同就是并不是去滑窗检测,而是生成了一些候选区域与GT做回归.

  7. Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression

    Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression 2019-05-20 19:3 ...

  8. [论文笔记] Improving Head Pose Estimation with a Combined Loss and Bounding Box Margin Adjustment

    Improving Head Pose Estimation with a Combined Loss and Bounding Box Margin Adjustment 简介 本文提出了一种网络结 ...

  9. 3D空间中的AABB(轴向平行包围盒, Aixe align bounding box)的求法

    引言 在前面的一篇文章中讲述了怎样通过模型的顶点来求的模型的包围球,而且还讲述了基本包围体除了包围球之外,还有AABB包围盒.在这一章,将讲述怎样依据模型的坐标求得它的AABB盒. 表示方法 AABB ...

  10. Latex 中插入图片no bounding box 解决方案

    在windows下,用latex插入格式为jpg,png等图片会出现no bounding box 的编译错误,此时有两个解决办法: 1.将图片转换为eps格式的图片 \usepackage{grap ...

随机推荐

  1. Dynamics CRM 2015-Ribbon In Basic Home Tab

    前文中有说到关于Form上Ribbon的配置以及控制,而Ribbon Button还可以在其它地方的配置,今天就来说说在Basic Home Tab里面的配置,效果图如下: 具体配置Customiza ...

  2. Spring MVC 原理

    一.什么是springmvc springMVC是spring框架的一个模块,springMVC和spring无需通过中间整合层进行开发. springMVC是一个基于mvc的web框架. Sprin ...

  3. 5. 跟踪标记 (Trace Flag) 834, 845 对内存页行为的影响

    跟踪标记:834 功能: 在64位的windows环境下,为SQL Server开启这个跟踪标记,那么SQL Server 会使用大页(Large pages)为内存缓冲区(buffer pool)分 ...

  4. django-高级视图和url配置

    高级视图和url配置 一.URLconf技巧 1.流线型化函数导入 对于配置url,我们可以使用以下几种方式: (1)引入view中的函数 from firstSite.view import cur ...

  5. java.net.UnknownHostException

    java.net.UnknownHostException 错误解决方向 查看 测试真机或者模拟机是否连上了网络.     如果不是第一步错误的话,一般就是测试机没有链接上网络,可以打开个网页或者其他 ...

  6. Appium疑难杂症

    坑之初体验 在Appium的初体验中,遇到了一些坑坑洼洼.将他们记录下来,以后方便查阅. 1. session大于60秒没接收到命令自动关闭 通过Appium-Python-Client连接到appi ...

  7. pycharm安装,svn使用,远程开发调试,接口测试,连接服务器

    磨刀不误砍柴工,配置完美的编辑器,在开发时,能帮助我们节约大量的时间成本,从而是我们的精力放在业务逻辑实现上面! 接下来将介绍 使用pyhcarm如何使用svn,远程开发调试,接口测试,已经连接远程服 ...

  8. shell脚本基础1 概述及变量

    shell概述:在linux内核与用户之间的解释器程序通常指/bin/bash负责指向内核翻译及传达用户/程序指令相当于操作系统的"外壳" shell的使用方式:交互式--命令行: ...

  9. 一句Python,一句R︱numpy、array——高级matrix

    先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句python,对应写一句R. python中的numpy模块相当于R中的matirx矩 ...

  10. 为Hi3531添加4串口支持

    修改文件为 linux-3.0.y\arch\arm\mach-godnet\core.c linux-3.0.y\arch\arm\mach-godnet\include\mach\irqs.h 修 ...