以下文章来源于微信公众号:集智书童
链接:https://mp.weixin.qq.com/s/6BWohe2FxRN8E-yyp_32fg
本文仅用于学术分享,如有侵权,请联系后台作删文处理
引言:
众所周知,雷达与相机的融合方案由于稀疏卷积
的原因导致一直难以落地推广。而没有使用稀疏卷积的方案精度通常会差10-30%左右,并且目前的融合方案在Orin上的性能非常差(例如BEVFusion在3090Ti上只有8.6FPS),这严重地制约了自动驾驶的落地表现。英伟达刚刚发布了部署BEVFusion
的方案,以惊人的25FPS
同时保持67.66
的高精度mAP
运行在Orin
上,这对于雷达相机融合的感知落地来说,这是一项十分令人兴奋的工作!这意味着雷达感知
的精度和速度将会得到大幅度的提升
,并且轻易的部署
!
代码发布在 https://github.com/NVIDIA-AI-IOT/Lidar_AI_Solution
1. 仓库介绍
- 该仓库主要提供了3个模型(
BEVFusion
、CenterPoint
、PointPillars
)和5个libraries
(sparse conv, quantization solution, cuPCL, cuOSD, YUVToRGB)
- 这些模块,通过下面的方式组织起来
- 下面是一个BEVFusion的执行效果
- 模型的精度和速度如下表(nuScenes验证集的平均速度)
- 可以看到,模型在PTQ量化后只有0.3%mAP的损失,是相当不错的
- 在保持高精度的同时还保持了高的推理速度,这对自动驾驶来说非常友好
- 仓库提供了模块化的实现,对于按照要求修改会比较友好
2. 稀疏卷积(Sparse Convolution)
-
仓库还提供了稀疏卷积的解决方案,他的实现是独立于tensorRT之外的,纯cuda核函数调用TensorCore实现的一个库
-
它通过onnx文件加载模型并进行推理加速,轻量且高效
-
提供了FP16和INT8推理的支持。支持子流形和空间稀疏卷积
-
同时还提供了CenterPoint和BEVFusion的lidar导出以及PTQ/QAT保证速度和精度的解决方案
-
详细的精度指标如下
-
下面是在nuScenes上的耗时统计,稳定性非常好
3. BEVfusion介绍
BEVFusion是一种用于自动驾驶系统的先进技术。它代表着鸟瞰融合(Bird’s Eye View Fusion),是一个多任务、多传感器融合
框架,极大地提高了自动驾驶汽车的性能[2]。
4. 落地部署的挑战
4.1. ONNX导出复杂
BEVFusion是一种涉及到SparseConv(稀疏卷积)
层和自定义CUDA操作
(如BEV池化)等复杂特性的模型[4]。这些特性对于转换到 ONNX,以及后续在TensorRT上部署都构成了难题。
我们简单地总结了一下难以转ONNX的主要原因:
(1)自定义CUDA操作
:BEVFusion使用的自定义CUDA操作在ONNX模型导出中并不被原生支持[5]。这意味着这些操作需要手动在ONNX中注册为自定义操作,这是一项具有挑战性的任务。
(2)SparseConv层:在BEVFusion中使用的SparseConv层
并不被ONNX原生支持
[6]。这使得转换过程变得复杂,因为需要手动处理
这些层。
4.2.Plugin和BEVpooling效率低下
制约BEVfusion广泛落地的另一个原因就是其Plugin
和BEVpooling
的效率不够高
。BEVFusion中的BEVPool使用CUDA来加速,但它仍然需要计算、存储和预处理视锥特征(frustum feature),这在内存和计算上都十分密集[7]。
尽管BEVfusion在框架设计上已经进行了优化,相比于以前的研究,以更高的精度和降低1.9倍[8]的计算成本在nuscenes上设立了新的基准。但是,对于自动驾驶这种高速场景来说,我们应该追求更高的性能,以确保安全驾驶。因此,对某些操作的计算强度进行进一步优化是非常有价值的。
4.3.项目工程相对复杂
比起普通的单传感器感知,BEVfusion工程也相对复杂,主要体现在下面几个方面:
(1)多任务多传感器融合框架:BEVFusion被设计为一个高效且通用的多任务多传感器融合
框架。它在共享的鸟瞰视图(BEV)表示空间中统一多模态特征,这既保留了几何信息也保留了语义信息[9]。这种任务和方法的复杂性直接反映在仓库的结构和内容上。
(2)坐标系统的修改和体素化(Coordinate system modification and voxelization):BEVFusion项目对其实现进行了重大更改,例如从zyx体素化切换到xyz体素化。在一些头部,xy BEV坐标与先前的实现相比进行了转置。这可能会增加仓库的复杂性,尤其是对熟悉先前版本的人来说[10]。
5. 总结
尽管BEVFusion确实提供了一种新颖且有效的方式来处理多传感器融合任务,但是在实际部署过程中仍存在以上的挑战。包括ONNX导出复杂、插件和BEVpooling效率低下以及项目工程相对复杂
等问题。这些问题需要我们在实践中寻找解决方案。而这,正是英伟达提供的方案致力于解决的,新的部署方案在保持67.66的高精度mAP的同时,实现了在Orin上以惊人的25FPS运行
,这对雷达和相机的融合感知落地来说无疑是一次重大突破。这项工作不仅证明了BEVFusion的实用性,还展示了其潜力,即在高精度和高效率之间找到平衡,以满足自动驾驶等高速场景的需求。