BEV感知学习笔记——基于LSS的系列方法

一、前言

上一篇文章中我们讨论了LSS的原理以及代码实现(BEV感知学习笔记——LSS)。简单总结,LSS的核心贡献点在于提供了一个将2D特征转换到BEV空间下的全新思路。这篇文章我们讲述几篇经典的文章,看看此类方法之后的发展。内容总结自深蓝学院BEV感知课程,欢迎交流。
在这里插入图片描述

二、CaDDN

Categorical Depth Distribution Network for Monocular 3D Object Detection
在这里插入图片描述

2.1 主要差异

看上面的框架图,其实与LSS的非常相似。但与LSS直接将Pixel特征转到Voxel中不同,CaDDN的处理方法更为细腻,现将像素特征转为视锥特征,再通过插值的方式转换成体素特征。还在最后连接了检测头

2.1.1 特征转换更为细致

很容易想到一个拍摄到近距离物体的像素覆盖的真实体积小,而拍摄到远处物体的覆盖体积大,所以LSS中只考虑射线经过的体素的思路是不够细致,因为像素在远处对应的真实体积可能远大于一个体素的体积,近处的则相反。

  1. 与LSS处理方法相同,CaDNN同样通过Lift的操作完成了2D到3D的特征转换。具体说来是预测一个深度特征,预测一个图像特征,二者做外积。但是CaDNN认为直接端到端的通过损失来指导深度特征的学习的方式是不稳定且不可靠的,所以CaDNN的深度估计是带监督的,利用了激光雷达的测距信息。

    利用获得的One-Hot vector就可以和预测出的深度分布计算损失,实现监督训练,这里利用了Focal Loss。
    L D e p t h = 1 W F ⋅ H F ∑ u = 1 W F ∑ v = 1 H F F L ( D ( u , v ) , D ^ ( u , v ) ) L_{Depth}=\frac{1}{W_F\cdot H_F}\sum_{u=1}^{W_F} \sum_{v=1}^{H_F}FL(D(u,v),\hat{D}(u,v)) LDepth=WFHF1u=1WFv=1HFFL(D(u,v),D^(u,v))

    • Focal Loss

      FL在传统的交叉熵损失函数前添加了一个调制系数,用于降低易分正样本的权重。 p t p_t pt是预测的类别概率值, p t p_t pt接近1时候,说明这个样本分的比较对,算是易分正样本,此时 ( 1 − p t ) γ (1-p_t)^{\gamma} (1pt)γ接近零,降低了权重; p t p_t pt接近0时,这个样本虽然分错了,但同样是易分样本, 此时 ( 1 − p t ) γ (1-p_t)^{\gamma} (1pt)γ接近1,不太会影响损失;而对于分类概率位于中段的样本则属于难分样本。从图中曲线可以看出,FL损失函数在易分负样本处梯度增加,参数更新变快;难分样本处,虽然梯度下降,但是相比易分正样本,下降的倍数没有那么大,因此也相当于提高了权重。
  2. 接下来通过插值实现视锥特征到体素特征的转换,具体实现看论文

2.1.2 添加了检测头

接着与LSS相同,将体素特征拍平为BEV特征,通过BEV Encoder进一步学习特征[X,Y,C]。但LSS到此就结束了,并没有实现检测任务。

CaDDN则使用了PointPillars head在BEV特征上进行了3D目标检测,整体的损失函数如下:
L = λ d e p t h L d e p t h + λ c l s L c l s + λ r e g L r e g + λ d i r L d i r L = \lambda_{depth} L_{depth} + \lambda_{cls} L_{cls} + \lambda_{reg} L_{reg} + \lambda_{dir} L_{dir} L=λdepthLdepth+λclsLcls+λregLreg+λdirLdir

2.2 tricks

在这里插入图片描述
由于距离越远,像素的表征能力越差,所以SID和LID相比UD是更合理的选择(近处采样密集,远处采样稀疏)。但SID和LID孰优孰劣,就得根据实际场景测试一下了。

2.3 结果

这个是CaDNN中展示的效果图,a是输入图像,b是没有使用深度监督的效果图,c是有深度监督的效果图。

三、BEVDet

BEVDet: High-performance Multi-camera 3D Object Detection in Bird-Eye-View
BEVDet用四阶段的范式支持3D目标检测,设计上同时支持Segmentation任务。框架上与LSS高度一致。
在这里插入图片描述

3.1 核心组件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
BEV Encoder使用的就是残差快+FPN的结构,尽管与具有backbone和neck的Image Encoder类似。但由于是在BEV空间上做特征抽象,所以感知到比例、方向、速度这些在bev空间上定义的特征。

3.2 tricks

  • BEV空间存在过拟合
    作者分析后觉得BEV空间上缺少数据增强是导致训练不充分出现过拟合的主要原因。6张图像只能获得一张BEV特征,并且图像上还有很多数据增强操作。因此作者对BEV特征也做了数据增强——Flipping/Scaling/Rotating
    在这里插入图片描述
  • ScaledNMS
    目标检测任务通常会生成密集的预测框,在最后都会使用NMS来去除冗余的FP预测。但是BEV空间中直接使用传统NMS会出现问题,因为某些物体的实际尺寸会小于BEV空间的栅格分辨率(0.8*0.8m),导致FP都不重叠IoU为零,这样就会将冗余的FP都视作独立的检测结果保留下来。Scale-NMS会对不同类别物体进行缩放(除了barrier类因为大小不一没办法设定统一的缩放系数以外,另外九类都有各自的缩放系数,这个系数是通过超参数搜索生成的)。
    在这里插入图片描述
    在这里插入图片描述
    上面是消融实验的结果,结果符合我们的认知,小尺寸物体(行人、锥桶)的提点效果显著。
  • 分辨率对结果存在影响
    在这里插入图片描述
    根据结果,输入图像的分辨率影响更大;尽管BEV栅格的分辨率的提升也会提点,但计算代价增加太多。
  • BevDet对Bev pooling步骤进行了加速,代价是更大的空间复杂度
    在这里插入图片描述
    提速百分之五十,但感觉可以不用关注,因为后文中一些新的工作有更优秀的方案。(忽然发现,lss好像没有用到积分图的性质啊)

3.3 结果

在这里插入图片描述

四、BEVDet4D

与BEVDet由相同团队提出,在其基础上加入时序特征,对于多帧点云的对齐,我猜是通过里程计信息完成粗配准,再通过ICP来完成精配准。这样的结果是是会使得静态元素变得更加稠密,动态元素会引入重影。这很容易理解对吧,因为静态元素的世界坐标没有变化,而动态元素的发生了变化。

4.1 方法

  • BEVDet4D使用的是下面的第二种方法,这没啥好解释的,第一种对齐方法一点用都没有。。。。

  • 但这样也不能有效的解决拖尾,BEVDet4D的解决方案是对位置偏移进行预测,使用之前帧的点云对当前帧进行补偿。

  • 由于点云的注册(ICP)是依赖几何信息的,而BEV grid内包含多维特征,这个没有办法利用原来的方法进行对齐。
    BEVDet使用了Extra BEV Encoder,利用2×ResNet来强化稀疏特征,便于时序融合。。。(完全没看懂,后边学了再补充)

4.2 结果

4D与BEVDet相比,并没有引入额外的计算量,时序融合利用的是上一帧缓存下来的数据。因此在BEVDet4D仍能跟BEVDet一样有很好的实时性,并且由于使用了时序融合,使得检测性能有明显提升。

指标详解——明天看一眼

五、M^2BEV

M2BEV: Multi-Camera Joint 3D Detection and Segmentation with Unified Birds-Eye View Representation,第一个同时支持3D检测和BEV分割多任务的模型(3D检测与BEV分割时智驾的主流任务)
在这里插入图片描述
传统流程中,不同任务会在不同的域中进行,不同任务之间不会去共享特征。并且多任务的输出需要做后处理才能融合成最终的结果;但是M^2BEV在多任务之间使用相同的编码器获得统一的BEV特征,这样做的好处是可以节省计算资源,对部署友好,并且模型便于拓展;带来的坏处是,各种任务之间会相互影响,导致精度的下降。

5.1 方法

下面是整个方法的框架图,大方向上与前面的方法都一样,都是四步走
在这里插入图片描述
实现多任务的关键在于对损失函数的设计,M^2BEV的损失函数如下,包含3D检测损失、BEV分割损失和2D辅助检测损失。

这个2D辅助检测损失对应流程图中Image Encoder部分中的最下部分,在训练过程中会利用多个尺度的特征以及2D目标检测头进行2D检测,然后与2D GT求损失。这里的GT并不是2D的锚框,而是通过3D锚框投影获得的,所以可以看到他比2D锚框大了一些。作者认为通过2D检测的辅助监督,获取的图像特征能更好的感知物体,进而增强3D精度

5.2 tricks

  • 作者认为使用预训练好的2D模型作为Image Encoder也能提升3D检测的精度

  • 考虑到lss算子效率不高,所以M^2BEV不再进行深度估计,而是将特征均匀得分不到每个体素,可以提高计算并行度。但这也引起了一些问题,比如对外参误差容忍度下降,这导致M2BEV还不能上车。

  • 参考freeanchor提出Dynamic Box Assignment:pointpillar中使用固定交并比阈值来为真实框分配锚点,但由于BEV中没有用到雷达信息,所以几何信息不是很准确,如果使用pointpillar方法的话影响精度。

  • BEV Centerness:我们知道因为远处特征稀疏会导致效果下降,所以作者使用了这个BEV Centerness,其本质是为远处的损失分配更高的权重,以学得更多的特征。

5.3 效果

在这里插入图片描述

六、BEVFusion

BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation,还有一篇叫BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework是发表在NeurlPS 2022上的一篇文章,我们这里看的是前一篇。

这篇工作在多任务的基础上进一步支持了传感器融合

6.1 方法

在这里插入图片描述
Camera Encoder使用SwinTransform/ResNet,LiDAR使用PointPillars/VoxelNet都可以

6.2 trick

  • 与M^2BEV不同,BEVFusion使用了典型的Lift
  • 作者对Lift-Splat做了工程优化,是的效率提升40倍,在RTX3090上能达到12ms的推理速度
    在这里插入图片描述
    1. LSS中对于每张图像都会计算点对应的栅格id(Grid Association),其实这个操作每次都是完全一样的,没有必要做这么多次,所以BEVFusion做的工程优化就是,预先计算好点和栅格的对应关系,实时查表,效率高。
    2. BEV pooling环节,LSS需要计算出积分图,然后用下个栅格的边界减当前栅格的边界,获得栅格特征。BEV做的优化是为每个栅格分配一个gpu的核心,并行分块计算,效率高。
  • 需要注意,图像BEV特征和点云BEV特征其实通常是对不齐的,误差可能来自于标定/时钟同步。BEVFusion在两个特征Concat之后,通过卷积进行融合。

6.3 效果

因为融合了激光雷达,所以BEVFusion在小目标和夜间场景都有良好的效果。
在这里插入图片描述

Nvidia为BEVFusion提供了高质量的工程优化,使得实时性大大提高,实用性强。

七、FastBEV

面向工程设计的BEV框架,跟之前其实都差不多,集各家所长,Multi-View to One-Voxel和多尺度BEV比较新,推理速度快,受多尺度影响,效果更好。
在这里插入图片描述

八、总结

在这里插入图片描述

  • 30
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糊烟乱雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值