FoveaBox (CVPR, 2019)

论文: FoveaBox: Beyond Anchor-based Object Detector
作者: Tao Kong1 Fuchun Sun1 Huaping Liu1 Yuning Jiang2 Jianbo Shi3
机构: 1Department of Computer Science and Technology, Tsinghua University, Beijing National Research Center for Information Science and Technology (BNRist) 2ByteDance AI Lab 3University of Pennsylvania

摘要

作者提出了一个精确、灵活和 completely anchor-free 的目标检测框架 FoveaBox。虽然几乎所有 sota 对象检测器都使用预定义的 anchor 来枚举可能的位置、尺寸和纵横比来搜索对象,但是它们的性能和泛化能力也受到 anchor 自身设计的限制。相反,FoveaBox 直接学习目标存在的可能性和无需借鉴 anchor 的边界框坐标。这是通过两点来实现的:

  1. 预测物体存在可能性的基于类别的语义映射(predicting category-sensitive semantic maps for the object existing possibility)
  2. 为每个可能包含对象的位置生成类别无关的边界框(producing category-agnostic bounding box for each position that potentially contains an object)
    目标 box 的尺度与每个输入图像的特征金字塔表征相关联。
    Without bells and whistles,FoveaBox在标准的COCO检测基准上实现了 SOTA 的 One-stage 性能42.1 AP。特别是对于任意宽高比的目标,与基于锚点的探测器相比,FoveaBox带来了显著的改进。 更令人惊讶的是,当它受到拉伸过的测试图像的挑战时,FoveaBox对 bounding box 形状变化的分布具有很强的鲁棒性和泛化能力。

Introduction

目标检测需要解决两个主要任务:识别和定位。给定任意图像,目标检测系统需要确定是否存在来自预定义类别的语义对象实例,如果存在,则返回空间位置和范围。为了将定位功能添加到通用对象检测系统中,滑动窗口方法多年来一直是[25][7]的首选方法。
RCNN, FPN, 略…

但是,使用 anchor 或(候选框)有一些缺点:

  • 首先, anchor 引入了设计选择的 额外超参数。在设计 anchor 时,最重要的因素之一是 anchor 能够覆盖目标位置空间的密集程度。为了获得良好的召回率,anchor 是根据训练/验证集计算的统计数据精心设计的。
  • 其次,基于特定数据集的一种设计选择并不总是适用于其他应用,这损害了通用性。 例如,anchor 是方形的用于人脸检测。而行人检测则需要更多的高桩形式的 anchor。
  • 第三,由于在图像中有大量的候选对象位置定期采样,密集的对象检测器通常依赖有效的技术来处理面临的前-后台类不平衡挑战。

MetaAnchor
Guided-Anchoring

FoveaBox is motivated from the fovea of human eyes: the center of the vision field (object) is with the highest visual acuity.

FoveaBox联合预测对象的中心区域可能存在的位置以及每个有效位置的边界框。多亏了特征金字塔表示,不同尺度的物体可以自然的从多个层次的特征中检测出来.

Related Work

Classic Object Detectors: DPM, HOG, SIFT

Modern Object Detectors: RCNN, RPN, SSD, YOLO

FoveaBox

FoveaBox 是一个单一的、统一的网络,由一个主干网络和两个负责特定任务的子网络组成。backbone 负责计算整个输入图像上的卷积特征图,是一个现成的卷积网络。第一个 subnet 会对 backbone 的输出逐像素进行分类;第二个 subnet 在相应的位置上执行 bounding box prediction。虽然这些组件的细节有许多可能的选择,但为了简单和公平的比较,作者采用了RetinaNet的设计[28]。

Feature Pyramid Network Backbone

作者采用特征金字塔网络(FPN)[27]作为后续检测的 backbone network。一般来说,FPN使用自顶向下的体系结构和横向连接,从单尺度的输入图像中构建网络内的特征金字塔。金字塔的每一层都可以用来探测不同尺度的物体。作者构造一个金字塔,其 level 为 ${P_l}, l = 3,4,···,7,$ 其中 $l$ 表示金字塔级别。$P_l$ 的分辨率是输入图像的 $1/2^l$。所有金字塔级别都有 $C = 256$ 通道。

Scale Assignment

虽然作者的目标是预测目标物体的边界,但由于物体的大规模形状变化,直接预测这些数字并不稳定。 相反,作者 根据特征金字塔等级的数量将对象的比例划分到若干个 bins 中去。 每个金字塔的金字塔等级 $P_3$ 到 $P_7$ 的基本面积分别为 $32^2$ 到 $512^2$。 因此,对于级别 $P_l$,基本面积 $S_l$ 由下面的公式计算得到:

类似于使用 $C4$ 作为单尺度特征图的基于ResNet的 Faster R-CNN系统,作者将 $S_0$ 设置为 16 (也就是 $4^2$). 在FoveaBox中,每个特征金字塔会学习响应特定尺度的对象。 金字塔等级 $l$ 的目标框的有效比例范围计算为

其中 $\eta$ 是根据经验设置的,以控制每个金字塔的比例范围。在训练过程中忽略不在相应尺度范围内的目标对象。注意,一个对象可能被网络的多个金字塔检测到,这与以前只将对象映射到一个特征金字塔的做法不同(FPN, MaskRCNN).

Object Fovea

金字塔形 heatmap 的每组输出都有 $K$ 个通道,其中 $K$ 是类别数,尺寸为 $H×W$ (图4)。 每个通道都是一个二进制掩码,表示类的可能性。 给出一个 gt box,表示为$(x1,y1,x2,y2)$。作者首先将该框映射到步幅为 $2^l$ 的目标特征金字塔 $P_l$ 上:

FoveaBox%2Ffig4.jpg

score map 上四边形的 positive area(fovea) 定义为原始四边形的缩小版(见图3)。$R^{pos} = (x_1’’, y_1’’, x_2’’, y_2’’)$

FoveaBox%2Ffig3.jpg

其中 $\sigma_1$ 是收缩因子。 在训练的时候, positive area 内的每个 cell 都用相应的目标类标签进行标注以进行训练。 对于负样本的定义,作者引入另一个缩小因子 $\sigma_2$ 并使用等式(4)生成 $R^{neg}$。negative area 是整个 feature map 中不包括 $R^{neg}$ 的区域(注意, 这里没有写错, 通常 $R^{neg}$ 会比 $R^{pos}$ 大一圈, 而除了这两处之外的其他地方, 皆认为是 background, 即负样本)。 如果单元格未分配,则在训练期间将忽略该单元格。 positive area 通常占整个特征图的一小部分,因此作者使用Focal Loss [28]来训练该分支的 target $L{cls}$。

Box Prediction

object fovea 只编码目标物体存在的可能性。要确定位置,模型必须预测每个潜在实例的边界框。每个 ground-truth 边界框都以 $G = (x1, y1, x2, y2)$ 的方式指定。作者的 目标是学习一个 transformation, 它可以将 feature maps 中在 cell $(x, y)$ 处的网络 localization outputs $(t_{x1}, t_{y1}, t_{x2}, t_{y2})$ 映射到 ground-truth box $G$:

上式中 $z = \sqrt{S_l}$ 是将输出空间投影到以1为中心的空间的归一化因子,使得目标的学习更加敏捷和稳定. 该函数首先将坐标(x, y)映射到输入图像,然后计算投影坐标与 $G$ 之间的归一化偏移量。最后利用对数空间函数对目标进行正则化。

为简便起见,作者采用广泛使用的 Smooth L1损失[40]训练 box prediction $L_{box}$。优化目标后,作者可以在输出特征图上为每个 positive cell $(x, y)$ 生成 bounding box。作者注意到,在现代深度学习框架中,通过 element-wise layer 可以很容易地实现 Eq.(5)和 inverse transformation。

Optimization

synchronized SGD
learning rate: 0.005, 180k, 240k, 缩小10倍
Weight decay: 0.0001
momentum: 0.9
standard horizontal image flipping, random aspect ratio jittering.
$\sigma_1 = 0.3$, $\sigma_2 = 0.4$

Inference

在推理过程中,作者首先使用0.05的置信阈值来过滤掉低置信值的预测。然后,作者从每个预测层中选择前1000个 scoring box。然后,对 每个类 分别应用阈值为0.5的非最大抑制(non-maximum suppression, NMS)。最后,为每个图像选择前100个 scoring predictions。这个推理设置与Detectron基线[13]完全相同。尽管有更智能的方法来执行后处理,如bbox voting[10]、Soft-NMS[2]或 test-time image augmentations,为了保持简单性并与基线模型进行公平比较,作者这里不使用这些技巧。

Experiments

Ablation Study

Various anchor densities and FoveaBox

基于 anchor 的检测系统中最重要的设计因素之一是它如何密集地覆盖可能的图像框的空间。 由于基于 anchor 的探测器使用固定的采样网格,在这些方法中实现高覆盖率的主要方法是在每个空间位置使用多个 anchor 来覆盖各种尺度和纵横比的框。可以预期,当在每个位置上附加更密集的 anchor 时,作者总能获得更好的性能。为了验证这一假设,作者枚举了 RetinaNet 中每个空间位置和每个金字塔等级使用的比例和纵横比 anchor 的数量,包括每个位置的单个方形 anchor 到每个位置 12个 anchor, 如表 1(a) 所示。 当增加超过 6~9 个 anchor 后模型并没有显示出进一步的收益。 性能或者说密集程度的饱和意味着手工制作的、密度过大的 anchor 没有优势。

FoveaBox%2Ftab1.jpg

FoveaBox%2Ffig1.jpg

过于密集的 anchor 不仅会增加 前景-背景 的优化难度,而且还可能导致模糊位置定义问题。 对于每个输出空间的 location 来说,其 anchors 的标签根据与 GT 的 IoU 值定义。 其中,有一些 anchor 被定义为 positive samples,而另一些则被定义为 negative samples。 但是,它们共享这相同的 feature maps。因此分类器不仅需要区分不同位置的样本,还需要在同一位置区分不同的 anchor。

相比之下,FoveaBox 会明确预测每个位置的一个目标,并且其性能不比最好的 anchor-based 模型差。 target 的标签由它是否在物体的边界框内定义。 与 anchor-based 的方案相比,FoveaBox 具有几个优点:

  1. 由于作者在每个位置只会预测一个目标,因此输出空间已减少到 anchor based 方法的 $1/A$,其中A是每个位置的 anchor 数量。由于 前景-背景 的分类难度已经减轻,因此更容易优化模型。
  2. 没有位置定义模棱两可的问题,优化的目标更为直接
  3. FoveaBox 在使用上更灵活,因为作者不需要认为设计 anchor 来获得相对更好的结果

Analysis of Scale Assignment

在公式(2)中, $\eta$ 控制了每一个金字塔层级的尺度匹配范围. 当 $\eta=\sqrt 2$ 时,物体的尺度会被划分为 非重叠 的区间,每个区间由相应的特征金字塔进行预测。 随着 $\eta$ 的增加,每个金字塔都会响应更多的物体尺度, 这就使得同一个尺度可能会被不同的金字塔层级进行检测。 表2显示了 $\eta$ 最终检测性能的影响。(在本文的实验中, 作者使用 $\eta = 2$)

FoveaBox%2Ftab2.jpg

FoveaBox is more robust to box distributions

与传统的预定义 anchor 策略不同,FoveaBox 的主要优点之一是对边界框预测的鲁棒性。 为了验证这一点,作者进行了两个实验来比较不同方法的定位性能。

在第一个实验中,作者根据 GT 的宽高比将验证集中的 boxes 划分成三组, GT 宽高比为 $U={u_i= \min(\frac{h_i}{w_i},\frac{w_i}{h_i})}, i = 1,···,N$, 其中 $N$ 是数据集中的实例数量。作者在不同的长宽比阈值下比较 FoveaBox 和 RetinaNet, 如表 1(b) 所示。 这里*表示训练模型的时候会使用 aspect ratio jittering。作者看到,当 $u$ 很低时,两种方法都能获得最佳性能。 虽然 FoveaBox 在 $u$ 增加时也会降低性能,但它比 anchor free 的 RetinaNet 要好得多。

为了进一步验证不同方法的边界框的鲁棒性,作者手动拉伸图像以及验证集中的标注,并查看不同检测器的行为。 图5显示了在不同 $h/w$ 拉伸阈值下的 localization 性能。在 $h/w=1$ 的评估标准下,两个检测器之间的性能差距相对较小。 随着作者增加拉伸阈值,差距开始增大。 具体来说,当将 $h/w$ 拉伸3倍时,FoveaBox获得21.3的AP,比对应的 RetinaNet* 高3.7分。

FoveaBox%2Ffig5.jpg

anchor based 方法依赖于具有 anchor reference 的 box regression 来生成最终边界框。 在实践中,回归器是针对 positive anchor 进行训练的,这将在预测更多任意形状的目标时损害其泛化性。 在FoveaBox中,每个预测位置与特定参考形状无关,它会直接预测目标的 GT Box。 由于FoveaBox允许生成任意宽高比的 box,因此它能够更好地捕获那些极高或极宽的物体。 具体可参见图6中的一些示例。

FoveaBox%2Ffig6.jpg

Per-class difference

图2显示了 FoveaBox 和 RetinaNet 每一类的 AP 差异。 它们都具有 ResNet-50-FPN BackBone 和 800 的输入尺寸。 纵轴代表 $AP_{FoveaBox} - AP_{RetinaNet}$ 的值。 FoveaBox 对于大多数类都能获得一定改进,特别是对于边界框更随意的类, 例如对于类牙刷,叉子,运动球,滑雪板,领带和火车等,AP的改进都大于 5 个点。

FoveaBox%2Ffig2.jpg

Generating high-quality region proposals

将 classification target 更改为与 class-agnostic head 是非常直截的,并且可以生成 region proposals。 作者将 proposal performance 与 RPN[40]进行比较,并使用在 COCO minival 上生成不同数量的 proposals 集合来评估平均召回率(AR),如表1(c)所示。

令人惊讶的是,作者的方法在所有标准中都大大优于RPN baseline。 具体来说,在前100个 region proposals 中,FoveaBox获得53.0 AR,高出RPN 8.5分。 这证实了作者的模型在生成高质量 region proposals 方面的能力。

FoveaBox%2Ffig7.jpg

Across model depth and scale

表3显示了FoveaBox利用不同的 backbone 和 input resolutions 的 AP 性能。Inference settings 与RetinaNet完全相同,速度也与相应的 baseline 相同。

FoveaBox%2Ftab3.jpg

如表3所示,FoveaBox 对 RetinaNet baseline 始终提高提升 1~2分。 并且这种提升来自与所有尺度(S, M, L)的物体。

Main Results

作者将FoveaBox与表4中目标检测 SOTA 的方法进行了比较。作者模型的所有实例都优于以前的模型的 baseline variants。 表4中的第一组 detectors 是 two-stage detectors,第二组是 one-stage detectors,最后一组是 FoveaBox detector。 在所有评估指标下,FoveaBox 优于 ResNet-101 backbone 下的所有 one-stage detector。 这包括最近的 CornerNet。 FoveaBox 也优于大多数 two-stage detector,包括 FPN 和 Mask R-CNN 。

FoveaBox%2Ftab4.jpg

two-stage detector 依赖于 region-wise sub-networks 来进一步对 sparse region proposals 进行分类。 Cascade R-CNN 将 two-stage 方案扩展到多个 stage 以进一步 refine region。 由于 FoveaBox 还可以通过将模型 head 改为 class agnostic scheme(表1(c))来生成 region proposals,作者相信它可以进一步提高 two-stage detector 的性能,不过这超出了本文的重点, 故暂时不做讨论.

More Discussions to Prior Works

Score Mask for Text Detection: score mask 技术已经广泛应用于文本检测领域。 这些工作通常利用完全卷积网络[32]来预测目标场景文本和四边形形状的 existence。 与场景文本检测相比,通用对象检测更具挑战性,因为它面临更多的遮挡,多类别分类和规模问题。简单地将文本检测方法应用于通用对象检测通常会得到较差的性能。

Guided-Anchoring: 它共同预测了可能存在感兴趣目标中心的位置以及以相应位置为中心的尺度和宽高比。 如果 $(x,y)$ 不在目标中心,则检测到的框不是最佳框。 Guided-Anchoring 依靠中心点来提供最佳预测。 相比之下,FoveaBox 预测每个前景位置的对象(左,上,右,下)边界,这更加健壮。

FSAF: 这是与 FoveaBox 同时期的工作。 它还尝试直接预测目标对象的边界框。 FoveaBox和FSAF之间的区别是:

  1. FSAF依靠在线特征选择模块为每个实例和锚点选择合适的特征。 在FoveaBox中,特定尺度的实例同时由相邻的金字塔进行优化, 具体层级有方程(2)确定,这更加简单和稳健。
  2. 为了优化 box boundary,FSAF 利用 IoU-Loss [47]来最大化 predicted box 和 GT 之间的 IoU。在 FoveaBox中,作者使用 Smooth L1 损失直接预测四个边界,这更简单直接。
  3. 与 FSAF 相比,FoveaBox显示出更好的性能,如表5所示.

FoveaBox%2Ftab5.jpg

CornerNet: CornerNet 通过左上角和右下角的关键点对来检测对象。 CornerNet 的关键步骤是 识别哪些关键点属于同一个实例并正确分组。 相反,在 FoveaBox 中, 实例的类和边界框关联在一起。 作者直接预测框和类,不需要任何分组方案来分隔不同的实例。

Conclusion

anchor 的数量并不是越多越好, 虽然直观上来说, anchor 越多时, 可以覆盖越好的 gt box, 但是, 当 anchor 的数量过多时, 一方面由于每一个点上产生的 anchor 实际上共享了一块相似的特征, 但是这些 anchor 有一部分作为正样本, 而另一部分作为负样本, 因此, 对于神经网络来说, 他要通过不断学习来区分这些样本, 不仅如此, 他还要将这些样本与其他点产生的 anchor 区分开, 虽然 anchor 数量的增多, 学习的难度也就慢慢增多, 最终甚至会出现掉点的现象, 个人任务不会掉的特别多, 因为毕竟更多的 anchor 可以覆盖更多的局部最优解. 但是 anchor 会导致计算量的上升, 因此不建议设置过多 anchor.

FoveaBox 的优势(就 anchor 来说): (1) 神经网络的输出维度大大降低(1/A), 学习起来相对简单直接; (2) 不会出现 anchor 之间互相矛盾的现象 (3) 没有了 anchor 后, 检测网络变的更加简单直接, 扩展性更好