Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox

  Anchor boxes在现有的经典目标检测算法中属于一个基本组成部分,像YOLOv3这样的one-stage detector中使用了anchor boxes之后,可以取得跟two-stage detectors相当的精度,同时检测速度也达到实时的效果。从去年开始,anchor free的方法大量涌现,虽然目前还不能保证完全优于anchor based方法,但是为目标检测的发展提供了另一个方向。本篇博客将逐步按照CornerNet →ExtremeNet →CenterNet →FSAF → FCOS →FoveaBox的顺序,依次整理anchor free的one-stage目标检测算法。
  为什么要用anchor free? Anchor boxes是人为定义的包含各种尺寸和宽高比的矩形框,是用作目标检测的候选框。对于特征图上每一个像素点,定义不同大小、不同宽高比的矩形框来匹配原图上的目标,然后对应的像素点就叫做锚点(anchors)。这些在原图上密集分布的anchor boxes通过全卷积进行分类得分和坐标回归,由于锚框数量较多,所以其中有一部分可以匹配目标,最后生成边界框的一个预测。可以看出,anchor boxes的使用引入了许多超参数和设计选择,这些超参数的出现使得网络调优变得更加困难,也会额外的增加网络复杂度和计算量。具体而言,anchor based检测器存在以下缺点:

  • 锚框的尺寸和宽高比是预先设定好的,因此当图像中的待检测目标变化比较大,或者边界框的值较为特殊时,很难回归到真实的坐标。
  • 为了提高召回率,anchor based检测器需要在输入图像上密集的设置锚框,而训练时大部分锚框都会被标记为negative samples,加剧了正负样本间的类别不平衡。
  • 计算IOU时,大量的锚框也会占用大量的计算资源和内存。
  • 通过锚框内的信息来检测目标可能不够合理,因为有时候背景占据了矩形框的绝大部分,或者一个框内并不只包含一个目标,这个时候检测器精度就会下降。

Anchor Free目标检测算法

  • 基于Keypoint的解决方案
    • CornerNet
    • ExtremeNet
    • CenterNet
      • CenteNet-Triplets
      • CenterNet-Keypoint
  • 基于Segmentation的解决方案
    • FSAF
    • FCOS
    • FoveaBox

基于Keypoint的解决方案

CornerNet

  ECCV 2018中提出的《CornerNet: Detecting Objects as Paired Keypoints》消除了现有的one-stage检测器设计中对一组anchors的需要,它的思想是将目标边界框检测为一对关键点,即边界框的左上角和右下角的关键点创新点在于:(1)第一个将目标检测任务定义为同时检测和分组角点的任务;(2)提出了新型池化层corner pooling,帮助卷积网络更好地定位边界框的角点;(3)对沙漏结构进行了显著地修改,并添加了新的focal loss变体,以帮助更好地训练网络。

沙漏网络(Hourglass Network)首次被提出是用于人体姿态估计任务。它是一个全卷积神经网络,由一个或多个沙漏模块组成。Hourglass module首先通过一系列卷积层和最大池化层对输入特征进行下采样,然后通过一系列的上采样和卷积层将特征上采样回原来的分辨率。由于细节在最大池化层中丢失,因此添加了skip layers用来将细节添加到上采样的特征。沙漏模块在一个统一的结构中捕获全局和局部特征,当多个沙漏模块堆积在网络中时,沙漏模块可以重新处理特征以获取更高级别的信息。
Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第1张图片

  • 网络结构:如下图所示,使用沙漏网络作为CornerNet的backbone网络,沙漏网络由两个沙漏模块组成。沙漏网络之后是两个预测模块, 一个模块用于左上角,而另一个模块用于右下角。 每个模块都有自己的corner pooling模块,用于在预测热图、嵌入和偏移这三个分支之前池化来自沙漏网络的特征。 与许多其他目标检测器不同,不使用不同尺度的特征来检测不同大小的物体,只将两个模块应用于沙漏网络的输出。
    Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第2张图片
  • 检测角点:预测两组热图(heatmaps),一组用于左上角,另一组用于右下角。每组热图具有C个通道,C是分类的数量,没有背景通道,并且大小为H×W。 每个通道都是一个二进制掩码,用于表示该类的角点位置。对于每个角点,有一个ground-truth正位置,其他都是负位置。在训练期间,没有同等地惩罚负位置,而是减少对正位置半径内的负位置的惩罚,因为它仍然可以产生一个与ground-truth充分重叠的边界框。通过确保半径内的一对点生成的边界框与ground-truth的IOU ≥ 阈值(设置为0.7),从而确定半径,惩罚的减少量由以正位置为中心,σ是半径的1/3的高斯 e x 2 + y 2 − 2 σ 2 e^{\frac{x^2+y^2}{− 2σ^2}} e2σ2x2+y2给出。Focal loss的变体如下, ( 1 − y c i j ) (1−y_{cij}) (1ycij)项减少了ground-truth周围的惩罚, α \alpha α β \beta β 是控制每个点的贡献的超参数,分别设置为2和4。
    在这里插入图片描述
  • 预测偏移量:将热图中的位置重新映射到输入图像时,可能会丢失一些精度,这会极大地影响小边界框与ground-truth之间的IoU。 为了解决这个问题,通过预测位置偏移来稍微调整角点位置,然后再将它们重新映射到输入分辨率图像上。仅在ground-truth角点位置应用损失,偏移和损失计算如下:
    在这里插入图片描述
  • 角点分组:为了确定左上角和右下角的一对角点是否来自同一个目标边界框,网络预测每个检测到的角点的嵌入向量,使得如果左上角和右下角属于同一个边界框,则它们的嵌入向量之间的距离应该小,从而根据左上角和右下角嵌入之间的距离对角点进行分组。使用“pull”损失训练网络来对角点进行分组,并且用“push”损失来分离角点。通俗来讲,就是使得同一组配对的角点尽量近,并且距不同组的角点距离尽量远 e t k e_{tk} etk是目标k的左上角的嵌入, e b k e_{bk} ebk 为右下角的的嵌入, e k e_{k} ek e t k e_{tk} etk e b k e_{bk} ebk的平均值。同样,仅在ground-truth角点位置应用损失。
    在这里插入图片描述
  • Corner pooling:两个角点在不同目标上没有相同规律可循,如果采用普通池化操作,那么在训练预测角点支路时会比较困难。考虑到左上角角点的右边有目标顶端的特征信息,左上角角点的下边有目标左侧的特征信息,右下角角点也有类似的关系,因此如果能在某行和某列检测到同一个object的边界特征,那么这行和这列的交点就是corner。Corner pooling就是对特征图上的像素点 ( i , j ) (i,j) (i,j)所在行的所有特征与列的所有特征进行扫描,动态选择最大值。具体来说,例如对于左上角点,从右到左扫描水平最大池化,从下到上扫描垂直最大池化,然后相加两个经过最大池化的特征映射。如下图所示,值最大的像素点(值为10)很有可能是左上角点。右下角点的特征提取也同理可得。
    Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第3张图片

完整的训练损失: L = L d e t ​ + α L p u l l + β L p u s h + γ L o f f L=L_{det}​ +αL_{pull} +βL_{push}+γL_{off} L=Ldet+αLpull+βLpush+γLoff
  测试时,首先通过在角点heatmaps上使用3×3最大池化层来应用非极大值抑制(NMS),然后从heatmaps中选择前100个左上角和前100个右下角,角点位置由相应的偏移调整。 计算左上角和右下角嵌入之间的L1距离,距离大于0.5或包含不同类别的角点对将被剔除。最终,左上角和右下角的平均得分用作检测分数。

ExtremeNet

  CVPR 2019中提出的《Bottom-up Object Detection by Grouping Extreme and Center Points》借鉴了CornerNet的思想,又对其进行了进一步的改进,不再检测目标的左上角点与右下角点,而是检测目标的4个极值点(即最上点、最下点、最左点、最右点)和一个中心点。CornerNet预测的角点经常落在目标外部,没有足够的目标特征,而ExtremeNet的极点在目标上,是视觉可分的,有一致的局部外观特征。

自上而下的目标检测方法先生成大量建议框,然后经过后处理得到边界框,其中典型的方法有R-CNN和YOLO等);自下而上的目标检测方法先生成关键点,再由关键点得到边界框,其中典型的方法有CornerNet和CenterNet等。自上而下的算法将目标检测任务转化为矩形候选区域分类任务,然而,矩形框并不是一个比较好的目标表达(包含不必要的背景、没有真正理解视觉语义信息、难以表示目标的细节)。

  • 网络结构:ExtremeNet的backbone网络也是Hourglass Network,网络的输出为 5 × C 5×C 5×C 个heatmaps以及 4 × 2 4×2 4×2 个偏移图,C是类别数。如下图所示,C×W是热图的大小,第一行共预测5个热图,包括4个极值点的热图和一个中心点的热图;第二行预测4个极值点的偏移,2分别对应于x和y方向的偏移,此处没有对中心点的偏移。上下左右以及中心关键点在训练的时候采用的是focal loss,并且借鉴了CornerNet,同样在gt周围设置了高斯的loss减少策略。
    Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第4张图片
  • 中心分组:中心分组算法的输入是4个极值点热图和1个中心点热图,通过两个步骤进行组合:(1)通过热图的峰值(ExtrectPeak)预测对应的关键点;(2)对于所有检测到的极值点组合,计算组合的中心位置。峰值预测方法:找到一个像素,该像素值比阈值 τ p τ_p τp大,并且该像素的值在其3×3邻域内最大。符合上下左右条件的极值点( l , r , t , b l,r,t,b l,r,t,b)进行组合,则其几何中心为 c = ( l x + r x 2 , t y + b y 2 ) c = (\frac{l_x+r_x}{2},\frac{t_y+b_y}{2}) c=(2lx+rx,2ty+by)。如果该点响应大于阈值 τ c τ_c τc则认为该点有效,同时计算这5个点的平均值为该检测框的置信度分数。
    Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第5张图片
  • Ghost box抑制:如下图所示,若存在三个物体的尺寸相近,且在空间上呈线性排列的时候,容易出现Ghost box。对物体2这个目标来说,如果选择物体1的最右点和物体三的最左点,在判断中心的时候也会出现在物体2的中心,因此比真实框大一圈的box也被保留了下来,出现误判。作者使用soft NMS来抑制Ghost box:如果某个包围框,其内部所有的包围框的score综合超过了其本身score的3倍,则将其本身的score修正为原来的1/2。
Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第6张图片
  • 边缘聚合:当物体边缘是水平或者垂直的边时,沿边的任意一点都可以认为是极值点,因此极值点的响应会被弱化,而不能找到突出的某一个极值点。这将会带来两方面的问题:(1)较弱的响应可能会低于阈值 τ p τ_p τp,从而产生极值点漏检的情况;(2)即使检测到了极值点,其置信度仍低于具有强响应的略微旋转的物体。解决方法是对于每个局部最大的极值点,在垂直方向或水平方向上聚合,聚合的区域是两个方向的第一个局部极小值点中间的值按一定权重累加。
  • 极点实例分割:与一个简单的边界框(4个值)相比,极点承载的目标信息要多得多(8个值)。通过创建一个边缘以极值点为中心的八角形来近似目标的mask,首先根据4个极值点找到外接矩形,然后对于每个极值点,在其对应边的两个方向上将其延伸到矩形边长度的1/4,每个方向各1/8,线段遇到矩形框则被截断,最后将四段的端点(8个点)连接起来形成八边形。可以与DEXTR结合进行实例分割。

CenterNet

CenteNet-Triplets

  CVPR 2019中提出的《CenterNet: Keypoint Triplets for Object Detection》同样是CornerNet的改进版。CornerNet是通过预估框的左上角点和右下角点来得到物体的预测框,但centernet认为只预测物体的角点位置并没有很好的利用框内的信息,这样容易导致误检。所以文章提出一种新的检测方式,通过预测出物体的左上角点、右下角点和物体的中心点,进而来预测出物体的位置。

  • 网络结构:在基于CornerNet的基础上嵌入中心关键点的heatmap,并预测中心关键点的偏移量offset。最终,使用 keypoint triplets来表示一个目标,即用一个中心点和一对角点坐标。
    Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第7张图片

  • keypoint triplets:如何将角点与中心点对应为一个检测框,具体操作如下:先利用CornerNet中提出的方法生成top-k边界框,再利用检测到的中心点过滤不正确的边界框。1)根据中心点heatmap选取top-k个中心;2)使用相应的offsets将这些中心映射回原图中;3)对每个bbox定义一个中心区域,检查该区域是否包含中心关键点,同时中心关键点的类标应当与bbox相同;4)如果某个中心点被区域检测到,则保存其bbox。此时bbox的分数由三个点的得分的均值替换。否则,移除对应的bbox。
      边界框中心区域的大小会影响检测结果,较小的中心区域导致较小的边界框的查全率较低,而较大的中心区域导致较大的边界框的查准率较低。因此,用一个尺度感知(scale-aware)的中心区域来自适应边界框的大小,即倾向于为一个小的边界框生成一个相对较大的中心区域,而为一个大的边界框生成一个相对较小的中心区域。n为奇数,决定了中心区域的scale。如下左图所示,文中为小的预测框(小于150像素)设置 n=3,大的预测框设置 n=5,即小的预测框的中心区域较为宽松,大的预测框中心区域则较小。
    Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第8张图片

  • 丰富中心和角点信息:物体的几何中心不一定具有可识别的视觉信息,为了解决这个问题提出了center pooling,来捕获更丰富和更易于识别的视觉特征。具体过程如下:backbone输出一个feature map,要确定feature map中的一个像素是否为中心关键点,将该像素点来自水平和竖直方向的最大响应相加赋给当前位置,如上右图(a)所示。此外,角点通常位于物体外部,缺乏局部外观特征。ConrnerNet使用了corner pooling找出边界方向上的最大值从而确定角点,但是仅对边缘较为敏感,感受不到物体的视觉特征,如上右图(b)所示。Cascade corner pooling通过先沿着边界查找最大值,然后沿着边界最大值的位置查找内部最大值,最后将两个最大值相加,角点同时获得了边界信息和物体的视觉信息,如上右图(c)所示。具体操作如下:

Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第9张图片
  • Loss Function:如下所示,其中,从左到右分别表示检测的corner loss、center loss、对应的CornerNet中的corner的pull loss、push loss以及corner offset loss、center offset loss,α、β、γ为对应的损失权重。

CenterNet-Keypoint

  CVPR 2019中提出的另一篇《Objects as Points》同样提出了CenterNet。该CenterNet不仅可以用于目标检测,还可以用于其他的一些任务,如姿势估计或者3D目标检测等。创新点是将目标建模为单个的点——即目标框的中心点,检测器使用关键点估计来找到中心点并且直接通过图像特征来回归全部的其他目标属性(多个属性对应多个channel)。对于目标检测而言,输入图像到一个全卷积网络当中生成了一个热力图,热力图的峰值相应的就是目标的中心,图像特征在每个峰值处预测目标边界框的高和宽。

Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第10张图片
  • 不同的全卷积编解码网络
    (1)Resnet-18 with up-convolutional layers : 28.1% COCO AP and 142 FPS
    (2)DLA-34(深层聚合网络) : 37.4% COCO AP and 52 FPS
    (3)Hourglass-104 : 45.1% COCO AP and 1.4 FPS
      在关键点的检测上沙漏网络比ResNet效果好,根本原因在于resnet特征图分辨率达不到像素级别的要求,而关键点检测的任务对特征图分辨率的要求很高,这方面沙漏网络更有优势。
  • 网络结构:如下图所示,网络分了三个分支。在COCO目标检测分类中C=80,特征图通过步长4的下采样从512的输入图像大小变为128的尺寸,预测结果 Y ^ x , y , c = 1 \hat{Y}_{x,y,c}=1 Y^x,y,c=1 对应于一个被检测的关键点,而 Y ^ x , y , c = 0 \hat{Y}_{x,y,c}=0 Y^x,y,c=0 是背景。对于类别C中每一个关键点的真实值通过计算低分辨率的等价像素点的位置,把所有的真实的关键点分布在heatmap上,并使用一个高斯卷积核生成一个二维的正态分布,如果两个同类别的高斯结果重合,就取每个元素的最大值。损失函数采用类似于CornerNet的角点检测的惩罚减少的像素级别focal loss。为了弥补由输出步长造成的量化误差,对每个关键点额外预测了一个定位的偏移量,损失使用L1 loss 。此外,我们对每一个目标k回归其尺寸 s k = ( x 2 ( k ) − x 1 ( k ) , y 2 ( k ) − y 1 ( k ) ) s_k=(x^{(k)}_2−x^{(k)}_1,y^{(k)}_2-y^{(k)}_1) sk=(x2(k)x1(k),y2(k)y1(k))。 为了限制计算负担,为所有目标种类使用单一的尺寸预测,只预测两个channel一个是W一个是H,而不是将每一个类别对应两个channel,和关键点偏移量类似也使用L1 loss作为损失。
Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第11张图片
  • 损失函数

在这里插入图片描述

  • 从点到框:在推理阶段,我们对每个类别(对应一个channel)先独立地提取heatmap上的峰值点。具体做法:检测所有比周围的八个近邻点(八方位)都大(或者等于)的像素点,采样方式使用的是3×3的最大池化,然后每个类别保留100个峰值点。对于类别c我们用 P ^ c \hat{P}_c P^c 来表示n个检测到的中心点的集合 P ^ = ( x ^ i , y ^ i ) i = 1 n \hat{P}=(\hat{x}_i,\hat{y}_i)^n_{i=1} P^=(x^i,y^i)i=1n,每个关键点位置是一个给定的整数坐标 ( x i , y i ) (x_i,y_i) (xi,yi)。用如下公式(分别是框的左上角和右下角坐标)在这个位置产生水平框:
    ( x ^ i + δ x ^ i − w ^ i / 2 , y ^ i + δ y ^ i − h ^ i / 2 ) , ( x ^ i + δ x ^ i + w ^ i / 2 , y ^ i + δ y ^ i + h ^ i / 2 ) (\hat{x}_i+\delta\hat{x}_i-\hat{w}_i/2,\hat{y}_i+\delta\hat{y}_i-\hat{h}_i/2),(\hat{x}_i+\delta\hat{x}_i+\hat{w}_i/2,\hat{y}_i+\delta\hat{y}_i+\hat{h}_i/2) (x^i+δx^iw^i/2,y^i+δy^ih^i/2),(x^i+δx^i+w^i/2,y^i+δy^i+h^i/2)
    其中, ( δ x ^ i , δ y ^ i ) = O ^ x ^ i , y ^ i (\delta\hat{x}_i,\delta\hat{y}_i)=\hat{O}_{\hat{x}_i,\hat{y}_i} (δx^i,δy^i)=O^x^i,y^i是预测的位置偏移量, ( w ^ i , h ^ i ) (\hat{w}_i,\hat{h}_i) (w^i,h^i)是预测的尺寸。

  除了上述方法,作者还考虑了中心点冲突问题。在COCO训练集合中,总共860001个对象中有614对对象在下采样步长为4的情况下有相同的中心点,因此CenterNet因中心点冲突而不能够预测的对象小于0.1%,比Fast RCNN由于region proposals的瑕疵所产生的漏检的情况(约2%)小很多,也比基于anchor的方法由于不充足的anchor放置导致的漏检小很多(Faster RCNN中15个anchor在0.5IOU的阈值上约漏检20.0%)。用NMS对预测结果做后处理产生的影响较小,因此NMS是不需要的,峰值关键点的提取作用就是NMS的替代项,而且通过3×3的最大池化操作来被高效的执行。

基于Segmentation的解决方案

  上述的CenterNet-Keypoint已经与基于segmentation的解决方案有相似之处了,同样是将特征图的像素点作为一个检测框的位置,然后直接利用全卷积分支进行预测。只不过CenterNet更倾向于预测检测框的中心点,利用offset进一步预测偏移量,并且直接预测宽高两个回归值;而基于segmentation的网络更倾向于找到检测框内任一正样本的像素点,预测该框内点距离框的上下左右四个回归值。

FSAF

  《Feature Selective Anchor-Free Module for Single-Shot Object Detection》也是CVPR 2019中的一篇论文,主要针对单阶段(single-shot)目标检测算法的优化,主要是目标的尺度变化。如RetinaNet,作者发现利用FPN进行特征提取做回归与分类之前,会根据anchor的尺寸将其分配到固定的特征层上进行,然而这种将anchor直接划分的方法,可能并不会将anchor划分到最适合其分类与回归的层级。创新点:提出了基于anchor-free机制的特征选择(FSAF)模块,作为一个单阶段组件,其可以结合特征金字塔嵌入到单阶段检测器中进行在线特征选择

  • 如何创建anchor-free分支:经过上述分析,模型中不应该存在anchor限制特征的选择,因此采用了anchor-free的方式进行评估,确定当前anchor可做判别的最优特征层,然后将对应的anchor在该层级中使用anchor-based方法继续进行分类和回归 。网络结构如下,以三层金字塔结构简单的表示:
    Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第12张图片
    下图为在RetinaNet上使用FSAF模型的网络结构。引入了两个额外的卷积层,一个3×3×K的卷积层添加到分类分支的输出,后接sigmoid函数,预测目标物在每个位置上K个类别的概率值。相似的,3×3×4的卷积层添加到回归分支的输出,后接ReLU函数,其作用是以anchor-free的方式预测框的偏移量。对应的,通过anchor-based分支得到的分类结果的维度为W×H×KA,回归结果为W×H×4A,其中A为anchor的数量,K为总类别数;而通过anchor-free分支的分类结果为W×H×K,回归结果为W×H×4,因为在anchor-free分支上,是对每个点进行的预测,而每个点并没有固定的anchor数量,只需要分类与回归一次即可。
    Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第13张图片

  • 如何产生anchor-free分支的监督信号
    (1)对于分类来说,将ground-truth map分成了三种情况:存在目标区域(白色)、可忽略区域(灰色)、无目标区域(黑色)。定义 b = [ x , y , w , h ] b = [x, y, w, h] b=[x,y,w,h]表示一个ground-truth box,将其映射到不同特征层上有 b p l = [ x p l , y p l , w p l , h p l ] b_p^l = [x_p^l, y_p^l, w_p^l, h_p^l] bpl=[xpl,ypl,wpl,hpl],其中 l l l为对应的特征层级, P P P表示特征金字塔。再通过一个缩放比例得到最终的目标区域( b p l b_p^l bpl的0.2)和可忽略区域( b p l b_p^l bpl的0.5),其余为负样本区域。每个实例对于忽略区域的处理也会扩展到相邻的特征层中,如果同一层中有两个实例存在目标的区域发生了重叠,则以小区域的优先级较高为准。anchor-free分支的总分类损失是所有非忽略区域的Focal Loss之和,根据所有有效框区域内的像素总数归一化。
    (2)对于回归来说,就是预测4个位置偏移量映射。只训练正样本区域,对于每个像素点 ( i , j ) (i, j) (i,j),将 b p l b_p^l bpl表示为4维的向量 d i , j l = [ d t i , j l , d l i , j l , d b i , j l , d r i , j l ] d_{i,j}^l=[d_{t_{i,j}}^l, d_{l_{i,j}}^l, d_{b_{i,j}}^l, d_{r_{i,j}}^l] di,jl=[dti,jl,dli,jl,dbi,jl,dri,jl],分别表示 b p l b_p^l bpl到上、左、下、右四条边的距离,anchor-free分支的总回归损失是所有目标区域上IoU损失的平均值。

Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第14张图片
  • 如何为每个实例动态选择特征层:如下图所示,首先,实例通过特征金字塔的每一层计算所有anchor-free分支的损失和,损失最小所选择出来的特征对实例建模是最优的,则用该层特征在anchor-based分支学习该实例对应的anchor分类和回归。 在进行Inference时,并不进行在线特征选择,这是因为大部分合适的特征层会输出较高的confidence scores。
    Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第15张图片
  • 如何联合训练和测试anchor-free和anchor-based分支:整个网络模型的loss是anchor-free loss和anchor-based loss的加权和, L a b L^{ab} Lab为原本RetinaNet的loss, L c l s a f L_{cls}^{af} Lclsaf L r e g a f L_{reg}^{af} Lregaf为anchor-free分支的loss,λ 设置为0.5,可用下式表示:
    在这里插入图片描述
    在推理的时候,对于anchor-free分支,仅将每个特征层上置信度高于0.5阈值的框作为预测,最多取1000个得分位置。最后,会把anchor-free branch来自所有层次的预测与anchor-free branch的预测合并,得到的boxes一起做NMS。

FCOS

  不同于FSAF仍然没有摒弃anchor的方法,CVPR 2019的另一篇anchor-free论文《FCOS: Fully Convolutional One-Stage Object Detection》通过消除锚框,设计了一种更简单、更灵活的框架。创新点:在像素级预测中解决目标检测问题,使用FPN可以大幅度减弱重叠处的像素回归的框的不明确性,提出了一种新的“中心度”(center-ness)分支来降低低质量检测框的权重。
Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第16张图片

  • 网络结构:如上图所示,根据FPN,在不同层次的特征图上检测不同尺寸的物体,P3、P4 、P5 由主干CNN的特征图C3 、C4、C5经过一个1×1卷积横向连接得到,P6、P7分别由P5、P6经过一个stride=2的卷积层得到。所以,最后得到的P3、P4、P5、P6、P7分别对应stride=8,16,32,64,128。然后,在不同特征层上直接限制边界框的回归范围,回归的偏移量可以写为 t ∗ = ( l ∗ , t ∗ , r ∗ , b ∗ ) \bold{t}^* =(l^*,t^*,r^*,b^*) t=(l,t,r,b) l ∗ = x − x 0 , t ∗ = y − y 0 , r ∗ = x 1 − x , b ∗ = y 1 − y l^* =x−x_0, t^*=y−y_0 , r^*=x_1−x, b^*=y_1 −y l=xx0,t=yy0,r=x1x,b=y1y,如下图所示。如果第 i i i 层特征图上某一像素位置满足 m a x ( l ∗ , t ∗ , r ∗ , b ∗ ) > m i max(l^*,t^*,r^*,b^*)>m_i max(l,t,r,b)>mi或者 m a x ( l ∗ , t ∗ , r ∗ , b ∗ ) < m i − 1 max(l^*,t^*,r^*,b^*)max(l,t,r,b)<mi1将不会用于边界框的回归, m i m_i mi 是第 i i i 层特征图最大的回归距离。文中,m2,m3,m4,m5,m6,m7被设置为0,64,128,256,512, ∞ \infty 。最后,在不同特征层上共享了Head网络。如果位置 ( x , y ) (x,y) (x,y)落入任何真实框 ( x 0 , y 0 , x 1 , y 1 ) (x_0,y_0,x_1,y_1) (x0,y0,x1,y1)内(左上角和右下角),就认为它是一个正样本,它的类别标记为这个真实边框的类别;否则,它就被认为是负样本。
Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第17张图片

损失函数如下:
在这里插入图片描述
L c l s L_{cls} Lcls 是focal loss, L r e g L_{reg} Lreg 是IOU loss, N p o s N_{pos} Npos 代表正例数量,λ设为1用于平衡两种损失。求和计算在整个特征图上进行,其中(⋅)代表指示函数。

  • Center-ness:由于网络预测了很多低质量的、远离目标中心的边界框,导致了检测性能下降。不同于FSAF,将目标框内按阈值分为目标区域、可忽略区域和非目标区域,FCOS让网络学习每一个像素点离目标中心的远近。因此,在网络中增加了一个和分类分支并列的单层网络分支,来预测每个位置的“中心度”。某一位置的回归目标为 l ∗ , t ∗ , r ∗ , b ∗ l^*,t^*,r^*,b^* l,t,r,b,中心度定义如下,即水平最短边与垂直最短边的乘积与最长边乘积的比值,该比值在越偏离中心点时越小:
    在这里插入图片描述
    开根号是为了减缓中心度的衰减,中心度的范围从0到1,因此可以使用二值交叉熵(BCE)损失来训练。推理的时候,最终得分(用来给预测的边界框排序)为分类得分和中心度的乘积。

FoveaBox

  不得不说,CVPR 2019的这三篇anchor-free论文的思想有着极大的相似之处,这篇《FoveaBox: Beyond Anchor-based Object Detector》也是在RetinaNet的基础上,将不同尺度目标分配到不同特征层上,直接进行像素点的分类和回归。创新点:根据人类视觉对物体中心感应最敏锐的中央凹(Fovea)结构确定物体位置,提出了以下检测方法 1)预测类别相关的语义图来表征目标存在的概率;2)产生类别无关的可能包含目标物体的矩形框。

  • 网络结构:FoveaBox是一个单一的、统一的网络,由一个主干网络和两个特定于任务的子网络组成。主干网络负责计算整个输入图像上的卷积特征图,是一个现成的卷积网络。第一个子网对主干的输出按像素进行分类;第二个子网络对相应的位置执行边界框预测。如下图所示,采用特征金字塔网络 ( FPN )作为后续检测的骨干网络,每一层都可以用来检测不同尺度的物体。可以看出,除了center-ness分支,FoveaBox与FCOS的子网络没有区别。
    Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第18张图片
    根据特征金字塔层的层数将目标的尺度划分为几个bins,对于level P l P_{l} Pl,基本面积 S l = 4 l ∗ S 0 S_{l}=4^l*S_{0} Sl=4lS0 ,其中 S 0 S_{0} S0 设为16, P 3 P_{3} P3 P 7 P_{7} P7 层的基本面积从 3 2 2 32^{2} 322 51 2 2 512^{2} 5122 不等。 进一步,level P l P_{l} Pl上目标框的有效尺度范围为 [ S l / η 2 , S l ⋅ η 2 ] [S_l/\eta^2,S_l\cdot\eta^2] [Sl/η2,Slη2],依据经验设置 η \eta η 来控制每层金字塔的尺度范围。训练过程中,忽略不在相应尺度范围内的检测目标,一个目标可能被网络的多层金字塔检测到。
  • Object Fovea:在分类特征图W×H×K中,K为类别数,每个通道都是一个二进制掩码。给定一个有效的 ground-truth 框,表示为 ( x 1 , y 1 , x 2 , y 2 ) ( x_{1}, y_{1}, x_{2}, y_{2} ) (x1,y1,x2,y2)用 stride 为 2 l 2^{l} 2l 将该框映射到目标特征金字塔 P l P_{l} Pl 中,然后用 σ 1 σ_1 σ1为正样本区域进行一个缩放:
    Anchor Free的目标检测算法之CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox_第19张图片
    σ 1 = 0.3 , σ 2 = 0.4 σ_1=0.3,σ_2=0.4 σ1=0.3σ2=0.4 σ 2 σ_2 σ2用于限制负样本区域。使用Focal loss来训练这个分支的目标 L c l s L_{cls} Lcls
  • Box Prediction:将 feature maps 中单元格 ( x , y ) ( x, y ) (x,y) 处的网络位置输出 ( t x 1 , t y 1 , t x 2 , t y 2 ) \left ( t_{x_{1}}, t_{y_{1}}, t_{x_{2}}, t_{y_{2}} \right ) (tx1,ty1,tx2,ty2)映射到 ground-truth 框的转换如上所示。这个函数先将坐标 ( x , y ) ( x, y ) (x,y) 映射到输入图像,然后计算投影坐标与 GT 之间的归一化偏移量,最后利用对数空间函数对目标进行正则化。其中, z = S l z=\sqrt{S_{l}} z=Sl 是将输出空间投影到以1为中心的空间的归一化因子,使得目标的学习更容易、更稳定。采用广泛使用的Smooth L1 loss来训练框的预测 L b o x L_{box} Lbox

实验可视化结果如下:

你可能感兴趣的:(总结经验帖)