论文: FoveaBox: Beyond Anchor-based Object Detector

代码: https://github.com/taokong/FoveaBox

作者: Tao Kong, Fuchun Sun, Huaping Liu, Yuning Jiang, Jianbo Shi

一、FoveaBox的提出

大多数state-of-the-art的检测器依赖于anchor boxes来枚举目标对象的可能位置、尺寸和宽高比。在two-stage的检测器中,anchors是预测候选框的回归参考;在one-stage的检测器中,anchors是最终bouding boxes的参考。但是它们的性能和泛化能力受限于anchor boxes的设计。其缺点主要体现在:

  1. anchor boxes引入了额外的超参数。在设计anchor boxes时的一个重要因素是它可以覆盖多少的对象位置空间。
  2. 在特定数据集上设计的anchor boxes并不总是适用于其它的应用,这影响了泛化能力。
  3. 会造成背景-前景的不均衡性

作者考虑到我们人类可以很自然地识别视觉场景中的物体,不需要枚举候选框。受此启发,一个直觉性的问题是,anchor boxes方案是引导物体搜索的最佳方法吗? 如果答案是否定的,我们能否设计出一个精确的不依赖于anchors或者candidate boxes的物体检测框架吗?

为此作者提出了FoveaBox,这是一个anchor-free的object detection框架。FoveaBox主要受人的眼睛的fovea的启发: 视野(对象)的中心具有最高的视敏度。 FoveaBox同时预测object的中心区域位置和在每个有效位置的边界框。

FoveaBox在训练和测试时不依赖于anchor,因此它对bouding boxes的分布更加鲁棒,而且相较于基于anchor的检测器,其泛化能力也更强。

二、FoveaBox的介绍

FoveaBox是一个简单、统一的网络,包括一个骨干网络和两个task-specific的子网络。骨干网络负责提取输入图像的特征。第一个子网络在骨干网络输出的特征图上进行逐像素的分类;第二个子网络在响应的位置进行bounding box的预测。 为了简洁性和公平的对比,这里采用了RetinaNet的设计, 如Figure 4所示。

2.1 Feature Pyramid Network Backbone and Scale Assignment

FoveaBox的骨干网络采取了ResNet(ResNeXt) + FPN, FPN的每一个level负责检测一定尺寸的物体。FoveaBox中构建了{Pl},l=3,4,5,6,7\lbrace P_l \rbrace, l = 3, 4, 5, 6, 7{Pl​},l=3,4,5,6,7的金字塔level。PlP_lPl​ level特征图的分辨率是输入图像的12l\frac{1}{2^l}2l1​。所有金字塔level具有256个通道。

尽管我们的目标是预测目标对象的边界,但是由于对象尺度变化较大,直接预测这些数字不稳定。作者根据特征金字塔的level的数量,将objects的尺寸划分为几个bins,

对于level PlP_lPl​,basic面积SlS_lSl​由以下公司计算
Sl=4l∗S0S_l = 4^l*S_0Sl​=4l∗S0​

S0S_0S0​设置为 16, 对于level lll 负责的尺寸范围是
[Sl/η2,Sl∗η2][S_l / \eta ^ 2, S_l * \eta ^ 2 ][Sl​/η2,Sl​∗η2]

η\etaη根据经验设置,来控制每一层金字塔的尺度范围,作者通过试验发现η=2\eta = 2η=2是一个最好的选择。

在训练时,不在相应尺寸范围的目标对象将会被忽略。要注意的是可能被网络的多个金字塔检测,这是不同于之前方法中只把物体映射到一层特征金字塔。

在这里简单了解一下这个区域范围的特征, lll层的上限是Sl∗η2=4l∗S0∗η2S_l * \eta ^ 2 = 4 ^ l * S_0 * \eta ^2Sl​∗η2=4l∗S0​∗η2, l+1l+1l+1层的下限是Sl+1/η2=4l+1∗S0/η2S_{l+1} / \eta ^ 2 = 4^{l+1} * S_0 / \eta ^ 2Sl+1​/η2=4l+1∗S0​/η2, 两者相除得到4/η44/\eta^44/η4,当η>2\eta > \sqrt2η>2​时,两者是有交集的。

当S0=16,η=2S_0 = 16, \eta = 2S0​=16,η=2时,level l=3,4,5,6,7l = 3, 4, 5, 6, 7l=3,4,5,6,7 的检测范围是
[162,642],[322,1282],[642,2562],[1282,5122],[2562,10242][16 ^ 2, 64 ^ 2], [32 ^ 2, 128 ^ 2], [64 ^ 2, 256^2], [128 ^ 2, 512 ^ 2], [256 ^ 2, 1024 ^2][162,642],[322,1282],[642,2562],[1282,5122],[2562,10242]

2.2 Object Fovea

在每一个level的特征图的分类输出的通道数是K个,即类别的数目。每一个通道是一个二值mask,表示它是该类的一个概率。

下面介绍object的fovea区域分类分支

给定输入图像中的一个ground-truth box的左上和右下角的点(x1,y1,x2,y2)(x_1, y_1, x_2, y_2)(x1​,y1​,x2​,y2​),我们首选将其映射到步长是2l2^l2l金字塔PlP_lPl​,

x1∗=x12l,y1∗=y12l,x2∗=x22l,y2∗=y22lx_1^* = \frac{x_1}{2^l}, y_1^* = \frac{y_1}{2^l}, x_2^* = \frac{x_2}{2^l}, y_2^* = \frac{y_2}{2^l}x1∗​=2lx1​​,y1∗​=2ly1​​,x2∗​=2lx2​​,y2∗​=2ly2​​

cx∗=x1∗+0.5(x2∗−x1∗),cy∗=y1∗+0.5(y2∗−y1∗)c_x^* = x_1^* + 0.5(x_2^* - x_1^*), c_y^* = y_1^* + 0.5(y_2^* - y_1^*)cx∗​=x1∗​+0.5(x2∗​−x1∗​),cy∗​=y1∗​+0.5(y2∗​−y1∗​)

这个物体的fovea(正样本)区域定义为Rpos=(x1∗∗,y1∗∗,x2∗∗,y2∗∗)R^{pos} = (x_1^{**}, y_1^{**}, x_2^{**}, y_2^{**})Rpos=(x1∗∗​,y1∗∗​,x2∗∗​,y2∗∗​), 由如下公式计算得到:

x1∗∗=cx∗−0.5(x2∗−x1∗)∗σ1x_1^{**} = c_x^* - 0.5(x_2^* - x_1^*)*\sigma_1x1∗∗​=cx∗​−0.5(x2∗​−x1∗​)∗σ1​
y1∗∗=cy∗−0.5(y2∗−y1∗)∗σ1y_1^{**} = c_y^* - 0.5(y_2^* - y_1^*)*\sigma_1y1∗∗​=cy∗​−0.5(y2∗​−y1∗​)∗σ1​
x2∗∗=cx∗+0.5(x2∗−x1∗)∗σ1x_2^{**} = c_x^* + 0.5(x_2^* - x_1^*)*\sigma_1x2∗∗​=cx∗​+0.5(x2∗​−x1∗​)∗σ1​
y1∗∗=cy∗−0.5(y2∗−y1∗)∗σ1y_1^{**} = c_y^* - 0.5(y_2^* - y_1^*)*\sigma_1y1∗∗​=cy∗​−0.5(y2∗​−y1∗​)∗σ1​

σ1\sigma_1σ1​是缩小系数,论文中设置为0.3。fovea区域内部的cell被赋予这个标签groud-truth box的标签

通过σ2\sigma_2σ2​产生RnegR^{neg}Rneg,论文中设置为0.4。负区域指的是特征图中除了Rneg的区域R^{neg}的区域Rneg的区域,如果一个cell既不是正样本,也不是负样本,在训练时将会忽略。由于正(fovea)区域在整个特征图中只占一小部分,所以这里使用Focal Loss来训练这个分支的分类误差。

2.3 Box Prediction

Object fovea仅编码对象目标存在的可能性,为例确定其位置,还需要对每一个潜在的实例预测bouding box。 对于任意一个ground-truth bounding box G=(x1,y1,x2,y2)G = (x_1, y_1, x_2, y_2)G=(x1​,y1​,x2​,y2​),我们的目标是使特征图(x, y)位置的网络输出(tx1,ty1,tx2,ty2)(t_{x1}, t_{y1}, t_{x2}, t_{y2})(tx1​,ty1​,tx2​,ty2​)通过变换可以映射到GGG。

tx1=log2l(x+0.5)−x1zt_{x1} = log\frac{2^l(x + 0.5) - x_1}{z}tx1​=logz2l(x+0.5)−x1​​
ty1=log2l(y+0.5)−y1zt_{y1} = log\frac{2^l(y + 0.5) - y_1}{z}ty1​=logz2l(y+0.5)−y1​​
tx2=logx2−2l(x+0.5)zt_{x2} = log\frac{x_2 - 2^l(x + 0.5)}{z}tx2​=logzx2​−2l(x+0.5)​
ty2=logy2−2l(y+0.5)zt_{y2} = log\frac{y_2 - 2^l(y + 0.5)}{z}ty2​=logzy2​−2l(y+0.5)​

z=Slz = \sqrt {S_l}z=Sl​​是将输出空间投影到以1为中心空间的归一化因子。论文中使用smooth L1 Loss训练预测框的误差。

对于bouding box的训练,我们将在Rneg内部的cell都参与训练,这与分类的训练是不同的。R^{neg}内部的cell都参与训练,这与分类的训练是不同的。Rneg内部的cell都参与训练,这与分类的训练是不同的。

2.4 Inference

在预测时作者采用了常规的方法,流程如下:

  • 首先使用0.05的confidence阈值过滤掉低的预测
  • 根据score选择top-1000的bboxes
  • 分别对每类使用NMS(阈值是0.5)
  • 对于每一张图像,根据score选择top-100的预测

三、FoveaBox的实验结果

四、FoveaBox的不足

五、疑惑

  • 金字塔的level 3, 4, 5, 6, 7是如何实现的? (待查看源码)
  • 在预测时选择top-100,之后呢?需要怎么处理这100个候选框呢?

FoveaBox(Beyond Anchor-based Object Detector) 学习笔记相关推荐

  1. Object C学习笔记22-#define 用法

    上一篇讲到了typedef 关键字的使用,可以参考文章 Object C 学习笔记--typedef用法 .而在c中还有另外一个很重要的关键字#define. 一. #define 简介 在C中利用预 ...

  2. Object C学习笔记12-集合

    Object C学习笔记12-集合 2014-03-08 17:25 by 贺臣, 262 阅读, 0 评论, 收藏, 编辑 这里讲到的集合是指Set集合,其实Array也是一种类型的集合.在Obje ...

  3. FoveaBox 超越anchor based检测框架

    目标检测系列文章 yolo v1原理:https://blog.csdn.net/cjnewstar111/article/details/94035842 yolo v2原理:https://blo ...

  4. 深入研读“ReDet: A Rotation-equivariant Detector for Aerial Object Detection”学习笔记

    ReDet: A Rotation-equivariant Detector for Aerial Object Detection Jiaming Han∗, Jian Ding∗, Nan Xue ...

  5. Object C学习笔记20-结构体

    在学习Object C中的过程中,关于struct的资料貌似非常少,查阅了C方面的资料总结了一些学习心得! 一. 定义结构 结构体是一种数据类型的组合和数据抽象.结构体的定义语法如下: struct ...

  6. Object C学习笔记11-数组

    在Object C也提供了类似C#中的Array数组对象,在Object C中使用NSArray 来创建数组:但是在Object C中NSArray 只能存放对象类型的指针,不能存放int,char, ...

  7. Object C学习笔记13-Dictionary字典

    通过Array数组和Set集合的学习和理解,可以想象得到Dictionary也分为两种情况了,那就是可变和不可变两种类型的.的确如此,在Object C中提供了两个字典类,分别为NSDictionar ...

  8. Object C学习笔记15-协议(protocol)

    在.NET中有接口的概念,接口主要用于定义规范,定义一个接口关键字使用interface.而在Object C 中@interface是用于定义一个类的,这个和.NET中有点差别.在Object C中 ...

  9. 物体检测Object Detection学习笔记(MXNet)(二)

    多尺度物体目标检测 锚框生成过多的问题 尺度 如何在MXNet中生成多尺度的锚框 总结 锚框生成过多的问题   上一节学习到,我们是基于生成的锚框来预测物体类别和偏移量,而且我们对于一张原始图片,对于 ...

  10. embed标签及object 标签学习笔记

    Embed embed标签 -- 定义网页中嵌入除图片外的多媒体 使用embed标签可以在网页中嵌入Flash,Mid,MP3等嵌入式内容 embed标签已经被符合标准的object标签代替. 属性: ...

最新文章

  1. 彩色条形码轻松解决盲人购物难题!无需对焦,识别速度快12倍,还能发出过敏警告...
  2. 把远程仓库的项目,clone到eclipse里面
  3. C#单例---饿汉式和懒汉式
  4. 用js实现鼠标点击爱心特效
  5. 凸集、凸函数、凸优化问题 概念关联
  6. LeetCode--5.最长回文子串(滑动窗口)
  7. 生命游戏c语言代码,c++生命游戏源码
  8. fanuc机器人码垛编程实例_两个很简单的FANUC系统CNC加工中心编程实例
  9. ios换肤思想,及工具类
  10. 大数据数据挖掘与云计算-认识大数据
  11. Leetcode 5773:插入后的最大值
  12. MP3音频解码详细过程(二)
  13. pika异步consumer简单使用
  14. ES文件浏览器ftp文件共享,通过电脑访问手机文件夹传输文件
  15. Xposed获取微信好友列表(通讯录),看看这是你要的详细吗
  16. 我读Saliency Filters cvpr 2012
  17. 5G/NR学习笔记:3GPP 38.211- Carrier Bandwith Part, BWP-载波带宽部分
  18. Java学习路线图,内附完整Java自学视频教程+工具经验
  19. luogu P4408 [NOI2003]逃学的小孩
  20. OSChina 周六乱弹 ——她穿裙子还没你好看呢

热门文章

  1. Vue+Element 表格打印
  2. 产品研发中存在的问题和缺陷
  3. 明天更美好,世界有你更精彩!
  4. 思科交换机接口配置trunk_Cisco交换机Trunk配置命令是什么?
  5. 【翻译】 Unity3D VR 教程:3.VR中的交互
  6. [Codeforces Round #428 DIV2E (CF839E)] Mother of Dragons
  7. 关于教程被人盗版出售的一些感想
  8. GitDown: 下载Github特定文件夹
  9. 三相并联功率因数校正matlab,基于并联技术的三相功率因数校正方法研究
  10. Python学习记录(小甲鱼C的课程)