RepPoint V2:将角点检测和前景热图引入纯回归目标检测算法,实现SOTA!

2020-07-22 10:10:09 浏览数 (1)

本文是由北大和微软亚洲研究院联合的工作,将RepPoints网络进行改进,对纯回归算法中引入了角点检测、前景热图获取等验证环节,刷新了Anchor-free网络的最新性能。

论文地址:https://arxiv.org/pdf/2007.08508.pdf

代码地址:https://github.com/Scalsol/RepPointsV2

验证和回归(Verification and regression)是神经网络中用于预测的两种通用方法。每种方法都有其各自的优势:验证更容易准确推断,回归更有效且适用于连续目标变量。因此,仔细组合它们以充分发挥其各自的优点通常是有益的。在本文中,采用了这种组合理念来改进最新的目标检测算法,尽管RepPoints算法提供了较高的性能,但它严重依赖于回归分支来进行目标的定位,因此仍有改进的余地。因此本文将验证任务引入RepPoints的位置预测中组合成RepPoints v2,在COCO数据集的目标检测任务基准上,RepPoints v2使用不同的主干网络和训练方法使得相较于原始的RepPoints约有2.0 mAP的提升。RepPoints v2还可以通过单个模型在COCO test-dev上实现52.1 mAP。此外,本文所提出的方法可以更普遍地提升其他目标检测框架以及诸如实例分割之类的任务中。

简介

通常,卷积神经网络的预测过程有两种常见方法——验证和回归。它们各自具有不同的优势,对于目标定位问题,由于每个特征在空间上与被验证的目标对齐,因此验证更容易准确推断目标位置。另一方面,回归可以预测连续的目标变量,从而实现细微的位置优化。说白了,就是验证环节更注重粗定位,而回归环节更注重精定位。

为了充分利用验证和回归的优点,较早的目标定位方法通过先验证几个锚框假设来执行粗略定位,然后通过回归框偏移来完善定位,从而将验证和回归结合起来。事实证明,这种组合方法是有效的,并达到了当时最先进的性能。但是,当将代表性回归方法RepPoints与RetinaNet比较时,纯粹基于回归的最新方法(直接从每个特征映射位置回归对象范围)可能具有竞争甚至更好的表现。

在本文工作中,研究了基于纯回归的方法是否可以通过加入验证方法来增强。当使用某些方式时,验证已被证明是有利的,例如与RetinaNet中验证过程中采用anchor box进行粗定位不同,在CornerNet中,特征图点被验证为边界框的左上角点 右下角点的检测,这种使用验证的方式可以使定位性能显著提高,如表1所示。这种差异可能归因于角点代表了一个ground-truth box的精确空间范围,而anchor box只给出了一个粗略的假设。此外,角点验证过程中的每个特征都能很好地对准相应的点,而在锚点验证过程中,用于验证的中心特征远离边界区域。

为了提高基于纯回归的方法(特别是RepPoints)的性能,本文试图在回归过程中引入有效且兼容的验证形式。但是,由两种方法处理的目标对象表示的粒度不同,即RepPoints中的整个目标对象和角点验证过程中的目标角点部分使得整体和部分表示的粒度不一致。为了解决这个问题,本文通过辅助分支来对验证任务进行建模,这些辅助分支(auxiliary side-branches)仅在feature layer和result layer上添加到主要回归分支中,而不会影响中间表示。通过这些辅助分支,可以将验证与回归融合在一起,并通过多任务学习可以获得更好的特征,可以通过引入verification cues来增强特征,可以通过两种方法进行联合推理。整体的融合非常简单、直观、通用,并不会中断RepPoints算法的流程。

RepPoints v2在具有不同主干的情况下,与COCO基准上的原始RepPoints相比,显示出约2.0 mAP的一致性提升。使用单个ResNeXt-101-DCN模型时,还可以在COCO目标检测测试集上达到52.1 mAP。

经典:RepPoints V1

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

目前,Bounding Box(即包含物体的一个紧致矩形框)几乎主导了计算机视觉中对于物体的表示,其广泛流行得益于它简便且方便物体特征提取的特点,但另一方面也限制了对物体更精细的定位和特征提取。

北大、清华和微软亚研的研究者们提出了一种新的视觉物体表示方法,称作 RepPoints(representative points,代表性点集),这种方法能更精细地描述物体的几何位置和进行图像特征的提取,同时也兼有简便和方便特征提取的特点。利用这种表示,很自然能得到一个 anchor-free 的物体检测框架,取得了和目前 anchor-based 方法可比的性能。

动机

在目标检测任务中,边界框描述了目标检测器各阶段的目标位置。

虽然边界框便于计算,但它们仅提供目标的粗略定位,并不完全拟合目标的形状和姿态。因此,从边界框的规则单元格中提取的特征可能会受到背景内容或前景区域的无效信息的严重影响。这可能导致特征质量降低,从而降低了目标检测的分类性能。

本文提出一种新的表示方法,称为 RepPoints,它提供了更细粒度的定位和更方便的分类。

如图所示,RepPoints 是一组点,通过学习自适应地将自己置于目标之上,该方式限定了目标的空间范围,并且表示具有重要语义信息的局部区域。

RepPoints 的训练由目标定位和识别共同驱动的,因此,RepPoints 与 ground-truth 的边界框紧密相关,并引导检测器正确地分类目标。

Bounding Box Representation

边界框是一个4维表示,编码目标的空间位置,即

表示中心点,

表示宽度和高度。

由于其使用简单方便,现代目标检测器严重依赖于边界框来表示检测 pipeline 中各个阶段的对象。

性能最优的目标检测器通常遵循一个 multi-stage 的识别范式,其中目标定位是逐步细化的。其中,目标表示的角色如下:

RepPoints

如前所述,4维边界框是目标位置的一个粗略表示。边界框表示只考虑目标的矩形空间范围,不考虑形状、姿态和语义上重要的局部区域的位置,这些可用于更好的定位和更好的目标特征提取。

为了克服上述限制,RepPoints 转而对一组自适应样本点进行建模:

其中

为表示中使用的样本点的总数。在这项工作中,

默认设置为 9。

Learning RepPoints

RepPoints 的学习是由目标定位损失和目标识别损失共同驱动的。为了计算目标定位损失,我们首先用一个转换函数

将 RepPoints 转换为伪框 (pseudo box)。然后,计算转换后的伪框与 ground truth 边界框之间的差异。

RPDet

作者设计了一种不使用 anchor 的对象检测器,它利用 RepPoints 代替边界框作为目标的基本表示。

目标表示的演化过程如下:

RepPoints Detector (RPDet) 由两个基于可变形卷积的识别阶段构成,如图所示。

可变形卷积与 RepPoints 很好地结合在一起,因为它的卷积是在一组不规则分布的采样点上计算的,另外,它的分类可以指导训练这些点的定位。

上图的第一个偏移量通过对角点监督学习得到,第二个偏移量在前一个偏移量的基础上通过分类监督学习得到。

从另一个角度来理解RepPoints:

可形变卷积通过最后的分类分支和回归分支的监督,自适应的关注到合适的特征位置,提取更好的特征,但是我一直没想明白的是可形变卷积真的能够关注到合适的特征位置吗,可形变卷积的偏移量学习是非常自由的,可能会跑到远离目标的位置,那么这些特征真的是有帮助的吗,这些问题一直困扰着我,我觉得可形变卷积的中间过程太模糊了,太不直接了,是难以解释的。而RepPoints通过定位和分类的监督信号来直接监督偏移量的学习,这样偏移量不就有可解释性了吗,偏移的位置使得定位和分类更加准确(即偏移的位置可定位目标并且语义信息可识别目标),这样偏移量就不会乱跑了,而且是可解释的。

从这个角度来想,RepPoints其实是对可形变卷积进一步的改进,相比可形变卷积有两个优点:

1.通过定位和分类的直接监督来学习可形变卷积的偏移量,使得偏移量具有可解释性。

2.可以通过采样点来直接生成伪框 (pseudo box),不需要另外学习边界框,并且分类和定位有联系。

RepPoints中的直接回归使其成为一个不需要固定anchor的简单框架。虽然没有采用锚点验证步骤,但其定位精度并不比基于锚点的检测器RetinaNet差。然而,回归和验证之间潜在的协同作用促使我们考虑以下问题:

  • 什么样的验证任务能够使基于回归的RepPoints受益?
  • 各种验证任务可以方便地融合到RepPoints框架中而不损害原始检测器吗?

CornerNet:左上角点 右下角点的检测

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

代码地址:https://github.com/princeton-vl/CornerNet

由于Anchor会带来较多的超参数与正、负样本的不均衡,发表于ECCV 2018的CornerNet算法另辟蹊径,舍弃了传统Anchor与区域建议框的检测思路,利用关键点的检测与匹配,出色地完成了目标检测的任务。

CornerNet的思路实际是受多人体姿态估计的方法启发。在多人体姿态估计领域中,一个重要的解决思路是Bottom-Up,即先使用卷积网络检测整个图像中的关键点,然后对属于同一个人体的关键点进行拼接,形成姿态。

CornerNet将这种思想应用到了目标检测领域中,将传统的预测边框思路转化为了预测边框的左上角与右下角两个角点问题,然后再对属于同一个边框的角点进行组合,整体网络结构如下图所示。

CornerNet的主要结构主要由以下3部分组成:

  • 沙漏结构Hourglass:特征提取的Backbone,能够为后续的网络预测提供很好的角点特征图。
  • 角点池化Corner Pooling:作为一个特征的池化方式,角点池化可以将物体的信息整合到左上角点或者右下角点。
  • 预测输出:传统的物体检测会预测边框的类别与位置偏移,而CornerNet则与之完全不同,其预测了角点出现的位置Heatmaps、角点的配对Embeddings及角点位置的偏移Offsets

为了很好地理解CornerNet,下面分别详细介绍这3个模块。

1.沙漏结构:

Hourglass为了提取图像中的关键点,CornerNet使用了沙漏结构Hourglass作为网络特征提取的基础模块,其结构下图所示。

此图来自于GiantPandaCV公众号文章

从图中可以看出,Hourglass的整体形状类似于沙漏,两边大,中间小。Hourglass结构是从人体姿态估计领域中借鉴而来,通过多个Hourglass模块的串联,可以十分有效地提取人体姿态的关键点。

在图中,左半部分表示传统的卷积与池化过程,语义信息在增加,分辨率在减小。右半部分表示上采样与融合过程,深层的特征通过上采样操作与浅层的特征进行融合,在增大分辨率的同时,保留了原始的细节信息

CornerNet首先通过一个步长为2的7×7卷积层,以及步长为2的残差模块,将图像尺寸缩小为原图的1/4,然后将得到的特征图送入两个串联的Hourglass模块。

2.角点池化:

Corner Pooling在传统卷积网络中,通常使用池化层来进行特征融合,扩大感受野,也可以起到缩小特征图尺寸的作用。以3×3的最大池化层为例,通常是以当前位置的点为中心点,融合周围共9个点的信息,取最大值输出。

然而,CornerNet的思想是利用左上与右下两个关键点进行目标检测,对于一个物体的左上点,其右下区域包含了物体的特征信息,同样对于物体的右下点,其左上区域包含了物体的特征信息,这时角点的周围只有四分之一的区域包含了物体信息,其他区域都是背景,因此传统的池化方法就显然不适用了。

为了达到想要的池化效果,CornerNet提出了Corner Pooling的方法,左上点的池化区域是其右侧与下方的特征点,右下点的池化区域是其左侧与上方的特征点,如下所示为左上点的Corner Pooling过程。

在图中,假设当前点的坐标为(x, y),特征图宽为W,高为H,则Corner Pooling的计算过程如下:

(1)计算该点到其下方所有点的最大值,即(x, y)到(x, H)所有点的最大值。

(2)计算该点到其最右侧所有点的最大值,即(x, y)到(W, y)所有点的最大值。

(3)将两个最大值相加,作为Corner Pooling的输出。

工程实现时,可以分别从下到上、从右到左计算最大值,这样效率会更高。右下点的CornerPooling过程与左上点类似。

3.预测输出

下面来看CornerNet的预测输出,以及损失的计算方式。左上角与右下角两个Corner Pooling层之后,分别接了3个预测量,这3个预测量的意义分别如下:

  • Heatmaps:角点热图,预测特征图中可能出现的角点,大小为C×W×H, C代表类别数,以左上角点的分支为例,坐标为(c, x, y)的预测点代表了在特征图上坐标为(x, y)的点是第c个类别物体的左上角点的分数
  • Embeddings:Heatmaps中的预测角点都是独立的,而一个物体需要一对角点,因此Embeddings分支负责将左上角点的分支与右下角点的分支进行匹配,找到属于同一个物体的角点,完成检测任务,其大小为1×W×H。
  • Offsets:第三个预测Offsets代表在取整计算时丢失的精度,以进一步提升检测的精度。取整的丢失对于小物体检测影响很大,因此CornerNet引入了偏差的预测来修正检测框的位置,其大小为2×W×H。

CornerNet在损失计算时借鉴了Focal Loss的思想,对于不同的负样本给予了不同的权重,总体的损失公式为:

这4部分损失的含义说明如下:

  • Ldet:角点检测的损失,借鉴了Focal Loss权重惩罚的思想。CornerNet为了减小负样本的数量,将以标签角点为中心,半径为r区域内的点都视为正样本,因为这些点组成的边框与标签会有很大的IoU,仍有可能是我们想要的正样本。
  • Lpull:Embeddings中,对于属于同一物体的两个角点的惩罚。具体实现时,提取Embeddings中属于同一个物体的两个角点,然后求其均值,并希望两个角点的值与均值的差尽可能地小。
  • Lpush:Embeddings中,对不属于同一物体的两个角点的惩罚。具体实现时,利用Lpull中配对的角点的平均值,期望没有配对的角点与该平均值的差值尽可能地大,可以有效分离开无效的角点。
  • Loff:位置偏差的损失,与Faster RCNN相似的是,CornerNet使用了smoothL1损失函数来优化这部分位置偏差

总体上,CornerNet巧妙地利用了一对关键点来实现物体检测,从而避免了Anchor带来的问题,在检测精度上相比其他单阶检测器有了一定提升。此外,CornerNet的工作也推动了一系列利用关键点做物体检测的算法的诞生。

本文的方法:RepPoint V2

首先讨论两个验证任务,它们可能有助于基于回归的定位方法。

1、Verification Tasks验证任务

1.1、 Corner Point Verification角点验证

角点验证的操作是将一个分数与特征图中的每个点关联起来,表明它是一个角点的概率。如CornerNet的左上角和右下角可以确定边界框的空间范围,从而可以替代通常的由框的中心点和大小组成的4-d描述符。

与CornerNet采用特殊的沙漏结构和高分辨率特征图(从原始图像下采样4倍)的主干网络结构不同,大多数最近的目标检测采用具有多级特征图的FPN。本文采用角点验证来利用多级特征图,例如RepPoints中的C3-C7设置。具体来说,所有的ground truth角点都被分配到feature map的每个level,这与基于FPN的通常根据目标大小分配检测的做法不同。并且发现这种方式的赋值效果稍微好一些,这可能是因为在训练的每个层次上都有更多的正样本。它的性能也比在最高分辨率的单一feature map lavel(例如C3)上进行训练,然后将预测的score/offset map复制/调整到其他级别上要好得多。

1.2、Within-box foreground verification

另一项可能对基于回归的检测器有利的验证任务是验证特征映射点是否位于目标对象框内。

这个框内的前景验证任务均匀地提供了一个对象框内的定位信息,与之形成对比的是,角点只关注box的极端部分。因此,在描述目标边界时,它不如角点精确,但在给定粗略的定位标准时,可能有利于目标检测器。

本文还通过使用非二进制分类感知前景热图(non-binary category-aware foreground heatmap)来区分不同的目标类别。具体来说,对于C类对象,有一个C通道输出,每个通道表示一个特征点在对应对象类别中的概率。与角点验证一样,每个ground truth对象被分配到FPN的每一层。

归一化Focal loss。在训练中,普通的focal loss让较大的物体比较小的物体贡献更大,导致对小物体的前景得分学习得很差。为了解决这一问题,提出了一种归一化focal loss算法,该算法根据特征图中同一对象框内的正样本点总数来对每个正特征图点进行归一化。对于负样本点,归一化损失使用正样本点的数量作为分母。

2 A General Fusion Method

在本节中,合并了各种形式的验证,以提高基于回归的方法的性能。通常,基于回归的方法以自顶向下的方式检测目标,其中所有中间表示都对整个目标进行建模。为了解决验证过程中整体和部分粒度不同的问题,本文通过与主要回归分支融合在一起的辅助分支来对验证任务建模,这种方式不会影响到它的中间表示,如下图所示。

融合只发生在特征层和结果层。有了这些辅助分支,目标检测器可以获得几个好处:

1)Better features by multi-task learning。辅助验证任务提供了更丰富的学习监督,产生了更强的特征,提高了检测准确率。

2)Feature enhancement for better regression。验证输出包括有关角点位置和前景区域的强烈提示,这将有利于回归任务。

3)Joint inference by both methodologies。明确地利用了角点预测的验证输出和基于回归的定位,以一种联合推理的方法融合它们的长处。具体来说,通过角点验证,小邻域内的亚像素角点定位通常比主回归分支的定位更准确,但由于缺少目标的全图信息,判断是否为真实角点的能力较差。与之相反,主回归分支对后者更有利,但在精确的亚像素定位方面较差。为了结合它们的优点,本文根据主回归分支完善预测的边界框的角点pt:

该融合方法灵活通用,利用了任何一种验证线索,避免了与主分支中的中间表示交互,对验证目标的类型要求较少,也不会中断主分支的总体流程。

3 RepPoints v2: Fusing Verification into RepPoints

RepPoints是一个纯回归的目标检测器。本文现在用不同形式的验证任务来补充它,特别是对于角点和box内的前景等验证任务。为了增加RepPoints与辅助验证任务的兼容性,首先对它做了一个小修改,使前两个点显式地表示左上角和右下角的点,称之为显性角点变体。这些角点替代了原始RepPoints中使用的转换函数,从而使边界框由这些角点定义,而不是在点集上进行最小-最大或动量操作。有了角点,转换函数变为:

然后添加了辅助分支来进行验证角点。具体来说,将定位head的第3 个卷积层之后的feature map作为输入。在该feature map上使用一个3×3的卷积层,然后对两个验证任务使用两个小子网络角点子网络由角池层和1×1 conv层组成,用于预测热图得分和像素偏移量。前景子网络是一个单一的1×1 conv层,用于预测前景得分热图。

在训练中采用多任务损失:

实验与结果

实验结果

1、消融实验

Explicit-corners variant

Forms of verification

Types of fusion

2、对比实验

3、可视化

更多细节可参考论文原文。

0 人点赞