基于中心点的目标检测方法CenterNet—CVPR2019

Anchor Free目标检测算法—CenterNet

Objects as Points论文解析

Anchor Free和Anchor Base方法的区别在于是否在检测的过程中生成大量的先验框。CenterNet直接预测物体的中心点的位置坐标。

在这里插入图片描述
CenterNet本质上类似于一种关键点的识别。识别的是物体的`中心点位置。 有了中心点之后,通过回归就可以预测物体边界框的高和宽了。

Anchor Base的缺点:

  1. anchor的大小,数量,长宽比会影响检测性能,通过改变这些超参数Retinanet在Coco benchmark上面提升了4%的AP。

  2. 这些固定的anchor极大地损害了检测器的普适性,导致对于不同任务,其anchor都必须重新设置大小和长宽比。

  3. 为了去匹配真实框,需要生成大量的anchor,但是大部分的anchor在训练时标记为negative,所以就造成了样本间的不平衡(没有充分利用fore-ground)。

  4. 在训练中,需要计算所有anchor与真实框的loU,这样就会消耗大量内存和时间。

摘要总结

  1. 目前主流且最成功的目标检测方法效率低下,浪费计算资源。

  2. 本文提出的方法将目标用一个中心点来表示,同时可以回归与中心点相关联的其他属性。

  3. 简单,更快,更准确,COCO测试集上做到速度与精度的平衡。
    在这里插入图片描述

  4. 3D目标检测和人体姿态估计上,可以做到实时运行,且精度较高;(添加一个深度的回归参数)
    在这里插入图片描述

模型结构总览

首先CenterNet网络结构是根据处理速度和精度的不同动态的进行改变的,例如在backbone主干提取网络中可以使用

  • RestNet做为主干提取网络。
  • DLA作为主干提取网络
  • Hourglass(较为复杂)作为主干提取网络的沙漏型

网络的输入是512x512x3的输入,经过下采样操作在经过上采样操作之后得到128x128x256的特征图的输出,用来进行特性信息的提取。
将输出的映射为3个部分组成分别为:HeatMap(热力图:颜色最深的点为中心点),Offset,Height&Weigh结构

如何backbone主干提取网络采用的结构是Hourglass的网络结构。

在这里插入图片描述

  • pre,通过一个步长为2的7x7卷积和步长为2的残差单元,将图片宽高压缩为原来的1/4
  • Hourglass Module1,第一个沙漏型的卷积神经网络模块
  • joint,连接Hourglass Module2和Hourglass Module2
  • Hourglass Module2,第二个沙漏型的卷积神经网络模块
  • Head,输出三个分支输出

输入图像数据的大小为W H组成。

1. HeatMap:大小为(W/4,H/4,80),输出不同类别(80个类别)物体中心点的位置。
2. Offset:大小为(W/4,H/4,2),对HeatMap的输出进行精炼,提高定位准确度。
3. Height&Width:大小为(W/4,H/4,2),预测以关键点为中心的检测框的宽高

推理是单网络前向传递,没有后处理的非极大值抑制。所以整个模型网络的速度会变快。Inference is a single net-work forward-pass, without non-maximal suppression forpost-processing。

模型选择

Resnet-18 and up-convolutional layers [55], our network runs
at 142 FPS with 28.1% COCO bounding box AP. With
a carefully designed keypoint detection network, DLA-
34
[58], our network achieves 37.4% COCO AP at 52 FPS.
Equipped with the state-of-the-art keypoint estimation net-
work, Hourglass-104 [30, 40], and multi-scale testing, our
network achieves 45.1% COCO AP at 1.4 FPS.

模型的初步细节

首先一张图片是按照R(W H 3)的通道数进行输入的。我们的目标是要回归一个中心点的热力图。

我们生成的热力图可以用下面的式子来进行表示:

Y ^ ∈ [ 0 , 1 ] W R × H R × C \hat{Y}\in[0,1]^{\frac{W}{R} \times \frac{H}{R} \times C} Y^[0,1]RW×RH×C

其中R表示的是步长的信息。默认情况下都取值为4。在论文中提到了C是中心点keypoint的个数。即在生成的每个特征图的位置上产生c个中心点。

C= 17代表姿态估计选取的关键点,而C=80代表的是选取的目标检测的类别。R=4 得到128x128x80

对于目标检测的任务来说的话,对于COCO数据集上的各个类别(80个)都要产生出范围为0,1的预测值来判断的类别。Yx,y,c = 1 corresponds to a detected keypoint,while ˆYx,y,c = 0 is background.

主干网络有Restnet18加上一个上采样的部分组成。

在这里插入图片描述
蓝色的框代表的是真实的框,我们可以通过蓝色的框得到中心点的位置坐标信息。对于这个真实的中心点坐标,我们可以使用高斯分部进行离散化的操作。

Y x y c = exp ⁡ ( − ( x − p ~ x ) 2 + ( y − p ~ y ) 2 2 σ p 2 ) Y_{x y c}=\exp \left(-\frac{\left(x-\tilde{p}_{x}\right)^{2}+\left(y-\tilde{p}_{y}\right)^{2}}{2 \sigma_{p}^{2}}\right) Yxyc=exp(2σp2(xp~x)2+(yp~y)2)

之后的论文中给出了一个通过中心点通过高斯分布进行离散化操作。所得到的示意图。

在这里插入图片描述

首先图中红色部分的方框对应的中心点的坐标即为真实的中心点的坐标信息。通过该中心点进行高斯分布的离散化的操作,中心的值取为1之后周围的几个位置的值位于[0,1]之间。满足高斯分布。

回归的时候可以选取着九个位置中的一个位置来进行回归操作并取一个最大的值。

寻找中心点的损失函数是之后的Focal LOSS进行改编的一个函数。

L k = − 1 N ∑ x y c { ( 1 − Y ^ x y c ) α log ⁡ ( Y ^ x y c ) if  Y ^ x y c = 1 ( 1 − Y x y c ) β ( Y ^ x y c ) α otherwise  log ⁡ ( 1 − Y ^ x y c ) \begin{array}{l} L_{k}=\frac{-1}{N} \sum_{x y c}\left\{\begin{array}{cl} \left(1-\hat{Y}_{x y c}\right)^{\alpha} \log \left(\hat{Y}_{x y c}\right) & \text { if } \hat{Y}_{x y c}=1 \\ \left(1-Y_{x y c}\right)^{\beta}\left(\hat{Y}_{x y c}\right)^{\alpha} & \text { otherwise } \\ \log \left(1-\hat{Y}_{x y c}\right) & \end{array}\right.\\ \end{array} Lk=N1xyc (1Y^xyc)αlog(Y^xyc)(1Yxyc)β(Y^xyc)αlog(1Y^xyc) if Y^xyc=1 otherwise 

之后对损失函数部分在单独的进行介绍。

为了恢复由输出步幅引起的离散化误差,我们由此引入了Offset这一目标的偏移项。

Offset这一项在训练的时候我们使用的是F1 Loss项。(绝对误差损失函数)

L o f f = 1 N ∑ p ∣ O ^ p ~ − ( p R − p ~ ) ∣ L_{o f f}=\frac{1}{N} \sum_{p}\left|\hat{O}_{\tilde{p}}-\left(\frac{p}{R}-\tilde{p}\right)\right| Loff=N1p O^p~(Rpp~)

模型的检测部分

在模型的检测部分我们首先给出了一个位置的坐标。

( x 1 ( k ) , y 1 ( k ) , x 2 ( k ) , y 2 ( k ) ) \left(x_{1}^{(k)}, y_{1}^{(k)}, x_{2}^{(k)}, y_{2}^{(k)}\right) (x1(k),y1(k),x2(k),y2(k))

x1 y1:代表的是左上角处的位置坐标,而x2,y2代表的是右下角处的中心点的位置坐标。

我们可以得到最终的中心点的位置坐标信息:

( x 1 ( k ) + x 2 ( k ) 2 , y 1 ( k ) + y 2 ( k ) 2 ) \left(\frac{x_{1}^{(k)}+x_{2}^{(k)}}{2}, \frac{y_{1}^{(k)}+y_{2}^{(k)}}{2}\right) (2x1(k)+x2(k),2y1(k)+y2(k))

w 和 h的计算则可以采用的是下面的公式来进行计算。

s k = ( x 2 ( k ) − x 1 ( k ) , y 2 ( k ) − y 1 ( k ) ) s_{k}=\left(x_{2}^{(k)}-x_{1}^{(k)}, y_{2}^{(k)}-y_{1}^{(k)}\right) sk=(x2(k)x1(k),y2(k)y1(k))

对于中心点位置的预测我们也可以L1损失函数来进行计算

L s i z e = 1 N ∑ k = 1 N ∣ S ^ p k − s k ∣ . L_{s i z e}=\frac{1}{N} \sum_{k=1}^{N}\left|\hat{S}_{p_{k}}-s_{k}\right| . Lsize=N1k=1N S^pksk .

最后给出了网络中的整体的损失函数。

L d e t = L k + λ s i z e L s i z e + λ o f f L o f f L_{d e t}=L_{k}+\lambda_{s i z e} L_{s i z e}+\lambda_{o f f} L_{o f f} Ldet=Lk+λsizeLsize+λoffLoff
λ size = 0.1 and λ off = 1

We use a single network to predict the keypointsYˆ offsetOˆ, and size SˆThe network pre-dicts a total of C + 4 outputs at each location。最后得到的是一个C+4的输出向量。它们共享一个唯一的全卷积神经网络。

在这里插入图片描述

这个图就给出了二维的目标检测,所得到的输出信息,即为c+4的输出值信息。

  1. 先给出中心点及其范围
  2. 加入偏移量确定最终的一个位置信息。
  3. 给出size的大小用来确定最终的w 和 h的信息位置。
  4. 最后我们根据上面得到的信息,得出左上角的坐标和右下脚的坐标位置信息。

公式如下所示。

( x ^ i + δ x ^ i − w ^ i / 2 , y ^ i + δ y ^ i − h ^ i / 2 x ^ i + δ x ^ i + w ^ i / 2 , y ^ i + δ y ^ i + h ^ i / 2 ) \begin{aligned} \left(\hat{x}_{i}+\delta \hat{x}_{i}-\hat{w}_{i} / 2,\right. & \hat{y}_{i}+\delta \hat{y}_{i}-\hat{h}_{i} / 2 \\ \hat{x}_{i}+\delta \hat{x}_{i}+\hat{w}_{i} / 2, & \left.\hat{y}_{i}+\delta \hat{y}_{i}+\hat{h}_{i} / 2\right) \end{aligned} (x^i+δx^iw^i/2,x^i+δx^i+w^i/2,y^i+δy^ih^i/2y^i+δy^i+h^i/2)

总结:完全是一个anctor free的方法所有的框都是采用回归的方式来生成的框。

未完待续。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/423109.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【重学 MySQL】二十二、limit 实现分页

【重学 MySQL】二十二、limit 实现分页 基本语法实现分页第一页第二页通用公式注意事项在 MySQL 中,LIMIT 子句非常强大,它允许你限制查询结果的数量,同时也经常被用来实现分页功能。分页是 Web 开发中常见的需求,它允许用户浏览大量数据时,一次只查看一小部分数据。 基本…

unity3d入门教程四

unity3d入门教程四 10.1坐标与旋转10.2物体的运动10.3(练习)掉头飞行11.1向量11.2向量间运算11.3向量夹角11.4物体的指向11.5(练习)飞向目标12.1屏幕坐标12.2屏幕的边界 10.1坐标与旋转 比如,节点的坐标用 Vector3 类型…

数据结构-线性表顺序单项链表双向链表循环链表

1数据结构概述 数据结构是计算机组织、存储数据的方式。是思想层面的东西,和具体的计算机编程语言没有关系。可以用任何计算机编程语言去实现这些思想。 1.1 数据逻辑结构 反映数据逻辑之间的逻辑关系,这些逻辑关系和他们咱在计算机中的存储位置无关。…

apache文件共享和访问控制

实现apache文件共享 文件共享路径 <Directory "/var/www/html"> #默认发布路径&#xff0c;功能限制 Options Indexes FollowSymLinks #indexes支持文件共享功能 AllowOverride None Require all granted </Directory> 进入到该路径下 cd…

为什么sqlynx是连接国产数据库的最佳选择?

1. 广泛的国产数据库支持 SQLynx除了国际上的主流数据库外&#xff0c;还支持多种国产数据库&#xff0c;如达梦、人大金仓、OceanBase、openGauss等。随着国产数据库市场的不断发展和成熟&#xff0c;越来越多的企业和机构开始选择国产数据库来满足其数据管理需求。SQLynx通过…

WebGL系列教程三(使用缓冲区绘制三角形)

目录 1 前言2 缓冲区介绍3 声明顶点的位置和颜色4 回忆Shader的初始化5 开始缓冲区的逻辑5.1 声明顶点坐标5.2 创建并绑定缓冲区5.3 获取顶点着色器中的变量5.4 使变量从缓冲区取值5.5 绘制5.6 完整代码 6 总结 1 前言 上一篇中我们介绍了WebGL的环境搭建及Shader的初始化&…

webpack - 五大核心概念和基本配置(打包一个简单HTML页面)

// 五大核心概念 1. entry&#xff08;入口&#xff09; 指示Webpack从哪个文件开始打包2. output&#xff08;输出&#xff09; 指示Webpack打包完的文件输出到哪里去&#xff0c;如何命名等3. loader&#xff08;加载器&#xff09; webpack本身只能处理js&#xff0c;json等…

51单片机快速入门之定时器和计数器

51单片机快速入门之定时器 断开外部输入 晶振振荡 假设为 12MHz 12分频之后,为1MHz 当其从0-65536 时,需要65536μs 微秒 也就是65.536ms 毫秒 溢出(值>65536 时)>中断>执行中断操作 假设需要1ms后产生溢出,则需要设置初始值为64536 此时定时器会从 64536 开始计…

xss-labs-master通关教程

一.level1 先来进行一下代码审计 <?php ini_set("display_errors", 0);//关闭错误显示 $str $_GET["name"]; //接受URL来的get形式的name传参 echo "<h2 aligncenter>欢迎用户".$str."</h2>";//在网页输出&#x…

引领AI PC浪潮,Arm人工智能创新应用大赛火热报名中

AI PC&#xff0c;即搭载人工智能技术的个人电脑&#xff0c;正成为个人电脑市场的新宠儿。而正在如火如荼进行中的 Arm人工智能创新应用大赛&#xff0c;则为敏锐的开发者探索 AI PC 应用开发掘金之路提供了平台。 点击报名 挑战10万奖金池 AI PC 增长强劲&#xff0c;年出货…

【Hadoop|HDFS篇】HDFS的读写流程

1. HDFS的写流程 1.1 剖析文件的写入 副本存储节点的选择问题&#xff1a; 第一个副本在Client所在的节点上&#xff0c;如果客户端在集群外&#xff0c;随机选一个。第二个副本在另一个机架的随机一个节点上。第三个副本在第二个副本所在的机架的随机节点上。 2. HDFS的写流…

2024CCPC网络预选赛

vp链接&#xff1a;Dashboard - The 2024 CCPC Online Contest - Codeforces B. 军训 II 序列 a 从小到大排列或者从大到小排列时&#xff0c;不整齐度是最小的。方案数是所有相同数字的个数的排列数的乘积。如果首尾的数字不同的话&#xff0c;还要再乘个 2。 #include <…

Social Network Influence Maximization Based on Graph Attention Mechanisms

摘要 社交网络中的关键节点对整个网络具有重要的影响力&#xff0c;而社交网络中的一些节点可能位于网络的中心&#xff0c;而另一些节点则可能位于网络的边缘&#xff0c;传统的影响力最大化算法忽略了这种不平衡。通过忽略位于网络边缘但连接到中心的节点来导致信息的传播。为…

Java项目: 基于SpringBoot+mybatis+maven医院管理系统(含源码+数据库+任务书+开题报告+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven医院管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、…

【LeetCode】每日一题 2024_9_13 预算内的最多机器人数目(滑动窗口、单调队列)

LeetCode 启动&#xff01; 每日一题的题解重新开始连载&#xff01; 题目&#xff1a;预算内的最多机器人数目 题目链接&#xff1a;2398. 预算内的最多机器人数目 题目描述 代码与解题思路 func maximumRobots(chargeTimes []int, runningCosts []int, budget int64) (an…

期权组合策略有什么风险?期权组合策略是什么?

今天期权懂带你了解期权组合策略有什么风险&#xff1f;期权组合策略是什么&#xff1f;期权组合策略是通过结合不同期权合约&#xff08;如看涨期权和看跌期权&#xff09;&#xff0c;以及标的资产&#xff08;如股票&#xff09;来实现特定投资目标的策略。 期权组合策略市…

改进大语言模型的最全方法!

这是一篇关于适应开源大语言模型&#xff08;LLMs&#xff09;的三部系列博客的第一篇。本文探讨将LLM适应领域数据的各种方法。 第二部分讨论如何确定微调&#xff08;fine-tuning&#xff09;是否适合您的用例。第三部分探讨策划良好训练数据集的一些经验法则。 0 引言 大…

【IP协议】IP协议报头结构(上)

IP 协议报头结构 4位版本 实际上只有两个取值 4 > IPv4&#xff08;主流&#xff09;6 > IPv6 IPv2&#xff0c;IPv5 在实际中是没有的&#xff0c;可能是理论上/实验室中存在 4位首部长度 IP 协议报头也是变长的&#xff0c;因为选项个数不确定&#xff0c;所以报头长…

突破瓶颈:Java并发编程的最佳实践与技巧,你了解了吗?

文章目录 1 什么是 Executor 和 ExecutorService &#xff1f;这两个接口有什么区别&#xff1f;2 java.util.concurrent 标准库中 ExecutorService 的可用实现是什么 &#xff1f;3 什么是 Java 内存模型&#xff08; JMM &#xff09;&#xff1f;描述下其目的和基本思想4 JM…

Spring扩展点系列-ApplicationContextAwareProcessor

文章目录 简介源码分析示例代码示例一&#xff1a;扩展点的执行顺序运行示例一 示例二&#xff1a;获取配置文件值配置文件application.properties内容定义工具类ConfigUtilcontroller测试调用运行示例二 示例三&#xff1a;实现ResourceLoaderAware读取文件ExtendResourceLoad…