本文最后更新于:2020年10月12日 下午

最近阅读集中在目标检测方向,学习了RetinaNet、CornerNet、FCOS三篇文章。其中RetinaNet提出了一个新的损失函数Focal Loss,CornerNet和FCOS是Anchor Free的代表性算法。

阅读文章:

[1] Lin T Y, Goyal P, Girshick R, et al. Focal loss for dense object detection[C]//Proceedings of the IEEE international conference on computer vision. 2017: 2980-2988.

[2] Law H, Deng J. Cornernet: Detecting objects as paired keypoints[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 734-750.

[3] Tian Z, Shen C, Chen H, et al. Fcos: Fully convolutional one-stage object detection[C]//Proceedings of the IEEE international conference on computer vision. 2019: 9627-9636.

1. RetinaNet

基于深度学习的目标检测方法有两种经典的结构:Two-Stage和One-Stage:

  • Two-Stage:例如R-CNN,第一步生成一个稀疏的候选目标位置集合,第二步使用卷积神经网络将每个候选位置分为某一类别的前景或背景,并进行精确的坐标回归。Two-Stage方法准确度较高,但速度相对较低。
  • One-Stage:例如SSD、YOLO。此类方法摒弃了提取Proposal的过程,直接进行分类和回归,更快,更简单,但精度落后于Two-Stage。

那么,到底是什么原因造成One-Stage方法的精度不如Two-Stage?One-Stage方法是否也能达到和Two-Stage一样的精度呢?作者认为在训练过程中,极端前景背景类别失衡是主要原因。

本文提出了一个可与最先进Two-stage检测器的精度匹配的One-Stage检测器。为了实现该结果,作者将训练过程中的类不平衡问题看作主要障碍,并提出了一个新的损失函数来消除该障碍。

预备知识:

在继续学习RetinaNet之前,首先要搞清楚何为Hard/Easy Positive/Negative Example。从字面意思上理解,Hard为困难样本、较难分类的样本,Easy为容易分类的样本、Positive为正样本,Negative为负样本。正负样本比较好区分:bbox与ground-truth的IoU大于某一阈值(一般为0.5)即为正样本,IoU小于该阈值即为负样本。

Hard和Easy的区分主要看是否在前景和背景的过渡区域上。如果不在前景和背景的过渡区域上,分类较为明确,称为Easy。若在过渡区域上,则较难分类,称为Hard。

img

类不平衡问题:

在一张输入图片中,检测器对每张图片评估104-105个候选位置,但只有少数位置包含物体,故负样本多于正样本,出现类不平衡问题。类不平衡将引发两个问题:

  1. 训练效率低,大多数位置是easy negative ,没有贡献有用的学习信号。(大多数负样本不在过渡区域,分类明确,称为easy negative。)
  2. 负样本过多造成loss太大,以至于淹没掉正样本的loss,不利于目标收敛,导致模型退化。

上述问题2将导致无法得出一个能对模型训练提供正确指导的loss,训练步骤容易被已分类的背景样本所主导(而Two Stage方法得到proposal后,其候选区域要远远小于One Stage产生的候选区域,因此不会产生严重的类别失衡问题)。常用的解决此问题的方法就是负样本挖掘,或其它更复杂的用于过滤负样本从而使正负样本数维持一定比率的样本取样方法。本文提出了一个新的损失函数Focal Loss,更高效的替代之前处理类不平衡问题的方法。

Focal Loss:

img

Focal Loss被用来解决one-stage检测方案中训练时前景和背景极端不平衡的问题。Focal Loss是在交叉熵损失函数的基础上进行修改,首先回顾二分类的交叉熵(CE)损失:

img

img

交叉熵损失可以的图像如上图蓝色曲线所示,将模型预测得到的概率>0.6的样本看作容易分类的样本,预测值较小的为Hard examples。最终,整个网络的损失是所有样本损失的累加,虽然Hard example的loss较高,但其数量较少;容易分类的样本虽然loss小,但数量多。导致全部累加后,大部分的loss来自Easy example,造成模型在优化过程中更关注容易分类的样本,忽略较难分类的样本。

在二分类交叉熵损失基础上引入权重参数α,得到平衡交叉熵损失:img,对于类别1使用权重α,对于类别-1使用权重(1-α)。采用α加权可以平衡正负样本,但无法区分易分类样本和难分类样本。

训练过程中的类不平衡问题淹没了交叉熵损失。容易被分类的负样本构成了大部分损失,并支配着梯度。尽管α平衡了正负样本的重要性,但它没有区分easy/hard样本。作者重构了loss function来降低easy样本的权重,从而更关注hard negative的训练。

img

从图中也可看出:当γ逐渐增大时,较容易分类的loss几乎为0,而Pt较小的部分(hard example)的loss依然较大,可以保证在累加后让hard examples贡献更多的loss,在训练时给予hard examples更多的优化。

在实验时为上述Focal Loss增加一个α平衡因子,可以轻微提高精度。

img

RetinaNet

img

RetinaNet由一个基石网络(ResNet+FPN)和两个特定任务的子网络组成。基石网络负责在整个输入图像上计算卷积特征图,并且它不是一个自卷积神经网络。第一个子网络在基石网络的输出上做卷积目标分类,第二个子网络执行卷积边框回归。

输入图像经过Backbone后,可以得到P3-P7特征图金字塔(下标表示特征金字塔的层数,Pl的特征图分辨率比原始图像小2l),每层有C=256个通道。得到特征金字塔后,对特征金字塔的每一层分别使用两个子网络(分类子网络+检测框位置回归子网络)。

总结:

  • 作者将极端类不平衡问题看作阻止one-stage方法超过two-stage方法的主要障碍。
  • 为解决该问题,提出了一个新的损失函数Focal Loss,更高效的替代之前处理类不平衡问题的方法。
  • 提出RetinaNet:ResNet+FPN+2个FCN子网络,精度超过Faster R-CNN。

2. CornerNet

目前被经常使用的anchor box有两个缺点:

  • 需要一个非常大的anchor boxes集合。检测器需要判断每个anchor box是否与ground truth box 足够重叠。通常仅仅一小部分anchors与ground truth重叠,这就造成阳性anchors box和阴性anchors box 之间的巨大不平衡,并且减慢训练。
  • 使用anchor box引入大量超参数和设计选择。包括:框的数量、框的尺寸、框的长宽比。

CornerNet:

一种去掉anchor boxes的one-stage目标检测方法。CornerNet通过一对关键点(边界框左上角和右下角)来检测目标。使用一个卷积网络预测两个热图集合(相同目标类别的所有实例的),来表示不同目标类别的边角点位置,一个是左上角边角点的热图集合,一个是右下角边角点的热图集合。此外,网络为每一个被检测到的边角点预测一个嵌入式向量,这样同一目标的两个边角点的嵌入式向量之间的距离很小,就能基于这个距离将其分为一组。

img

使用沙漏网络作为CornerNet的Back-bone网络。沙漏网络后面跟着两个预测模块,一个模块预测左上角点,另一个预测右下角点。每个模块有他们自己的Corner Pooling模块来池化来自沙漏网络的特征,之后预测热图、嵌入式向量和偏移。

Corner pooling:

一种新的池化层,通过编码明确的先验知识,可帮助卷积神经网络更好地定位边界框的角落。Corner Pooling在两个特征图上执行,从第一个特征图上(在每个像素位置)最大池化所有的特征向量,第二个特征图直接池化所有特征向量,然后将两个池化结果相加。

总结:

创新点:

  • 提出CornerNet:一种新的目标检测方法,使用单个卷积神经网络,将目标边界框当做一组关键点(左上角、右下角)进行检测,消除了Anchor Boxes。

  • 提出Corner Pooling,一种新的池化层,帮助网络更好的定位关键点。

缺点:

  • CornerNet需要学习一个额外的距离向量,进行复杂的后处理来对属于相同实例的边角点分组。

3. FCOS

当前所有主流检测器(例如Faster R-CNN、SSD、YOLO)都依赖于一个预定义的anchor boxes集合,一直以来人们相信使用anchor box是检测器成功的关键。尽管他们很成功,但了解基于anchor的检测器的缺点也很重要:

(1) 检测性能对anchor boxes的尺寸、长宽比、数量敏感。基于anchor的检测器的超参数需要被仔细调整。

(2) anchor boxes的尺寸和长宽比保持固定,检测器在候选目标形状出现大变化,特别是小目标时会遭遇困难。预定义的anchor boxes也会妨碍检测器的泛化能力,在不同的目标尺寸或长宽比的新检测任务上,anchor需要被重新设计。

(3) 为了实现高召回率,基于anchor的检测器需要在输入图像上密集的放置anchor box。(例如FPN上一张短边为800的图片有超过180K个anchor boxes)。这些anchor box在训练时绝大多数被标注为负样本。过多的负样本加重了训练期间的正负样本不平衡。

(4) Anchor box包含复杂的计算,例如计算和ground-truth bbox之间的IoU。

img

全卷积One-stage检测器:

检测器直接回归bbox,并将这些位置看作训练样本(而不是anchors)。如果某个位置(x,y)在任一ground-truth box中,那么将其看为正样本,c为其类别标签,c=0表示其为负样本(背景)。4维的实向量t = {l,t,r,b*}是位置回归目标,里面的元素是从该位置到bbox四条边的距离(如图左所示)。如果某个位置有多个边界框,将其看为模棱两可的样本(如图右所示),FCOS简单的选择最小区域的边界框作为回归目标。FCOS利用尽可能多的前景样本来训练回归器。这与基于anchor的检测器不同,它们仅将与GT的IoU足够高的样本看为正样本。这也是FCOS比基于anchor的检测器出色的原因之一。

用FPN为FCOS进行多等级预测:

img

FCOS采用FPN在不同等级的特征图上检测不同尺寸的目标。P3-P7是用于最终预测的特征等级,P3-P5由backboneCNN的特征图产生。P6/P7分别通过在P5/P6上应用一个步长为2的卷积层产生。

与基于Anchor的检测器不同(它们为不同的特征层级分配不同尺寸的anchor),FCOS直接限制了每个层级上bbox回归的范围。FCOS首先为所有特征层级上每个位置计算l,t,r,b。如果某个位置满足max(l,t,r,b)>mi 或 max(l,t,r,b)<mi-1,就将其设为一个负样本,不再需要回归边界框。这里mi是该特征层级上需要去回归的最大距离。m2,m3,m4,m5,m6,m7分别为0,64,128,256,512,∞。(例如P3的范围是[0,64],P4的范围是[64,128])

Center-ness:

在FCOS上使用多层级的预测之后,FCOS的性能依然与基于Anchor的检测器有很大代沟。作者观察到这是因为许多位置预测的低质量的边界框远离目标的中心点。FCOS引入了“Center-ness”分支来预测某个像素与其对应bbox中心点的偏移。这个评分被被用于降低检测到的低质量的边界框的权重,并且在NMS中合并检测结果。Center-ness使得基于FCN的检测器比基于anchor的检测器效果更好。

作者提出了一个简单高效的策略来压制检测到的低质量边界框,没有引入任何超参数。具体来说,FCOS增加了一个与分类分支并行的单层分支来预测一个位置的”Center-ness”。Center-ness描述了该位置到目标中心点位置的正规化距离。

img

在测试时最终评分(用于排列检测到的边界框)通过将预测到的Center-ness与相对应的类别评分相乘得到。Center-ness可以减少远离目标中心点的边界框的权重分数。因此,在最终的非极大值抑制过程中,这些低质量的边界框有很大概率被过滤掉,从而显著提高检测器的性能。

总结:

优点:

  • FCOS使检测与许多其他FCN可解决的任务(如语义分割)统一起来,使重用这些任务中的思想变得更加容易。
  • 将检测变为Proposal free和Anchor free,显著降低了设计参数的数量,使训练变的简单。
  • 通过消除Anchor boxes,FCOS完全避免了Anchor boxes相关的复杂计算和超参数(例如在训练期间计算Anchor box和Ground truth box的IoU),并且以逐像素预测的方式进行目标检测,得以更快的训练和测试,同时减少训练期间内存用量。
  • FCOS可以作为Two-Stage检测器的区域建议网络(RPNs),并显著优于基于Anchor的RPN。
  • FCOS检测器通过很小的修改就能立即扩展到解决其他视觉任务,包括实例分割和关键点检测。

附:

FCOS论文中提到了BPR,之前对其不太了解,找来学习了一下。

BPR: best possible recall,文中定义为一个检测器能召回的ground-truth box的最大数量除以所有ground-truth的数量。

由于步长增大,通常最后的特征图都会面临较低的最大可能召回(best possible recall, BPR)问题。在anchor based detector中,可以通过降低正样本所需的IOU阈值来弥补,对于FCOS,乍一看由于较大stride,feature map上没有位置编码信息,因此人们可能认为BPR比基于anchor的检测器要低得多。作者通过实验证明,即使有较大的步长,基于FCN的FCOS仍然能够产生良好的BPR,甚至可以比基于Anchor的检测器的BPR更好,因此BPR实际上不是FCOS的问题。此外,通过多层级FPN预测,BPR可以得到进一步的提高可以达到RetinaNet最好的高度。