PointBeV:A Sparse Approach to BeV Predictions

本文介绍了一种稀疏化BEV特征构建方法,通过前景点筛选、分层细化和时序融合减少内存和计算资源。然而,实现实时应用面临挑战,如前景背景判断困难、计算平台兼容性及鲁棒性问题。尽管如此,其思想值得后续研究借鉴。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考代码:PointBeV

动机与出发点
常见显式构建BEV特征的算法会稠密设置BEV网格,这样就会引入背景像素上的无效计算,对应内存与计算资源使用也会变大。这篇文章通过前景点筛选、由粗到精细化、窗口时序融合方式构建一种稀疏化表达的BEV特征表达。文章给出的方法自然在对应数据集下效果很好,但是在实际工程化中却需要解决如下的问题:

  • 1)前景和背景点区分在真实场景下是很难的,单纯依据阈值设置很难权衡准召
  • 2)方案中很多的操作是类似于RoI的形式,这些操作在现有的车端计算平台不是那么友好,出发点是提速实际很可能是负收益
  • 3)真实场景下内外参抖动的问题这个方案也没做针对地鲁棒性设计

但是文章的中的减少内存和计算资源开销的思想还是可以借鉴的,或许在后续的科研与工作中用到。

方法设计
文章2D到BEV的转换流程见下图所示:
在这里插入图片描述
按照上面的思路文章的方案会在2D BEV空间上按照一定的策略去采样一些点,并将这些采样点按照类似FastBEV的方式从2D图像中获取粗略的BEV特征,这些粗略的BEV特征会经过由粗到精细化模块得到最后的BEV特征。自然还会引入时序上的操作来提升网络性能,但是对时序融合部分做了窗口限定,当前帧的特征作为query只在窗口内做计算和优化。

采样点策略
文章的方案突出的稀疏特性,那么BEV采样点自然也是稀疏的,在训练阶段采用随机撒点的方式作为起始种子点。那么在infer阶段就是使用启发式设置作为种子点选择的方式了,什么等间隔采样(文章默认的)、按照距离ego距离做高斯分布采样、借助SD map(定位不准或是道路更新不及时怎么办?)、相机可视化范围、雷达点云分布样式。也就是下面这些采样可视化效果图
在这里插入图片描述
确定采样点之后由2D图像特征构建粗糙BEV特征的过程就参考FastBEV就行了,之后就是需要经过由粗到精细化过程

由粗到精细化
首先会对这些采样点进行前景背景划分来确定RoI,在此基础上使用一个半径确定一个区域,并预测这些区域的结果,由参与预测点数量增加来细化BEV预测结果,也就是下图中的过程(这操作一看就在板子上跑不快)
在这里插入图片描述

时序融合
这里将当前帧的前景点作为query,之前帧的特征作为key和val。但是在做attention的时候是需要考虑计算的范围的,这些计算的范围也需要ego-motion的加持(那么这个东西不准的时候呢?)。
在这里插入图片描述

实验结果
在这里插入图片描述

### 使用 Eigen 库中的 SparseMatrix 类 #### 创建和初始化稀疏矩阵对象 为了创建一个 `SparseMatrix` 对象,可以指定其维度以及动态分配的空间大小。通常建议预先估计非零元素的数量以优化性能。 ```cpp #include <Eigen/Sparse> // 定义一个双精度浮点数类型的稀疏矩阵, 行优先存储方式 Eigen::SparseMatrix<double> m(rows, cols); m.reserve(Eigen::VectorXi::Constant(cols, 8)); // 预留每列大约有8个非零项 ``` #### 插入非零元素到稀疏矩阵中 通过调用 `.insert()` 方法可以在特定位置插入新的非零条目;如果该位置已经存在,则会更新现有值。注意,在完成所有插入之前不应访问矩阵数据结构。 ```cpp for(int k = 0; k < num_entries; ++k){ int i = row_indices[k]; int j = col_indices[k]; double v = values[k]; // 如果(i,j)处还没有设置过数值则插入新值v m.insert(i, j) = v; } ``` #### 执行基本线性代数运算 一旦构建好稀疏矩阵之后就可以像对待常规密集型矩阵那样执行各种算术计算了。例如求解线性方程组 Ax=b: ```cpp // 构建系数矩阵A (假设已知) Eigen::SparseMatrix<double> A; // 设置右侧向量b Eigen::VectorXd b(n); // 解决Ax=b问题得到x Eigen::SimplicialLLT<Eigen::SparseMatrix<double>> solver(A); Eigen::VectorXd x = solver.solve(b); ``` 对于稠密矩阵,类 `Map<SparseMatrixType>` 可用于将外部缓冲区视为 Eigen 的 SparseMatrix 对象[^1]。这允许更灵活的数据交换机制而无需复制整个数组内容。 在许多应用场景下(比如有限元分析),经常会遇到规模巨大但大部分区域都接近于零的大尺寸矩阵。这时采用专门设计用来保存少量有效成分的形式——即所谓的“稀疏矩阵”,能够显著降低资源占用并加快算法效率[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值