热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

目标检测算法回顾之Anchorfree篇章

基于anchorfree的目标检测方法(一)背景与定义1.1anchor-based的特征1.2anchor的好处?1.3anchor的局

基于anchor free的目标检测方法

  • (一)背景与定义
    • 1.1 anchor-based的特征
    • 1.2 anchor的好处?
    • 1.3 anchor的局限?
    • 1.4 anchor-free 与anchor-based的区别
  • (二)概述
  • (三)早期探索型
    • DenseBox
      • 背景(人脸检测任务)
      • 检测流程
      • 先进思想
      • ground truth定义:
      • 多任务学习
      • 评价
  • (四)基于关键点系列(源于姿态估计)
    • CornerNet
      • 背景
      • 总体流程与架构
      • heatmaps是如何找到corner的?
      • embeddings是如何匹配corner的?
      • 为什么需要offset?
      • 评价
    • CornerNet-Lite
    • ExtremeNet
      • 背景
      • 流程
      • 与CornerNet的区别
      • 评价
    • CenterNet
      • 背景
      • 与CornerNet/ExtrmeNet的对比
      • 与acnhor-based的对比
      • 评价
    • CircleNet
      • 背景
      • 流程
      • 与CenterNet的相同点
  • (五)基于密集型系列(源于语义分割)
    • FCOS
      • 背景与思路
      • 网络结构
      • 多尺度分支结构
      • 多尺度分支分配
      • center-ness分支
      • 评价
    • FoveaBox
      • 概述
      • 正负样本定义
      • 预测选择
      • 坐标映射
      • 网络架构
      • 评价
  • (六)总结与思考
    • Keypoints-based(CornerNet、CenterNet和ExtremeNet)的目标检测方法的异同点
    • Dense-predicted(FSAF、FCOS和Foveabox)的目标检测方法的异同点




在这里插入图片描述


说明:本文仅供学习
(一)背景与定义

1.1 anchor-based的特征

前面我们讲的都是anchor-based方法,那么anchor-based methods总的特征就是在同一像素点上生成多个不同大小和比例的候选框(one-stage模型通常采用滑窗等(聚类)方式生成,而two-stage模型更多的是采用RPN来生成),并对其进行筛选,然后再进行分类和回归。一定程度上它能够解决目标尺度不一和遮挡的问题,提高检测精度。

在这里插入图片描述

1.2 anchor的好处?


  • 网络可直接在anchor上进行分类及回归任务。(有更高的分辨率,提取到的特征更加丰富)
  • 加入先验知识,使模型更加稳定和鲁棒。(由于加入了人为先验分布,同时在训练的时候prediction(尤其是regression)的值域变化范围实际上是比较小的,这就使得anchor-based的网络更加容易训练也更加稳定)。
  • 可以提高召回率,尤其是对小目标检测。
  • 一定程度上解决了物体遮挡和尺度不一致的问题。

1.3 anchor的局限?


  • 依赖过多的手动设计!
  • 训练和预测过程过于低效!(产生预选框所需要的耗时和算力大大增大)
  • 正负样本不均衡问题!

既然anchor的设计(初始化)对网络模型的影响这么大,我们是不是可以去除掉anchor来进行检测呢?基于上述的思考,anchor-free也开始迎来了自己的发展。那么anchor-free与anchor-based的区别是什么?

1.4 anchor-free 与anchor-based的区别

在这里插入图片描述

  • anchor-based的方法是通过anchor和对应的编码信息来表示物体的。(需要在图像的特征图中每个位置预先设置一定数量的anchor,然后对每个anchor进行分类和回归)
  • anchor-free的方法主要是通过多个关键点(角点)或者通过中心点与对应得边界信息来表示物体的。(不需要预先设定anchor,直接对图像进行目标检测)
  • 两者之间的区别在于是否使用anchor来生成候选框proposal,也可以说,两者之间的区别在于解空间的不同。

(二)概述

在这里插入图片描述
实际上我们前面讲的YOLO算法anchor free中比较早期的模型,所以anchor free并不是一个比较新的概念。早期的anchor-free模型可以追溯到15年CVPR的DenseBox,算是Anchor Free的起源吧。比同期的Faster-RCNN系列提前数月,但是论文直到9月才在arxiv上发布(YOLO是16年5月,比YOLO还早)。所以,anchor free的发展历史也可以说是相对久的。截止目前,anchor-free模型的发展主要可以分为早期探索、基于点和基于密集预测的。(这里只罗列出一部分比较有代表性的模型)
在这里插入图片描述
由于时间和内容的限制,这里我只介绍时间轴上的这些模型。其中,因为DenseBox对后期密集预测的anchor free模型有较大的影响,所以早期探索的模型只介绍DenseBox模型。

(三)早期探索型

DenseBox


背景(人脸检测任务)

在图像上进行卷积等同于使用滑窗分类,为何不能使用全卷积对整个图像进行目标检测呢?如何将全卷积网络FCN应用到目标检测?

检测流程


  • 首先经过图像金字塔生成多个尺度的图片。
  • 图片经过FCN得到最终的输出featuremap。
  • 将输出featuremap进行回归与分类,并用NMS后处理。
    在这里插入图片描述

先进思想

虽然DenseBox是比较早期的论文,但个人感觉DenseBox论文里面很多思想都是那个时期相对比较超前的:

  • DenseBox使用全卷积网络,任务类似于语义分割,实现了端到端的训练与识别,这点R-CNN直到Faster R-CNN中使用了RPN代替了Selective Search才开始实现端到端训练的,而和语义分割的结合更是等到了2017年的Mask R-CNN才开始。
  • DenseBox利用了多尺度融合的特征,conv3_4、conv4_4,在网络中引入了上采样操作,将低层和高层的特征融合以得到更大尺度的feature map输出而R-CNN系列直到FPN才开始使用,SSD。
  • DenseBox使用了OHEM做负样本的难例挖掘。(DenseBox做了样本均衡Balance Sampling,主要采用了两个方法:第一个方法是忽略正负样本过度区域,称为gray zone,是以正样本区域边缘的两个像素范围内的区间来定义的。第二个方法是Hard Negative Mining,首先将负样本像素中的loss按loss大小排序,选取前面的1%为hard-negative,然后保证每张图片中正负样本的数量是1:1,负样本的50%来源于hard-negative,另外的50%从non-hard negative中随机选取。这两种方法都是通过新增一个binary mask for each output pixel to indicate whether it is selected in training。
  • 利用了圆形描述,这在当时深度学习检测也算是早的。

ground truth定义:

1、单一尺度图片进行训练,多尺度测试。
2、不采用全图训练,大量背景浪费计算资源,crop出有人脸和足够背景的patches。
3、输入图片:crop and resize 240*240,face在中间位置,且有50像素的高度。
4、输出的ground truth经过4倍下采样得到60x60x5的map,第一个channel,positive labeld区域位于边界框的中心。半径位与bounding box中心,大小与box成比例(文中设置系数是box size的0.3),剩余四个channel代表该位置与最近gt box左上角及右下角的距离。
5、patch有多个目标,将位于patch中心(0.8至1.25)区域的目标记为正样本,1channel像素值为1,其余为负样本,1channel像素值为0。
在这里插入图片描述

多任务学习

DenseBox中增加landmark定位分支(通过增加若干全卷积分支实现),以提升目标检测准确度的工作,并可以联合landmark热度图和人脸得分热度图进一步提升目标检测精准度。加入关键点检测分支之后,DenseBox根据关键点的置信度图和boudning box的置信度图构成了新的检测损失,并将其命名为Refine Network。

左图为landmark定位新增了一个分支,如果要输出N个landmark,那么landmark定位分支共输出N通道的feature map,feature map上每个像素表示该位置为一个特定landmark的概率(each pixel represent the confidence score of being a landmark at that location);从这点上来看,landmark分支的gt feature map和检测分支的gt feature map是非常相似的,二者的区别在于:检测分支的gt feature map是四通道,landmark分支的gt feature map是N通道,N对应要输出的landmark数目;---- 有多少landmark点,就输出多少通道即可。(人脸是72个关键点,而车辆是作者自己标注的8个关键点)。

评价


  • DenseBox优点
    在FCN的基础上提出DenseBox直接检测目标,不依赖候选框。证明了单FCN(全卷积网络)可以实现检测遮挡和不同尺度的目标;在FCN结构中添加少量层引入landmark localization,将landmark heatmap和score map融合能够进一步提高检测性能。
  • DenseBox缺点
    使用embeddings进行角点匹配效果不好,导致某个物体左上角匹配到另一个物体右下角。

(四)基于关键点系列(源于姿态估计)

CornerNet


背景

在这里插入图片描述

对于姿态估计和分割的任务,它们的ground truth就是给点打标签。借此启发,CornerNet的作者认为对于目标检测来说,目标检测的框实际上就等同于左上角和右上角的点,因此,CornerNet摒弃了原本anchor-based的思想,采用keypoint-based的思路来进行检测。CornerNet作者之所以选择角点的原因和比较简单(因为角点相比中心点更容易训练与回归,比如说角点只与两条边相关,而中心点与四条边相关。)

总体流程与架构

在这里插入图片描述
CornerNet采用Hourglass(沙漏网络)作为主干网络来提取特征,然后分成两个支路分别预测左上角和右下角坐标。每个支路文章称之为Prediction Module。在每个Prediction Module之前都会先过一个Corner Pooling(这也是CornerNet文章的一个亮点), 再分成三个子支路Heatmaps、Embeddings、Offsets。【heatmaps某位置是角点的概率、offsets实际角点相对于该位置的偏移、embeddings嵌入向量,角点配对】

heatmaps是如何找到corner的?

在CornerNet中,heatmaps主要通过扩大学习区域并进行corner pooling来确定哪些点是我们所要寻找的corner。
在这里插入图片描述

  • Reduce penalty:要值得注意地是,在训练时,如何我们只是单纯地将两个角点对应的像素标注为正样本,其余为负样本时,我们的ground truth就是一个二值mask,那么负样本的点都将被舍弃掉,这个惩罚力度太大,对模型的训练非常不利。所以,作者希望通过以角点像素为中心,以微小半径为圆形区域(微小扰动所形成的bbox从直观感受并不会带来带过的干扰,更何况不同的人标注之间也存在这种现象,可以使网络更加的鲁棒),利用高斯分布来填充所扩大角点像素值的覆盖范围,以此获取更多的正样本,从而降低负样本对模型的惩罚力度。
  • Corner pooling:以往的max pooling更多的是将物体的信息集中到物体的中心区域,但CornerNet期望的是物体的信息可以集中在角点,因此,作者就设计了Corner Pooling来融合某点在两个轴线方向上(水平和垂直)的信息。(如左图,以左上角为例子的话,corner pooling是分别将目标点垂直轴线以下的位置提取最大值,然后对水平轴线以右的位置提取最大值,将两个最大值相加即为该点池化后的结果,实际应用时可以从右向左、从下向上进行更新计算,减小复杂度,提高计算效率。)

embeddings是如何匹配corner的?

在人体姿态估计中,相对应的角点也会互相匹配,因此,CornerNet也借鉴了这种思想,认为属于同一目标的corner embedding应该具有较高的相似度,而不同物体之间的corner embedding应该具有较远的距离。(寻找一个特征空间来区分不同object之间的corner)
在这里插入图片描述

为什么需要offset?

在卷积的过程中是存在下采样的过程的,这就不可避免的是一些点的坐标产生一些偏移,这样就从原始图的输入到最后特征图的输出过程,这些误差就会累计,对于小目标的误差就不可接受了,所以需要引入offset偏移量来修正它。

评价

在这里插入图片描述
检测精度可以与anchor-based的方法相媲美,基于关键点检测的方法是有效的。但物体的特征一般集中在物体内部,左上、右下两个点的特征并不明显,不容易确定位置。而且日哟导致同类别不同目标的角点容易错误地组合起来形成误检框。检测速度还有较大的优化空间。

CornerNet-Lite

在这里插入图片描述
CornerNet-Lite是两个CornerNet变种的组合:
CornerNet-Saccade——注意机制消除了对图像的所有像素进行处理的需要(通过关注子区域的像素来减少处理量),将cornernet单阶段检测器变为两阶段检测器,attention maps作用类似与fasterrcnn中的rpn但又有所不同,将roi区域crop下来进行第二阶段的精细检测,该网络与cornernet相比达到精度提升;
CornerNet-Saccade中的 saccades是single type and multi-object,也就是通过attention map找到合适大小的前景区域,然后crop出来作为下一阶段的精检图片。CornerNet-Saccade 检测图像中可能的目标位置周围的小区域内的目标。它使用缩小后的完整图像来预测注意力图和粗边界框;两者都提出可能的对象位置,然后,CornerNet-Saccade通过检查以高分辨率为中心的区域来检测目标。它还可以通过控制每个图像处理的较大目标位置数来提高效率。主要分为两个阶段估计目标位置和检测目标。

CornerNet-Squeeze——引入一个新的、紧凑的基础网络架构,reducing the amount of processing per pixel,主干网络实为hourglass network、mobilenet、squeezenet结构的变体,在实时检测器领域达到速度和精度的双重提升。CornerNet-Saccade适合离线处理,在不损失检测精度的情况下检测速度提高了6倍,CornerNet-Squeeze是实时检测器,在COCO数据集上其检测速度和精度相比YOLOv3都有提高。在COCO数据集上,43.2% AP at 190ms for CornerNet-Saccade,34.4% AP at 34ms for CornerNet-Squeeze,总而言之,CornerNet-Lite提高了关键点检测器的效率。
CornerNet-Squeeze ideas:SqueezeNet通过将3x3的卷积替换为1x1的卷积,减少3x3卷积的通道数,以及后续的下采样操作来减少网络的参数量。SqueezeNet中的building block及fire module包含前两个思想,Fire Module首先会通过包含一系列1x1卷积核来减少输入的通道数,然后,将结果送到包含1x1及3x3卷积核的扩张层中。

ExtremeNet


背景

在这里插入图片描述
前面我们也说了,左上与右下角点的特征不足以代表目标物体的特征,而且大多的角点都不在目标物体上。因此,单纯地依赖角点进行目标检测,模型可能不能很好地理解目标物体的特征。所以,ExtremeNet把左上与右下角点替换成目标的中心点以及其在四个正方向上的极值点(extreme points)来实现检测。ExtremeNet的极点在对象上,是视觉可分的,有一致的局部外观特征(如人的最上面的是头)。

流程

通过预测每个对象类别的4个heatmaps,得到4个极值点,再利用center heatmap检测中心极值点,匹配算法对所有极值点进行组合,并验证组合中是否存在中心极值点。首先为四个边界方向分别生成一个关键点热图以及一个目标中心的热图。当且仅当四个极值点呈几何对其,且该四个极值点组成的边界框的中心在预测的中心点热图上有较大的响应时才认为该生成的边界框有效。
在这里插入图片描述

Center Grouping算法,用来进行匹配的: 对于一个category,去除其中四个方位的heatmap,使用ExtractPeak算法去除其中大于阈值(实验中阈值为0.1)的pixel位置,对这四个集合中的点,进行简单的暴力方法遍历(为O(n^4)的复杂度),四个点组成一个框,然后满足基本的四个点的相对位置后,求出这四个点的中心点位置,那么如果这个中心点的center point heatmap上的值如果大于阈值(实验中阈值为0.1),那么就是一个合格的候选框,框的cls score就是五个点的heatmap值的均值。

与CornerNet的区别

在这里插入图片描述
ExtremeNet使用HourglassNet检测每个类的5个关键点,offset预测与类别无关,与极值点有关,中心点没有offset预测,所以网络的输出是5C个热图和4∗2个偏移图。

  • CornerNet通过预测角点来检测目标的,而ExtremeNet通过预测极值点和中心点来检测目标的。其中,CornerNet中的角点通常位于目标外,ExtremeNet中的极值点位于目标上,其能够反映物体的表观特征。
  • CornerNet通过角点embedding之间的距离来判断是否为同一组关键点(基于几何关系分组),而ExtremeNet通过暴力枚举极值点、经过中心点判断4个极值点是否为一组(基于目标外观分组),实验证明后者更加有效。

评价


  • ExtremeNet的优点
    延续CornerNet的检测新思路,将角点检测改为极值点检测,更加稳定,在muti-scale的测试下效果更好。
  • ExtremeNet的缺点:
    1)无法规避的硬伤,ghost box 在实际场景中(并行的车辆)很可能出现。
    2)从效果上看,并没有比CorNerNet有明显的提升。
    3)速度很慢,主干网络计算量太大。

CenterNet


背景

与ExtremeNet类似,CenterNet也是基于中心点来实现目标的检测。但CornerNet和ExtremeNet都需要匹配(配对分组)目标特征点,这个过程仍然略显繁复。所以,CenterNet只考虑使用中心点来定义目标,并通过中心点直接预测目标的特性,比如宽高信息,类别,3维位置和朝向等。(直接回归其所指向的目标类别以及以当前点为中心构建的目标最小外接矩形)

与CornerNet/ExtrmeNet的对比

在这里插入图片描述

  • 都采用相似的关键点检测思路,均使用heatmap思想和focal loss进行训练
  • 都采用相似的offset分支来弥补下采样点的位置误差
  • CenterNet不需要对关键进行分组匹配操作

与acnhor-based的对比

在这里插入图片描述

  • 我们分配的锚点仅仅是放在位置上,没有尺寸框。而单阶段YOLOv3中每个cell的中心点包含anchor shape信息。
  • 每个目标仅仅有一个正的锚点,因此不会用到NMS,我们提取关键点特征图上局部峰值点(local peaks)。NMS通过计算bbox间的IOU来删除同个目标的重复检测框,这种后处理很难区分和训练,因此大多检测器都非端到端可训练的。
  • 分配正样本的时候仅仅依赖位置而不依赖overlap&#xff0c;没有手动设置的阈值做前后景分类。&#xff08;像Faster RCNN会将与GT IOU >0.7的作为前景&#xff0c;<0.3的作为背景&#xff0c;其他不管&#xff09;。
  • 相比较传统目标检测而言&#xff08;缩放16倍尺度&#xff09;&#xff0c;使用更大分辨率的输出特征图&#xff08;缩放了4倍&#xff09;&#xff0c;因此无需用到多重特征图锚点。

评价

在这里插入图片描述
CenterNet优点&#xff1a;

  • 模型结构设计简单
  • 对于其他视觉任务有较好的拓展性
  • 去除NMS后处理利于加速模型预测

CenterNet缺点&#xff1a;

  • 训练时间长,COCO数据集需要训练140epoch
  • 回归监督信息仅通过中心点位置产生&#xff0c;会发生中心点重合的冲突

CircleNet


背景

在这里插入图片描述
CircleNet是基于肾小球背景下提出来&#xff0c;而肾小球是细胞。通常这种细胞都比较偏向圆形&#xff0c;因此&#xff0c;使用基于圆形的定义比矩形的定义要好&#xff0c;也更加贴合细胞的形态&#xff0c;而且具有旋转不变性&#xff01;

流程

在这里插入图片描述
通过特征提取网络提取图像的特征&#xff0c;而后分别采用三个输出模块预测&#xff08;1&#xff09;heatmap&#xff0c;用来表示circle的中心点&#xff1b;&#xff08;2&#xff09;local offset&#xff0c;用来修正circle的中心点位置&#xff1b;&#xff08;3&#xff09;circle radius&#xff1a;用来表达circle的半径。

与CenterNet的相同点

CenterNet和CircleNet中的冲突是目标框的中心点重合&#xff08;基于输出特征层计算的中心点&#xff09;&#xff0c;作者从COCO数据集的统计信息来看&#xff0c;这种重合框的比例非常少&#xff0c;不到0.1%&#xff0c;基本上不会对训练稳定产生太大影响&#xff0c;因此没有针对这个进行解决。&#xff08;肾小球数据集不存在中心重叠的问题&#xff09;

&#xff08;五&#xff09;基于密集型系列&#xff08;源于语义分割&#xff09;

FCOS


背景与思路

前面讲到的CornerNet、CenterNet等都是基于关键点来检测的&#xff0c;而接下来讲的FCOS则是基于分割的思想来进行检测的。而FCN算是语义分割的鼻祖算法&#xff0c;通过一系列的卷积与反卷积实现了对像素级的分类。FCN在语义分割和姿态估计等领域都取得比较不错的效果。之前的目标检测受制于anchor的使用&#xff0c;所以就没有在FCN上进行进一步的探索。而基于关键点检测的anchor-free存在中心重叠检测的问题&#xff0c;因此&#xff0c;FCOS就使用FCN网络直接对图中的每一个像素点的位置到真实物体四边的距离进行一个回归&#xff08;预测的话就是四个距离回归加上一个目标分类&#xff09;。换句话说&#xff0c;FCOS的训练对象跟语义分割的是一样的&#xff0c;也就是我们说的像素点。从总体的思路来看&#xff0c;FCOS可以理解为是 DenseBox&#xff08;基于FCN&#xff09; 的改进版。
在这里插入图片描述

不管是CenterNet的中心重叠问题&#xff0c;还是语义分割的问题&#xff0c;都是像素点类label只有一个的问题。而且FCOS主要是在行人检测&#xff0c;车辆检测的背景下提出来的。所以上面的问题就更加明显了&#xff08;23.16%&#xff09;。因此&#xff0c;FCOS在面临多个目标框重叠时&#xff0c;重叠部分的点的监督信息就有多个&#xff0c;但模型训练时监督信息肯定只能有一个&#xff0c;因此通过引入图中金字塔FPN网络来解决。通过不同尺度的特征图分支头来实现不同物体的检测&#xff08;简而言之&#xff0c;就是FCOS通过多尺度检测来缓解目标重叠问题&#xff09;。

但语义分割跟目标检测还是不一样的&#xff0c;比如左边这个图&#xff08;人与羽毛球拍&#xff09;。在语义分割中&#xff0c;每个像素点只有一个类别的label&#xff0c;但在目标检测中如果发生物体区域重叠的现象&#xff0c;那么一个像素点就不仅只有一个类别label&#xff0c;可能是两个甚至更多个。

网络结构

FCOS的网络架构&#xff0c;其中C3, C4, C5表示骨干网络的特征图&#xff0c;P3到P7是用于最终预测的特征级别。这五层的特征图后分别会跟上一个head&#xff0c;head中包括了三个分支&#xff0c;分别用于分类、中心点置信度、回归的预测。FCOS网络最后的输出层包含**&#xff08;4&#43;C&#xff09;个通道&#xff0c;分别对应预测C个类别得分4维包围框参数**。整体的架构非常简洁&#xff0c;有很多人通过修改FCOS的输出分支&#xff0c;用于解决实例分割、关键点检测、目标追踪等其他任务。
在这里插入图片描述

  • 核心思想&#xff1a;检测点和点到真实框四边的距离。
  • 分类&#43;回归分支真实框内的点均为正样本通过点到四边距离的最大值决定层级
  • 中心度分支去除离中心点较远的低质量的预测框像素点离中心点越远&#xff0c;中心度越小

多尺度分支结构

在FCOS中使用FCN多层预测多尺度的物体&#xff0c;可以有效解决这个模糊性的问题。换言之&#xff0c;重叠的物体就可以不用一张图去预测了&#xff0c;就可以把大物体放在一个深的特征图上&#xff0c;小物体放在一个浅的特征图上去预测了。&#xff08;这点更YOLOv3中引入多个分支不同分支采用不同的anchor的思想相类似&#xff09;。同样的&#xff0c;FCOS中分类损失仍然采用Fcoal loss&#xff0c;而回归损失则不再采用点的L1 loss了&#xff0c;而是通过回归四边的距离得到对应真实物体的四个顶角&#xff0c;进而采用IOU loss来进行优化。

多尺度分支分配

因为多尺度结构的存在&#xff0c;就需要确定这个真实框box分配给哪个层级呢&#xff1f;传统的FPN做法是会根据这个box的面积进行分配&#xff0c;而FCOS&#xff0c;就会根据Box中点到四边的最大距离来分配&#xff0c;也就是上面公式的四个分量&#xff0c;怎么分配呢&#xff1f;我们会给每一个层级分配阈值范围&#xff0c;然后看四个分类的最大值落在哪个区间就分配给哪个层级。

center-ness分支

FCOS内&#xff0c;我们会把目标框内所有的点平等的作为正样本&#xff0c;这样就会导致产生一个离目标框中心距离远的低质量的目标框。于是&#xff0c;在FCOS中就提出了中心度的概念&#xff0c;也就是center-ness分支&#xff0c;来抑制这些低质量的目标框。center-ness作用于网络中&#xff0c;和分类分支是并行的&#xff0c;是用来预测每个点的中心度。训练的时候&#xff0c;使用二值交叉熵loss&#xff0c;测试的时候&#xff0c;就会把中心度的得分和分类分支的得分做一个相乘&#xff0c;作为某一个点的最终得分。这样每一个位置就有了权重得分了。真正远离中心点的点就会被削弱。后面就可以用NMS的方法将这些点过滤掉了。

评价

在这里插入图片描述

我们可以看到较大物体的AP显著提高&#xff0c;这就是由于较大物体的中心偏离比较严重&#xff0c;总体AP提高了有3点。

  • FCOS的优点

    1.将检测和FCN进行结合&#xff0c;可充分利用思想。

    2.proposal free和anchor free&#xff0c;减少了超参的设计。

    3.不使用trick&#xff0c;达到了单阶段检测的最佳性能。

    4.模块化&#xff0c;对其他视觉任务具有较大的可扩展性。

  • FCOS的缺点
    FCOS没有很明确确定中心点&#xff0c;它是依赖于标注信息的。box预测的分配不是很合理。


FoveaBox


概述

作为与FCOS和FSAF同期的Anchor-free论文&#xff0c;FoveaBox在整体结构上也是基于DenseBox加FPN的策略&#xff0c;主要差别在于FoveaBox只使用目标中心区域进行预测且回归预测的是归一化后的偏移值&#xff0c;还有根据目标尺寸选择FPN的多层进行训练。
但FoveaBox的整体实现方案太纯粹了&#xff0c;与其它Anchor-free方法很像&#xff0c;所以一直投稿到2020才中…

正负样本定义

在FoveaBox中&#xff0c;正样本区域(fovea)的选择并不是真实框所包围的全部像素&#xff0c;而是原区域的一个衰减区域&#xff08;可以看作是目标的中心区域&#xff0c;缩放因子是人为设定的&#xff09;&#xff0c;这个与DenseBox的设置一样&#xff0c;这样设置的原因是为了防止语义区域的相互交叠&#xff01;
在这里插入图片描述

预测选择

网络的目标是预测目标的边界&#xff0c;直接预测是不稳定的&#xff0c;因为目标尺寸的跨度很大。为此&#xff0c;论文将目标尺寸归为多个区间&#xff0c;对应特征金字塔各层&#xff0c;各层负责特定尺寸范围的预测。(用于控制特征金字塔每层的回归尺寸范围的缩放因子也是人为设定的)

坐标映射

与DenseBox和UnitBox不同&#xff0c;FoveaBox并不是直接学习目标中心到四个边的距离&#xff0c;而是去学习一个预测坐标与真实坐标的映射关系。

网络架构

在这里插入图片描述
主干网络采用特征金字塔的形式&#xff0c;每层接一个预测Head&#xff0c;包含分类分支和回归分支。论文采用较简单的Head结构&#xff0c;使用更复杂的Head可以获得更好的性能。论文提出了特征对齐的trick&#xff0c;主要是对预测Head进行改造。

评价

在这里插入图片描述

  • 目标区域的明确定义
  • 对任意形状的包围盒更加鲁棒&#xff08;从左下图)
    基于锚的方法在实际应用中&#xff0c;回归器是为正样本锚框&#xff08;positive anchors&#xff09;训练的&#xff0c;破坏了预测形状更任意的目标的通用性。在 FoveaBox 中&#xff0c;每个预测位置都不与特定的参考形状相关联&#xff0c;它直接预测目标的 ground-truth 框。由于 FoveaBox 允许任意的纵横比&#xff0c;它能够更好地捕捉那些非常高或非常宽的对象.
  • FoveaBox整体设计思路为anchor-free&#xff0c;不需要人为的去定义anchor的参数&#xff0c;但仍然需要手工的去设置参数&#xff0c;比如每层的area的范围&#xff0c;以及正样本区域的缩放因子的参数。

&#xff08;六&#xff09;总结与思考

和anchor-base进行比较&#xff0c;anchor-free最大的优势就在于其检测器的检测速度&#xff0c;因为不需要预设anchor&#xff0c;只需要对不同尺度的特征图的目标中心点和宽高进行回归&#xff0c;极大的减少了耗时和需要的算力。其缺点则是在于它的精度并不能达到anchor-base方法的SOTA。近两年还提出了一些结合anchor-base和anchor-free的检测器。
在这里插入图片描述
各种anchor-free方法的关键在于它们的ground truth是如何定义的。合适的ground truth更加贴合物体真实形态的分布&#xff0c;因此&#xff0c;从先验上来看&#xff0c;模型的检测精度也会对应的提高。走在前端(时间轴&#xff09;的anchor-free方法灵感大多来源于人体姿态估计和语义分割的处理思想。由此对应地衍生出了我们前面所讲的Keypoint-based和Dense-predicted的anchor-free模型&#xff0c;这两种方法的本质将anchor转换成了point或者说是region来实现物体的检测。
在这里插入图片描述

Keypoints-based(CornerNet、CenterNet和ExtremeNet&#xff09;的目标检测方法的异同点


  • 相同点&#xff1a;
    • 都采用Hourglass网络作为主干网络用于特征提取
    • 都采用haetamaps(高斯模型&#xff09;来泛化keypoint的区域
    • 都采用Fcocal loss来平衡正负样本
    • 都使用offset分支来修正下采样带来的坐标偏差
    • 都使用L1 loss或者IOU loss来作为box的回归指标
  • 不同点&#xff1a;
    • 关键点的定义不同&#xff1a;CornerNet将bbox的两个角点作为关键点。ExtremeNet检测所有目标的四个极值点(最顶部、最左侧、最底部、最右侧)和一个中心点&#xff1b;均需经一关键点grouping阶段&#xff0c;降低算法速度。CenterNet仅提取目标中心点&#xff0c;无需对关键点进行grouping或后处理。
    • 匹配分组的原则不同&#xff1a;CornerNet为embedding距离&#xff0c;ExtremNet为中心点heatmaps的响应&#xff0c;CenterNet无需匹配。

Dense-predicted(FSAF、FCOS和Foveabox&#xff09;的目标检测方法的异同点


  • 相同点&#xff1a;
    • 都采用FPN来进行多尺度目标检测。
    • 都将分类和回归解耦成2个子网络来处理。
    • 都采用Fcocal loss来平衡正负样本。
    • 都是通过密集预测&#xff08;像素级&#xff09;进行分类和回归的
    • 都使用L1 loss或者IOU loss来作为box的回归指标
  • 不同点&#xff1a;
    • FSAF和FCOS的回归预测的是到4个边界的距离&#xff0c;而FoveaBox的回归预测的是一个坐标转换。
    • FSAF通过在线特征选择的方式&#xff0c;选择更加合适的特征来提升性能&#xff0c;FCOS通过center-ness分支剔除掉低质量bbox来提升性能&#xff0c;FoveaBox通过只预测目标中心区域来提升性能。
    • FoveaBox是直接选取分类score高于某阈值的像素点&#xff1b;FCOS除了预测分类score外还对centerness进行了预测&#xff0c;选取的是centerness较高的像素点&#xff1b;CenterNet则是把分类score的heatmap中的peak点。但在某像素点的分类score最高&#xff0c;未必代表该像素点就最适合去回归。
    • FoveaBox和FCOS都是预测中心点到box的四条边的距离&#xff0c;但前者采用了L1 loss&#xff0c;后者采用了unitbox的IoU loss。在具体计算的时候&#xff0c;都会除以感受野来排除尺寸的影响。

在这里插入图片描述

CornerNet、CenterNet等基于关键点的anchor-free模型通过高斯模型泛化关键点区域来定义正样本数据点&#xff08;heatmap定义&#xff09;&#xff0c;减少模型负样本的惩罚力度&#xff1b;FCOS定义bbox内的像素点均为正样本&#xff0c;而FoveaBox通过衰减因子将bbox缩放&#xff0c;并将缩放后区域FoveaBox内的像素点定义为正样本。

anchor-free的方法能够在精度上媲美 anchor-based的方法&#xff0c;最大的功劳应该归于 FPN&#xff0c;其次归于Focal Loss。在每个位置只预测一个框的情况下&#xff0c;FPN 的结构对尺度起到了很好的弥补&#xff0c;FocalLoss则是对中心区域的预测有很大帮助。
目标检测的gt是一个矩形框&#xff0c;然而用这个矩形框信息来检测目标显然是不合理的&#xff0c;因为矩形框内只有一小部分是目标&#xff0c;而剩下的是背景&#xff0c;这可能会导致检测器的精度下降&#xff0c;而anchor-free改变了gt的定义。gt重新定义之后&#xff0c;需要检测的目标语义变得更加明确了&#xff0c;有利于分类和回归。


推荐阅读
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战
    OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战 ... [详细]
  • x86x64体系探索及编程(对x86处理器介绍得最详尽又最具实践指导意义的一本书)邓志著ISBN978-7-121-18176-42012年10月出版定价:119.00元16开840页对x86处理 ... [详细]
  • 本文介绍了几种常用的图像相似度对比方法,包括直方图方法、图像模板匹配、PSNR峰值信噪比、SSIM结构相似性和感知哈希算法。每种方法都有其优缺点,适用于不同的应用场景。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 优化后的标题:Apache Cassandra数据写入操作详解
    本文详细解析了 Apache Cassandra 中的数据写入操作,重点介绍了 INSERT 命令的使用方法。该命令主要用于将数据插入到指定表的列中,其基本语法为 `INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...)`。通过具体的示例和应用场景,文章深入探讨了如何高效地执行数据写入操作,以提升系统的性能和可靠性。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • C++基础 | 从C到C++快速过渡
    一、开发环境c++使用的编译器是g& ... [详细]
author-avatar
cb
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有