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

本文深入探讨了Anchor Free目标检测算法,从CornerNet、ExtremeNet、CenterNet到FSAF、FCOS和FoveaBox,逐一解析这些算法的原理和改进。这些算法旨在解决Anchor Based方法中存在的问题,如超参数过多、正负样本不平衡及计算资源浪费。通过检测物体的关键点或直接对像素点进行分类和回归,Anchor Free方法为目标检测提供了新的思路。
摘要由CSDN通过智能技术生成

  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时,大量的锚框也会占用大量的计算资源和内存。
  • 通过锚框内的信息来检测目标可能不够合理,因为有时候背景占据了矩形框的绝大部分,或者一个框内并不只包含一个目标,这个时候检测器精度就会下降。

基于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用来将细节添加到上采样的特征。沙漏模块在一个统一的结构中捕获全局和局部特征,当多个沙漏模块堆积在网络中时,沙漏模块可以重新处理特征以获取更高级别的信息。
在这里插入图片描述

  • 网络结构:如下图所示,使用沙漏网络作为CornerNet的backbone网络,沙漏网络由两个沙漏模块组成。沙漏网络之后是两个预测模块, 一个模块用于左上角,而另一个模块用于右下角。 每个模块都有自己的corner pooling模块,用于在预测热图、嵌入和偏移这三个分支之前池化来自沙漏网络的特征。 与许多其他目标检测器不同,不使用不同尺度的特征来检测不同大小的物体,只将两个模块应用于沙漏网络的输出。
    在这里插入图片描述
  • 检测角点:预测两组热图(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)很有可能是左上角点。右下角点的特征提取也同理可得。
    在这里插入图片描述

完整的训练损失: 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减少策略。
    在这里插入图片描述
  • 中心分组:中心分组算法的输入是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个点的平均值为该检测框的置信度分数。
    在这里插入图片描述
  • Ghost box抑制:如下图所示,若存在三个物体的尺寸相近,且在空间上呈线性排列的时候,容易出现Ghost box。对物体2这个目标来说,如果选择物体1的最右点和物体三的最左点,在判断中心的时候也会出现在物体2的中心,因此比真实框大一圈的box也被保留了下来,出现误判。作者使用soft NMS来抑制Ghost box:如果某个包围框,其内部所有的包围框的score综合超过了其本身score的3倍,则将其本身的score修正为原来的1/2。
  • 边缘聚合:当物体边缘是水平或者垂直的边时,沿边的任意一点都可以认为是极值点,因此极值点的响应会被弱化,而不能找到突出的某一个极值点。这将会带来两方面的问题:(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来表示一个目标,即用一个中心点和一对角点坐标。
    在这里插入图片描述

  • 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,即小的预测框的中心区域较为宽松,大的预测框中心区域则较小。
    在这里插入图片描述

  • 丰富中心和角点信息:物体的几何中心不一定具有可识别的视觉信息,为了解决这个问题提出了center pooling,来捕获更丰富和更易于识别的视觉特征。具体过程如下:backbone输出一个feature map,要确定feature map中的一个像素是否为中心关键点,将该像素点来自水平和竖直方向的最大响应相加赋给当前位置,如上右图(a)所示。此外,角点通常位于物体外部,缺乏局部外观特征。ConrnerNet使用了corner pooling找出边界方向上的最

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值