激光点云3D目标检测算法之CenterPoint

news2024/11/18 0:14:49

激光点云3D目标检测算法之CenterPoint

本文首发于公众号【DeepDriving】,欢迎关注。

前言

CenterPointCVPR 2021的论文《Center-based 3D Object Detection and Tracking》中提出的一个激光点云3D目标检测与跟踪算法框架,与以往算法不同的是,该算法不用边界框而是提出用关键点来表示、检测和跟踪3D目标:在检测流程中,第一阶段先用一个关键点检测器去检测目标的中心点,然后再用中心点特征回归出目标的3D尺寸、朝向和速度等属性,第二阶段再基于该目标额外的点特征去对这些属性进行优化;目标跟踪则被简化为一个简单的最近点匹配过程。CenterPoint提出的3D目标检测与跟踪算法非常简单而高效,在nuScenesWaymo数据集上都取得了SOTA的性能表现。

论文链接:https://arxiv.org/pdf/2006.11275.pdf

代码链接:https://github.com/tianweiy/CenterPoint

本文将对CenterPoint算法进行简要的解读。

预备知识

3D目标检测

假设用 P = { ( x , y , z , r ) i } \mathcal{P} =\left \{ (x,y,z,r)_{i} \right \} P={(x,y,z,r)i}来表示一帧无序的点云,其中 ( x , y , z ) (x,y,z) (x,y,z)表示3D位置, r r r表示反射强度。3D目标检测的目的是从点云中预测一系列在鸟瞰图视角下用于表示3D目标的边界框 B = { b k } \mathcal{B}=\left \{b_{k}\right \} B={bk},每个边界框可以表示为 b = ( u , v , d , w , l , h , α ) b=(u,v,d,w,l,h,\alpha) b=(u,v,d,w,l,h,α),其中 ( u , v , d ) (u,v,d) (u,v,d)表示目标相对于地平面的中心点位置, ( w , l , h ) (w,l,h) (w,l,h)表示目标的3D尺寸, α \alpha α表示目标的朝向角。

目前主流的3D目标检测算法一般都是先通过一个3D特征编码器将无序的点云划分为规则的单元格(VoxelPillar),然后用基于点的网络(PointNet/PointNet++)去提取每个单元格中所有点的特征,再通过池化操作保留最主要的特征。接下来这些特征被送入一个骨干网络(VoxelNetPointPillars)用于生成特征图 M ∈ R W × L × F \mathbf{M} \in \mathbb{R} ^{W\times L\times F} MRW×L×F,其中 W , L , F W,L,F W,L,F分别表示宽、长和通道数,基于这个特征图,一个单阶段或者二阶段的检测头就可以从中生成目标检测结果了。之前anchor-based3D目标检测算法(比如PointPillars)都需要基于预定义的anchor去回归目标的位置,但是3D物体通常具有各种各样的尺寸和朝向,这就导致需要定义数量众多的anchor用于模型的训练和推理,从而增加大量的计算负担。另外,基于anchor的方法也不能很精确地回归出3D目标的尺寸和朝向。

如果对3D目标检测流程不了解的可以先看一下PointPillars,算法的结构如下图所示:

pointpillars_overview

算法解读可以参考我之前写的这篇文章:

激光点云3D目标检测算法之PointPillars

基于中心点的2D目标检测算法CenterNet

CenterPoint延续了CenterNet基于中心点做目标检测的思想。CenterNet2D目标检测当做一个标准的关键点估计问题,将目标表示为一个在其边界框中心位置的单独点,其他的一些属性比如目标尺寸、维度、朝向和姿态等则直接从这个中心点位置的图像特征中进行回归。该模型将图像输入到一个全卷积网络中用来生成热力图,热力图的峰值位置即为目标的中心,每个峰值位置的图像特征用来预测目标边界框的宽度和高度。

如果对CenterNet目标检测算法还不了解可以先看一看我之前写的这篇文章,这里就不做过多介绍了。

经典的目标检测算法:CenterNet

CenterPoint模型

下图是CenterPoint算法的框架,首先通过VoxelNetPointPillars等标准的3D骨干网络从点云中提取鸟瞰图下的特征图,然后用基于2D卷积神经网络实现的检测头去找到目标的中心并用中心特征回归出3D边界框的属性。

centerpoint_model

中心点热力图

CenterPoint中心点热力图的生成方式与CenterNet基本类似,这个回归分支会生成K个通道的热力图 Y ^ \hat{Y} Y^,每个通道表示一个类别。在训练过程中,用一个2D高斯函数将标注的目标的真实3D中心映射到鸟瞰图上去,损失函数用的是Focal Loss。与图像相比,在鸟瞰图上的目标要稀疏很多而且一个目标所占的面积很小,不存在因透视变换引起的近大远小的现象(一个近处的物体可能就占了一大半的图像区域)。为了解决这个问题,作者扩大了在每个目标中心呈现的高斯峰值来增加对目标热图 Y Y Y的正向监督,设置高斯函数的半径为

δ = m a x ( f ( w l ) , τ ) \delta = max(f(wl),\tau ) δ=max(f(wl),τ)

其中 τ = 2 \tau=2 τ=2是最小允许的半径, f f f是在CornerNet中定义的半径计算函数。

目标属性回归

除了中心点,还需要3D尺寸和朝向等信息才能完整地构成一个3D边界框来表示一个目标。CenterPoint从中心特征中去回归下面的几个目标属性:

  • 位置修正值 o ∈ R 2 o \in \mathbb{R}^2 oR2,用于减少由于体素化和骨干网络中的stride引起的量化误差。
  • 离地面的高度 h g ∈ R h_{g} \in \mathbb{R} hgR,用于帮助在3D空间中定位目标和添加因为映射到鸟瞰图而丢失的高度信息。
  • 3D尺寸 s ∈ R 3 s \in \mathbb{R}^3 sR3,目标的长宽高信息,回归时用对数函数表示,因为实际的物体可能会有各种大小的尺寸。
  • 朝向角 ( s i n ( α ) , c o s ( α ) ) ∈ R 2 (sin(\alpha),cos(\alpha))\in \mathbb{R}^2 (sin(α),cos(α))R2,用朝向角的正弦和余弦值作为连续的回归目标。

速度估计与目标跟踪

为了对目标进行跟踪,CenterPoint添加了一个额外的回归分支用于预测每个检测到的物体的二维速度 v ∈ R 2 \mathbf{v} \in \mathbb{R} ^2 vR2。与其他属性不同的是,速度估计需要前一帧和当前帧的特征图作为输入,目的是预测目标在当前帧与在前一帧中的位置偏移。与回归其他目标属性一样,速度估计也使用 L 1 L_{1} L1损失函数用于监督训练。

在推理阶段,把目标在当前帧中的中心点通过负速度估计的方法映射回前一帧中,然后用最近距离匹配的方式将它们与已跟踪的目标进行匹配。与SORT目标跟踪算法一样,如果一个目标连续3帧没有匹配成功就将其删除。下图是跟踪算法的伪代码,整个流程比较简单。

SORT目标跟踪算法的原理可以参考我之前写的这篇文章:

多目标跟踪算法之SORT

二阶段CenterPoint

前面介绍的一阶段CenterPoint算法用基于中心点的方法去检测目标并回归得到目标的属性信息,这种检测头非常简单而且效果比基于anchor的检测方法效果好。但是由于目标所有的属性信息都是从目标中心的特征推断出来的,因此可能因缺少足够的特征信息对目标进行精准的定位,因此作者又设计了一个轻量级的点特征提取网络对目标的属性进行二阶段的优化。

在这个阶段中,需要从第一个阶段预测出的边界框每个面的3D中心去提取点特征。考虑到边界框的中心、顶部和顶部的中心在鸟瞰图中会被投影到同一个点,因此作者仅考虑边界框的中心和四个向外面的中心。首先从骨干网络输出的特征图 M \mathbf{M} M中通过双线性插值来提取每个点的特征,然后将提取的特征堆叠起来送入一个MLP网络中用来对前一阶段预测出的边界框进行优化。

这个阶段还会预测一个置信度分数,训练过程中的计算公式如下:

I = m i n ( 1 , m a x ( 0 , 2 × I o U t − 0.5 ) ) I=min(1,max(0,2 \times IoU_{t}-0.5)) I=min(1,max(0,2×IoUt0.5))

其中 I o U t IoU_{t} IoUt表示第 t t t个候选框与ground-truth之间的3D IoU值。损失函数采用二值交叉熵损失,公式如下:

L s c o r e = − I t l o g ( I ^ t ) − ( 1 − I t ) l o g ( 1 − I ^ t ) L_{score} = -I_{t}log(\hat{I}_{t}) - (1-I_{t})log(1-\hat{I}_{t}) Lscore=Itlog(I^t)(1It)log(1I^t)

其中 I ^ t \hat{I}_{t} I^t表示预测的置信度分数。在推理过程中,置信度分数
的计算方式如下:

Q ^ t = Y ^ t ∗ I ^ t \hat{Q}_{t}=\sqrt{\hat{Y}_{t}*\hat{I}_{t}} Q^t=Y^tI^t

其中 Y ^ t = m a x 0 ≤ k ≤ K Y ^ p , k \hat{Y}_{t}=max_{0\le k \le K}\hat{Y}_{p,k} Y^t=max0kKY^p,k I ^ t \hat{I}_{t} I^t分别表示第一阶段和第二阶段对目标 t t t预测出的置信度分数。

总结

CenterPoint可以说是CenterNet3D目标检测任务上的延续,继续沿用简单而优雅的方式来解决目标检测问题,所提出的center-based检测头可以直接替换之前VoxelNetPointPillarsanchor-based算法中的检测头,极大地简化训练和推理过程,并且检测效果更好。

参考资料

  • Center-based 3D Object Detection and Tracking

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

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

相关文章

一大波特斯拉人形机器人上线,马斯克震撼官宣2款新车!

来源 | 新智源 ID | AI-era 【导读】这次特斯拉股东日,虽没有新车,但马斯克确定Cybertruck今年一定会来。 特斯拉股东日,依旧没有新车。 万众瞩目的马斯克登台继续画饼,「我不官宣新车,不过新车年销量会超过500万」…

【云原生】k8sPod基础概念

k8sPod基础概念 一、Pod概述1、pod概念2、Pod资源限制 二、Pod的两种使用方式三、资源共享1、创建Pod的方式2、Pod功能 四、底层容器Pause1、Pause共享资源2、Pause主要功能3、Pod与Pause结构设计用意 五、镜像的拉取策略1、Pod容器镜像拉取策略2、Pod重启策略 六、容器的分类1…

信息收集-ip地址

1、cdn网络 CDN(Content Delivery Network)网络是一种分布式网络架构。它通过将内容(如网页、图片、视频等)缓存到公共的服务器上,以便更快速、更可靠地交付给用户所在的位置。CDN解决了Internet中的一些固有瓶颈和性…

【ROS】Ubuntu22.04安装ROS2(Humble Hawksbill)

0、版本说明 Ubuntu22.04对应的ROS2的版本为Humble Hawksbill(ros-humble) 如果不是在Ubuntu22.04中安装ROS,请参考下面Ubuntu和ROS的版本对应关系 1、更新apt包列表 $ sudo apt update2、设置编码 将ubuntu环境语言编码设置为en_US en_…

appium自动化测试实战详解及框架搭建

目录 一、Appium的介绍 二、Appium实战(以真机为例) 一、Appium的介绍 Appium是一款开源的自动化测试工具,其支持iOS和安卓平台上的原生的,基于移动浏览器的,混合的应用。 1、 使用appium进行自动化测试的好…

【C++】容器篇(一)—— vector 的基本概述以及模拟实现

前言: 在之前,我们已经对 string类进行了基本的概述,并且手动的实现了string类中常用的接口函数。本期,我将带领大家学习的是STL库中的一个容器 -- vector 的学习。相比于之前的string类,本期的 vector 相对来说实现起…

CSAPP复习(三)

CH1: 但是如果问什么时候 得到二进制文件 那就是汇编的时候 CH2 sizeof 的返回值是一个无符号数 然后i-D自动默认是一个无符号数 无符号数不能出现负数 所以出现了一个循环 所以永远不可能循环完成。 CH7链接 什么是静态库?使用静态库的优点是什么? …

在windows内使用virtualbox搭建安卓x86--以及所遇到的问题解决--3

一.ARM兼容包的植入 1.下载arm包: 2.安装arm兼容包 3.验证arm兼容包是否移植成功 二.触屏无效 三.玩游戏卡顿严重 一.ARM兼容包的植入 在AndroidX86系统内大部分应用(国内)并没有适配X86架构,安装基于arm架构的应用会出现报错的情况,如遇到此问题可…

【Linux网络】Linux防火墙

Linux防火墙 一 、Linux包过滤防火墙概述1.1iptables概述1.2netfitel与iptables的关系1.3四表五链1.3.1 四表1.3.2五链1.3.3数据包到达防火墙时,规则表之间的优先顺序**1.3.4规则链之间的匹配顺序** 二、iptables的安装与配置方法2.1iptables的安装2.2iptables的配置…

MySQL数据库基础3-基础查询

文章目录 基础查询(单表)替换查询结果排序筛选分页结果更新表删除数据截断(清空)表聚合函数分组查询 基础查询(单表) 创建表、单行插入、多行插入就不重复介绍了。 替换 当我们的程序每天都会产生大量的数据,而这些数据都是前一天或者再之前的数据更新产生&#…

0基础学习VR全景 平台篇第26章:热点功能-3D物体/空间模型

大家好,欢迎观看蛙色VR官方系列——后台使用课程! 本期为大家带来蛙色VR平台,热点功能—3D物体/空间模型操作。 热点,指在全景作品中添加各种类型图标的按钮,引导用户通过按钮产生更多的交互,增加用户的多…

opencv_c++学习(十四)

一、图像直方图的统计与绘制 如果直方图各个数字之间分布比较均衡,则其对比度就相对较低,反之亦然。同时也可以通过直方图可以大致了解图像的亮暗等。 calcHist(const Mat * images, int nimages, const int * channels, lnputArray mask, OutputArray…

【Python Xpath】零基础也能轻松掌握的学习路线与参考资料

Python是一种面向对象的编程语言。Xpath是一种在XML文档中定位信息的方法。XPath是一种语言,可以用于xml和html文档中选择和查找节点。在Python中,我们可以使用xpath来解析html页面,从而提取所需的数据。 Python xpath学习路线: …

C++中的继承、以及赋值兼容转换。

一、继承的概念及定义 继承可以使代码复用,允许在保持原有类特性的基础上进行扩展。 举个例子:就好比我现在要封装老师、学生等这些人的属性和方法,但是这些人都有重复的属性和方法,比如name、age、sex等等,那么我可…

let、const、var的区别,解构赋值,箭头函数

let、const、var的区别 使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象。使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升。使用const声明的是常量,在后面出现的代码块中,不能在修改改常量的值。 var let const 函数级作用域 块级…

Go语言核心编程-运算符和进制转换

第 4 章 运算符 4.1 运算符的基本介绍 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等 算术运算符赋值运算符比较运算符/关系运算符逻辑运算符位运算符其它运算符 4.2 算术运算符…

体验联网版 ChatGPT:优点和缺点同样明显,还藏着无限可能

ChatGPT 有点像古希腊的阿喀琉斯:它很强大,却有个致命的弱点——无法联网,这注定了它只能是一个停留在 2021 年的超人。 但很快,我们将等到一个「鱼和熊掌兼得」的时刻。 通过插件集的 Web browsing 功能,ChatGPT 就…

C++每日一练:贝博士的机械零件(补全题目)奇偶排序(巧妙快排)寻因找祖

文章目录 前言一、贝博士的机械零件1、题目2、解法 二、奇偶排序(巧用快排)三、寻因找祖 前言 今天的题目中寻因找祖最难了,明显的数学题,笔者这数学文盲水平肯定不会,用暴力搞了一波,只有50%。就去考察学…

(二十六)ATP应用测试平台——将一个微服务打包成含skywalking链路追踪的docker镜像

前言 延续前面的章节内容,本节内容我们以ht-atp的springboot应用为例,封装一个包含skywalking链路追踪的微服务docker应用。完成服务调用的链路追踪监控。skywalking采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但…

详解c++STL—容器set/multiset

目录 1、set基本概念 1.1、功能 1.2、本质: 1.3、set和multiset区别 2、set构造和赋值 2.1、功能描述 2.1、构造 2.3、赋值 2.4、示例 3、set大小和交换 3.1、功能描述 3.2、函数原型 3.2、示例 4、set插入和删除 4.1、功能描述 4.2、函数原型 4.3…