【Paper Reading】CenterNet:Keypoint Triplets for Object Detection

news/2024/11/17 6:43:47/

背景

首先是借鉴Corner Net 表述了一下基于Anchor方法的不足:

  1. anchor的大小/比例需要人工来确认
  2. anchor并没有完全和gt的bbox对齐,不利于分类任务。

但是CornerNet也有自己的缺点

  1. CornerNet 只预测了top-left和bottom-right 两个点,并没有关注整体的信息,因此缺少一些全局的信息
  2. 上述的点导致它对边界过于敏感,经常会预测一些错误的bbox。

为了解决该问题,作者提出了Triplet的关键点预测。他follow了top-left和bottom-right的预测,此外增加了中心点的预测。
具体来说,为了使得中心点的预测更加准确,作者提出了Center Pooling的层用来在水平和垂直两个维度进行特征的聚合。使得每个位置的点都可以尽可能的感知到全局的信息。
此外,作者还提出了cascade corner pooling layer来取代原有的corner pooling layer。

作者也从指标的角度量化了上面提到的CornerNet比较容易出现False Positive的情况,如下图所示。作者展示了在不同IoU阈值下 False Discovery Rate。注意这里为什么没有用mAP,mAP是否有缺点?

  1. 框的增加,在recall不变的情况下,precision的下降不会导致mAP的下降。=>因此需要关注PR曲线的分数
  2. mAP是分类别计算的,每个类别都是按照分数排序来计算的,说明每个类别的分数阈值可能会不同,不能用同一个阈值在适应不同的类别。
    False Detection

方法

CenterNet的网络结构如下图所示
CenterNet Architecture
整个网络的推理流程如下所示:

  1. 选择top-k个中心点根据他们的分数
  2. 根据对应的offset将其还原到对应的输入图像中
  3. 根据tl-br构成的bbox,判断每个bbox内部的中心区域是否包括上述的中心点。
    3.1 N个tl的点和N个br 的点,组合形成N*N个bbox
    3.2 如果tl和br的embedding相似度小于阈值,则将对应的bbox剔除,否则保留。
  4. 如果中心点在bbox中,则用三者分数(tl、br和center)的平均来表示bbox的置信度。

那么这里涉及到一个问题,那就是如何计算每个bbox的中心区域。作者这里认为大的bbox应该使用小的中心区域,避免precision过低。小的bbox应该使用大的中心区域,避免recall过低。因此这里作者提出了scale-aware的中心区域计算方法,详情如下所示,其中针对大物体,n选择5,针对小物体,n选择3。
central region
在这里插入图片描述
上述介绍了推理的整体流程,那么我们在从内部逐步解析一下关键的结构,我们分别从center pooling、cascade corner pooling和loss来进行介绍。

center pooling

center pooling的示意图如下图所示。具体来说就是针对每个位置,我们计算其水平和垂直方向的max response,然后想加得到该位置的表征,我们认为这样的表征是包括了全局信息。简化版本的计算如下所示,其中 f , f 3 ∈ R H × W × C f,f_3 \in R^{H \times W \times C} f,f3RH×W×C

f1 = np.max(f, axis=0)
f2 = np.max(f, axis=1)
f3 = f1[None, :, :] + f2[:, None, :]

center pooling

cascaded corner pooling

示意图如下所示
在这里插入图片描述

loss

损失函数的定义如下所示。整体上分为三大部分。

  • L d e t c o 、 L d e t c e L_{det}^{co}、L_{det}^{ce} LdetcoLdetce表示的corner 和 center两个heatmap组成的loss,这里采用的是focal loss。

  • L p u l l c o 、 L p u s h c o L_{pull}^{co}、L_{push}^{co} LpullcoLpushco是让属于同一个物体的corner embedding尽可能相似,属于不同物体的embedding尽可能远离。

  • L o f f c o 、 L o f f c e L_{off}^{co}、L_{off}^{ce} LoffcoLoffce 表示预测corner 和 center在原图上的offset,这里采用的是l1-loss。
    loss function

  • QA1:GT是如何计算的?


http://www.ppmy.cn/news/1010092.html

相关文章

【Yolov5+Deepsort】训练自己的数据集(1)| 目标检测追踪 | 轨迹绘制

📢前言:本篇是关于如何使用YoloV5Deepsort训练自己的数据集,从而实现目标检测与目标追踪,并绘制出物体的运动轨迹。本章讲解的为第一个内容:简单介绍YoloV5Deepsort中所用到的目标检测,追踪及sort&Depp…

# 关于Linux下的parted分区工具显示起始点为1049kB的问题解释

关于Linux下的parted分区工具显示起始点为1049kB的问题解释 文章目录 关于Linux下的parted分区工具显示起始点为1049kB的问题解释1 问题展示:2 原因3 修改为KiB方式显示4 最后 1 问题展示: kevinTM1701-b38cbc23:~$ sudo parted /dev/nvme1n1 GNU Part…

Distance 2023牛客暑期多校训练营6 B

登录—专业IT笔试面试备考平台_牛客网 题目大意:给出两个长度为n的数组a,b,每次操作可以令一个数1,将a的一个子集A变成和b的一个子集B变成完全相同需要的最少操作数为C(A,B),求对于a的所有子集对所有b的子集的C(A,B)的…

【现网】记一次并发冲突导致流量放大的生产问题

目录 事故现象 转账 业务背景介绍 背景一:转账流程 转账流程 转账异常处理 转账异常处理流程图 背景二:账户系统合并 实际全流程: 背景三:扣内存数据库逻辑 背景四:调用方重试逻辑 问题定位 总结 资料获取…

Flutter 文件上传(七牛云)简单封装

前言:记录了七牛云上传图片的简单封装、若有不足 欢迎指正。 开始前准备: A、七牛sdk版本一定要和dart版本相对应(推荐用any方式、让其自己去匹配); qiniu_flutter_sdk: any B、七牛上传文件所需的参数: …

【C++】map和set

目录 一、容器补充1.序列式容器与关联式容器2.键值对3.树形结构的关联式容器 二、set1.set的介绍2.set的使用3.multset的介绍4.multset的使用 三、map1.map的介绍2.map的使用3.multimap的介绍4.multimap的使用 一、容器补充 1.序列式容器与关联式容器 我们已经接触过STL中的部…

纯C语言实现的Luhn算法(信用卡校验位):详解与示例

Luhn算法,也被称为“模10算法”,是一种简单的校验和公式,用于验证各种标识号码,如信用卡号码。Luhn算法是由IBM科学家Hans Peter Luhn发明的。这种算法在全球范围内被广泛应用于各种场合,其中最常见的就是信用卡号码的校验。 在本文中,我们将详细介绍如何使用纯C语言实现…

SCRUM产品负责人(CSPO)认证scrum认证培训

Scrum是目前运用最为广泛的敏捷开发方法,是一个轻量级的项目管理和产品研发管理框架。产品负责人是Scrum的三个角色之一,产品负责人在Scrum产品开发当中扮演舵手的角色,他决定产品的愿景、路线图以及投资回报,他需要回答为什么做&…