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

news2025/1/17 4:07:10

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.coloradmin.cn/o/2132764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【工具】前端JavaScript代码在线执行器 方便通过网页 手机测试js代码

【工具】前端JavaScript代码在线执行器 方便通过网页 手机测试js代码 自动补全js代码格式化代码色彩打印日志清空日志待补充 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport"…

基于SpringBoot+Vue+MySQL的热门网络游戏推荐系统

系统展示 用户前台界面 管理员后台界面 系统背景 基于SpringBootVueMySQL的热门网络游戏推荐系统&#xff0c;其背景主要源于当前网络游戏市场的蓬勃发展与用户需求的日益多样化。随着互联网的普及和技术的不断进步&#xff0c;网络游戏已成为人们休闲娱乐的重要方式之一。面对…

JAVA开源项目 校园管理系统 计算机毕业设计

本文项目编号 T 026 &#xff0c;文末自助获取源码 \color{red}{T026&#xff0c;文末自助获取源码} T026&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 管…

网络安全-intigriti-0422-XSS-Challenge Write-up

目录 一、环境 二、解题 2.1看源码 一、环境 Intigriti April Challenge 二、解题 要求&#xff1a;弹出域名就算成功 2.1看源码 我们看到marge方法&#xff0c;肯定是原型链污染题目 接的是传参&#xff0c;我们可控的点在于qs.config和qs.settings&#xff0c;这两个可…

逆向工程 反编译 C# net core

索引器访问 在您的代码中&#xff0c;您试图使用 configurationRoot.get_Item("AgileConfig:appId") 来访问配置项&#xff0c;但这里存在几个问题&#xff1a; 错误的访问方法&#xff1a;在 .NET 的 IConfigurationRoot 接口中&#xff0c;没有直接名为 get_Item 的…

python fastapi 打包exe

创建虚拟环境 python -m venv 国内依赖仓库 # 换源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip config set install.trusted-host mirrors.aliyun.com 安装nuitka pip install nuitka 生成exe nuitka --mingw64 --show-progress --s…

[000-01-008].第08节:Sentinel 环境搭建

1.Sentinel的构成&#xff1a; 核心库-后台默认的端口是8719控制台-前台默认的是8080端口 2.2.搭建Sentinel环境&#xff1a; a.下载Sentinel&#xff1a; 1.sentinel官方提供了UI控制台&#xff0c;方便我们对系统做限流设置。可以在GitHub下载 b.下载后运行Sentinel&#…

自动驾驶系列—掌握速度,驾驭安全,限速信息提醒功能(SLIF)介绍

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

心觉:收钱就像喝水一样简单,是如何做到的?

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作168/1000天 真的存在赚钱跟喝水一样简单的事情 这两天亲身体验过 某位做知识付费的大佬&#xff0c;昨天写一篇文章就哗哗哗的开…

导弹追踪问题:蒙特卡罗模拟+matlab代码

问题描述 蒙特卡罗模拟思想 采用微元法以直代曲的思想&#xff0c;假设一个个小时间段内&#xff0c;B船先走完一段直线距离后&#xff0c;导弹朝着两者连线方向走直线&#xff0c;这样若干条直线便近似拟合导弹轨迹。代码中判断碰撞的依据是A、B之间的距离小于某个阈值&#x…

JSON 数据 Excel 行转列

有如下JSON数据 [{id:1,name:小明,score:90}, {id:2,name:小李,score:89}, {id:3,name:小王,score:77}, {id:4,name:小刘,score:56}] 粘贴到 Excel 选中列-->数据tab-->分列 下一步 分隔符号-->其他【,】-->完成 CtrlF 替换-->全部替换 掉不要的字符为空 得…

代码随想录Day 43|leetcode题目:300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 动态规划Part10题目一&#xff1a;300.最长递增子序列解题思路&#xff1a; 题目二&#xff1a;674. 最长连续递增序列解题思路&#xff1a; 题目三&#xff1a; 718. 最长重复子数组解题思路滚动…

Radiance Field Learners As UAV First-Person Viewers 精读

1. 多尺度相机空间估计模块&#xff1a; 关键帧选择器&#xff1a;自动选择最具代表性的帧进行渲染&#xff0c;减少计算量&#xff0c;提高渲染效率。无人机轨迹预测&#xff1a;通过历史轨迹预测无人机的未来位置&#xff0c;确保实时视角调整&#xff0c;提高无人机导航的准…

云渲染与AI渲染分别是什么?两者的优势对比

云渲染和AI渲染是两种先进的渲染技术&#xff0c;它们各自具有独特的优势和应用场景。下面针对两种情况来简单说明下。 1、云渲染&#xff1a; - 定义&#xff1a;云渲染是一种利用远程服务器(云端)来处理和生成渲染效果的技术。它允许用户将计算密集型的任务转移到云端&#…

[论文笔记] CSFCN

摘要 上下文建模或多级特征融合方法已被证明可以有效提高语义分割性能。 然而&#xff0c;它们并不是专门处理像素上下文不匹配和空间特征不对齐的问题&#xff0c;并且高计算复杂度阻碍了它们在实时场景中的广泛应用。 在这项工作中&#xff0c;我们提出了一种轻量级的上下文…

8.第二阶段x86游戏实战2-实现瞬移

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

【C++11 —— 包装器】

C11 —— 包装器 包装器function包装器function包装器介绍function包装器统一类型function包装器的意义 bind包装器bind包装器介绍bind包装器绑定固定参数bind包装器调整传参顺序bind包装器的意义 包装器 function包装器 function包装器介绍 function包装器 也叫作适配器。C…

【Go】使用Goland创建第一个Go项目

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

go-zero的快速实战(完整)

微服务框架 go-zero 的基本介绍 go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性&#xff0c;经受了充分的实战检验。 go-zero 中的 api&#xff0c;rpc&#xff0c;数据库等涉及的代码&#xff0c;都可以给我们一键生成&#…

计算机毕业设计 自习室座位预约系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…