浅谈Anchor-Free发展历程

1.早期探索:
DenseBox: https://arxiv.org/abs/1509.04874
YOLO: https://arxiv.org/abs/1506.02640
2.基于关键点:
CornerNet: https://arxiv.org/abs/1808.01244
ExtremeNet: https://arxiv.org/abs/1901.08043
3.密集预测:
FSAF: https://arxiv.org/abs/1903.00621
FCOS: https://arxiv.org/abs/1904.01355
FoveaBox: https://arxiv.org/abs/1904.03797v1

DenseBox:
浅谈Anchor-Free发展历程_第1张图片

如图所示,单个FCN同时产生多个预测bbox和置信分数的输出。测试时,整个系统将图片作为输入,输出5个通道的feature map。每个pixel的输出feature map得到5维的向量,包括一个置信分数和bbox边界到该pixel距离的4个值。最后输出feature map的每个pixel转化为带分数的bbox,然后经过NMS后处理。
除了nms之外,检测系统的所有组成部分都构建在FCN之中。

训练过程:
浅谈Anchor-Free发展历程_第2张图片
上图是本文的网络结构图。红色部分表示存在学习参数。前12个conv层的网络参数由VGG19模型参数直接初始化,conv4_4的输出作为后续四个1*1卷积层的输入,前两个输出的是通道1的特征图,用于分类预测,后两个利用通道4的特征图来预测bounding box的相对位置。这种有两个输出分支的结构和Fast R-CNN很相似,在第一个输出端口定义分类损失函数,在第二个定义bounding-box回归损失函数,这样就可定义完整的损失函数。

Refine with Landmark Localization:
浅谈Anchor-Free发展历程_第3张图片
浅谈Anchor-Free发展历程_第4张图片
在FCN结构中添加少量层能够实现landmark localization,然后通过融合landmark heatmaps和score map可以进一步提升检测结果。

贡献:
1.证明单个FCN可以检测出遮挡严重、不同尺度的目标。
2.通过多任务引入landmark localization,能进一步提升性能。

YOLOv1:

YOLO将目标检测作为一个空间分离的边界框和相关的类概率的回归问题。可以直接从整张图片预测出边界框和分类分数。

浅谈Anchor-Free发展历程_第5张图片
浅谈Anchor-Free发展历程_第6张图片
YOLO将输入图片分成SXS个网格,如果某个目标的中心点落到其中一个格点,那么该格点就负责该目标的检测。每个格点预测出B个bbox和每个bbox的置信分数。
置信分数计算公式:
在这里插入图片描述
其中如果有 object 落在一个 grid cell 里,第一项取 1,否则取 0。 第二项是预测的 bounding box 和实际的 groundtruth 之间的 IoU 值。
每个 bounding box 要预测 (x, y, w, h) 和 confidence 共5个值,每个网格还要预测一个类别信息,记为 C 类。则 SxS个 网格,每个网格要预测 B 个 bounding box 还要预测 C 个 categories。输出就是 S x S x (5*B+C) 的一个 tensor。

DenseBox和YOLO的区别:

1.DenseBox最初应用于人脸检测,相当于只有两类,而YOLO是通用检测,通常大于两类。
2.DenseBox是密集预测,对每个pixel进行预测,而YOLO先将图片进行网格化,对每个grid cell进行预测,所以前者更适合于小目标,后者更适合于大目标。
3.DenseBox的gt通过bbox中心圆形区域确定的,而YOLO的gt由bbox中心点落入的grid cell确定的。

CornerNet:

浅谈Anchor-Free发展历程_第7张图片
1、输入一张图像,经过backbone网络(Hourglass network)后,得到feature map。
2、将feature map同时输入到两个branch,分别用于预测Top-Left Corners和Bottom-right Corners。
3、两个branch都会先经过一个叫Corner Pooling的网络,最后输出三个结果,分别是Heatmaps、Embeddings、Offsets。
4、根据Heatmaps能够得到物体的左上角点和右下角点,根据Offsets对左上角和右下角点位置进行更加精细的微调,根据Embeddings可以将同一个物体的左上角和右下角点进行匹配。得到到最终的目标框。

1:怎么检测这个两个点?生成keypoint的heatmap,heatmap中响应值最大的位置就是点的位置。
2:怎么知道这两个点所组成的框包含物体的类别?每个heatmaps集合的形式都是CxHxW,其中C代表的是检测目标的类别数,H和W则代表的heatmap的分辨率,Corner响应值最大所在的channel即对应了物体的类别。
3:当图像中有多个物体时,怎么知道哪些点可以组成框?(哪些左上角的点和哪些右下角的点能够组成有效的框)生成embedding向量,用向量的距离衡量两个Corner是否可以组成对。
4:Loss是什么形式?loss总共分了三个部分,一部分是用于定位keypoint点的detecting loss,一个是用于精确定位的offset loss,一个是用于对Corner点进行配对的grouping loss。
5:网络结构是怎么样的?使用Hourglass作为backbone,使用Corner Pooling构造了prediction module,用来得到最终的结果。
6:有没有什么比较新奇的东西?提出的Corner Pooling,第一次使用检测点的方法检测物体。

贡献:
1.通过检测bbox的一对角点来检测出目标。
2.提出corner pooling,来更好的定位bbox的角点。
浅谈Anchor-Free发展历程_第8张图片
上图是top-left corner的 Corner Pooling过程。在水平方向,从最右端开始往最左端遍历,每个位置的值都变成从最右到当前位置为止,出现的最大的值。同理,bottom-right corner的Corner Pooling则是最左端开始往最右端遍历。同样的,在垂直方向上,也是这样同样的Pooling的方式。
以左上角点为例,当我们决定此点是否个corner点的时候,往往会沿着水平的方向向右看,看看是否与物体有相切,还会沿着垂直方向向下看,看看是否与物体相切。简而言之,其实corner点是物体上边缘点和坐边缘点的集合,因此在pooling的时候通过Corner Pooling的方式能够一定程度上体现出当前点出发的射线是否与物体相交。

ExtremeNet:
浅谈Anchor-Free发展历程_第9张图片
作者使用了最佳的关键点估计框架,通过对每个目标类预测4个多峰值的heatmaps来寻找极值点。另外,作者使用每个类center heatmap来预测目标中心。仅通过基于几何的方法来对极值点分组,如果4个极值点的几何中点在center map上对应的分数高于阈值,则这4个极值点分为一组。
​offset的预测是类别无关的,而极值点的预测是类别相关的。对每种极值点heatmap,不包含center map,预测2张offset map(分别对应XY轴方向)。网络的输出是5xC heatmaps和4x2offset maps,C是类别数。
分组算法的输入是每个类的5个heatmaps,一个center heatmap和4个extreme heatmaps,通过检测所有的峰值来提取出5个heatmaps的关键点。给出4个极值点,计算几何中心,如果几何中心在center map上对应高响应,那么这4个极值点为有效检测。作者使用暴力枚举的方式来得到所有有效的4个关键点。
贡献:
1.将关键点定义为极值点。
2.根据几何结构对关键点进行分组。

CornerNet和ExtremeNet的区别:

1.CornerNet通过预测角点来检测目标的,而ExtremeNet通过预测极值点和中心点来检测目标的。

2.CornerNet通过角点embedding之间的距离来判断是否为同一组关键点,而ExtremeNet通过暴力枚举极值点、经过中心点判断4个极值点是否为一组。

FSAF:

让每个实例选择最好的特征层来优化网络,因此不需要anchor来限制特征的选择。

浅谈Anchor-Free发展历程_第10张图片
一个anchor-free的分支在每个特征金字塔层构建,独立于anchor-based的分支。和anchor-based分支相似,anchor-free分支由分类子网络和回归子网络。一个实例能够被安排到任意层的anchor-free分支。训练期间,基于实例的信息而不是实例box的尺寸来动态地为每个实例选择最合适的特征层。选择的特征层学会检测安排的实例。推理阶段,FSAF模块和anchor-based分支独立或者联合运行。

浅谈Anchor-Free发展历程_第11张图片
在RetinaNet的基础上,FSAF模块引入了2个额外的卷积层,这两个卷积层各自负责anchor-free分支的分类和回归预测。具体的,在分类子网络中,feature map后面跟着K个3x3的卷积层和sigmoid,在回归子网络中,feature map后面跟着4个3x3的卷积层和ReLU。

gt:
浅谈Anchor-Free发展历程_第12张图片
Online Feature Selection:
浅谈Anchor-Free发展历程_第13张图片
实例输入到特征金字塔的所有层,然后求得所有anchor-free分支focal loss和IoU loss的和,选择loss和最小的特征层来学习实例。训练时,特征根据安排的实例进行更新。推理时,不需要进行特征更新,因为最合适的特征金字塔层自然地输出高置信分数。

FCOS:
浅谈Anchor-Free发展历程_第14张图片
和语义分割相同,检测器直接将位置作为训练样本而不是anchor。具体的,如果某个位置落入了任何gt中,那么该位置就被认为是正样本,并且类别为该gt的类别。基于anchor的检测器,根据不同尺寸安排anchor到不同的特征层,而FCOS直接限制边界框回归的范围(即每个feature map负责一定尺度的回归框)。

Center-ness:
浅谈Anchor-Free发展历程_第15张图片
为了剔除远离目标中心的低质量预测bbox,作者提出了添加center-ness分支,和分类分支并行。
在这里插入图片描述
优点:
1.将检测和其他使用FCN的任务统一起来,容易重用这些任务的思想。
2.proposal free和anchor free,减少了超参的设计。
3.不使用trick,达到了单阶段检测的最佳性能。
4.经过小的修改,可以立即拓展到其他视觉任务上。

FoveaBox:

人类眼睛的中央凹:视野(物体)的中心具有最高的视觉敏锐度。FoveaBox联合预测对象中心区域可能存在的位置以及每个有效位置的边界框。由于特征金字塔的特征表示,不同尺度的目标可以从多个特征层中检测到。

浅谈Anchor-Free发展历程_第16张图片

FoveaBox添加了2个子网络,一个子网络预测分类,另一个子网络预测bbox。

Object Fovea:
浅谈Anchor-Free发展历程_第17张图片
目标的中央凹如上图所示。目标中央凹只编码目标对象存在的概率。为了确定位置,模型要预测每个潜在实例的边界框。

FSAF、FCOS、FoveaBox的异同点:

1.都利用FPN来进行多尺度目标检测。
2.都将分类和回归解耦成2个子网络来处理。
3.都是通过密集预测进行分类和回归的。
4.FSAF和FCOS的回归预测的是到4个边界的距离,而FoveaBox的回归预测的是一个坐标转换。
5.FSAF通过在线特征选择的方式,选择更加合适的特征来提升性能,FCOS通过center-ness分支剔除掉低质量bbox来提升性能,FoveaBox通过只预测目标中心区域来提升性能。

总结:
1.各种方法的关键在于gt如何定义
2.主要是基于关键点检测的方法和密集预测的方法来做Anchor-Free
3.本质上是将基于anchor转换成了基于point/region

你可能感兴趣的:(深度学习)