当前位置: 首页 > news >正文

基于 Center 的 3D 目标检测和跟踪

论文地址:https://arxiv.org/abs/2006.11275
论文代码:https://github.com/tianweiy/CenterPoint

3D 目标通常表示为点云中的 3D Boxes。

CenterPoint
在第一阶段,使用关键点检测器检测对象的中心,然后回归到其他属性,包括 3D 大小、3D 方向和速度;
在第二阶段,它使用目标上的附加点特征来细化这些估计。
在 CenterPoint 中,3D 目标跟踪简化为贪婪的最近点匹配

论文背景

2D 目标检测: 根据图像输入预测轴对齐的边界框。 RCNN 系列找到与类别无关的候选边界框,然后对其进行分类和细化。 YOLO、SSD 和 RetinaNet 直接找到特定于类别的框候选,回避了后续的分类和细化。基于中心的检测器,例如CenterNet 或CenterTrack,直接检测隐式对象中心点,而不需要候选框。许多 3D 检测器都是从这些 2D 检测器演变而来的。

3D 目标检测: 旨在预测 3D 旋转边界框。它们与输入编码器上的 2D 检测器不同。
Vote3Deep 利用以特征为中心的投票来有效处理等间距 3D 体素上的稀疏 3D 点云;
VoxelNet 在每个体素内使用 PointNet 来生成统一的特征表示,具有 3D 稀疏卷积和 2D 卷积的头从中产生检测;
SECOND 简化了 VoxelNet 并加速了稀疏 3D 卷积;
PIXOR 将所有点投影到具有 3D 占据和点强度信息的 2D 特征图上,以消除代价较高的 3D 卷积;
PointPillars 用柱表示替换所有体素计算,每个地图位置有一个高的细长体素,提高了主干效率;
MVF 和 Pillar-od 结合多个视图特征来学习更有效的支柱表示。
论文的贡献集中在输出表示上,并且与任何 3D 编码器兼容,并且可以改进它们。

VoteNet 使用点特征采样和分组通过投票聚类来检测对象。
相比之下,论文通过中心点的特征直接回归到 3D 边界框,无需投票对每个对象使用单个 postive 单元格并使用关键点估计损失。

点云上的 3D 目标检测的挑战:
1. 点云稀疏,并且 3D 对象的大部分部分没有测量结果;
2. 生成的输出是一个三维框,通常无法与任何全局坐标系很好地对齐;
3. 3D 目标有各种尺寸、形状和纵横比。

Axis-aligned 2D box 不能很好地代表自由形式的 3D 对象。
一种解决方案可能是:为每个对象方向分类不同的模板(锚点),但这不必要地增加了计算负担,并可能引入大量潜在的误报检测
论文认为连接 2D 和 3D 域的主要潜在挑战在于对象的这种表示。

论文相关

2D CenterNet

2D CenterNet [1] 将目标检测重新表述为关键点估计。
它采用输入图像并为 K K K 个类别中的每一个l类别预测 w × h w × h w×h heatmap Y ^ ∈ [ 0 , 1 ] w × h × K \hat Y \in [0, 1]^{w×h×K} Y^[0,1]w×h×K。输出 heatmap 中的每个局部最大值(即值大于其八个邻居的像素)对应于检测到的目标的中心。为了检索 2D 框,CenterNet 回归到所有类别之间共享的尺寸图 S ^ ∈ R w × h × 2 \hat S ∈ \R^{w×h×2} S^Rw×h×2
对于每个检测对象,尺寸图将其宽度和高度存储在中心位置。 CenterNet 架构使用标准的全卷积图像主干,并在顶部添加密集预测头。
在训练期间,CenterNet 学习使用 rendered 高斯核来预测每个类 c i ∈ { 1... K } c_i \in \{1 ... K\} ci{1...K}的每个带注释的对象中心 q i \boldsymbol q_i qi 处的 heatmap,并回归到带注释的边界框中心的目标大小 S S S。为了弥补主干架构跨步引入的量化误差,CenterNet 还回归到局部偏移 O ^ \hat O O^
在测试时,检测器会生成 K K K 个 heatmap 和稠密的与类别无关的回归图。热图中的每个局部最大值(峰值)对应于一个目标,置信度与峰值处的热图值成正比。对于每个检测到的目标,检测器从相应峰值位置的回归图中检索所有回归值。根据应用领域,可能需要非极大值抑制 (NMS)。

[1] Xingyi Zhou, DequanWang, and Philipp Kr¨ahenb¨uhl. Objects as points. arXiv:1904.07850, 2019.

3D 目标检测

P = { ( x , y , z , r ) i } \cal P=\{ (x,y,z,r)_i \} P={(x,y,z,r)i} 是 3D 位置 ( x , y , z ) (x,y,z) (x,y,z) 和 反射率 r r r 测量的无序点云。3D 目标检测旨在从该点云预测鸟瞰图中的一组 3D 对象边界框 B = { b k } B = \{b_k\} 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) 和 3D 尺寸 ( w , l , h ) (w, l, h) (w,l,h) 组成,旋转由 yaw α \alpha α 表示。不失一般性,使用以自我为中心的坐标系,传感器位于 ( 0 , 0 , 0 ) (0, 0, 0) (0,0,0) y a w = 0 yaw= 0 yaw=0

当前 3D 目标检测器使用 3D 编码器将点云量化为常规 bins。然后,基于点的网络提取 bins 内所有点的特征。然后,3D 编码器将这些特征汇集到其主要特征表示中。
大部分计算发生在主干网络中,该网络仅对这些量化和池化的特征表示进行操作。主干网络的输出是 map-view 参考帧中宽度为 W W W、长度为 L L L、具有 F F F 个通道的 map-view 特征图 M ∈ R W × L × F M ∈ \R^{W×L×F} MRW×L×F。宽度和高度都与各个体素 bins 的分辨率和主干网络的步幅直接相关。常见的backbone 有 VoxelNet 和 PointPillars。

使用 map-view 特征图 M M M,检测头(最常见的是一级或两级边界框检测器),然后从锚定在此overhead 特征图上的一些预定义边界框完成目标检测。
1.由于3D边界框具有各种大小和方向,基于锚的3D检测器难以将轴对齐的2D框拟合到3D对象。
2.在训练期间,先前的基于锚的3D检测器依赖于2D Box IoU进行目标分配,这为为不同类别或不同数据集选择正/负阈值带来了不必要的负担。

论文内容

CenterPoint 总体框架如下:
在这里插入图片描述
M ∈ R W × H × F M \in \R^{W×H×F} MRW×H×F 为 3D Backbone 的输出。
第一阶段: 预测类别特定的热图、对象大小、子体素位置细化、旋转和速度。所有输出都是dense 预测。

Center heatmap head

Center heatmap head的目标是在任何检测到的目标的中心位置处产 生heatmap 峰值。该头部产生 K K K 通道 heatmap Y ^ \hat Y Y^ K K K 个类别中的每个类别对应一个通道。

在训练过程中,它将标注边界框的3D中心投影到 map-view 中产生的2D高斯作为目标。使用 focal loss。
自上而下的 map-view 中的目标比图像中的目标更稀疏。在 map-view 中,距离是绝对的,而图像视图会通过透视(perspective)来扭曲它们。
考虑一个道路场景,在 map-view 中车辆占据的区域很小,但在图像视图中,几个大的物体可能占据大部分屏幕。 此外,透视(perspective)投影中深度维度的压缩自然地将对象中心放置得更靠近彼此。

遵循 CenterNet 的标准监督会产生非常稀疏的监督信号,其中大多数位置被视为背景。为了抵消这一点,论文通过放大在每个地面实况目标中心处渲染的高斯峰来增加对目标热图 Y Y Y 的积极监督。将高斯半径设置为 σ = max ⁡ ( f ( w l ) , τ ) σ = \max(f(wl),τ) σ=max(f(wl),τ),其中 τ = 2 τ = 2 τ=2 是允许的最小高斯半径, f f f 是 CornerNet 中定义的半径函数。通过这种方式,CenterPoint 保持了基于中心的目标分配的简单性;模型从附近的像素获得更密集的监督。

Regression heads

在目标的中心特征处存储几个目标属性:子体素位置细化 o ∈ R 2 o ∈ \R^2 oR2,离地高度 h g ∈ R h_g ∈\R hgR,3D尺寸 s ∈ R 3 s ∈ \R^3 sR3,以及偏航旋转角 ( sin ⁡ ( α ) , cos ⁡ ( α ) ) ∈ [ − 1 , 1 ] 2 (\sin(α),\cos(α)) \in [-1,1]^2 (sin(α),cos(α))[1,1]2。子体素位置 o o o 细化减少了来自 backbone 网络的体素化和跨步的量化误差。地面以上高度 h g h_g hg 有助于在3D中定位目标,并添加由 map-view 投影移除的缺失高程信息。方位预测使用偏航角的正弦和余弦作为连续回归目标。结合框大小,这些回归头提供了3D边界框的完整状态信息。每个输出都使用自己的头。

在训练时,论文在 ground-truth 中心位置使用 L1 Loss 训练所有输出。回归到对数大小,以更好地处理各种形状的bounding box。
在推理时,论文通过索引到每个目标的峰值位置处的稠密回归头输出来提取所有属性。

速度头和跟踪

为了通过时间跟踪对象,学习预测每个检测到的目标的二维速度估计 v ∈ R 2 v ∈ \R^2 vR2 作为额外的回归输出。速度估计需要时间点云序列。
在论文的实现中,将先前帧中的点转换并合并到当前参考帧中,并预测由时间差(速度)归一化的当前和过去帧之间的目标位置差异。与其他回归目标一样,速度估计也使用当前时间步长处的 ground-truth 目标位置处的 L1 Loss 来监督。

推理阶段,使用此偏移量以贪婪的方式将当前检测与过去的检测相关联。具体来说,将当前帧中的目标中心投影回前一帧,通过应用负速度估计,然后通过最近距离匹配将它们与跟踪目标进行匹配。Following SORT[2],在删除它们之前保留不匹配的轨道直到 T = 3 帧。更新每个不匹配的轨道与其最后已知的速度估计。

Alex Bewley, Zongyuan Ge, Lionel Ott, Fabio Ramos, and Ben Upcroft. Simple online and realtime tracking. ICIP, 2016.

CenterPoint 将所有 heatmap 和回归损失合并到一个共同目标中,并联合优化它们。它简化和改进了以前基于锚点的3D探测器。然而,所有目标属性目前都是从目标的中心特征推断的,其可能不包含用于准确目标定位的足够信息。例如,在自动驾驶中,传感器通常只能看到物体的侧面,而不能看到其中心。

第二阶段: 过使用第二个精化阶段和一个轻量级的点特征提取来改进中心点。CenterPoint 作为第一阶段。第二阶段从主干的输出中提取额外的点特征。

Two-Stage CenterPoint

从预测边界框的每个面的3D中心提取一个点特征。需要注意的是,边界框中心、顶面中心和底面中心都投影到 map-view 中的同一点。因此,只考虑四个朝外的 box 面和预测的目标中心。对于每个点,使用双线性插值从 backbone map-view 输出 M M M中提取特征。接下来,将提取的点特征连接起来,并将它们传递给 MLP。第二阶段在一阶段 CenterPoint 的预测结果之上预测类不可知的置信度得分和框细化。

对于类别不可知的置信度得分预测,使用由框的3D IoU 引导的得分目标 I I I 以及相应的 gound-truth 边界框:
I = min ⁡ ( 1 , max ⁡ ( 0 , 2 × I o U t − 0.5 ) ) (1) \tag1 I=\min(1,\max(0,2\times IoU_t-0.5)) I=min(1,max(0,2×IoUt0.5))(1)其中 I o U t IoU_t IoUt 是第 t t t 个 proposal 和 ground-truth 之间的 IoU。
使用二进制交叉熵损失进行训练:
L s c o r e = − I t log ⁡ ( I ^ t ) − ( 1 − I t ) log ⁡ ( 1 − I ^ t ) (2) \tag2 L_{score} =-I_t \log(\hat I_t) - (1-I_t) \log(1- \hat I_t) Lscore=Itlog(I^t)(1It)log(1I^t)(2) 其中 I ^ t \hat I_t I^t 是预测的置信度得分。

推理阶段,直接使用第一阶段 CenterPoint 的类别预测,并且计算最终的置信分数计算为两个分数 Q ^ t = Y ^ t ∗ I ^ t \hat Q_t = \sqrt{\hat Y_t * \hat I_t} Q^t=Y^tI^t 的几何平均值。其中, Q ^ t \hat Q_t Q^t是对象 t t t 的最终预测置信度, Y ^ t = max ⁡ 0 ≤ k ≤ K Y ^ p , k \hat Y_t = \max_{0 ≤k≤K} \hat Y_{p,k} Y^t=max0kKY^p,k I ^ t \hat I_t I^t 分别是第一阶段和第二阶段目标 t t t 的置信分数。

对于框回归,模型预测在第一阶段 proposal 之上的改进,用 L1 Loss 训练模型。论文的两阶段CenterPoint 简化并加速了之前的两阶段3D探测器,这些探测器使用代价比较大的基于PointNet的特征提取器和RoIAlign操作。

Architecture

所有第一级输出共享第一个 3 × 3 卷积层,批量归一化和 ReLU。然后,每个输出都使用自己的分支,由两个3×3卷积组成,由批处理范数和ReLU分隔。我们的第二阶段使用共享的两层MLP,具有批规范,ReLU 和 Dropout ,drop 率为0.3,然后是单独的三层 MLP 用于置信度预测和 Box 回归。

论文总结

论文提出了一种基于中心的激光雷达点云 3D 目标检测与跟踪框架。使用一个标准的三维点云编码器,在头部加上一些卷积层来生成鸟瞰 heatmap 和其他 dense 回归输出。检测是一种简单的局部峰值提取和细化,而跟踪是最近距离匹配。CenterPoint简单、接近实时,在Waymo和nuScenes基准测试中实现了最先进的性能。

相关文章:

基于 Center 的 3D 目标检测和跟踪

论文地址:https://arxiv.org/abs/2006.11275 论文代码:https://github.com/tianweiy/CenterPoint 3D 目标通常表示为点云中的 3D Boxes。 CenterPoint 在第一阶段,使用关键点检测器检测对象的中心,然后回归到其他属性&#xff0…...

华锐技术何志东:证券核心交易系统分布式改造将迎来规模化落地阶段

近年来,数字化转型成为证券业发展的下一战略高地,根据 2021 年证券业协会专项调查结果显示,71% 的券商将数字化转型列为公司战略任务。 在落地数字化转型战略过程中,证券业核心交易系统面临着不少挑战。构建新一代分布式核心交易…...

数据结构 -- ArrayList与LinkedList的区别

一、二者的相同点 1,它们都是继承自List接口。 二、二者的区别 1,数据结构:ArrayList是(Array动态数组)的数据结构;而LinkedList是(Link双向链表)的数据结构。ArrayList 自由性较…...

豪车托运为什么选小板

小板运输是一种适用于豪车客户的高效运输方式。它提供了快速、安全、便捷的服务,并且相对经济实惠。以下是关于小板运输的时效和价格的介绍: 时效:小板运输通常能够在短时间内完成车辆的运输。具体时效取决于起点和目的地之间的距离&#xff…...

【base64加密】js/ts的基础加密

base64的字符串简单加密,主用于网页缓存数据的加密。 适用于常规html、小游戏(egret、cocos、laya)等 原文参考:JS基于base64编码加密解密文本和图片(修订)_js base64加密-CSDN博客 测试:JS实…...

基于python的app程式开发

安装的库文件: 运行代码: # -*- coding:utf-8 -*- from kivy.app import App class HelloApp(App):pass if __name__ __main__:HelloApp().run() 结果画面:...

Spring Event学习

Spring Event学习 观察者模式是一种行为设计模式,它定义了对象之间的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在这个模式中,改变状态的对象被称为主题,依赖的对象被称为观…...

UE4 HLSL学习笔记

在Custom配置对应ush文件路径 在HLSL中写入对应代码 Custom里面增加两个Input,名字必须和ush文件内的未知变量名字一样 然后就对应输出对应效果的颜色 这就是简单的加法运算 减法同理: 乘法除法同理 HLSL取最小值 HLSL取最大值 绝对值: 取余…...

报文的路由过程

路由转发过程 记住路由转发过程结论:报文ip是不变,mac改变。 mac地址在同一个广播域传输过程中是不变的;在跨越广播域的时候会发生改变的;而IP地址在传输过程中是不会改变的(除NAT的时候)。 ip地址本质上是…...

【CPP】类和对象

1- Classes and Objects Structures A struct in C is a type consisting of a sequence of data membersSome functions/Statements are needed to operate the data members of an object of a struct type 不不小心操作错误,不小心越界 Classes You should b…...

【多线程面试题二十】、 如何实现互斥锁(mutex)?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:如何实现互斥锁&#xf…...

hypercube背景设置为白色,绘制高光谱3D立方体

import scipy pip install wxpython PyOpenGL和Spectral需要本地安装 可参考链接https://blog.csdn.net/qq_43204333/article/details/119837870 参考:https://blog.csdn.net/Tiandailan/article/details/132719745?spm1001.2014.3001.5506Mouse Functions:left-cl…...

Visual Studio(VS)C++项目 管理第三方依赖库和目录设置

发现很多程序员存在这种做法:把项目依赖的第三方库的lib和dll放在项目目录下,或者复制到输出目录,因为每种配置都有不同的输出目录,所以要复制多份(至少包括Debug和Release两个输出目录),这些做…...

leetCode 2578. 最小和分割 + 排序 + 贪心 + 奇偶分组(构造最优解)

2578. 最小和分割 - 力扣(LeetCode) 给你一个正整数 num ,请你将它分割成两个非负整数 num1 和 num2 ,满足: num1 和 num2 直接连起来,得到 num 各数位的一个排列。 换句话说,num1 和 num2 中所…...

自定义实现图片裁剪

要实现这个功能,首先需要创建一个自定义的View,然后在该View中绘制背景框和裁剪后的图片。以下是一个简单的实现: 1. 创建一个名为CustomImageView的自定义View类,继承自View: import android.content.Context; impor…...

开发语言工具编程系统化教程入门和初级专辑课程上线

开发语言工具编程系统化教程入门和初级专辑课程上线 学习编程捷径:(不论是正在学习编程的大学生,还是IT人士或者是编程爱好者,在学习编程的过程中用正确的学习方法 可以达到事半功倍的效果。对于初学者,可以通过下面…...

【Truffle】二、自定义合约测试

一、准备测试 上期我们自己安装部署了truffle,并且体验了测试用例的整个测试流程,实际开发中,我们可以对自己的合约进行测试。 我们首先先明白自定义合约测试需要几个文件 合约文件:既然要测试合约,肯定要有合约的源码…...

场景交易额超40亿,海尔智家三翼鸟开始收获

文 | 螳螂观察 作者 | 余一 随着双十一的到来,国内的消费情绪再次被点燃。在这类大促之下,品牌们就像一个个天体,不断引动着市场潮汐,期待自己能触发更大的“海潮效应”。 所谓“海潮效应”是指,海水因天体的引力而…...

众和策略可靠吗?股票扛杆怎么玩?

可靠 股票扛杆是一种出资战略,经过假贷资金来增加出资金额,从而进步出资收益。这种战略在股票商场中被广泛运用,但一起也伴随着一定的危险。在本文中,咱们将从多个视点来剖析股票扛杆怎么玩。 首要,扛杆出资的原理是…...

解决连接Mysql出现ERROR 2013 (HY000): Lost connection to MySQL server at ‘waiting

在上一篇中解决Mysql ER_ACCESS_DENIED_ERROR: Access denied for user ‘root‘‘localhost‘ (using password: YES)-CSDN博客 写了mysql的密码报错问题,在执行 mysql -u root -p 出现了这个错误, ERROR 2013 (HY000): Lost connection to MySQL se…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

微信小程序云开发平台MySQL的连接方式

注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

管理学院权限管理系统开发总结

文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)​现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...