论文笔记:Learning Region Features for Object Detection
中心思想
继Relation Network实现可学习的nms之后,MSRA的大佬们觉得目标检测器依然不够fully learnable,这篇文章类似之前的Deformable ROI Pooling,主要在ROI特征的组织上做文章,文章总结了现有的各种ROI Pooling变体,提出了一个统一的数学表达式,藉由这个表达式,提出完全可学习,无人工设计的Region特征,据Han Hu大佬的讲座所说,这篇文章现在只是提出了一种行得通的方案,还没有研究清楚,性能比Deformable Conv那篇文章稍差一点点。
Region特征提取的总结和统一表达
一般地,region feature \(\mathbf{y}(b)\)的提取可以统一表达为如下的公式:
\[\mathbf{y}(b) = \text{RegionFeat}(\mathbf{x}, b)\]
这里x指的是输入特征,b是bbox。\(\mathbf{y}(b)\)的维度是\(K\times C_f\),通道数与输入特征一般相同,为\(C_f\)。注意,要特别关注自变量包含哪些东西,这里x是指整张特征图,而不只是box内的特征,譬如在Deformable ROI Pooling中就用到了box之外的特征。这个式子可以具体地表达为:
\[\mathbf{y}_k(b) = \sum_{p \in \Omega_b}w_k(b,p,\mathbf{x})\odot \mathbf{x}(p)\]
其中,\(\Omega_b\)表示支撑区域“supporting region”,也就是Pooling所用到的区域,p为区域中的每个位置,\(\odot\)表示element-wise相乘,k表示pooling后的第k个位置。也就是说,pooling后的每个位置,都是\(\Omega_b\)中每个位置的加权平均。
最原始的RoI Pooling,作者称之为Regular RoI Pooling,
\[w_k(b, p) =
\begin{cases}
1/|R_{bk}| & \text{ if $p \in R_{bk}$} \\
0 & \text{else}
\end{cases}\]
其中,\(R_{bk}\)是第k个bin的所有位置的几何。这种pooling的缺点是:由于空间上的下采样,难以区分非常靠近的RoIs。譬如,输入特征一般比原图缩小了16倍,如果两个RoI的距离小于16个像素,那么它们的\(R_{bk}\)完全相同,特征也就完全相同。
SPPNet中提出的Spatial Pyramid Pooling,跟原始RoI Pooling差不多,只是用了好几种bin的划分。
Aligned ROI Pooling,
\[w_k(b, p) = g(u_p, u_{bk}) \cdot g(v_p, v_{bk})\]
其中,\(g(a,b) = \max(0, 1-|a-b|)\))表示一维的双线性插值核,\((u_{bk}, v_{bk})\)表示每个bin的中心点,\(p=(u_p,v_p)\)表示整数坐标。比较好理解,就是对于某个浮点坐标,考虑其与四个相邻整数坐标的距离,再进行加权。注意,以上几种Pooling方式,权重都只是依赖几何信息,并不依赖输入特征本身。
Deformable RoI pooling为每个bin的中心学习一个偏移量\((\delta u_{bk}, \delta v_{bk})\),
\[w_k(b,p,\mathbf{x}) = g(u_p, u_{bk} + \delta u_{bk}) \cdot g(v_p, v_{bk} + \delta v_{bk})\]
PSRoI Pooling,与原始RoI Pooling不同的是,每个bin仅与输入特征通道的某个子集相关,可以表达为
\[\mathbf{y}_k(b) = \sum_{p \in \Omega_b}w_k(b,p,\mathbf{x}_k)\odot \mathbf{x}_k(p)\]
其中,\(\mathbf{x}_k\)仅包含x在通道轴上的某个子集,具体依据k来决定。
学习Region Features
重点来了,说了这么多,上面的各种变体说到底都是完全hand-crafted的。即使Deformable RoI pooling引入了一个可学习的组件,但其形式也很大程度上受限于一个规则的网络。本文的目标就是最大限度地减少手工的设计。
直觉上,影响\(w_k\)的因素有二:一是位置p与RoI box b的几何关系,例如,b内部的位置理应具有较高的权重;二是图像特征x应自适应地使用,这一点Deformable中已经做到了。因此,使用下列式子对\(w_k\)进行建模:
\[w_k(b,p,\mathbf{x}) \propto \exp(G_k(b,p)+A_k(\mathbf{x},p))\]
其中,第一项用来捕捉几何关系:
\[G_k(b,p) = \langle W^{\text{box}}_{k}\cdot \mathcal{E}^{\text{box}}(b), W^{\text{im}}\cdot \mathcal{E}^{\text{im}}(p) \rangle\]
这个式子分三步进行。首先,将box和图像坐标嵌入到一个高维空间中(Relation Network中也有类似操作)。
\[\mathcal{E}_{2i}(z) = \sin \Large ( \frac{z}{1000^{2i/C_{\mathcal{E}}}} \Large ), \quad \mathcal{E}_{2i+1}(z) = \cos \Large (\frac{z}{1000^{2i/C_{\mathcal{E}}}} \Large )\]
这个操作确实说不出太多道理,作者也说了这问题还没研究清楚。z是一个标量,ε(z)是一个\(C_ε\)维的向量,下标i的取值范围为0至\(C_ε/2-1\)。经过这一操作,一个图像坐标p的高维空间嵌入\(ε^im (p)\)的维度是\(2C_ε\),一个box b的高维空间嵌入\(ε^box (b)\)的维度是\(4C_ε\)。
而后,使用\(W^{\text{box}}_{k}\)和\(W^{\text{im}}_{k}\)分别对上面的两个向量作线性变换,变换到同一维度\(C_g\)。注意,这里k的数值是比较大的,一般是7x7,实例分割任务中甚至会取14x14,这样搞下来可学习的参数会比较多,所以作者寻思着共享一部分参数,\(W^{\text{box}}_k = \hat{W}^{\text{box}}_k V^{\text{box}}\), \(V^{\text{box}}\)没有下标k,所以是共享的,这样做也是比较符合直觉的,在保证输出维度不变的前提下能减少很多参数。
第二项使用图像特征,跟Deformable那篇是一样的,
\[A_k(\mathbf{x},p) = W^{\text{app}}_k \cdot \mathbf{x}(p)\]
\(W^{\text{app}}_k\)代表1x1卷积核的权重。
高效实现
上面这一系列骚操作,乍一看是非常费劲的。但仔细分析之下可以看到,\(A_k(\mathbf{x},p)\)和\(W^{\text{im}}\cdot \mathcal{E}^{\text{im}}(p)\)的计算对所有的RoI是可复用的。所以计算量主要来自计算权重时要跟特征图上的所有点两两进行计算,所以数量级是HW,可以去看原论文中的表,这里就不贴出来了,如果用这种naive的实现方式,计算量惊人。怎么办呢?很显然应该从HW上下手,手法是很符合直觉的,就是在RoI内部密集采样,而在RoI外部稀疏采样。如下图所示,数量级可以下降100倍左右!但个人认为不是所有的RoI都需要计算,因为一般只选取k个RoI进入到第二阶段,不选的就不必计算了,论文里好像没写这个,不过代码里想必是实现了的。

论文笔记:Learning Region Features for Object Detection的更多相关文章
- 论文笔记:Structure Inference Net: Object Detection Using Scene-Level Context and Instance-Level Relationships
Structure Inference Net: Object Detection Using Scene-Level Context and Instance-Level Relationships ...
- 论文笔记之:Natural Language Object Retrieval
论文笔记之:Natural Language Object Retrieval 2017-07-10 16:50:43 本文旨在通过给定的文本描述,在图像中去实现物体的定位和识别.大致流程图如下 ...
- 论文阅读 | FCOS: Fully Convolutional One-Stage Object Detection
论文阅读——FCOS: Fully Convolutional One-Stage Object Detection 概述 目前anchor-free大热,从DenseBoxes到CornerNet. ...
- [论文理解] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 简介 Faster R-CNN是很经典的t ...
- 论文笔记:Selective Search for Object Recognition
与 Selective Search 初次见面是在著名的物体检测论文 「Rich feature hierarchies for accurate object detection and seman ...
- 轮廓检测论文解读 | Richer Convolutional Features for Edge Detection | CVPR | 2017
有什么问题可以加作者微信讨论,cyx645016617 上千人的粉丝群已经成立,氛围超好.为大家提供一个遇到问题有可能得到答案的平台. 0 概述 论文名称:"Richer Convoluti ...
- 论文阅读之 DECOLOR: Moving Object Detection by Detecting Contiguous Outliers in the Low-Rank Representation
DECOLOR: Moving Object Detection by Detecting Contiguous Outliers in the Low-Rank Representation Xia ...
- [论文理解]Focal Loss for Dense Object Detection(Retina Net)
Focal Loss for Dense Object Detection Intro 这又是一篇与何凯明大神有关的作品,文章主要解决了one-stage网络识别率普遍低于two-stage网络的问题 ...
- 论文笔记:Ten years of pedestrian detection, what have we learned?
最近正在研究行人检测,学习了一篇2014年发表在ECCV上的一篇综述性的文章,是对行人检测过去十年的一个回顾,从dataset,main approaches的角度分析了近10年的40多篇论文提出的方 ...
随机推荐
- Daily in Ipin
Friday, October 23 1. [道高一尺,墙高一丈:互联网封锁是如何升级的] Monday, October 12 1. 晕死,忘了ubuntu的登录密码,鼓捣了半个小时,终于成功进入系 ...
- DevOps - 构建本地开发环境
1 - 构建个人本地开发环境 在个人计算机中搭建一个精简版的.与生产环境基本一致的本地开发环境,既不会占用团队公共环境的资源,也可以缩短等待时间,从整体上提高效率. 本地开发环境的适用场景: 从应用程 ...
- GB、GBDT、XGboost理解
GBDT和xgboost在竞赛和工业界使用都非常频繁,能有效的应用到分类.回归.排序问题,虽然使用起来不难,但是要能完整的理解还是有一点麻烦的.本文尝试一步一步梳理GB.GBDT.xgboost,它们 ...
- D3 GEO应用专题(一):绘制旋转的3D地球
https://gallery.echartsjs.com/explore.html#sort=rank~timeframe=all~author=all 雷达图 https://blog.csdn. ...
- android简易计算器
activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...
- Linux文件属性之用户和组基础知识介绍
一.Linux多用户多任务介绍 Linux/Unix 是一个多用户.多任务的操作系统:在讲Linux账号及账号组管理之前,我们先简单了解多用户.多任务操作系统的基本概念. 1.1Linux单用户多任务 ...
- tinymce 中我输入的内容 清空问题
<tinymce v-model="formItem.hDtContent" ref="content" @accessory="handlea ...
- MySQL+navicat-1064 Error解决方案
MySQL+navicat-1064 Error解决方案 错误 #1064 - You have an error in your SQL syntax; check the manual that ...
- vue中关于checkbox数据绑定v-model指令说明
vue.js为开发者提供了很多便利的指令,其中v-model用于表单的数据绑定很常见, 下面是最常见的例子: <div id='myApp'> <input type="c ...
- vue axios拦截跳转
第一步:添加需要拦截的页面 { path: '/control', name: 'Control', meta: { requireAuth: true }, 第二步:页面拦截 router.befo ...