Objects as Points基于中心点的目标检测方法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的方法所有的框都是采用回归的方式来生成的框而不是使用众多的先验框的过程。(NO NMS的方法)

对于heatmap的使用,我们需要的是要在周围的8邻域的附近找到100个最大值选取为峰值。

因为没有使用NMS算法来进行操作,我们使用3x3的using a 3 × 3 max pooling operation来寻找最大的中心值点(也就是创新性的使用了3x3的最大池化来寻找中心点的位置坐标)

之后的论文中还介绍了3d的目标检测和人体姿态估计的一些方法,在本文中对这一部分的讲解进行忽略。

实现细节

We experiment with 4 architectures: ResNet-18, ResNet-101 [55], DLA-34 [58], and Hourglass-104 [30]. We modify both ResNets and DLA-34 using deformable convolution layers [12] and use the Hourglass network as is.

在补充的材料中作者已经给出了,模型具体实现的一个简单的网络结构。如下图所示。

在这里插入图片描述

对于输入的图片时间先进行一个4倍的下采样操作,依次向下进行下采样直到128倍的下采样终止。

之后进行一个上采用操作,中间要进行一个连接的操作。得到下采样4倍的一个输出。图a的部分就是连续的两个沙漏模型。

图b为带有转置卷积的 ResNet ,在上采样的部分我们使用到的是转置卷积的方式来进行实现。

图c用于语义分割的DLA34的网络架构,根据箭头的指示来确定融合的目标方向。d中使用了可变性卷积来进行实现用3x3的可变性卷积代替普通的卷积来进行实现。

在得到特征图的信息之后,我们要通过一个公共的卷积模块,来得到对应的三个输出分量。

对于共享的卷积层的部分,我们首先使用到了3x3的共享卷积层对特征进行提取操作。最后使用1x1的卷积对其进行一个回归的操作。得到最终的输出。

对于CenterNet网络的缺点,论文中的补充部分也有所提及,如果出现两个物体的中心点出现在了同一个位置,这种情况下CenterNet网络便无法对这个两个物体进行检测。

优点:

  • 模型的结构简单直观,真Anchor-free思想
  • 单阶段,速度快,有进一步提速和提精度的空间
  • 可以轻松拓展到3D检测和人体姿态估计任务

缺点:对于重叠的目标我们只能检测到一个。

更为具体的实现细节要结合代码进行学习:https://github.
com/xingyizhou/CenterNet.

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

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

相关文章

AI助力遥感影像智能分析计算,基于高精度YOLOv5全系列参数【n/s/m/l/x】模型开发构建卫星遥感拍摄场景下地面建筑物智能化分割检测识别系统

随着科技的飞速发展,卫星遥感技术已成为获取地球表面信息的重要手段之一。卫星遥感图像以其覆盖范围广、数据量大、信息丰富等特点,在环境监测、城市规划、灾害评估等多个领域发挥着不可替代的作用。然而,面对海量的卫星图像数据,…

wx小程序渗透思路

免责声明:本文仅做分享! 目录 WX小程序源代码 wx小程序目录位置: 反编译: e0e1-wx.py工具 unveilr.exe工具 查看源代码: 微信开发者工具: WX抓包 Fiddler抓包 官网下载 下载证书 操作: bp proxifier bp:(代理抓包) proxifier:(本地代理) WX小程序源代码 其实就…

程序修改题(41-50)

第四十一题 题目 给定程序modi1.c的主函数中&#xff0c;将a、b、c三个结点链成一个单向链表&#xff0c;并给各结点的数据域赋值&#xff0c;函数fun()的作用是:累加链表结点数据域中的数据作为函数值返回。 #include <stdio.h> typedef struct list { int data…

【数据结构-扫描线】力扣57. 插入区间

给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表 intervals&#xff0c;其中 intervals[i] [starti, endi] 表示第 i 个区间的开始和结束&#xff0c;并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval [start, end] 表示另一个区间的开始和…

李宏毅结构化学习 02

文章目录 一、上篇博文复习二、Separable Case三、Non-separable Case四、Considering Errors五、Regularization六、Structured SVM七、Cutting Plane Algorithm for Structured SVM八、Multi-class and binary SVM九、Beyond Structured SVM 一、上篇博文复习 图中x表示输入的…

Android Framework(六)WMS-窗口显示流程——窗口内容绘制与显示

文章目录 窗口显示流程明确目标 窗户内容绘制与显示流程窗口Surface状态完整流程图 应用端处理finishDrawingWindow 的触发 system_service处理WindowState状态 -- COMMIT_DRAW_PENDING本次layout 流程简述 窗口显示流程 目前窗口的显示到了最后一步。 在 addWindow 流程中&…

基于Python的自然语言处理系列(10):使用双向LSTM进行文本分类

在前一篇文章中&#xff0c;我们介绍了如何使用RNN进行文本分类。在这篇文章中&#xff0c;我们将进一步优化模型&#xff0c;使用双向多层LSTM来替代RNN&#xff0c;从而提高模型在序列数据上的表现。LSTM通过引入一个额外的记忆单元&#xff08;cell state&#xff09;来解决…

24.Redis实现全局唯一ID

是一种分布式系统下用来生成全局唯一ID的工具。 特点 1.唯一性 2.高可用 3.高性能 4.递增性&#xff0c;数据也要保持一种递增&#xff0c;有利于数据库进行查询。 5.安全性 全局唯一ID的生成策略 1.UUID(没有顺序&#xff0c;字符串类型&#xff0c;效率不高) 2.Redis…

【电路笔记】-差分运算放大器

差分运算放大器 文章目录 差分运算放大器1、概述2、差分运算放大器表示2.1 差分模式2.2 减法器模式3、差分放大器示例3.1 相关电阻3.2 惠斯通桥3.3 光/温度检测4、仪表放大器5、总结1、概述 在之前的文章中,我们讨论了反相运算放大器和同相运算放大器,我们考虑了在运算放大器…

floodfill算法(二)

目录 一、太平洋大西洋水流问题 1. 题目链接&#xff1a;417. 太平洋大西洋水流问题 2. 题目描述&#xff1a; 3. 解法 &#x1f334;算法思路&#xff1a; &#x1f334;算法代码&#xff1a; 二、扫雷游戏 1. 题目链接&#xff1a;529. 扫雷游戏 2. 题目描述&#xf…

softmax回归的从零实现(附代码)

softmax回归是一个多分类模型&#xff0c;但是他跟线性回归一样将输入特征与权重做线性叠加&#xff0c;与线性不同的是他有多个输出&#xff0c;输出的个数对应分类标签的个数&#xff0c;比如四个特征和三种输出动物类别&#xff0c;则权重包含12个标量&#xff08;带下标的w…

深度学习之线性代数预备知识点

概念定义公式/案例标量(Scalar)一个单独的数值&#xff0c;表示单一的量。例如&#xff1a;5, 3.14, -2向量 (Vector)一维数组&#xff0c;表示具有方向和大小的量。 &#xff0c;表示三维空间中的向量 模(Magnitude)向量的长度&#xff0c;也称为范数&#xff08;通常为L2范数…

HCIA--实验十六:ACL通信实验(2)

2.高级ACL配置 一、实验内容 1.需求/要求&#xff1a; 使用三台PC和一台交换机&#xff0c;在交换机上配置高级ACL&#xff0c;测试PC1、PC2、PC3间的连通性。 二、实验过程 1.拓扑图&#xff1a; 2.步骤&#xff1a; 1.给PC3配置ip地址&#xff1a; 2.给交换机SW3配置高…

Hello,Spring Boot...

今天开启了Spring Boot学习之旅。 首先就是&#xff0c;JDK、Maven、IDEA以及各种官网的下载、安装与配置 然后通过组件创建小类&#xff0c;最让人头痛的就是&#xff0c;这个spring-boot-starter-thymeleaf&#xff0c;下错版本了 其他的一切顺利&#xff0c;自动化明显 最后…

2024最新版mysql数据库表的查询操作-总结

序言 1、MySQL表操作(创建表&#xff0c;查询表结构&#xff0c;更改表字段等)&#xff0c; 2、MySQL的数据类型(CHAR、VARCHAR、BLOB,等)&#xff0c; 本节比较重要&#xff0c;对数据表数据进行查询操作&#xff0c;其中可能大家不熟悉的就对于INNER JOIN(内连接)、LEFT JOIN…

Learn ComputeShader 15 Grass

1.Using Blender to create a single grass clump 首先blender与unity的坐标轴不同&#xff0c;z轴向上&#xff0c;不是y轴 通过小键盘的数字键可以快速切换视图&#xff0c;选中物体以后按下小键盘的点可以将物体聚焦于屏幕中心 首先我们创建一个平面&#xff0c;宽度为0.2…

SpringBoot中使用EasyExcel并行导出多个excel文件并压缩zip后下载

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

SysML图例-农业无人机

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>>

dll修复工具4DDiG DLL Fixer,解决电脑dll丢失问题

4DDiG DLL Fixer是一款专业的DLL修复工具&#xff0c;旨在解决Windows系统中各种DLL相关问题。该工具能够快速全面地扫描计算机&#xff0c;检测并修复导致程序功能异常的DLL错误。它支持一键式操作&#xff0c;自动扫描、识别和替换缺失或损坏的DLL文件&#xff0c;从而帮助用…

推荐3款AIai论文大纲一键生成文献,精选整理!

在当前的学术写作环境中&#xff0c;AI论文大纲生成工具已经成为许多学者和学生的重要助手。这些工具不仅能够快速生成高质量的论文大纲&#xff0c;还能提供内容填充、文献引用和查重修改等全方位的服务。以下是三款值得推荐的AI论文大纲一键生成文献工具&#xff1a;千笔-AIP…