Bootstrap

SSD、Retinanet、RefineDet、CornerNet、ExtremeNet、CenterNet、FSAF、FCOS、FoveaBox相对于yolo的区别

一:SSD

  • SSD的backbone是VGG16,不是yolo2中的Darknet-19
  • 不同于yolo2中的细粒度特征重组,SSD中的特征融合是FPN的一种雏形,可见下图:
    在这里插入图片描述

二:Retinanet

  • backbone是resnet
  • 考虑到计算量还是很大,没有从特征图C2开始计算P2。选择从C3提取出P3,开始计算FPN
  • 最大贡献是提出Focal Loss,很好地解决了one-stage速度快,但是正负样本不平衡问题,同时根据样本分辨的难易程度给样本对应的损失添加权重,可参考Focal Loss详解

三:RefineDet

  • Two-Stage 和 One-Stage 方法的结合(RON也是),糅合了one-stage的高效和two-stage的准确
  • 它使用两个相互连接的模块,即 ARM 和 ODM,来改进one-stage的体系结构。
  • ARMARM 识别并删除 negative anchors,以减少分类器的搜索空间;粗略调整 anchors 的位置和大小,为后续提供更好的初始化回归。 这部分类似 Faster R-CNN 算法中的 RPN 网络,主要用来得到 bbox(类似 Faster R-CNN 中的 ROI 或 proposal)和去除一些负样本(这是因为负样本数量远大于正样本)。因此基于 4 层特征最后得到的还是两条支路,一个 bbox 的坐标回归支路,另一个是 bbox 的二分类支路。我们知道在 Faster R-CNN 算法中 RPN 网络存在的意义就是生成 proposal(或者叫 ROI),这些 proposal 会给后续检测网络提供较好的初始信息,这也是 one stage 的 object detection 算法和 two stage 的 object detection 算法的重要区别,这里的 ARM 基本上扮演了 RPN 网络的角色,如果一定要说不同点的话,那应该就是这里的输入利用了多层特征,而 RPN 网络的输入是单层特征。
  • ODM:ODM 采用 ARM 产生的 refined anchors 作为输入,进一步改善回归和预测多类标签。这两个互连模块模仿两阶段结构,因此继承了其三个优点来产生准确的检测结果,效率也高。这部分就基本上是 SSD 了,也是融合不同层的特征,然后做 multi class classification 和 regression。主要的不同点一方面在于这部分的输入 anchors 是 ARM 部分得到的 refined anchors,类似RPN 网络输出的 proposal。另一方面和 FPN 算法类似,这里的浅层 feature map(size 较大的蓝色矩形块)融合了高层 feature map 的信息,然后预测 bbox 是基于每层 feature map(每个蓝色矩形块)进行,最后将各层结果再整合到一起。而在 SSD 中浅层的 feature map 是直接拿来用的(并没有和高层的 feature map 融合),也就是对 bbox 的预测是在每一层上进行的,预测得到结果后再将各层结果整合在一起,这是非常重要的区别。这样做的好处就是对小目标物体的检测效果更好,这在 FPN 和 RON 等算法中已经证明过了。
    在这里插入图片描述具体可参考RefineDet讲解RefineDet讲解2

上述的网络都是有先验框的、以yolo思想为核心的经典网络,那么下面我们看看无先验框、关键点法的网络CornerNetExtremeNetCenterNet


四:CornerNet

在这里插入图片描述
解决了基于anchor框预测网络的两大缺陷:

  • Anchor boxes 的数量需要非常大,如在 DSSD 算法中超过了 40000,在 RetinaNet 中超过了 100000,当然最后只有一小部分 anchor boxes 会和 GT 框重合,这就带来了严重的正负样本不均衡问题
  • Anchor-Based 的算法引入了很多超参数和设计选择,如 Anchor 的个数,宽高比,大小等等,当于多尺度结合的时候网络会变得更加复杂。

论文提出了 CornerNet,这是一种新的 one-stage 的 Anchor-Free 目标检测算法。论文将对一个目标的检测看成一对关键点(左上和右下)的检测。

整体的原理是经过两层沙漏层,提取出C通道数(预测类别数)的特征图。然后按左上角和右下角顶点分开预测。比如左上角预测模块,先进行一层corner pooling,考虑到顶点大可能位于目标图像外,利用这一先验结构信息,进行特殊池化。接着生成热度图、嵌入特征、偏移量,热度图进行角点预测,嵌入特征进行角点分组(就是匹配到同一类实例上),偏移来进行角点位置的微调。
在这里插入图片描述
详细讲解可以看CornerNet讲解

五:CenterNet

CornerNet对于小物体的错检率很高,达到了60.3。究其原因,就是因为CornerNet不能“窥探”bounding box内部的信息。因此,CenterNet用三个关键点进行bounding box的确定,这种方法仍然属于one-stage范畴,但是部分继承了ROI Pooling的功能,CenterNet只关注中心信息,因此计算量较小,通过center pooling和级联的Corner pooling,进一步将对象内部的视觉模式引入到基于关键点的目标检测中去。

  • center pooling
    通过网络主干得到一个feature map,逐像素检验是否为中心点,方法为分别在水平和垂直方向上找到最大值并进行相加,通过这种操作,center pooling能够帮助我们更好的找到中心点。这一步操作是为了后面生成中心点heatmap服务的。检测出了中心点,就可以看bounding box的中心范围是否囊括了同类别的检测中心点,有的话说明正确并保留,否则剔除,这样可以大大降低误检率。
    通过网络主干得到一个feature map,逐像素检验是否为中心点,方法为分别在水平和垂直方向上找到最大值并进行相加,通过这种操作,center pooling能够帮助我们更好的找到中心点。
    在这里插入图片描述
    在这里插入图片描述

  • cascade corner pooling
    和CornerNet中的corner pooling相比,Corner pooling旨在找到在垂直和水平方向上的最大值,以此来决定Corner位置,然而,这也带来了一个问题就是对边界很敏感。
    为了解决这个问题,我们想办法让Corner“看到”物体内部的信息,这也就是cascade Corner pooling存在的意义,如下图所示,cascade Corner pooling首先沿着边界找到一个最大值,然后在最大值的方向“往里看”,找到一个内部最大值,然后将两个最大值相加,这样,Corner就相当于“看见了”内部信息。
    在这里插入图片描述

CenterNet可以说是博采众长,本质上来说,它属于one-stage的目标检测,但是,通过center pooling和cascade Corner pooling,让它具备了“看见”物体内部信息的能力,而这时two-stage才有的特点,通过将CornerNet的两个关键点提到为两个corner+一个center的三个关键点,有效地解决了错检框太多,对中间信息认识不足的弊端,在性能上有了很大的提升。

具体讲解请看CenterNet讲解

六:ExtremeNet

目标检测问题已经从一个由下到上的问题转变为一个由上到下的问题。(下文有详细介绍)当前最先进的目标检测算法首先枚举密集的目标可能存在的位置,然后对每一个位置分类判断是否存在目标,是前景还是背景。在本文中,作者认为,从下到上的方法仍然能够取得很好的性能。利用关键点预测网络预测四个极值点(最顶部、最左侧、最底部、最右侧)和一个中心点共五个关键点。

通过预测每个对象类别的四个多峰热图(heatmaps),找到四个极值点(最顶部、最左侧、最底部、最右侧),此外,再利用一个heatmaps进行中心点预测,并将该点作为x维和y维两个边界框的平均值。使用几何方法对极值点进行分类,如果四个极值点的几何中心在中心热图中的得分高于阈值,那么这四个极值点就会被归为一组。枚举所有可能的极值点组合,然后选择符合条件的,分为一组。如下图所示:首先通过四个热点图选出极值点(下图四种颜色的点,每种颜色的点代表四类中一类的极值点)的候选,一个热图选出中心点的候选。然后对于极值点候选,每个类选择一个,进行组合,组合出来的四个点,求其几何中心,如果该几何中心在中心点预测的热图上有超过阈值的分数,那么这四个极值点就是一组的,得到一个bounding box。否则,拒绝,进行下一种组合。
在这里插入图片描述

  • Center Grouping(极值点分组)
    在CornerNet上,借鉴了人体姿态估计中的向量嵌入方法将角点进行分组,但是作者认为这种方法可能缺少足够的全局视图信息。于是本文采取了截然不同的策略进行分组。也就是Center Grouping。
    整个模块的输入是每一个类别的5个热图即一个中心点热图和4个极值点热图。给定一个热点图,首先通过检测峰值(peaks)将所有关键点提取出来。峰值的定义是热点图中所有得分超过阈值τp 的点。提取方法是设置一个3x3的窗口,找到窗口中的局部最大值。这个过程也就是ExtractPeak,提取极值点阶段。
    提取完极值点后,计算出中心点,然后查找对于类中心热度图的得分,如果大于阈值的话,说明极值点分组正确,以此枚举所有分组情况。
  • Ghost box suppression
    先解释一下什么是Ghost box。仔细想想Center grouping算法,可能会出现这样一种情况,中心分组可以对三个相同大小的等距共线目标进行高置信false-positive检测。这时位于中间位置的对象有两个选择,一种是选择正确的小框,另一种预测一个更大的框,里面有它相邻物体的极值点。把这种false-positive的形式称为ghost boxes。为了消除这种错误,利用nms进行抑制,nms原先是用在消除重叠框上的,在这里同样有效。ghost box包含许多其他小的检测对象,我们采用soft nms解决这个问题。若某个box所包含的所有框的分数和大于其自身的3倍,则最终分数除以2,这可以看做是一种惩罚,惩罚的对象是ghost box。
  • Edge aggregation
    有时候,极值点并不是唯一的,举例来说,一辆汽车,可能顶部这一条类似于水平的线上,每一个位置都有可能成为最顶部的极值点。也就是说,若极点来自物体的垂直或水平边,则沿边缘任何一点都可被认为是极点。因此,我们的网络沿着对象的任何对齐边缘产生弱响应,而不是单一的强峰值响应。可能会造成两种不足:
    1.弱响应点的得分可能会小于阈值,那么极值点就会被错过。
    2.即使检测到了这些极值点,它的得分将低于具有强峰值响应的稍微旋转的对象。
    为了解决这种问题,提出了该边缘聚合的检测方法,对每一个极值点水平左右(或竖直上下)方向上,聚合直至最近的两个局部最小点。下图是经过边缘聚合后的效果图:在原始heatmaps中,位于边缘的极值点,反馈回一个很弱的响应值,但是经过边缘聚合处理后,大大增强了中间像素的响应值。
    在这里插入图片描述

下面我再来讲解一下无先验框、中心域法的网络FSAFFCOSFoveaBox


七:FSAF

就是一种online feature selective的模块。让网络知道这个GT对应到哪儿一层feature layer。为什么称作为Online呢,因为在每一次参数更新的时候,需要将所有的目标分配到最优的特征层。也就是说,每一个特征层的参数,只学习对应的groundtruth目标。

在anchor-based中,常常使用Heuristic feature selection启发式特征层选择,也即FPN中采用的基于目标尺寸的特征层选择方法。但是online feature selective确实基于目标内容选择最优特征层,明显会优于HFS方法。

具体原理请看FSAS讲解,这里只给出下图:

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

八:FCOS

FCOS是一种典型的one-stage、anchor-free的网络模型,并且不是基于关键点检测,而是一种逐pixel(实际上是逐cell)的检测方法。通过对GT中心域所在cell进行类预测,并给出(l,r,t,b)四个偏移回归量,完成检测任务。

如图1所示,左图中橙色框中某个cell直接预测与目标框的4个偏移量,但是如果一个cell包含在多个目标之中,这就出现了冲突:这个cell到底该回归哪个目标?如右图所示。FCOS通过一系列设计来解决这个问题,这也是FCOS的核心。
在这里插入图片描述

FCOS采用的网络架构和RetinaNet一样,都是采用FPN架构,如下图所示,每个特征图后是检测器,检测器包含3个分支:classification,regression和center-ness。

在这里插入图片描述

  • classfication
    一个GT投影到一个特征图上,对其中中心区域内的cell作为正样本,并负责预测这个GT。在最早的版本是落在GT之内就算正样本,不过采用中心区域策略效果更好。用focal loss进行C个二分类。
    尽管采用中心区域抽样方法,可以减少前面说的冲突问题,但是无法保证,如果一个位置落在了多个GT的中心区域,此时就是模糊样本。FCOS采用的一个策略是选择面积最小的GT作为target,后面会谈到结合FPN,FCOS可以大大减少模糊样本的出现。
    在这里插入图片描述

  • regression
    对于regression分支,每个位置预测一个实数向量 t = ( l , t , r , b ) t = (l, t, r, b) t=(l,t,r,b),其对应的target为当前位置与GT框4个顶点间的距离。这里用特征图的stride来对回归的target进行缩放,以避免训练过程中的可能出现的梯度爆炸。
    在这里插入图片描述

  • center-ness
    FCOS在regression分支的末尾添加了一个额外的center-ness分支(最早的版本是放在classification分支,但是放在regression分支效果更好)来抑制那些由那些偏离目标中心的位置所预测的低质量检测框。center-ness分支只预测一个值:当前位置与要预测的物体中心点之间的归一化距离,值在[0, 1]之间,图4给出了可视化效果,其中红色和蓝色值分别1和0,其它颜色介于两者之间,从物体中心向外,center-ness从1递减为0。
    在这里插入图片描述
    这里的sqrt可以改变置信度的数量级(FCOS的预测框置信度偏低),但是不会影响评测的AP值。实验证明center-ness的使用可以使FCOS在COCO数据集上的AP值提升1个点左右,另外论文也定量分析了center-ness分支在压制低质量检测框的作用,如图5所示,可以看到未使用center-ness,FCOS会检出一定量的高置信度但低IoU的边界框(在IoU阈值下就是FP),而使用center-ness后这部分数量大大减少。

  • 损失函数
    在这里插入图片描述
    这里的1 c ∗ x , y _{c*x,y} cx,y当为正样本时取1,为负样本时取0,所以L c l s _{cls} cls和L r e g _{reg} reg只有正样本才计算。而权重系数,在论文中均取1。前面已经说过分类loss采用focal loss,而center-ness采用BCE损失,这里的回归loss采用GIoU,其效果优于IoU。

  • FPN
    对于anchor-based方法,由于是根据anchor和GT的IoU来进行匹配,所以很自然地将大小不同的GT分配到不同的特征图。而FCOS直接通过限制不同特征图上目标回归值来达到这一目的。具体来说,每个特征图会设定一个回归值的下限值 m i − 1 mi-1 mi1和上限值 m i mi mi,某个GT在该特征图上正样本位置(满足前面所述的中心区域内条件)还要满足目标回归值大小限制:
    在这里插入图片描述
    这样就限制了不同特征图上的回归距离,从而将不同大小的目标分配到不同特征图上,因为不同特征图的感受野不同,通过这种方式可以确保要回归的物体整个包含在特征图的感受野内。论文中,m2 ~ m7分别设定为0,64,128,256,512,inf,那么特征图P3覆盖的是[0,64]之间的目标回归值,而P7则是负责512以上的目标回归值。与RetinaNet一样,所有的检测器head在各个特征图上是共享的,但是由于不同特征图对应的回归值范围差异较大,可能学习成本大,所以最早版本FCOS在regression分支最后输出是乘以一个可学习的scale值以解决这个问题。
    但是现在的版本中,前面已经提到每个特征图上的回归值其实是已经除以特征图的[公式]进行缩放,这样就和学习一个scale值基本等同,所以加不加这个策略都可以。
    模糊样本的出现大部分是由于物体重叠造成的,但是重叠的物体大部分其大小是不同的,所以FPN的使用可以更一步解决模糊样本问题。
    具体FCOS的讲解可以参考这篇博文

九:FoveaBox

FoveaBox跟FCOS很像,思路基本一样,都是基于RetinaNet,同样是每一个location预测一个类别和四个坐标相关的数,只是FCOS预测到四个边界的距离,Fovea预测一个坐标转换。而且,引入两个缩放因子,来设置正样本区域和负样本区域,和FSAF比较相似。具体可参照FoveaBox讲解

;