基于 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基准测试中实现了最先进的性能。

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

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

相关文章

接入文心一言实战(一):API申请与测试

大家好,我是豆小匠。 这期来介绍申请百度文心一言API的步骤。 第一步 注册百度智能云账号 网址:https://login.bce.baidu.com/new-reg?tplbceplat&fromportal 第二步:申请预置模型 网址:https://console.bce.baidu.com/qi…

在虚拟机centos7中部署docker+jenkins最新稳定版

在虚拟机centos7中部署dockerjenkins最新稳定版 查看端口是否被占用 lsof -i:80 查看运行中容器 docker ps 查看所有容器 docker ps -a 删除容器 docker rm 镜像/容器名称 强制删除 docker rmi -f 镜像名 查看当前目录 pwd 查看当前目录下所有文件名称 ls 赋予权限 chown 777 …

unity中meta文件GUID异常问题

错误信息: The .meta file Assets/Scripts/Editor/ConvertConfigToBinary/TxtConverter.cs.meta does not have a valid GUID and its corresponding Asset file will be ignored. If this file is not malformed, please add a GUID, or delete the .meta file and…

【C语法学习】6 - gets()函数

文章目录 1 函数原型2 参数3 返回值4 读取机制5 示例 1 函数原型 gets():从标准输入流stdin读取一个字符串存储到str指向的内存空间,函数原型如下: char *gets(char *str)2 参数 gets()函数的参数只有一个str: str是一个指向c…

智力测试情商测试小程序源码/带流量主提升智力微信小程序源码

智力测试情商测试小程序源码,这是一个考验智力,心理上面的一个测试游戏,支持多种测试方法。 比如有: 智商测试丨情商测试 | 性格测试丨爱情测试 | 抑郁症测试丨焦虑症测试 | 心理压力测试丨生活满意度测试,通过不同的测试&#xf…

win10pycharm和anaconda安装和环境配置教程

windows10 64位操作系统下系统运行环境安装配置说明 下载和安装Anaconda,链接https://www.anaconda.com/download 下载完后,双击exe文件 将anaconda自动弹出的窗口全部关掉即可,然后配置高级系统变量 根据自己的路径,配置…

如何在Linux命令行界面愉快进行性能测试?

本人在做性能测试的过程中,遇到一个问题,测试机选了一台Linux服务器,只有命令行界面。执行测试用例不是非常的灵活,有时候我需要改一两个参数添加一些日志,都需要重新打包部署,虽然自动化构建比较方便&…

vscode debug skills

1) VSCode 调试 C/C 代码时,如何显示动态分配的指针数组。 创建一个动态分配的一维数组: int n 10; int *array (int *)malloc(n*sizeof(int)); memset(array, 1, n*sizeof(int)); 如果直接 Debug 时查看 array 指针,并不能看到数组所有的值。 查看…

从用户角度出发,如何优化大数据可视化体验|北京蓝蓝UI设计公司

作者:蓝蓝设计-鹤鹤 大数据已经成为人们探索世界的新工具。但是,对于普通用户而言,大数据往往比较抽象和难以理解,因此,大数据可视化作为一种非常有效的工具工具被广泛应用。然而,在实际应用中&#xff0c…

【Java笔试强训】Day8(WY20 两种排序方法、HJ108 求最小公倍数)

WY20 两种排序方法 链接&#xff1a;两种排序方法 题目&#xff1a; 考拉有n个字符串字符串&#xff0c;任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法&#xff1a; 1.根据字符串的字典序排序。例如&#xff1a; “car” < “carriage” < “c…

pycharm安装教程-pycharm安装详细步骤(Mac版)

之前跟大家讲了怎么安装Python&#xff0c;这期跟大家介绍个很好用的编程工具–pycharm。 PyCharm是一种Python IDE&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单…

Azure 机器学习 - 使用无代码 AutoML 训练分类模型

了解如何在 Azure 机器学习工作室中使用 Azure 机器学习自动化 ML&#xff0c;通过无代码 AutoML 来训练分类模型。 此分类模型预测某个金融机构的客户是否会认购定期存款产品。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管…

Redis入门01-简单了解

目录 Redis的发展历史 特性简介 数据类型 内存存储与持久化 功能丰富 简单稳定 应用场景 为啥用Redis Redis的发展历史 Redis&#xff08;Remote Dictionary Server&#xff09;是一个高性能的键值存储系统&#xff0c;通常用作缓存、消息队列和分布式数据存储的解决方…

【算法专题】双指针—盛最多水的容器

一、题目解析 分析这个题目不难得出一个容积公式 二、算法原理 解法一&#xff1a;暴力枚举&#xff08;超时&#xff09; 套用上述的容积公式&#xff0c;使用两个for循环来枚举出所有可能的情况&#xff0c;再挑出最大值即可&#xff0c;但是这种写法会超时&#xff0c;导致…

06 # 手写 map 方法

map 的使用 map 自带循环功能&#xff0c;对数据中的元素进行加工&#xff0c;得到一个加工后的新数据 ele&#xff1a;表示数组中的每一个元素index&#xff1a;表示数据中元素的索引array&#xff1a;表示数组 <script>var arr [1, 3, 5, 7, 9];var result arr.ma…

X64指令基本格式

X64指令基本格式 1 REX Prefix结构2 REX prefix扩展位2.1 第一种&#xff0c;无SIB字节的内存寻址&#xff08;mod !11 &#xff09;2.2 第二种&#xff0c;寄存器到寄存器的寻址&#xff08;无内存操作数&#xff0c;mod11&#xff09;2.3 第三种&#xff0c;带SIB字节的内存寻…

栅栏密码fence cypher

f{_wi3_hlyk_lnceaonr_cirgu04fep} flag{you_kn0w_r4il_f3nce_cipher}

线段树 区间赋值 + 区间加减 + 求区间最值

线段树好题&#xff1a;P1253 扶苏的问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 区间赋值 区间加减 求区间最大。 对于区间赋值和区间加减来说&#xff0c;需要两个懒标记&#xff0c;一个表示赋值cover&#xff0c;一个表示加减add。 区间赋值的优先级大于区间加…

【AI视野·今日Sound 声学论文速览 第三十二期】Tue, 24 Oct 2023

AI视野今日CS.Sound 声学论文速览 Tue, 24 Oct 2023 Totally 20 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;nvas3d, 基于任意录音和室内3D信息合成重建不同听角&#xff08;位置&#xff09;处的新的声音。(from apple cmu) website: htt…

在职一年多,一个29岁软件测试工程师的心声

简单的先说一下&#xff0c;坐标西安&#xff0c;16届本科毕业&#xff0c;目前在跳槽&#xff0c;算上国庆节前的面试&#xff0c;一共有面试了5家公司&#xff08;因为不想请假&#xff0c;因此只是每个晚上去其他公司面试&#xff0c;所以面试的公司比较少&#xff09;其中成…