论文地址:https://arxiv.org/abs/1904.03797

Abstract

本文提出了一个准确、灵活且完全没用 anchor 的目标检测框架 — FoveaBox。目前几乎全部的目标检测器都使用了提前定义好的 anchors 来枚举可能的位置、尺度和宽高比,这就导致检测器的性能和泛化能力会受 anchor 制约。而 FoveaBox 无需 anchors 帮忙,就可以直接学习目标存在的概率和边框的坐标。方式如下:(a) 对于目标存在的概率,它将预测类别-敏感语义图;(b) 对于每个可能包含目标的位置,它会输出一个与类别无关的边框信息。在每张输入图像上,边框的尺度会自然地与特征金字塔联系起来。

在 COCO 检测基准上,FoveaBox 取得了 state of the art 的单模型性能 — 42.1 的 AP。尤其对于高宽比很随意的物体,相较于基于 anchor 的方法,FoveaBox 能带来显著的提升。更令人眼前一亮的是,面对拉伸的测试图像,边框形状的分布发生了改变,FoveaBox 也展示出了极强的鲁棒性和泛化能力。

1. Introduction

目标检测需要解决两个任务:识别和定位。给定任意一张图片,目标检测方法需要判断图片中是否存在我们所要的类别物体的实例,然后如果存在,就返回其物体的空间坐标。为了在通用的目标检测系统中加入定位的功能,人们一般都会使用滑动窗的方法。

FoveaBox: Beyond Anchor-based Object Detect论文学习

深度学习技术可以从数据中自动地学习特征表示,R-CNN 和 Fast R-CNN 对每张图片都会使用上千个与类别无关的候选区域,降低搜索空间。后来,候选区域生成步骤被基于 anchor 的 RPN 取代。从那以后,anchor boxes 就成为了目标检测方法中必不可少的组成部分。简言之,anchor 方法就是将边框空间(包括位置、尺度、宽高比)划分出一些离散的 bins,然后在对应的 bin 里面去优化这些物体框。大多数的 SOTA 检测器都依赖于这些 anchor boxes,枚举出物体可能的位置、尺度和宽高比。Anchors 对于双阶段检测器(Faster R-CNN、FPN)而言提供了边框回归的参考与分类的候选框,对于单阶段检测器(SSD、RetinaNet)则代表最终的边框。Anchor boxes 可以看作为一个特征共享的滑动窗机制,覆盖尽可能多的目标位置。但是,使用 anchor boxes 有若干个缺点。

  • 首先,anchor boxes 引入了额外的超参数。设计 anchor boxes 的一个最重要的要素就是它覆盖目标位置空间的密集程度。为了提高召回率,我们要根据训练/验证集上得到的统计数字仔细地设计 anchor boxes。
  • 其次,在一个数据集上得到的 anchor boxes,要想用于另一个数据集,往往就不太适用,这就损害了泛化能力。例如,在人脸识别中,anchor 通常是正方形的,而行人检测中,anchor 往往就是竖长形的。
  • 第三,由于一张图片中采样的目标物体候选位置太多了,目标检测器就要解决前景-背景类别不均衡的问题。

改进 anchor 生成步骤的一个选项就是让它更加灵活。学者最近提出了一些有效的改进 anchor boxes 性能的方法。在 MetaAnchor 中,anchor 函数是从任意设计的 prior boxes 中动态产生的。Guided-Anchoring 方法共同地预测物体中心的可能位置以及尺度和宽高比。但是,这些工作仍然需要对尺度和宽高比进行枚举。在 MetaAnchor中,anchor函数的输入是正常采样的 anchors,它们的宽高比和尺度不同。在 Guided-Anchoring 中,作者假设每个 anchor 的中心位置是固定的,然后采样多对 (w,h)(w,h) 来近似得到最优的形状。

FoveaBox: Beyond Anchor-based Object Detect论文学习

但是,人类的视觉系统并不需要预先定义的形状模板,给定了视觉皮层图,它就能识别物体的位置以及边框。换句话说,我们人类无需枚举出候选边框,就能自然地识别视觉场景中的物体。受此启发,我们就有了一个问题,*anchor box 方法是搜索物体的最佳途径吗?*如果回答是no,那我们能不用anchor或候选边框,设计出一个准确的目标检测框架吗? 如果不用 anchor boxes,人们可能会认为,要想达到同样的精度,那我们就需要一个非常复杂的方法。但是,这篇论文就展示了一个非常简单、灵活,而无需候选框的方法,它可以和任何 SOTA 的目标检测方法相媲美。

本文中,作者提出了一个完全无需 anchor 的目标检测方法 — FoveaBox。FoveaBox 受到人眼视网膜的中央凹启发:视野的中心(物体)有着最高的视觉敏锐度。FoveaBox 共同预测物体中心区域的可能位置,以及每个有效位置的边框。由于特征金字塔,不同尺度的物体就可以在特征的不同层级上自然地检测到。为了证明该检测方法的有效性,作者将FPN和检测 head 结合起来,形成最终的 FoveaBox。FoveaBox 在 COCO 目标检测任务上取得了 SOTA 的成绩。其中基于 ResNeXt-101-FPN 主干网络的FoveaNet单模型在 COCO test-dev 上取得了 42.1 的 AP,超过了之前绝大多数的基于 anchor 的单模型结果。

由于 FoveaBox 在训练和推理阶段不依赖于任何默认的 anchors,它对边框的分布更加鲁棒。为了证明这点,作者将验证集的图像和标签进行了拉长,将 FoveaBox 的鲁棒性和之前基于 anchor 的方法进行比较,发现 FoveaBox 要比基于 anchor 的方法领先许多。作者认为,FoveaBox 训练和推理非常简洁、灵活、精度高,有助于未来目标检测领域的发展。

2. Related Work

**经典目标检测:**在深度学习之前,常用的检测系统都依赖于 HOG、 SIFT等特征的组合。DPM 及其变体将目标检测器扩展至更加通用的物体类别,多年保持领先地位。在经典的目标检测框架中,滑动窗方法是搜索物体的非常优异的方法。

**现代目标检测器:**现代目标检测器通常分为两类:双阶段、候选框驱动的检测器,和单阶段、无需候选框的检测方法。对于双阶段检测器,第一个阶段生成一组稀疏的目标候选框,第二个阶段对这些候选框进行分类,并以滑动窗的方式优化坐标位置。R-CNN 第一个展示了该流程的有效性,并在随后的双阶段方法中被广泛应用。在 Faster R-CNN 中,第一个阶段(RPN)在每个预先定义的 anchor 中 ,通过一个轻量级网络同时预测物体的边框和物体得分。后来人们又尝试了多个方法来提升其检测性能,包括特征金字塔、多尺度和物体关系等。

和双阶段方法相比,单阶段方法省去了物体候选框生成步骤,直接预测边框位置和得分。大多数的单阶段检测器都依赖 anchor boxes,枚举目标物体的可能位置(SSD、DSSD、YOLOv2/v3、RetinaNet)。在 CornerNet 中,作者用一对关键点来表示物体边框。CornerNet 采用了 Associative Embedding 方法,将不同的实例分开。

3. FoveaBox

FoveaBox 非常简洁、统一,由主干网络和两个子网络构成。主干网络负责在一整张输入图片上计算卷积特征图,用的是现成的网络。第一个子网络在主干网络的输出之上,进行逐像素点的分类。第二个子网络对相应的位置进行边框预测。尽管在细节实现上有许多选择,作者出于简洁性和公平性,使用了 RetinaNet 的设计。

3.1 FPN Backbone

作者采用了 FPN 作为主干网络。通常,FPN 通过 top-down 结构和侧面连接从单尺度输入中构建一个网络内的特征金字塔。金字塔的每一层可以用于检测不同尺度的物体。作者构建的金字塔有 {Pl},l=3,4,...,7\{P_l\}, l=3,4,...,7,其中ll表示金字塔的层级。PlP_l的分辨率是输入的1/2l1/2^l大小。所有的金字塔层级都有 C=256C=256个通道。

FoveaBox: Beyond Anchor-based Object Detect论文学习

3.2 Scale Assignment

尽管我们的目的是预测物体的边界,但由于这些物体的尺度差异很大,直接预测这些值并不稳定。作者根据特征金字塔层级的个数,将物体的尺度划分为若干个 bins。每个金字塔都有一个基本的面积区间,从金字塔层级P3P_3P7P_7分别为32232^25122512^2。对于层级PlP_l,其面积大小SlS_l计算如下:

Sl=4lS0S_l = 4^l \cdot S_0

和基于 ResNet 的 Faster R-CNN 类似,将 C4C4 用作单尺度特征图,作者将S0S_0设为16。在 FoveaBox中,每个特征金字塔层级学习特定尺度的物体。对于金字塔层级ll,目标边框的有效尺度范围是:

[Sl/η2,Slη2][S_l / \eta^2, S_l \cdot \eta^2]

η\eta 由经验设定,控制每个金字塔层级的尺度范围。在训练过程中,我们忽略没有对应尺度范围的目标物体。需要注意的是,一个物体可能会被多个金字塔层级检测到,这和之前的操作不同,它们仅将物体映射到一个特征金字塔层级。

3.3 Object Fovea

FoveaBox: Beyond Anchor-based Object Detect论文学习

金字塔状的热图中每个输出有KK个通道,KK是类别的个数,输出的大小是H×WH\times W(如图4)。每一个通道是一个二元mask,表示一个类别的概率。给定一个有效的 ground-truth 边框,用 (x1,y1,x2,y2)(x_1, y_1, x_2, y_2) 表示。我们首先将这个边框映射到目标特征金字塔层级PlP_l上,步长为2l2^l

x1=x12l,y1=y12lx'_1 = \frac{x_1}{2^l}, y'_1 = \frac{y_1}{2^l}
x2=x22l,y2=y22lx'_2 = \frac{x_2}{2^l}, y'_2 = \frac{y_2}{2^l}
cx=x1+0.5(x2x1)c'_x = x'_1 + 0.5(x'_2 - x'_1)
cy=y1+0.5(y2y1)c'_y = y'_1 + 0.5(y'_2 - y'_1)

得分图四边形内的 positive area (fovea) Rpos=(x1,y1,x2,y2)R^{pos} = (x''_1, y''_1, x''_2, y''_2) 大致就是原图的缩小版本(如图3)。

x1=cx0.5(x2x1)σ1x''_1 = c'_x - 0.5(x'_2 - x'_1) \sigma_1
y1=cy0.5(y2y1)σ1y''_1 = c'_y - 0.5(y'_2 - y'_1) \sigma_1
x2=cx+0.5(x2x1)σ1x''_2 = c'_x + 0.5(x'_2 - x'_1) \sigma_1
y2=cy+0.5(y2y1)σ1y''_2 = c'_y + 0.5(y'_2 - y'_1) \sigma_1

其中σ\sigma是缩小因子。Positive area 里面的每一个 cell 都标注为相应的目标类别,用于训练。为了定义负样本,作者引入了另一个缩小因子σ2\sigma_2 ,用上述等式产生 RnegR^{neg}。Negative area 指特征图上,除了 RposR^{pos}所有的区域。如果一个 cell 没有标签,则在训练中会被忽略。Postive area 通常仅占特征图中的很小一部分,所以作者使用了 Focal loss 来训练LclsL_{cls}分支。

3.4 Box Prediction

Object fovea 只编码了目标物体存在的可能性。为了计算其位置,模型必须对每个潜在的实例预测边框。每个 ground-truth 边框用 G=(x1,y1,x2,y2)G=(x_1,y_1,x_2,y_2)来表示。我们的目的是学习一种变换,将特征图 cell (x,y)(x,y)处的网络位置输出(tx1,ty1,tx2,ty2)(t_{x_1}, t_{y_1}, t_{x_2}, t_{y_2}) 映射到 ground-truth 边框 G:

tx1=log2l(x+0.5)x1zt_{x_1} = log \frac{2^l (x+0.5) - x_1}{z}
ty1=log2l(y+0.5)y1zt_{y_1} = log \frac{2^l (y+0.5) - y_1}{z}
tx2=logx22l(x+0.5)zt_{x_2} = log \frac{x_2 - 2^l (x+0.5)}{z}
ty2=logy22l(y+0.5)zt_{y_2} = log \frac{y_2 - 2^l (y+0.5)}{z}

其中,z=Slz=\sqrt{S_l} 是归一化因子,将输出空间映射到1的中心位置附近,让目标的学习更加简单和稳定。这个函数首先将坐标位置(x,y)(x,y)映射到输入图像上,然后计算映射后坐标和G之间的归一化后的偏移量。最后,用 log 函数对目标进行正则化。

为了简单点,作者采用了常用的 smooth L1L_1 损失函数来训练边框预测 LboxL_{box}。目标函数优化之后,我们就可以产生每个 positive cell (x,y)(x,y) 的边框边界。上述等式以及反向变换可以在深度学习框架中通过 element-wise 层轻易实现。

3.5 Optimization

FoveaBox 通过synchronized SGD 训练,使用了4个 GPU,minibatch 有8张图片(每个 GPU 跑2张图片)。所有的模型都训练了 27万个 iterations,初始学习率为0.005,在第18万次和24万次时分别除以10。Weight decay 为0.0001,momentum 为0.9。除了标准的水平图像翻转之外,作者也用了随机宽高比 jittering,来降低过拟合。在定义RposR^{pos}RnegR^{neg}时,σ1=0.4,σ2=0.4\sigma_1=0.4, \sigma_2=0.4。在边框训练时,RnegR^{neg}中的每个 cell 都用相应的位置目标来标注。

3.6 Inference

在推理时,作者首先使用了置信度阈值为 0.05,过滤掉低置信度的预测。然后,在每个预测层上,选择得分最高的1000个边框。接下来,对每个类别使用阈值为 0.5 的 NMS。最后,在每张图片上,选择得分最高的100个预测。这个设定和 Detectron 基线设定一致。尽管有更好的后处理方法,如 bbox voting,Soft NMS 或测试时图像增强,作者出于简洁性和公平比较考虑,没有使用这些 tricks。

相关文章:

  • 2022-12-23
  • 2021-12-14
  • 2021-04-25
  • 2021-06-24
  • 2021-10-18
  • 2021-10-02
  • 2021-12-31
  • 2021-08-07
猜你喜欢
  • 2022-01-22
  • 2021-08-09
  • 2021-08-23
  • 2022-01-05
  • 2021-04-21
  • 2021-07-25
相关资源
相似解决方案