天天看点

【论文总结】:基于密集点检测的anchor-free算法总结

引言

在Anchor-free方法中,可以分为两种,一种是基于关键点检测,另一种是基于密集点检测

基于关键点检测有:

  • CornerNet(左上角点+右下角点)
  • CornerNet-Lite(左上角点+右下角点)
  • CenterNet :Objects as Points(中心点+边框回归)
  • CenterNet: Keypoint Triplets for Object Detection(中心点+左上角点+右下角点)
  • CSP(中心点+尺度预测)
  • ExtremeNet(4个极值点+中心点)
  • PLN(4个角点+中心点)
  • RepPoints(可变性卷积提取Offset关键点)

基于密集点检测有:

  • DenseBox(中心点处dense)
  • UnitBox(IOU loss)
  • YOLO v1
  • FCOS(中心点+边框回归)
  • FoveaBox(中央凹结构)
  • FSAF(anchor-based + anchor-free)
  • DuBox(双尺度+中心点范围扩大)

本文将对基于密集点检测的anchor-free算法进行总结,主要是FCOS、FoveaBox、FSAF算法,DenseBox和Yolo v1可以看成是anchor-free的早期探索,具体详情可以点击上面的链接笔记,UnitBox其实跟DenseBox很像,最大的创新就是IOU loss,这里也不进行总结。

注:关于anchor-free的分类,当然也可以按单关键点和多关键点分类,怎么理解怎么来

简单介绍

DenseBox:

本文只关注一个问题,即如何将FCN应用到目标检测当中去?本文提出DenseBox不需要生成proposal,在训练的过程中可以达到最有,与现存的基于滑窗的FCN的检测框架相类似。Densebox更偏重于小目标及较为模糊目标的检测。论文通过对Densebox训练,使用 hard negative mining 技术,来提升检测性能。为了进一步提高,后面多任务联合学习结合了landmark定位来进一步提升性能。

DenseBox直接预测当前点与ground truth 的四条边的距离,并且使用L2 loss。为了检测不同尺度的目标,DenseBox 使用了图像金字塔,所以计算量很大。

正负样本的选取:

这一块选取看得有点难以理解,历史久远,不详细考虑这些细节(逃- - -)。

YOLO v1

【论文总结】:基于密集点检测的anchor-free算法总结

YOLO的核心思想就是利用整张图作为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别。将图像化分成7 * 7的网格,如果目标的中心点落在了某一个网格中,则该网格负责该目标的预测。

所以缺陷很明显:首先召回率太低。引入了cell的思想,7x7的来划分图片,每个cell只预测两个bbox,数量不要太少,召回率自然就很低了。其次,如果多个物体出现在同一个cell中呢?

UnitBox

【论文总结】:基于密集点检测的anchor-free算法总结

针对的主要问题:DenseBox不能对目标框四个变量进行联合预测。

(另外一个问题:需要在图像金字塔上预测,效率低 —>全卷积网络,移除最后的FC网络,进行分类和回归)

本文提出了IOU loss 替代L2 loss,将四个变量作为一个整体预测。

FCOS

【论文总结】:基于密集点检测的anchor-free算法总结
【论文总结】:基于密集点检测的anchor-free算法总结

首先以逐像素预测放肆重新构造目标检测,接下来利用多级预测来改善召回率并解决重叠边界框导致的模糊性。最后,提出的"center-ness"分支,有助于一直低质量检测到的边界框,并大幅提高整体性能。

center-ness策略在每一个层级预测中添加了一个分支,该分支与分类并行,相当于给网络添加了一个损失,而该损失保证了预测的边界框尽可能的靠近中心。

在ground truth范围内都是属于正样本,都要预测。预测完后用center-ness来抑制偏离中心点的像素的分类等分。或许可以认为是: 原本在gt范围内都是正样本,现在只是靠近中心的像素才是正样本了,偏离的像素点可以看成负样本咯。也就是类似对gt框的正负样本的选取的处理!(这里这样解释,后面会继续提到,总之可以理解为,FCOS的center-ness分支是用来对gt范围内选取正负样本的,虽然并不是一个东西)

FoveaBox

【论文总结】:基于密集点检测的anchor-free算法总结

FoveaBox直接学习对象的存在可能性和边界框的坐标,而无需锚点参考。直接预测每个空间位置所属类别,对潜在物体区域的单元进行矩形框的回归预测,因此不受先验锚点框尺寸的束缚,其拟合能力更强,对于长度比变化较极端的物体更具优势。

首先理解一下Fovea:这个单词的意思是中间凹(然后呢?虽然我百度了这个东西,还是不明白啥意思,但这不重要,看后面),FoveaBox类比人类视觉系统感知世界的原理,认为人类先判定某个范围物体是什么,然后再对其边缘轮廓进行仔细判定,而不是去匹配任何事先在脑海里设定的模板矩形框。

下面这个公式是将物体边框groundtruth进行收缩或者扩展(中心点不变,尺度大小变)

【论文总结】:基于密集点检测的anchor-free算法总结

该图就是正负样本的选取,设置那个参数σ1为0.3、σ2为0.4,0.3表示,这个范围内的像素点都是正样本,0.4表示这个范围外的点都是负样本(if assign),中间呢就忽略掉。(记住这个选取方法,因为这跟FSAF中的选取方法基本上类似。或许也可以认为,FCOS的center-ness也相当于正负样本的划分,跟这个好像也有点类似,只是没有中间的忽略区域了)

当然也用到了 FPN多尺度检测 ,为每一层限定了一个basic area,值得注意的是,一个对象可能被网络的多个金字塔检测到

FSAF

【论文总结】:基于密集点检测的anchor-free算法总结

FSAF的大体思想是在每一层都插入anchor-free的模块,尝试不用anchor去检测instance,而后看看哪一层的FSAF对于这个instance 的损失最小,不就可以认为这一层是最适合检测这个instance的吗?然后再用anchor-based的模块去检测。

FSAF中同样用到了FPN,在分类的时候,用的是focal loss,回归的时候用的是IOU loss。

在分类的时候,正负样本是如何选取的呢?看图中红色标记,白色为正样本区域,黑色为负样本区域,灰色则是忽略区域

【论文总结】:基于密集点检测的anchor-free算法总结

细节就不详细讲,用的参数分别是0.2和0.5来表示正负样本。

注:以上具体可以点击对应的阅读笔记链接。

总结

FSAF、FCOS、FoveaBox的异同点:

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

(DenseBox、YOLO)和(FSAF、FCOS、FoveaBox)的异同点:

  1. 都是通过密集预测进行分类和回归的。
  2. (FSAF、FCOS、FoveaBox)利用FPN进行多尺度目标检测,而(DenseBox、YOLO)只有单尺度目标检测。
  3. (DenseBox、FSAF、FCOS、FoveaBox)将分类和回归解耦成2个子网络来得到,而(YOLO)分类和定位统一得到。

注:上面说DenseBox是单尺度目标检测,但是我们上面提到,他用到了图像金字塔检测。所以这里的单尺度目标检测,说得是特征单尺度。

重点

细心读完上面的各个密集检测算法,会发现,每个算法的网络结构都差不多啊,怎么会天差地别呢???它们之间的区别到底在哪里???

各种方法的关键在于gt如何定义正负样本的!!!

目标检测的gt是一个矩形框,然而用这个矩形框信息来检测目标显然是不合理的,因为矩形框内只有一小部分是目标,而剩下的是背景,这可能会导致检测器的精度下降,而最近的一些anchor-free模型其实是改变了gt的定义,比如cornernet定义为角点,extremenet定义为极值点和中心点,FSAF、FoveaBox定义为矩形框的中间区域,FCOS虽然是矩形框,但是经过center-ness抑制掉低质量的框,其实也是一种变相的将gt定义为矩形框中心区域(也就是我上面的强行解释)。gt重新定义之后,需要检测的目标语义变得更加明确了,有利于分类和回归。

所以,可以认为设计合适的gt,是提升目标检测速度和精度的关键!

参考

  • 目标检测:Anchor-Free时代

相关系列

  • 【论文总结】:基于关键点检测的anchor-free算法总结(待完成)

继续阅读