| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> BEVFusion: A Simple and Robust LiDAR-CameraFusion Framework 细读 -> 正文阅读 |
|
[人工智能]BEVFusion: A Simple and Robust LiDAR-CameraFusion Framework 细读 |
BEVFusion这个名字是有撞车的 两个自动驾驶相关的文章都是这个简称
另一个有意思的是,这两个工作,从github粗看,应该都是用到了mmdet3d的框架 ? 在右侧的A Simple and Robust LiDAR-Camera Fusion Framework中,似乎2d的检测也是使用的mmdet的框架。感觉这两个的代码阅读应该都会相对于友好一些(希望是这样.....) 一些背景: 感知模块(如3D BBox检测,3D语义分割)一直是自动驾驶系统里最重要的环节之一,为了达到足够的安全冗余,车辆上一般会集成多种传感器,如激光雷达,摄像头,毫米波雷达等,这些传感器特性不同,能够起到很好的互补作用。在面向L4的自动驾驶系统里,激光雷达(后面简称雷达)和摄像头(通常也称为视觉)起到的作用会更加重大,所以无论是学术上还是工业上,这二者的融合算法一直都是一个非常热门的研究领域。 通常,雷达和视觉的融合策略分为三种类型:决策层融合(通常我们称为后融合),决策+特征融合(中间层融合),特征融合(前融合),后融合就是将基于雷达的模型输出的最终结果,比如3D BBox, 和视觉检测器输出的结果,如2D BBox, 通过滤波算法进行融合;中间层融合是将某一个模态输出的最终结果,投影到另一种模态的深度学习特征层上,然后再利用一个后续的融合网络进行信息融合;前融合则是直接在两种模态的Raw Data或者深度模型的特征层上进行融合,然后利用神经网络直接输出最终的结果。这里有篇文章做了比较详细的介绍; 这几种融合策略当然各有优劣,但是在工业界普遍使用的是后融合,因为这种方案比较灵活,鲁棒性也更好,不同模态的输出的结果通过人工设计的算法和规则进行整合,不同模态在不同情况下会有不同的使用优先级,因此能够更好的处理单一传感器失效时对系统的影响。但是后融合缺点也很多,一是信息的利用不是很充分,二是把系统链路变得更加复杂,链路越长,越容易出问题,三是当规则越堆叠越多之后维护代价会很高。学术界目前比较推崇的是前融合方案,能够更好的利用神经网络端到端的特性。但是前融合的方案少有能够直接上车的,原因我们认为是目前的前融合方案鲁棒性达不到实际要求, 尤其是当雷达信号出现问题时,目前的前融合方案几乎都无法处理。 在实际环境下会面临以下几种问题: 1)雷达和相机的外参不准 由于校准问题或车辆运行时颠簸抖动,会造成外参不准,导致点云和图像直接的投影会出现偏差 2)相机噪声 比如镜头脏污遮挡,卡帧,甚至是某个相机损坏等, 导致点云投影到图像上找不到对应的特征或得到错误的特征 3)雷达噪声 除了脏污遮挡问题;对于一些低反的物体,雷达本身特性导致返回点缺失,我们就在实际场景中发现,在雨天黑色的车辆反射点就极少,如图2所示;另外对于某些车型,比如国内新发售的蔚来ET7,其激光雷达的FOV本来就只会覆盖到一个有限的角度; 对于问题1)和2),一些方法已经提供一些兼容能力,比如DeepFusion[7],但是对于问题3)雷达噪声导致的点云缺失,都是无能为力的。因为这类方法都需要通过点云坐标去Query图像特性,一旦点云缺失,所有的手段都无法进行了。所以我们提出了BEVFusion的框架,和之前的方法不同的是雷达点云的处理和图像的处理是独立进行的,利用神经网络进行编码,投射到统一的BEV空间,然后将二者在BEV空间上进行融合。这种情况下雷达和视觉没有了主次依赖,从而能够实现近似后融合的灵活性:单一模态可以独立进行完成任务,当增加多种模态后,性能会大幅提高,但是当某一模态缺失或者产生噪声,不会对整体产生破坏性结果。 摘要: 现有的方法多依赖于来自lidar传感器的点云作为queries,利用图像空间中的特征。 但对于这些方案,如果lidar发生故障,则整个框架不能做出任何预测,这在根本上限制了实际自动驾驶场景的部署能力。 引言 在感知系统的早期阶段,人们为每个传感器设计单独的深度模型[35、36、56、15、51],并通过后处理方法融合信息[30]。 请注意,人们发现鸟瞰图 (BEV) 已成为自动驾驶场景的事实标准,因为一般来说,汽车无法飞行 [19、22、37、15、52、31]。 然而,由于缺乏深度信息,通常很难在纯图像输入上回归 3D 边界框,同样,当 LiDAR 没有接收到足够的点时,也很难对点云上的对象进行分类。 最近,人们设计的雷达-相机融合网络,可以更好地利用这两种模式的信息。大部分工作可以总结为如下:
然而,这些方法严重依赖点云的原始数据(需要从lidar点生成图像queries),然而在 真实场景中,lidar数据会因为各种原因造成缺失(比如 lidar点反射率低、物体纹理、数据传输故障、视野受限无法达到360度等等),导致当前的融合方法无法在实际工作中达到预期效果。 作者认为,lidar+相机融合的理想框架应该满足:
于是作者设计了如下图的融合框架。BEVFusion有两个独立流,将来自相机和lidar的原始输入编码为同一个BEV空间 不同点云-图像融合框架的对比 ? 由于是通用的融合框架,相机流和lidar流的方法都可以自由选择。作者测试过程中,选用 Lift-Splat-Shoot [32] 作为相机流,它将多视图图像特征投影到 3D ego-car 坐标特征以生成相机 BEV 特征;对于 LiDAR 流,作者选择了三个流行的模型,两个基于体素的模型和一个基于柱子的模型 [56,1,19] 将 LiDAR 特征编码到 BEV 空间中。在 nuScenes 数据集上,这个简单的框架显示出很强的泛化能力。 相关工作 这里作者写的是 不同输入模式的3D检测方法。
还有其他工作可以利用其他模式,例如通过特征图连接融合相机雷达 [3, 17, 29, 28]。虽然很有趣,但这些 方法超出了我们的工作范围。尽管一项并行工作 [5] 旨在在单个网络中融合多模态信息,但其设计仅限于一个特 定的检测头 [51],而我们的框架可以推广到任意架构。 BEVFusion: A General Framework for LiDAR-Camera Fusion ? 两个输入流单独处理,转换为BEV空间 ?
Experiments 作者使用的nuScenes数据集。每帧包含六个带有周围视图的摄像头和一个来自 LiDAR 的点云。 10 个类有多达 140 万个带注释的 3D 边界框。我们使用 nuScenes 检测分数(NDS)和平均精度(mAP)作为评估指标。 我们使用开源的 MMDetection3D [7] 在 PyTorch 中实现我们的网络。我们使用 Dual-Swin-Tiny [24] 作为图像视图编码器的 2D bakbone 进行 BEVFusion。 PointPillars [19]、CenterPoint [56] 和 TransFusion-L [1] 被选为我们的 LiDAR 流和 3D 检测头。我们将图像尺寸设置为 448 × 800,体素尺寸遵循 LiDAR 流 [19, 56, 1] 的官方设置。我们的训练包括两个阶段:i)我们首先分别使用多视图图像输入和 LiDAR 点云输入来训练 LiDAR 流和相机流。具体来说,我们在 MMDetection3D [7] 中按照 LiDAR 官方设置训练两个流; ii) 然后我们训练 BEVFusion 的另外 9 个 epoch,这些 epoch 继承了两个训练流的权重。请注意,当涉及多视图图像输入时,不应用数据增强(即翻转、旋转或 CBGS [63])。在测试期间,我们遵循 MMDetection3D [7] 中仅 LiDAR 检测器 [19, 56, 1] 的设置,无需任何额外的后处理。 参考链接 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:36:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |