参考代码: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的加持(那么这个东西不准的时候呢?)。
实验结果