【目标检测】Anchor Free —— CenterNet

本文详细介绍了CenterNet目标检测算法,该算法以物体的中心点为关键点进行检测,避免了Anchor的设计。通过全卷积网络生成关键点热力图,利用Focal Loss改进的损失函数进行训练。此外,还探讨了Offset损失和目标宽高损失的计算。在预测阶段,通过最大池化操作筛选中心点并计算边界框。虽然CenterNet存在物体中心点重叠导致误检的问题,但其简洁的架构和高效预测仍具有价值。
摘要由CSDN通过智能技术生成


开始之前学习一个单词热热身:

encompass 英[ɪnˈkʌmpəs]
v. 包围; 围绕; 包含,包括,涉及(大量事物); 围住;
[例句]The job encompasses a wide range of responsibilities.
这项工作涉及的职责范围很广。


0 写在前面

      CornerNet: Detecting Objects as Paired Keypoints.

      早就要补🙅‍anchor free的坑,再从CenterNet开始吧!


1 Introduction

     " We represent objects by a single point at their bounding box center, object detection is then a standard keypoint estimation problem "
在这里插入图片描述

     " We simply feed the input image to a fully convolutional network that generates a heatmap. Peaks in this heatmap correspond to object centers. Image features at each peak predict the objects bounding box height and weight. "
      热力图峰值点即为中心点,每个特征图的峰值点位置预测了目标的宽高信息。CenterNet是端到端的,在训练时不需要提供anchor的大小,并且在检测阶段不需要非极大值抑制的后处理。

     " Our CenterNet, on the other hand, simply extracts a single center point per object without the need for grouping or post-processing. "
      还记得CornerNet在预测出物体的左上角点和右下角点后,通过embedding vector对两个角点进行匹配,来决定这一对角点是否属于同一个物体;而CenterNet由于仅仅预测物体的一个中心点,所以不需要对预测点进行分组。


2 preliminary(真实标签)

     令I∈RW×H×3为输入图像,目标是生成 keypoint heatmap ŷ∈[0, 1]W/R×H/R×C,其中R是尺寸缩放比例,C是关键点类型数(即输出特征图通道数);关键点类型有: C = 17 的人体关节节点用于人姿态估计; C = 80 的目标类别用于目标检测(COCO)。
     作者使用了三种不同的全卷积编码-解码网络来预测keypoint heatmap ŷ:stacked hourglass network ,upconvolutional residual networks (ResNet,,在ResNet主干网络之后使用3个反卷积模块Deconv(三个反卷积)), deep layer aggregation (DLA)。

     这样, ŷx, y, c=1 就是一个检测到物体的预测值,对于 ŷx, y, c=1 ,表示对于类别 C ,在当前(x, y)坐标中检测到了这种类别的物体,而 ŷx, y, c=0 则表示当前当前这个坐标点不存在类别为 C 的物体。

     关于CenterNet的真是标签,借鉴了CornerNet中的方法在角点处在一定半径内利用高斯核函数产生渐变数值的方法。假设在原图中目标中心点的位置为:
在这里插入图片描述
     那么下采样后的坐标为:
在这里插入图片描述
     其中R为降采样系数,论文中取4。注意主干网络是首先将图片降采样32倍,然后再利用3个反卷积将特征图上采样8倍,故最终R=4。
     然后利用 ŷ∈[0, 1]W/R×H/R×C来对特征图进行标记,在下采样的128×128图像中将ground truth point以 ŷ∈[0, 1]W/R×H/R×C 的形式,用一个高斯核来将关键点分布到特征图上,其中 σp 是一个与目标大小(也就是w和h)相关的标准差。如果某一个类的两个高斯分布发生了重叠,直接取重叠位置处元素最大的就可以。
在这里插入图片描述
     下图是官方源码中生成的一个高斯分布[9,9],其中值为1的位置即表示物体的中心,也就是网络要学习的预测结果。
在这里插入图片描述

     网络最终输出的特征图维度为[128×128×(C+4)],其中 C 代表目标预测类别,4代表x_offset、y_offset、w和h,那么对于监督用的真实值,它的维度也为[128×128×(C+4)]。如果一张图片上两个目标都是猫,属于同一类别,那么它们在同一通道的heatmap上。如果这两只猫的高斯分布点互相有重叠,那么则在重叠的范围内选取较大值的高斯点。(若还有一只狗,则狗的keypoint在另外一个通道维度的heatmap上)


3 损失函数

3.1 点损失

     重点看一下中心点预测的损失函数:
在这里插入图片描述
     其中 α 和 β 是Focal Loss的超参数, N 是图像中的关键点数量,用于将所有的positive focal loss标准化为1。在论文中 α 和 β 分别是2和4。同CornerNet一样,损失函数均是Focal Loss的修改版。

     和Focal Loss类似,对于easy example的中心点,适当减少其训练比重也就是loss值,当 Yxyc=1 的时候, (1-ŷx, y, c)α 就充当了矫正的作用,假如 ŷx, y, c 接近1的话,说明这个是一个比较容易检测出来的点,那么 (1-ŷx, y, c)α 就相应比较小了。而当 ŷx, y, c 接近0的时候,说明这个中心点还没有学习到,所以要加大其训练的比重,因此 (1-ŷx, y, c)α 就会很大。

     对于otherwise的情况,对实际中心点的其他近邻点的训练比重(loss)也进行了调整,首先可以看到 ŷx, y, cα ,因为当 otherwise 的时候 ŷx, y, cα 的预测值理应是0,如果不为0的且越来越接近1的话, ŷx, y, cα 的值就会变大从而使这个损失的训练比重也加大;而 (1-Yx, y, c)β 则对中心点周围的,与中心点靠得越近的点也做出了调整(因为与实际中心点靠的越近的点可能会影响干扰到实际中心点,造成误检测),使其作为负样本的比重减少。

3.2 Offset损失

     同CornerNet中的思想一样,在经过降采样的特征图后预测出来的中心点重新映射回原图上后,会出现略微的位移偏差,所以通过引入Loff来预测这个位移偏差并进行补偿。注意该部分Loss仅针对特征图中的某一个关键点位置 p 来计算的,即正样本位置处。
在这里插入图片描述
     与CornerNet不同的是,CornerNet中的Offset损失采用smoothL1Loss,而这里仅采用了L1Loss。

3.3 目标宽高损失

     假设类别为Ck的物体k的边界框表示为
在这里插入图片描述
     边界框的中心点坐标为:
在这里插入图片描述
     为了网络预测出该物体的宽高,必须提供一个真实宽高值以供网络学习吧,这个值为:
在这里插入图片描述
     而且这个值为在原图降采样后的尺寸大小上的计算值,不经过归一化;计算宽高的损失函数同样采用了L1损失函数,与Offset相同。
在这里插入图片描述

     综上,CenterNet网络的整个损失函数为
在这里插入图片描述

     论文中设置λsize=0.1,λoff=1,作者使用一个单一网络共同预测关键点ŷ、Offset和宽高S,最终在128×128大小的特征图上,在每个位置共预测输出 C+4 个维度的值,表示有C个类别、宽高(2)和x、y方向上的Offset(2)。


4 产生预测结果

     在预测阶段,首先针对一张图像进行下采样(S=4),随后对下采样后的图像进行预测,对于每个类在下采样的特征图中(其维度为[128×128×(C+4)])预测中心点,然后将特征图中的每个类的峰值点单独地提取出来。具体怎么提取呢?就是检测当前热点的值是该点的八领域中最大的点,然后一共取100个这样的点,采用的方式是一个3x3的MaxPool,类似于anchor-based检测中NMS的效果。

     假设网络检测到的点集为在这里插入图片描述
     每个点在特征图中的坐标为(x, y),那么通过下式可由中心点转变为原图上的边界框:
在这里插入图片描述
     其中
在这里插入图片描述
是当前点对应原始图像的偏差值;
在这里插入图片描述
代表网络预测出的当前点对应目标的长宽。
     
     那最终是怎么选择的,是根据模型预测出来的 heatmap中的值,也就是当前中心点存在物体的概率值,代码中设置的阈值为0.3,也就是从上面选出的100个结果中筛选出大于该阈值的中心点作为最终的预测结果。

     下图分别对应取top=100的检测结果、阈值筛选后的最终图,以及预测出来的heatmap。

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


5 最后的最后

      CenterNet当然有一些缺点。在训练过程中,如果图像中同一个类别中的某些物体的GT中心点,在下采样时会挤到一块,也就是两个物体在GT中的中心点重叠,CenterNet对于这种情况也是无能为力的,也就是将这两个物体的当成那个更大的物体来训练(因为只有一个中心点)。同理,在预测过程中,如果两个同类的物体在下采样后的中心点也重叠了,那么CenterNet也是只能检测出一个中心点。
      同时要记得有一个需要注意的点,CenterNet在训练过程中,如果同一个类的不同物体的高斯分布点互相有重叠,那么则在重叠的范围内选取较大值的高斯点。


参考博客+部分图片来源

欢迎关注【OAOA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值