PaddleDetection:FCOS Anchor Free目标检测算法

2021SC@SDUSC本周分析

Anchor Based方法

当我们提到当前主流的目标检测算法时,无论是多阶段的各种RCNN和单阶段的SSD、YoloV3等等都是基于Anchor实现的。Anchor的本质是候选框,在设计了不同尺度和比例的候选框后,让深度神经网络对候选框做分类,对bbox做回归。

但是这种基于Anchor box的目标检测方法存在一些明显的缺点,比如:

  • 检测表现效果对于Anchor box的尺寸、长宽比、数目非常敏感,因此Anchor box相关的超参数需要仔细的调节。
  • Anchor box的尺寸和长宽比是固定的,因此,检测器在处理形变较大的候选对象时比较困难,尤其是对于小目标。预先定义的Anchor box还限制了检测器的泛化能力,因为,它们需要针对不同对象大小或长宽比进行设计。
  • 为了提高召回率,需要在图像上放置密集的Anchor box。而这些Anchor box大多数属于负样本,这样造成了正负样本之间的不均衡。
  • 大量的Anchor box增加了在计算交并比时计算量和内存占用。

Anchor Free方法

那么,顾名思义,Anchor Free就是一种没有基于候选框的目标检测概念。其实Anchor Free并非一个新概念,比如YoloV1可以算是目标检测领域最早的Anchor Free模型。

在PaddleDetection模型库中,提供了一系列的Anchor Free算法。

CornerNet

cornetNet可以算是近期anchor Free算法奠基之作,给目标检测算法开辟一条新的解决思路。cornerNet是借鉴了多人姿态估计的bottom Mask的思路,像人体姿态估计,分割这些思维任务来说,底层的逻辑就是要给点来打标签,然后再通过这些点组合起来形成上层的语意。授此启发,作者认为对于目标检测的框就等于检测目标框的左上角和右下角的点,然后将他们组合起来。之所以选择角点,是因为角点相比中心点更有利于训练的,比如说左上角的点,只会和两条边相关,而中心点要和四条边相关。

CornerNet 的主要结构主要由以下 3 部分组成:

  1. 沙漏结构 Hourglass:特征提取的 Backbone,能够为后续的网络预测提供很好的角点特征图。
  2. 角点池化:作为一个特征的池化方式,角点池化可以将物体的信息整合到左上角点或者右下角点。
  3. 预测输出:传统的物体检测会预测边框的类别与位置偏移,而 CornerNet 则与之完全不同,其预测了角点出现的位置 Heatmaps、角点的配对 Embeddings 及角点位置的偏移 Offsets

如下图所示,网络的基础结构单元是 nxnCBR、nxnCB、3x3Res(stride=2/stride=1, skip=3x3CB/1x1CB/直接相连)。网络首先经过 Pre Module,下采样两次。然后进入两个连续的 HG Module,训练时两个 HG Module 都预测输出(虚线框部分)参与 Loss 计算,测试时只第二个人 HG Module 预测输出(这和 GoogleNet 类似)。虚线框中包含两种模块:Corner Pool 和 预测模块。两个 Corner Pool 分别提取左上角点和右下角点的信息。

为了提取图像中的关键点,CornerNet 使用了沙漏结构 Hourglass 作为网络特征提取的基础模块,其结构如上图所示。顾名思义,Hourglass 的整体形状类似于沙漏,两边大,中间小。Hourglass 结构是从人体姿态估计领域中借鉴而来,通过多个 Hourglass 模块的串联,可以十分有效地提取人体姿态的关键点。

在传统卷积网络中,通常使用池化层来进行特征融合,扩大感受野,也可以起到缩小特征图尺寸的作用。以3×3的最大池化层为例,通常是以当前位置的点为中心点,融合周围共9个点的信息,取最大值输出。

然而,CornerNet 的思想是利用左上与右下两个关键点进行物体检测,对于一个物体的左上点,其右下区域包含了物体的特征信息,同样对于物体的右下点,其左上区域包含了物体的特征信息,这时角点的周围只有四分之一的区域包含了物体信息,其他区域都是背景,因此传统的池化方法就显然不适用了。

为了达到想要的池化效果,CornerNet 提出了 Corner Pooling 的方法,左上点的池化区域是其右侧与下方的特征点,右下点的池化区域是其左侧与上方的特征点,如下图所示为左上点的 Corner Pooling 过程。
在图中,假设当前点的坐标为 (x,y),特征图宽为 W,高为 H,则 Corner Pooling 的计算过程如下:

  1. 计算该点到其下方所有点的最大值,即 (x,y) 到 (x,H) 所有点的最大值。
  2. 计算该点到其最右侧所有点的最大值,即 (x,y) 到 (W,y) 所有点的最大值。
  3. 将两个最大值相加,作为 Corner Pooling 的输出。

工程实现时,可以分别从下到上、从右到左计算最大值,这样效率会更高。

2.Preprocess

对于角点的检测,CornerNet 对左上角和右下角分别准备了一个热度图,热度图通道数等同于类别数,尺度是输入尺度的四分之一。后续介绍以一个热度图为例,另一个是同样的操作。对于每个标注的 GT 角点,只对应到热度图的一个坐标位置,其余坐标位置应该作为负样本。然而在训练时,CornerNet 并不对所有负样本位置做同样的惩罚,而是以正样本为中心,使用一个高斯函数把正样本的分值分散给周围的位置,也就是越接近正样本,其作为负样本的惩罚越小。这是因为就算没有准确的预测到 GT 左上角和右下角,而是在其周围分别预测到两个角点,也是可以组成一个相对不错的检测框的(由于一些标注误差&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值