当前位置: 首页 > news >正文

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+智驾+机器人

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 51单片机嵌入式开发:21、STC89C52R控制抢答器+数码管+后台显示+LCD1602x显示
  • 排序算法详解
  • 昇思25天学习打卡营第13天 |昇思MindSpore 基于 MindSpore 实现 BERT 对话情绪识别
  • 非插件实现给wordpress添加社交软件的分享按钮
  • 运维工作中的事件、故障排查处理思路
  • OpenAI突然上线两件“杀手锏”:势在维持大模型霸主地位
  • vscode自动优化verilog 格式
  • CentOS安装sentry
  • 3百题英语四级听力考试练习题ACCESS\EXCEL数据库
  • 8-springboot集成nacos config
  • python绘图 | 横坐标是日期,纵坐标是数值
  • LabVIEW无法在共享变量引擎中定位共享变量
  • [微信小程序/uniapp] 锁屏/后台 状态下的音频控制方案
  • 【图像识别】十大数据集合集!
  • golang编码最佳实践(持续更新中)
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 30秒的PHP代码片段(1)数组 - Array
  • Bootstrap JS插件Alert源码分析
  • CAP理论的例子讲解
  • Java 网络编程(2):UDP 的使用
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • PHP 7 修改了什么呢 -- 2
  • Python学习之路13-记分
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 计算机常识 - 收藏集 - 掘金
  • 那些年我们用过的显示性能指标
  • 如何编写一个可升级的智能合约
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 学习ES6 变量的解构赋值
  • kubernetes资源对象--ingress
  • 大数据全解:定义、价值及挑战
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • # 数仓建模:如何构建主题宽表模型?
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • $(selector).each()和$.each()的区别
  • $.ajax()参数及用法
  • (2)STM32单片机上位机
  • (C11) 泛型表达式
  • (Java入门)抽象类,接口,内部类
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (rabbitmq的高级特性)消息可靠性
  • (不用互三)AI绘画工具应该如何选择
  • (差分)胡桃爱原石
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (六)vue-router+UI组件库
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (算法)Game
  • (转)程序员技术练级攻略
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core开源商城系统源码,支持可视化布局小程序
  • .Net 访问电子邮箱-LumiSoft.Net,好用