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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AcWing 第127场周赛 构造矩阵

构造题目,考虑去除掉最后一行最后一列先进行考虑,假设除了最后一行和最后一列都已经排好了(你可以随便排),那么分析知最后一个数字由限制以外其他都已经确定了,无解的情况是k为-1 并且n,m的奇偶…

C++进阶语法——STL 标准模板库(上)(Standard Template Library)【学习笔记(六)】

文章目录 STL 标准模板库1、 STL简介2、STL容器的类别3、STL迭代器的类别4、STL算法的类别5、泛型编程(generic programming)6、C模板(template)6.1 函数模板(function template)6.2 类模板(cla…

MAMP Pro 6.8.1

MAMP Pro是一款MacPHP/MySQL开发环境软件,可以将电脑变成一个完整的Web开发环境。无论个人开发者、网站管理员还是团队协作,MAMP Pro都提供了强大的工具和便捷的管理方式,能够更加高效地构建和测试网站。 MAMP Pro的基本功能包括集成AMP环境&…

【网络协议】聊聊套接字socket

网络编程我们知道是通过socket进行编程的,其实socket也是基于TCP和UDP协议进行编程的。但是在socket层面是感知不到下层的,所以在设置参数的时候,其实是端到端协议智商的网络层和传输层。TCP是数据流所以设置为SOCK_STREAM,而UDP是…

实现基于 Azure DevOps 的数据库 CI/CD 最佳实践

数据库变更一直是整个应用发布过程中效率最低、流程最复杂、风险最高的环节,也是 DevOps 流程中最难以攻克的阵地。那我们是否能在具体的 CI/CD 流程中,像处理代码那样处理数据库变更呢? DORA 调研报告 DORA(DevOps Research &am…

​学习一下,什么是预包装食品?​

预包装食品,指预先定量包装或者制作在包装材料和容器中的食品;包括预先定量包装以及预先定量制作在包装材质和容器中并且在一定量限范围内具有统一的质量或体积标识的食品。简单说, 就是指在包装完成后即具有确定的量值,这一确定的…

Ajax学习笔记第4天

做决定之前仔细考虑,一旦作了决定就要勇往直前、坚持到底! 【1 模仿百度招聘】 整个流程展示: 1.文件目录 2.页面效果展示及代码 data中的page1数据展示 2.1 主页 index.html:index里面代码部分解释 underscore.js :模板页面的相关代码 &…

2023最新版本 FreeRTOS教程 -1-标准库移植FreeRTOS

源码下载 官网下载驱动 点击直达 源码剪裁 剪裁之后的图片,找我免费获取 添加进MDK 配置滴答定时器 全部工程获取 查看下方头像

微服务框架SpringcloudAlibaba+Nacos集成RabbiMQ

目前公司使用jeepluscloud版本,这个版本没有集成消息队列,这里记录一下,集成的过程;这个框架跟ruoyi的那个微服务版本结构一模一样,所以也可以快速上手。 1.项目结构图: 配置类的东西做成一个公共的模块 …

省市区三级联动查询redis(通过python脚本导入数据)

最近工作有一个工作需求是实现省市区联动,点击省下拉框,选中一个省,然后再选市,最后选区,当然最重要的首先自然是数据了,没数据怎么测试接口,我数据是在 https://hxkj.vip/demo/echartsMap/ 这里…

小程序request请求封装

以上为本人的项目目录 1.首先在utils中创建request.js文件封装request请求,此封装带上了token,每次请求都会自带token,需要你从后端获取后利用wx.setStorageSync(token,返回的token),不使用的话就是空。 直接复制即可,需要改一下…

关于 MapboxGL 在 Vue 中的简单使用

前言问题 关于我为什么使用了 在线的 js引入方法,而不是使用 npm 直接下载依赖问题,之前有一篇文章讲过原因:关于 Vue-iClient-MapboxGL 的使用注意事项 网上提供的 vue-iclient-mapboxgl 比较多,但是我这里使用的是 iclient-su…

视频剪辑达人教您:如何运用嵌套合并技巧制作固定片尾

在视频剪辑的过程中,嵌套合并技巧是一种非常实用的技术,可以帮助您将多个素材叠加在一起,制作出更加丰富多彩的视频。本文将由视频剪辑达人为您详细介绍如何运用云炫AI智剪嵌套合并技巧制作固定片尾,让您的视频剪辑水平更上一层楼…

【Apache Flink】Flink DataStream API的基本使用

Flink DataStream API的基本使用 文章目录 前言1. 基本使用方法2. 核心示例代码3. 完成工程代码pom.xmlWordCountExample测试验证 4. Stream 执行环境5. 参考文档 前言 Flink DataStream API主要用于处理无界和有界数据流 。 无界数据流是一个持续生成数据的数据源&#xff0…

vue引入字体

假定已经下了字体包 1、在src/assets文件夹下新建一个font文件夹,放入字体文件与配置文件 这个与两个字体,优设标题黑和DIN字体,font.css用于给字体取名,将字体引入网站。 font-face { font-family: YouSheBiaoTiHei; src: url(…

美术如何创建 skybox 贴图资源?

文章目录 目的PS手绘Panorama To CubemapPS手绘Pano2VRSkybox & Cubemap Tutorial (Maya & Photoshop)Unity 中使用 ReflectionProbe 生成 Cubemap 然后再 PS 调整PS直接手绘 cubemapBlender 导入 Panorama,然后烘焙到 cubemap,再导入unity中使用…

动态表单生成Demo(Vue+elment)

摘要:本文将介绍如何使用vue和elment ui组件库实现一个简单的动态表单生成的Demo。主要涉及两个.vue文件的书写,一个是动态表单生成的组件文件,一个是使用该动态表单生成的组件。 1.动态表单生成组件 这里仅集成了输入框、选择框、日期框三种…

字符集详解

常见字符集介绍 字符集基础知识: 计算机底层不可以直接存储字符的。 计算机中底层只能存储二进制(0、1) 。 二进制是可以转换成十进制的。 结论:计算机底层可以表示成十进制编号。计算机可以给人类字符进行编号存储,这套编号规则就是字符…

国内内卷太严重,还不考虑一下在海外接单?那这几个平台你知道吗?

作为一个程序员,在平台上接单赚点外快是再正常不过的事情了,但是现今国内各个平台都内卷比较严重,你是否考虑过去“外面的世界”看看? 如果想过,那么这几个外国的接单平台你都知道吗? 接下来就和我一起来看…

超实用的企业防范数据泄露小技巧!

超实用的企业防范数据泄露小技巧! 小技巧1、加强员工培训,提高防范思想 及时向员工传达有关安全信息,加强员工意识、认识和执行安全措施,以防止数据泄露发生。 小技巧2、建立安全政策,明确处理流程 企业应该建立安…