自动驾驶⻋辆环境感知:多传感器融合

目录

一、多传感器融合技术概述

二、基于传统方法的多传感器融合

三、基于深度学习的视觉和LiDAR的目标级融合

四、基于深度学习的视觉和LiDAR数据的前融合方法

概念介绍

同步和配准

时间同步

标定

摄像机内参标定(使用OpenCV)

摄像机与LiDAR外参标定

空间同步

具体应用

4.1 BEV-LaneDet

4.2 BEVFormer v2


一、多传感器融合技术概述

为什么需要多传感器融合?

  • 自动驾驶需要:传感器 + 智能算法,算法能力的提升较难,传感器上做些增强是可行的
  • 单一传感器测量结果不够全面,不够精准,适用场景不够广,智能算法还不够智能
  • 多个传感器相互配合共同构成汽⻋的感知系统。不同传感器的优势各不相同,主要解决不同的问题

二、基于传统方法的多传感器融合

  • 基于规则和模型:传统的传感器融合方法通常基于预定义的规则和物理模型。它们利用几何关系和统计方法来融合来自不同传感器的数据。例如,卡尔曼滤波和粒子滤波在融合多传感器数据(如雷达和摄像机)方面非常常见。
  • 特征手工设计:传统方法依赖于手工设计的特征提取和匹配算法。这些特征提取过程需要专家知识,并且对于复杂场景可能表现不佳。

三、基于深度学习的视觉和LiDAR的目标级融合

定义

目标级融合方法是在各自传感器数据已经处理并生成高层次目标检测结果后进行的融合。这意味着,视觉和LiDAR数据各自独立进行目标检测,然后将检测结果进行融合。

流程

  1. 独立检测:使用深度学习模型分别处理视觉数据(如摄像机图像)和LiDAR数据,生成目标检测结果(例如物体的类别和位置)。
  2. 结果融合:将来自视觉和LiDAR的检测结果进行融合。这通常涉及匹配和整合两个传感器的检测结果,如通过最近邻匹配或IoU阈值进行匹配,然后综合这些结果以获得最终的检测结果。

优点

  • 模块化处理:可以分别优化视觉和LiDAR的检测模型。
  • 简单高效:融合过程较为简单,因为只需处理少量的检测结果。

缺点

  • 信息利用不充分:无法在早期阶段结合两个传感器的数据,可能会错过一些有用的信息。
  • 精度有限:独立处理可能导致一些目标在一个传感器上检测到而另一个传感器未能检测到,从而影响最终融合结果的准确性。

四、基于深度学习的视觉和LiDAR数据的前融合方法

概念介绍

定义

前融合方法是在对各自传感器数据进行目标检测之前,将视觉和LiDAR数据在特征提取阶段就进行融合。这样可以在早期阶段就结合两个传感器的数据,利用多模态数据的互补性来提高检测性能。

流程

  1. 数据预处理:将视觉数据和LiDAR数据进行同步和配准(对齐),使它们在空间和时间上对应。
  2. 特征提取与融合:使用深度学习模型提取和融合来自视觉和LiDAR的特征。可以通过多模态神经网络同时处理这两种数据,生成联合特征表示。
  3. 目标检测:基于融合后的特征进行目标检测,生成最终的检测结果。

优点

  • 信息最大化利用:在早期阶段结合多模态数据,能够更全面地利用来自视觉和LiDAR的信息,提高检测性能。
  • 更高的检测精度:通过联合特征表示,模型能够更好地理解场景中的目标,从而提高检测精度。

缺点

  • 计算复杂度高:需要更多的计算资源,因为必须同时处理和融合两个传感器的数据。
  • 模型复杂度高:设计和训练多模态融合网络更加复杂。

同步和配准

时间同步

时间同步是指对来自不同传感器的数据进行时间对齐,使它们的时间戳在同一时间参考系下同步。

标定

标定是空间同步的前提。通过标定确定各传感器的内参和外参后,可以实现空间同步,确定各传感器相对于一个公共参考系的位置和方向的过程。标定通常包括内参标定(传感器自身参数)和外参标定(传感器之间的相对位置和方向)。

摄像机内参标定(使用OpenCV)
  • 摄像机内参标定:使用棋盘格或其他标定板,拍摄多张图像,利用标定算法(如OpenCV中的张正友标定法)计算摄像机的内参矩阵和畸变系数。
  • LiDAR内参标定:LiDAR通常不需要复杂的内参标定,但需要确保LiDAR的安装角度和扫描范围正确。
import cv2
import numpy as np# 读取标定图像
images = [cv2.imread(image_path) for image_path in image_paths]# 设置棋盘格大小
pattern_size = (9, 6)
obj_points = []
img_points = []# 准备棋盘格的世界坐标系下的点
objp = np.zeros((np.prod(pattern_size), 3), np.float32)
objp[:, :2] = np.mgrid[0:pattern_size[0], 0:pattern_size[1]].T.reshape(-1, 2)# 提取角点
for img in images:gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)ret, corners = cv2.findChessboardCorners(gray, pattern_size)if ret:img_points.append(corners)obj_points.append(objp)# 进行标定
ret, camera_matrix, dist_coeffs, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, gray.shape[::-1], None, None)print("相机内参矩阵:", camera_matrix)
print("畸变系数:", dist_coeffs)
摄像机与LiDAR外参标定
  1. 使用ROS采集数据。
  2. 使用PCL库处理LiDAR点云数据。
  3. 通过ICP算法配准特征点。
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <pcl/registration/icp.h>pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_source (new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_target (new pcl::PointCloud<pcl::PointXYZ>);// 加载点云数据
pcl::io::loadPCDFile ("source.pcd", *cloud_source);
pcl::io::loadPCDFile ("target.pcd", *cloud_target);// ICP配准
pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;
icp.setInputSource(cloud_source);
icp.setInputTarget(cloud_target);
pcl::PointCloud<pcl::PointXYZ> Final;
icp.align(Final);std::cout << "Has converged: " << icp.hasConverged() << " score: " <<
icp.getFitnessScore() << std::endl;
std::cout << "变换矩阵:\n" << icp.getFinalTransformation() << std::endl;

空间同步

空间同步是指将不同传感器的数据转换到同一坐标系下,使它们在空间上对齐。

具体应用

BEV(Bird's-Eye View,鸟瞰视角)技术属于基于深度学习的前融合(Early Fusion)方法。具体来说,BEV方法在对各自传感器数据进行目标检测之前,将视觉(摄像机)和LiDAR数据在特征提取阶段就进行融合。

4.1 BEV-LaneDet

a Simple and Effective 3D Lane Detection Baseline

这篇文章的主要观点是介绍了一种名为Bev-lanedet的高效且强大的单目3D车道检测方法。这种方法主要包括三个创新点:

  1. 虚拟摄像机模块:该模块通过统一不同车辆摄像机的内外参数,确保了摄像机之间空间关系的一致性,从而促进了学习过程。
  2. 关键点表示:提出了一种简单但高效的3D车道表示方式,更适合表示复杂多样的3D车道结构。
  3. 空间变换金字塔模块:这是一个轻量级且易于部署的模块,用于将多尺度前视特征转换为鸟瞰视角(BEV)特征。

实验结果表明,Bev-lanedet在F-score方面优于最先进的方法,在OpenLane数据集上高出10.6%,在Apollo 3D合成数据集上高出5.9%,且检测速度达到185 FPS。文章还强调了该方法的实时性和计算效率,适合在自动驾驶中进行部署。

4.2 BEVFormer v2

Adapting Modern Image Backbones to Bird’s-Eye-View Recognition via Perspective Supervision

  • 鸟瞰视角(BEV)检测器的优化:论文介绍了一种新的鸟瞰视角(BEV)检测器,称为BEVFormer v2,通过引入透视监督来更好地适应现代图像骨干网络。这种方法旨在克服现有BEV检测器在优化过程中遇到的问题,并实现更快的收敛。

  • 透视监督的引入:论文提出了通过透视监督(perspective supervision)来指导图像骨干网络学习3D知识,从而克服BEV检测器的复杂结构问题。这种监督方式直接应用于骨干网络,帮助其适应3D场景。

  • 两阶段BEV检测器:论文提出了一种两阶段的BEV检测器BEVFormer v2。第一阶段的透视检测头生成物体提案,这些提案被编码为对象查询,然后与第二阶段的BEV检测头的学习对象查询结合,进行最终预测。

  • 实验验证与性能提升:通过在nuScenes数据集上的广泛实验,验证了提出方法的有效性。结果表明,使用透视监督的BEVFormer v2在检测性能和模型收敛速度方面都有显著提升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/862182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软推出最新视觉基础模型Florence-2 可在浏览器运行

据微软官方消息&#xff0c;微软推出视觉基础模型Florence-2&#xff0c;该模型现已能够在支持WebGPU的浏览器中100%本地运行。Florence-2-base-ft是一个拥有2.3亿参数的视觉基础模型&#xff0c;采用基于提示的方法来处理广泛的视觉和视觉语言任务。 该模型支持多种功能&…

IDEA 插件推荐【一】

好使的插件可以让工作事倍功半。下面就推荐一些常用的IDEA插件&#xff0c;如果你有其他好使的插件&#xff0c;欢迎评论区留言分享出来~ 1.Key Promoter X Key Promoter X 插件&#xff0c;IDEA 快捷键提示工具。 在每次我们使用鼠标进行 IDEA 的某个操作&#xff0c;Key Pr…

lambda-map.merge

map.merge 结论: 1.当前传入的 key ,value biFunction 2.如果之前map不存在则直接put(当前key,当前value) 3.如果之前map已经有了,老value与 当前value 进入function处理后再 put(当前key,处理后的value)

IDEA使用Apidocx插件在RAP生成接口文档

第一步 安装插件&#xff0c;安装最新的1.1.7即可&#xff0c;插件与idea版本对照 第二步 输入对应的IP或域名&#xff0c;端口说明&#xff1a; 1. 38080&#xff1a;为后端数据 API 服务器&#xff08;rap2-delos&#xff09; 2. 3000&#xff1a;为前端静态资源服务&…

40岁学习java是否需要报班学习?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;应该不需要。各种公开免费的…

【计算机毕业设计】087基于微信小程序社区养老服务

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

AI加持,商业智能与分析软件市场释放更大潜能

根据IDC最新发布的《中国商业智能和分析软件市场跟踪报告&#xff0c;2023H2》显示&#xff0c;2023下半年&#xff0c;中国商业智能与分析软件市场规模为5.2亿美元&#xff0c;同比增长为3.7%。其中&#xff0c;本地部署收入占比为89.3%&#xff0c;同比增长1.7%&#xff1b;公…

【MySQL】架构体系概览

本文使用的MySQL版本是8.0 MySQL架构 ​MySQL架构整体由外部程序和MySQL服务器构成。其中内部服务器分成连接层&#xff0c;服务层&#xff0c;服务管理和公共组件&#xff0c;存储引擎层和文件系统层。 连接层 连接层的作用是处理客户端的连接。 网络端口 一台MySQL服务器…

C++精解【8】

文章目录 运算,- 加减法* / 乘除法逐元 乘法逐元 除法逐元综合运算矩阵乘法与加减法 转置、共轭、伴随矩阵点乘法,叉积 运算 ,- 加减法 逐元加减法 #include <iostream> #include "e:/eigen/Eigen/Dense" using namespace std;int main() {Eigen::Matrix2d …

clip系列改进Lseg、 group ViT、ViLD、Glip

Lseg 在clip后面加一个分割head&#xff0c;然后用分割数据集有监督训练。textencoder使用clip&#xff0c;frozen住。 group ViT 与Lseg不同&#xff0c;借鉴了clip做了真正的无监督学习。 具体的通过group block来做的。使用学习的N个group token&#xff08;可以理解为聚类…

计算机毕业设计hadoop+spark+hive知识图谱医生推荐系统 医生数据分析可视化大屏 医生爬虫 医疗可视化 医生大数据 机器学习 大数据毕业设计

测试过程及结果 本次对于医生推荐系统测试通过手动测试的方式共进行了两轮测试。 &#xff08;1&#xff09;第一轮测试中执行了个20个测试用例&#xff0c;通过16个&#xff0c;失败4个&#xff0c;其中属于严重缺陷的1个&#xff0c;属于一般缺陷的3个。 &#xff08;2&am…

Ueditor中集成135编辑器

一、背景 在资讯项目平台运营过程中&#xff0c;资讯需要排版&#xff0c;一般都是在135编辑器排好以后&#xff0c;复制到平台中UEditor编辑器中&#xff0c;所以&#xff0c;他们建议集成一下135哈 二、了解135编辑器 开始调研了解135编辑器&#xff0c;发现人家就支持集成…

Golang | Leetcode Golang题解之第202题快乐数

题目&#xff1a; 题解&#xff1a; func isHappy(n int) bool {cycle : map[int]bool{4: true, 6: true, 37: true, 58: true, 89: true, 145: true, 42: true, 20: true}for n ! 1 && !cycle[n] {n step(n)}return n 1 }func step(n int) int {sum : 0for n > …

AI数据分析007:根据Excel表格数据绘制柱形图

文章目录 一、介绍二、输入内容三、输出内容一、介绍 将Excel文件中2013年至2019年间线上图书的销售额,以条形图的形式呈现,每个条形的高度代表相应年份的销售额,同时在每个条形上方标注具体的销售额数值 二、输入内容 在deepseek中输入提示词: 你是一个Python编程专家,…

SMTP 转发器/中继

设置中继邮件服务器 我将设置一个邮件服务器&#xff0c;该服务器稍后将用作 SMTP 中继服务器。首先&#xff0c;在 Digital Ocean 中创建了一个新的 Ubuntu Droplet&#xff1a; Postfix MTA 安装在droplet上&#xff0c;并带有&#xff1a; apt-get install postfix 在pos…

【Python实战因果推断】4_因果效应异质性4

目录 Cumulative Gain Target Transformation Cumulative Gain 如果采用与累积效应曲线完全相同的逻辑&#xff0c;但将每个点乘以累积样本 Ncum/N&#xff0c;就会得到累积增益曲线。现在&#xff0c;即使曲线的起点具有最高的效果&#xff08;对于一个好的模型来说&#x…

Web渗透:文件包含漏洞(part.1)

"文件包含漏洞"&#xff08;File Inclusion Vulnerability&#xff09;是一种常见的Web应用程序漏洞&#xff0c;攻击者可以通过这个漏洞在目标系统上包含或执行任意文件。主要有两种类型的文件包含漏洞&#xff1a; 本地文件包含&#xff08;Local File Inclusion, …

C++ | Leetcode C++题解之第201题数字范围按位与

题目&#xff1a; 题解&#xff1a; class Solution { public:int rangeBitwiseAnd(int m, int n) {while (m < n) {// 抹去最右边的 1n n & (n - 1);}return n;} };

Linux CentOS 宝塔中禁用php8.2的eval函数详细图文教程

PHP_diseval_extension 这个方法是支持PHP8的, Suhosin禁用eval函数&#xff0c;不支持PHP8 一、安装 cd / git clone https://github.com/mk-j/PHP_diseval_extension.gitcd /PHP_diseval_extension/source/www/server/php/82/bin/phpize ./configure --with-php-config/ww…

Go语言学习:每日一练2

Go语言学习&#xff1a;每日一练2 目录 Go语言学习&#xff1a;每日一练2结构体零值数组切片映射指针 各个类型的零值一览 结构体 //定义 type Vertex struct {X, Y int } //使用 func main() { v1 : Vertex{1, 2} fmt.Println(v.X) //别的实例化方式 var v2 Vertex v2 : *new…