BEVGPT展示自动驾驶的“全知视角”,预测决策规划三合一的革新之作!

前言

本篇文章由原paper一作Pengqin Wang(王鹏钦)全权翻译分享,王鹏钦为香港科技大学博士生,师从沈劭劼教授、朱美新教授。他的研究方向为自动驾驶和机器人系统中的决策、预测和规划。他的研究成果发表于TMECH、RAL、IROS、TRB等一系列机器人和自动驾驶顶刊顶会。

1. BEVGPT开发背景

预测、决策和运动规划对于自动驾驶至关重要。在大多数传统算法架构中,它们被视为单独的模块或组合成具有共享主干但独立任务头的多任务学习范例。然而,我们认为理想的算法是将它们整合到一个综合框架中,且这种整合过程不应受到复杂的输入表示(即输入解耦)和冗余框架设计的困扰。为了解决上述问题,我们重新思考了自动驾驶任务中各个模块的必要性,并将所需的模块纳入到极简的自动驾驶框架中。我们提出了BEVGPT,一种新的集成驾驶场景预测、决策和运动规划的生成式预训练模型。该模型以鸟瞰图像(BEV)作为唯一输入源,并根据周围的交通场景做出驾驶决策。最后通过基于优化的运动规划方法来保证驾驶轨迹的可行性和平滑性。

2. BEVGPT整体框架

在这里插入图片描述
图1|BEVGPT整体框架©️【深蓝AI】

如图所示,BEVGPT采用两阶段训练过程。首先,我们使用大量自动驾驶数据来训练生成式大模型。随后,使用自动驾驶仿真模拟器通过在线学习对模型进行微调。具体来说,预训练阶段的目标是学习驾驶场景预测和决策,即自动驾驶任务中的BEV生成和自车轨迹预测。该模型能够输出未来4秒内的决策轨迹,并在长达6秒内预测未来驾驶场景。接下来是在线微调阶段,通过在线学习的方式实现模型微调,从而保证符合动力学的运动规划和更为精确的BEV预测。在微调阶段,运动规划器被设计为自动驾驶车辆生成平滑且可行的轨迹。

2.1 框架设计

我们从人类驾驶员的角度重新评估每个模块的必要性,以设计自动驾驶系统框架。首先,人类驾驶员对环境地图有先验的知识,比如在使用导航软件时,每条道路的结构和路口位置都比较明显。其次,人类驾驶员并不会显示地追踪周围的其他车辆,并预测它们的未来轨迹。相反,他们更关注的是预测的自车轨迹是否会被其他车辆所占据。然后,他们会做出相应地驾驶决策。基于上述思考,我们设计了一个极简的自动驾驶框架,即包括决策,运动规划和驾驶场景预测,而把目标跟踪以及他车运动预测模块去掉了。在该框架中,决策输出的是自车未来T=4秒内的位置,在motion planner进一步处理后生成一个符合动力学和平滑的轨迹。考虑到静态环境信息可以从高清地图轻松获取,我们更加关注包括车辆和行人在内的动态物体的精确预测。驾驶场景预测通过环境地图和动态物体预测的组合获得,如下图所示。

在这里插入图片描述
图2|驾驶场景预测©️【深蓝AI】

2.2 轨迹表示

我们采用分段多项式轨迹来表示我们的微分平坦输出,即 p x p_x px p y p_y py。为了在后续的motion planning模块中minimum Jerk,我们选择五次多项式表示。假设轨迹总共由 M M M段组成。在这种情况下,便可以表示为下面的多项式:

f n ( t ) = ∑ k = 0 5 f n , k t k , t ∈ [ T n , T n + 1 ] f_n(t) = \sum_{k=0}^{5} f_{n,k} t^k, t \in [T_{n}, T_{n+1}] fn(t)=k=05fn,ktk,t[Tn,Tn+1]

这里的 n n n表示轨迹的段数,每段具有相同的时间间隔 Δ t \Delta t Δt

2.3 运动规划

在我们的轨迹规划问题中,自车的初始状态和末状态已知。同时,决策模块的输出应当被包含在未来的轨迹中。另外,分段多项式轨迹的连续性也需要得到保证。因此,我们的运动规划问题被表达为了如下的minimum Jerk问题:

min ⁡ J ( f ( t ) ) , s . t . f 0 ( 0 ) = p 0 , f ˙ 0 ( 0 ) = p ˙ 0 , f M − 1 ( T M ) = p M , f ˙ M − 1 ( T M ) = p ˙ M , f n ( T n ) = p ( T n ) , f n − 1 ( T n ) = f n ( T n ) , f ˙ n − 1 ( T n ) = f ˙ n ( T n ) , f ¨ n − 1 ( T n ) = f ¨ n ( T n ) , ∥ f ˙ n ( T n ) ∥ ≤ v m a x , ∥ f ¨ n ( T n ) ∥ ≤ a m a x , n ∈ { 1 , 2 , . . . , M − 1 } \begin{aligned} & \min ~ J(f(t)), \\ s.t. ~ & f_{0}(0)= \mathbf {p_0}, ~ \dot{f}_{0}(0) = \mathbf {\dot{p}_0}, \\ ~ & f_{M-1}(T_M)= \mathbf {p_M}, ~ \dot{f}_{M-1}(T_M) = \mathbf {\dot{p}_M}, \\ ~ & f_n(T_{n}) = p(T_{n}), ~ f_{n-1}(T_n)=f_{n}(T_n), \\ ~ & \dot{f}_{n-1}(T_n) = \dot{f}_{n}(T_n), ~ \ddot{f}_{n-1}(T_n) = \ddot{f}_{n}(T_n), \\ ~ & \left \|\dot{f}_{n}(T_n)\right \| \leq \mathbf {v_{max}}, ~ \left \|\ddot{f}_{n}(T_n)\right \| \leq \mathbf {a_{max}}, \\ ~ & n \in \{1, 2, ..., M - 1\} \end{aligned} s.t.      min J(f(t)),f0(0)=p0, f˙0(0)=p˙0,fM1(TM)=pM, f˙M1(TM)=p˙M,fn(Tn)=p(Tn), fn1(Tn)=fn(Tn),f˙n1(Tn)=f˙n(Tn), f¨n1(Tn)=f¨n(Tn), f˙n(Tn) vmax,  f¨n(Tn) amax,n{1,2,...,M1}

在这里,我们将自车的初始状态和最终状态考虑在内,同时确保了两个相邻轨迹段之间的连续性和光滑性,并且考虑了最大速度和最大加速度的限制,以确保动力学的可行性。

3. BEVGPT模型训练

3.1 数据集

我们采用了Lyft Level 5 Dataset,这是一个由Houston等人于2021年提出的自动驾驶数据集,包含了超过1000个小时的驾驶数据,采集跨度4个月,采集车辆是由20辆车组成的车队。关于数据处理,我们从数据集中提取车辆姿态、语义BEV图像和静态环境地图图像。去除持续时间短于24秒(即240帧,时间间隔 Δ t = 0.1 \Delta t = 0.1 Δt=0.1秒)的驾驶情景。然后将自车的未来目标位置作为决策训练的label。我们将每帧的车辆位置、当前BEV图像、下一帧BEV图像和下一帧环境地图图像记录下来作为训练数据集。

3.2 模型架构

GPT体系结构在自然语言处理(NLP)领域取得了很大的进展,它通过添加因果自关注掩码来修改变压器体系结构,从而自动回归生成预测tokens。由于其强大的理解和泛化能力,我们采用GPT架构来处理复杂的自动驾驶任务和各种场景。我们的超参数如下表所示。

在这里插入图片描述
表1|BEVGPT超参数©️【深蓝AI】

3.3 预训练

在预训练阶段,BEVGPT进行了20个epochs的训练。为了提高模型的决策能力和预测能力,这里使用均方误差(MSE)作为Loss。

l o s s d e c i s i o n = M S E ( p d e , p g t ) loss_{decision} = MSE(p_{de}, p_{gt}) lossdecision=MSE(pde,pgt)
l o s s p r e d i c t i o n = 100 ⋅ M S E ( e n v g t + b e v p r , b e v g t ) loss_{prediction} = 100 \cdot MSE(env_{gt}+bev_{pr}, bev_{gt}) lossprediction=100MSE(envgt+bevpr,bevgt)
l o s s = sin ⁡ α ⋅ l o s s d e c i s i o n + cos ⁡ α ⋅ l o s s p r e d i c t i o n loss = \sin{\alpha} \cdot loss_{decision} + \cos{\alpha} \cdot loss_{prediction} loss=sinαlossdecision+cosαlossprediction

这里我们采用三角函数来平衡预测和决策的loss。

3.4 在线微调

我们使用的是Woven Planet L5Kit进行自动驾驶仿真,以微调预训练模型。BEV输入模型后,输出未来时间间隔内的轨迹点。紧接着motion planner根据决策输出生成动态可行的轨迹,而后得到BEV的预测。回看上面的loss公式,模型要fine-tuning,需要地图的信息,这里我们开发了一种经验光栅化器(experience rasterizer),以帮助模型获得仿真驾驶场景的静态信息。这里的出发点是一旦知道静态全局地图、自车的初始世界坐标和世界坐标与光栅坐标之间的转换,就可以将所有车道和交叉口轻松映射到光栅化的BEV图像中。仿真器经过 Δ t \Delta t Δt时间间隔的仿真后,就可以获得接下来BEV图像的真实数据。这部分的loss如下:

l o s s = M S E ( e n v e r + b e v p r , b e v s m ) loss = MSE(env_{er}+bev_{pr}, bev_{sm}) loss=MSE(enver+bevpr,bevsm)

因为这里仿真器是按照预测的轨迹进行走的,所以轨迹那项的loss是0。我们使用Woven Planet L5Kit模拟器进行在线微调,以适应运动规划和精确的BEV生成。

4. 实验结果

我们采用以下指标来评估的模型的决策能力和运动规划能力:

最终位移误差指标(FDE), 指的是最终预测位置与参考位置之间的距离。

平均位移误差指标(ADE), 指的是时刻t之前所有预测位置与参考位置的均方误差。

最终距离参考轨迹的距离指标(FDR), 指的是时刻t预测位置与参考轨迹中最近点的距离。

平均距离参考轨迹的距离指标(ADR), 指的是时刻 t t t之前所有预测位置与参考轨迹中其最近位置的均方误差。

L2误差(L2), 在仿真过程中执行的轨迹和日志记录中的真实位置之间的均方误差。

碰撞率(CR), 它指的是模拟持续时间t内发生碰撞帧与全部帧的比例。

越野率(OR), 它指的是驶离道路帧数与全部帧的比例。判断指标定义为参考轨迹与自车之间的距离大于2米。

评价结果如下表所示,结果显示,我们提出的BEVGPT在决策和规划任务中优于许多现有的方案。

在这里插入图片描述
表2|实验结果©️【深蓝AI】

5. 未来工作

未来我们将在极端情况下测试所提出方法的鲁棒性,并进一步改进框架。未来研究的一个有潜力的方向是提高BEVGPT模型的实时性能,将其部署在自动驾驶汽车上。我们的目标是带来一个更安全、更可靠、更高效的自动驾驶框架。

移步公众号【深蓝AI】,第一时间获取自动驾驶、人工智能与机器人行业最新最前沿论文和科技动态👇
深蓝AI·赋能AI+智驾+机器人

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

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

相关文章

互联网政务应用安全管理规定

互联网政务应用安全管理规定 (2024年2月19日中央网络安全和信息化委员会办公室、中央机构编制委员会办公室、工业和信息化部、公安部制定 2024年5月15日发布) 第一章 总则 第一条为保障互联网政务应用安全,根据《中华人民共和国网络安全法…

【前端新手小白】学习Javascript的【开源好项目】推荐

目录 前言 1 项目介绍 1.1 时间日期类 1.2 网页store类 1.3 事件类 1.4 Number类 1.5 String类 1.6 正则验证类 1.7 ajax类 1.8 data数据类 1.9 browser浏览器类 2 学习js-tool-big-box开源项目时有哪些收获 2.1 你可以这样做 2.2 如果你需要使用本项目 2.3 你…

内网穿透的应用-Windows系统如何ssh连接群晖nas使用docker安装内网穿透软件

文章目录 前言1. 检查安装Container Manager2. 检查开启群晖SSH连接3. Windows SSH 连接群晖4. 下载Cpolar 镜像5. 群晖Docker安装Cpolar 前言 在某些群晖NAS型号版本,无法使用套件安装的时候,我们可以采用Docker的方式进行安装cpolar内网穿透工具&…

MySQL:Prepared Statement 预处理语句

预处理语句(Prepared Statement) 是一种在数据库管理系统中使用的编程概念,用于执行对数据库进行操作的 SQL 语句。 使用预处理语句的具体方式和语法依赖于所用的编程语言和数据库管理系统。常见的编程语言如 Java、PHP、Python 和 C# 都提供…

CNN卷积网络实现MNIST数据集手写数字识别

步骤一:加载MNIST数据集 train_data MNIST(root./data,trainTrue,downloadFalse,transformtransforms.ToTensor()) train_loader DataLoader(train_data,shuffleTrue,batch_size64) # 测试数据集 test_data MNIST(root./data,trainFalse,downloadFalse,transfor…

GBase8c psycopg2安装(centos6)

GBase8c psycopg2安装(centos6) 安装步骤: [rootcentos6 ~]# cd /opt/python/ [rootcentos6 python]# ls psycopg2-2.7.7.tar.gz [rootcentos6 python]# tar -zxf psycopg2-2.7.7.tar.gz [rootcentos6 python]# cd psycopg2-2.7.7 # 安装命令 [rootcentos6 psycop…

B站安全开发流程落地实践

一. 什么是安全开发生命周期(SDL) 1.1 SDL诞生背景 随着互联网技术的快速发展,网络系统及应用在给人们的生活带来巨大便利的同时,信息安全问题也逐渐成为用户和企业关注的焦点。然而,安全问题的管理和解决需要一个系统…

武汉流星汇聚:亚马逊Prime会员日后,确保持续稳定出单的五大策略

随着亚马逊Prime会员日的圆满落幕,无数商家沉浸在销售高峰的喜悦之中,但狂欢之后的冷静思考同样重要。对于所有卖家而言,如何在会员日热潮退去后,依然保持稳定的订单量,成为关乎长远发展的关键。以下,武汉流…

MySQL数据库入门基础知识 【1】推荐

数据库就是储存和管理数据的仓库,对数据进行增删改查操作,其本质是一个软件。 首先数据有两种,一种是关系型数据库,另一种是非关系型数据库。 关系型数据库是以表的形式来存储数据,表和表之间可以有很多复杂的关系&a…

nova7(华为)相机关闭画质优化

模板 文章目录 模板 如果对你有帮助,就点赞收藏把!(。・ω・。)ノ♡ 不知道大家有没有遇到这种苦恼 想拍一张,夜景照片 明明按下快门的时候还是如上图所示 但是到图库就只能看到下图的照片…

多路径 bbr mpbbr 公平性推演

mptcp 推出很久了,先看 rfc6356 三原则: 对自己,mptcp 的吞吐不能比用 sp(single path)tcp 时更差;对它者,mptcp 子流对资源的占用不能侵害其它 sptcp 流量;负载分担,要将孬 subflow 流量分担到…

SX_初识GitLab_1

1、对GitLab的理解: 目前对GitLab的理解是其本质是一个远程代码托管平台,上面托管多个项目,每个项目都有一个master主分支和若干其他分支,远程代码能下载到本机,本机代码也能上传到远程平台 1.分支的作用&#xff1a…

20.rabbitmq插件实现延迟队列

问题 前面谈到基于死信的延迟队列,存在的问题:如果第一个消息延时时间很长,而第二个消息延时时间很短,第二个消息并不会优先得到执行。 下载插件 地址:https://github.com/rabbitmq/rabbitmq-delayed-message-excha…

JAVA基础 - 反射

目录 一. 简介 二. java.lang.Class类 三. java.lang.reflect包 四. 创建对象 五. 调用方法 六. 调用成员变量 一. 简介 反射是 Java 语言中的一种强大机制,允许程序在运行时动态地获取类的信息、访问类的成员(包括字段、方法和构造函数&#xff…

Tomato靶机攻略

1、启动靶机 2、通过nmap -sA 192.168.168.0/24得到靶机IP 3、扫描目录 用dirb http://192.168.49.128扫描敏感目录 4、访问敏感目录 5、通过查看源码,发现其存在文件包含漏洞,利用该漏洞查看日志文件 http://192.168.168.131/antibot_image/antibots/…

gitee的fork

通过fork操作,可以复制小组队长的库。通过复制出一模一样的库,先在自己的库修改,最后提交给队长,队长审核通过就可以把你做的那一份也添加入库 在这fork复制一份到你自己的仓库,一般和这个项目同名 现在你有了自己的库…

vue2以及vue3基于el-table实现表格正则校验功能

常见需求: 在项目中,通常会在表格中添加多条数据,并需要对添加的数据进行校验功能,这时候就是很头疼的事了,下面酱酱仔给你们写个示例,你们无脑粘贴复制即可。 注意事项: 1、校验里面用到了正…

【Unity】3D功能开发入门系列(一)

Unity3D功能开发入门系列(一) 一、开发环境(一)安装 Unity(二)创建项目(三)Unity 窗口布局 二、场景与视图(一)场景(二)游戏物体&…

前端日历插件VCalendar

官网地址 API | VCalendar 1.安装 yarn add v-calendarnext popperjs/core 2.全局引入 mian.js //日历插件 import VCalendar from v-calendar; import v-calendar/style.css;app.use(VCalendar); 3.使用 <div><VCalendar reservationTime expanded borderless…